vagrant 0.8.10 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (324) hide show
  1. data/CHANGELOG.md +77 -1
  2. data/Gemfile +0 -14
  3. data/LICENSE +1 -1
  4. data/bin/vagrant +47 -20
  5. data/config/default.rb +6 -14
  6. data/lib/vagrant.rb +132 -5
  7. data/lib/vagrant/action.rb +45 -123
  8. data/lib/vagrant/action/box/destroy.rb +7 -3
  9. data/lib/vagrant/action/box/download.rb +8 -8
  10. data/lib/vagrant/action/box/package.rb +2 -2
  11. data/lib/vagrant/action/box/unpackage.rb +13 -7
  12. data/lib/vagrant/action/box/verify.rb +5 -5
  13. data/lib/vagrant/action/builder.rb +23 -19
  14. data/lib/vagrant/action/builtin.rb +117 -79
  15. data/lib/vagrant/action/env/set.rb +7 -4
  16. data/lib/vagrant/action/environment.rb +3 -41
  17. data/lib/vagrant/action/general/package.rb +14 -29
  18. data/lib/vagrant/action/general/validate.rb +2 -2
  19. data/lib/vagrant/action/runner.rb +53 -0
  20. data/lib/vagrant/action/vm/boot.rb +9 -9
  21. data/lib/vagrant/action/vm/check_accessible.rb +2 -2
  22. data/lib/vagrant/action/vm/check_box.rb +10 -12
  23. data/lib/vagrant/action/vm/check_guest_additions.rb +8 -8
  24. data/lib/vagrant/action/vm/check_port_collisions.rb +85 -0
  25. data/lib/vagrant/action/vm/clean_machine_folder.rb +4 -4
  26. data/lib/vagrant/action/vm/clear_forwarded_ports.rb +3 -11
  27. data/lib/vagrant/action/vm/clear_network_interfaces.rb +31 -0
  28. data/lib/vagrant/action/vm/clear_shared_folders.rb +2 -11
  29. data/lib/vagrant/action/vm/customize.rb +19 -9
  30. data/lib/vagrant/action/vm/destroy.rb +4 -4
  31. data/lib/vagrant/action/vm/destroy_unused_network_interfaces.rb +2 -12
  32. data/lib/vagrant/action/vm/discard_state.rb +4 -4
  33. data/lib/vagrant/action/vm/export.rb +13 -8
  34. data/lib/vagrant/action/vm/forward_ports.rb +55 -102
  35. data/lib/vagrant/action/vm/halt.rb +9 -6
  36. data/lib/vagrant/action/vm/host_name.rb +4 -4
  37. data/lib/vagrant/action/vm/import.rb +19 -10
  38. data/lib/vagrant/action/vm/match_mac_address.rb +4 -9
  39. data/lib/vagrant/action/vm/network.rb +300 -94
  40. data/lib/vagrant/action/vm/nfs.rb +41 -26
  41. data/lib/vagrant/action/vm/package.rb +1 -1
  42. data/lib/vagrant/action/vm/package_vagrantfile.rb +5 -2
  43. data/lib/vagrant/action/vm/provision.rb +42 -13
  44. data/lib/vagrant/action/vm/provisioner_cleanup.rb +2 -2
  45. data/lib/vagrant/action/vm/{clear_nfs_exports.rb → prune_nfs_exports.rb} +7 -7
  46. data/lib/vagrant/action/vm/resume.rb +4 -4
  47. data/lib/vagrant/action/vm/setup_package_files.rb +54 -0
  48. data/lib/vagrant/action/vm/share_folders.rb +63 -39
  49. data/lib/vagrant/action/vm/suspend.rb +4 -4
  50. data/lib/vagrant/action/warden.rb +13 -6
  51. data/lib/vagrant/box.rb +9 -55
  52. data/lib/vagrant/box_collection.rb +22 -17
  53. data/lib/vagrant/cli.rb +62 -47
  54. data/lib/vagrant/command.rb +18 -20
  55. data/lib/vagrant/command/base.rb +135 -90
  56. data/lib/vagrant/command/box.rb +46 -21
  57. data/lib/vagrant/command/box_add.rb +33 -0
  58. data/lib/vagrant/command/box_list.rb +25 -0
  59. data/lib/vagrant/command/box_remove.rb +23 -0
  60. data/lib/vagrant/command/box_repackage.rb +23 -0
  61. data/lib/vagrant/command/destroy.rb +16 -5
  62. data/lib/vagrant/command/halt.rb +25 -7
  63. data/lib/vagrant/command/init.rb +30 -7
  64. data/lib/vagrant/command/package.rb +49 -18
  65. data/lib/vagrant/command/provision.rb +22 -9
  66. data/lib/vagrant/command/reload.rb +18 -5
  67. data/lib/vagrant/command/resume.rb +18 -5
  68. data/lib/vagrant/command/ssh.rb +69 -31
  69. data/lib/vagrant/command/ssh_config.rb +37 -22
  70. data/lib/vagrant/command/status.rb +22 -20
  71. data/lib/vagrant/command/suspend.rb +18 -5
  72. data/lib/vagrant/command/up.rb +41 -8
  73. data/lib/vagrant/communication.rb +7 -0
  74. data/lib/vagrant/communication/base.rb +56 -0
  75. data/lib/vagrant/communication/ssh.rb +200 -0
  76. data/lib/vagrant/config.rb +29 -103
  77. data/lib/vagrant/config/base.rb +18 -26
  78. data/lib/vagrant/config/container.rb +37 -0
  79. data/lib/vagrant/config/error_recorder.rb +1 -1
  80. data/lib/vagrant/config/loader.rb +125 -0
  81. data/lib/vagrant/config/nfs.rb +1 -3
  82. data/lib/vagrant/config/package.rb +1 -3
  83. data/lib/vagrant/config/ssh.rb +31 -16
  84. data/lib/vagrant/config/top.rb +36 -25
  85. data/lib/vagrant/config/vagrant.rb +2 -5
  86. data/lib/vagrant/config/vm.rb +115 -56
  87. data/lib/vagrant/config/vm/provisioner.rb +16 -20
  88. data/lib/vagrant/config/vm/sub_vm.rb +1 -1
  89. data/lib/vagrant/data_store.rb +23 -15
  90. data/lib/vagrant/downloaders/base.rb +7 -5
  91. data/lib/vagrant/downloaders/file.rb +4 -4
  92. data/lib/vagrant/downloaders/http.rb +4 -5
  93. data/lib/vagrant/driver.rb +7 -0
  94. data/lib/vagrant/driver/virtualbox.rb +121 -0
  95. data/lib/vagrant/driver/virtualbox_4_0.rb +411 -0
  96. data/lib/vagrant/driver/virtualbox_4_1.rb +411 -0
  97. data/lib/vagrant/driver/virtualbox_base.rb +284 -0
  98. data/lib/vagrant/environment.rb +221 -240
  99. data/lib/vagrant/errors.rb +74 -25
  100. data/lib/vagrant/guest.rb +16 -0
  101. data/lib/vagrant/guest/arch.rb +48 -0
  102. data/lib/vagrant/{systems → guest}/base.rb +30 -18
  103. data/lib/vagrant/guest/debian.rb +61 -0
  104. data/lib/vagrant/{systems → guest}/freebsd.rb +11 -18
  105. data/lib/vagrant/guest/gentoo.rb +32 -0
  106. data/lib/vagrant/guest/linux.rb +78 -0
  107. data/lib/vagrant/{systems → guest}/linux/config.rb +2 -4
  108. data/lib/vagrant/guest/linux/error.rb +9 -0
  109. data/lib/vagrant/guest/redhat.rb +66 -0
  110. data/lib/vagrant/guest/solaris.rb +114 -0
  111. data/lib/vagrant/{systems → guest}/suse.rb +2 -2
  112. data/lib/vagrant/guest/ubuntu.rb +23 -0
  113. data/lib/vagrant/hosts.rb +23 -6
  114. data/lib/vagrant/hosts/arch.rb +7 -3
  115. data/lib/vagrant/hosts/base.rb +36 -46
  116. data/lib/vagrant/hosts/bsd.rb +53 -16
  117. data/lib/vagrant/hosts/fedora.rb +14 -0
  118. data/lib/vagrant/hosts/freebsd.rb +6 -36
  119. data/lib/vagrant/hosts/linux.rb +45 -20
  120. data/lib/vagrant/hosts/windows.rb +16 -0
  121. data/lib/vagrant/provisioners.rb +10 -7
  122. data/lib/vagrant/provisioners/base.rb +11 -34
  123. data/lib/vagrant/provisioners/chef.rb +30 -26
  124. data/lib/vagrant/provisioners/chef_client.rb +37 -23
  125. data/lib/vagrant/provisioners/chef_solo.rb +61 -16
  126. data/lib/vagrant/provisioners/puppet.rb +70 -38
  127. data/lib/vagrant/provisioners/puppet_server.rb +12 -13
  128. data/lib/vagrant/provisioners/shell.rb +24 -24
  129. data/lib/vagrant/registry.rb +49 -0
  130. data/lib/vagrant/ssh.rb +82 -153
  131. data/lib/vagrant/ui.rb +118 -50
  132. data/lib/vagrant/util/busy.rb +1 -1
  133. data/lib/vagrant/util/file_mode.rb +12 -0
  134. data/lib/vagrant/util/network_ip.rb +28 -0
  135. data/lib/vagrant/util/platform.rb +1 -0
  136. data/lib/vagrant/util/subprocess.rb +227 -0
  137. data/lib/vagrant/version.rb +1 -1
  138. data/lib/vagrant/vm.rb +111 -97
  139. data/tasks/acceptance.rake +3 -3
  140. data/tasks/test.rake +7 -2
  141. data/templates/commands/init/Vagrantfile.erb +11 -4
  142. data/templates/{ssh_config.erb → commands/ssh_config/config.erb} +0 -0
  143. data/templates/guests/arch/network_dhcp.erb +7 -0
  144. data/templates/guests/arch/network_static.erb +7 -0
  145. data/templates/guests/debian/network_dhcp.erb +6 -0
  146. data/templates/guests/debian/network_static.erb +7 -0
  147. data/templates/guests/gentoo/network_dhcp.erb +4 -0
  148. data/templates/guests/gentoo/network_static.erb +4 -0
  149. data/templates/guests/redhat/network_dhcp.erb +6 -0
  150. data/templates/guests/redhat/network_static.erb +7 -0
  151. data/templates/locales/en.yml +241 -122
  152. data/templates/{chef_server_client.erb → provisioners/chef_client/client.erb} +0 -0
  153. data/templates/{chef_solo_solo.erb → provisioners/chef_solo/solo.erb} +0 -0
  154. data/test/acceptance/base.rb +10 -10
  155. data/test/acceptance/box_test.rb +28 -6
  156. data/test/acceptance/destroy_test.rb +1 -1
  157. data/test/acceptance/halt_test.rb +4 -4
  158. data/test/acceptance/init_test.rb +3 -3
  159. data/test/acceptance/networking/host_only_test.rb +37 -0
  160. data/test/acceptance/networking/port_forward_test.rb +125 -0
  161. data/test/acceptance/package_test.rb +46 -0
  162. data/test/acceptance/provisioning/basic_test.rb +61 -0
  163. data/test/acceptance/provisioning/chef_solo_test.rb +37 -0
  164. data/test/acceptance/provisioning/shell_test.rb +53 -0
  165. data/test/acceptance/resume_test.rb +1 -1
  166. data/test/acceptance/skeletons/chef_solo_basic/README.md +3 -0
  167. data/test/acceptance/skeletons/chef_solo_basic/cookbooks/basic/recipes/default.rb +5 -0
  168. data/test/acceptance/skeletons/chef_solo_json/README.md +3 -0
  169. data/test/acceptance/skeletons/chef_solo_json/cookbooks/basic/recipes/default.rb +6 -0
  170. data/test/acceptance/skeletons/provisioner_multi/README.md +3 -0
  171. data/test/acceptance/skeletons/provisioner_multi/cookbooks/basic/recipes/default.rb +5 -0
  172. data/test/acceptance/ssh_test.rb +7 -2
  173. data/test/acceptance/support/config.rb +1 -1
  174. data/test/acceptance/support/isolated_environment.rb +41 -150
  175. data/test/acceptance/support/matchers/match_output.rb +1 -1
  176. data/test/acceptance/support/matchers/succeed.rb +14 -0
  177. data/test/acceptance/support/network_tests.rb +29 -0
  178. data/test/acceptance/support/output.rb +9 -1
  179. data/test/acceptance/support/shared/base_context.rb +16 -9
  180. data/test/acceptance/support/shared/command_examples.rb +4 -4
  181. data/test/acceptance/suspend_test.rb +1 -1
  182. data/test/acceptance/up_basic_test.rb +26 -7
  183. data/test/acceptance/up_with_box_url.rb +1 -1
  184. data/test/acceptance/vagrant_test.rb +1 -1
  185. data/test/acceptance/version_test.rb +0 -5
  186. data/test/support/isolated_environment.rb +46 -0
  187. data/test/{acceptance/support → support}/tempdir.rb +0 -0
  188. data/test/unit/base.rb +21 -0
  189. data/test/unit/support/isolated_environment.rb +39 -0
  190. data/test/unit/support/shared/base_context.rb +30 -0
  191. data/test/unit/vagrant/action/builder_test.rb +126 -177
  192. data/test/unit/vagrant/action/environment_test.rb +10 -21
  193. data/test/unit/vagrant/action/runner_test.rb +65 -0
  194. data/test/unit/vagrant/action/warden_test.rb +64 -97
  195. data/test/unit/vagrant/box_collection_test.rb +44 -33
  196. data/test/unit/vagrant/box_test.rb +25 -65
  197. data/test/unit/vagrant/command/base_test.rb +141 -14
  198. data/test/unit/vagrant/config/base_test.rb +16 -43
  199. data/test/unit/vagrant/config/loader_test.rb +79 -0
  200. data/test/unit/vagrant/config/top_test.rb +69 -0
  201. data/test/unit/vagrant/config/vm_test.rb +62 -47
  202. data/test/unit/vagrant/config_test.rb +16 -151
  203. data/test/unit/vagrant/data_store_test.rb +43 -61
  204. data/test/unit/vagrant/downloaders/base_test.rb +12 -22
  205. data/test/unit/vagrant/downloaders/file_test.rb +58 -31
  206. data/test/unit/vagrant/downloaders/http_test.rb +12 -86
  207. data/test/unit/vagrant/environment_test.rb +107 -536
  208. data/test/unit/vagrant/hosts_test.rb +36 -0
  209. data/test/unit/vagrant/registry_test.rb +56 -0
  210. data/test/unit/vagrant/util/file_checksum_test.rb +23 -0
  211. data/test/unit/vagrant/util/hash_with_indifferent_access_test.rb +23 -24
  212. data/test/unit/vagrant/util/network_ip_test.rb +17 -0
  213. data/test/unit/vagrant/util/retryable_test.rb +90 -34
  214. data/test/unit/vagrant_test.rb +27 -0
  215. data/test/{unit → unit_legacy}/locales/en.yml +0 -0
  216. data/test/{unit → unit_legacy}/test_helper.rb +0 -0
  217. data/test/{unit → unit_legacy}/vagrant/action/box/destroy_test.rb +0 -0
  218. data/test/{unit → unit_legacy}/vagrant/action/box/download_test.rb +0 -0
  219. data/test/{unit → unit_legacy}/vagrant/action/box/package_test.rb +0 -0
  220. data/test/{unit → unit_legacy}/vagrant/action/box/unpackage_test.rb +0 -0
  221. data/test/{unit → unit_legacy}/vagrant/action/box/verify_test.rb +0 -0
  222. data/test/{unit → unit_legacy}/vagrant/action/env/set_test.rb +0 -0
  223. data/test/{unit → unit_legacy}/vagrant/action/general/package_test.rb +0 -0
  224. data/test/{unit → unit_legacy}/vagrant/action/general/validate_test.rb +0 -0
  225. data/test/{unit → unit_legacy}/vagrant/action/vm/boot_test.rb +0 -0
  226. data/test/{unit → unit_legacy}/vagrant/action/vm/check_accessible_test.rb +0 -0
  227. data/test/{unit → unit_legacy}/vagrant/action/vm/check_box_test.rb +0 -0
  228. data/test/{unit → unit_legacy}/vagrant/action/vm/check_guest_additions_test.rb +0 -0
  229. data/test/{unit → unit_legacy}/vagrant/action/vm/clean_machine_folder_test.rb +0 -0
  230. data/test/{unit → unit_legacy}/vagrant/action/vm/clear_forwarded_ports_test.rb +0 -0
  231. data/test/{unit → unit_legacy}/vagrant/action/vm/clear_nfs_exports_test.rb +0 -0
  232. data/test/{unit → unit_legacy}/vagrant/action/vm/clear_shared_folders_test.rb +0 -0
  233. data/test/{unit → unit_legacy}/vagrant/action/vm/customize_test.rb +0 -0
  234. data/test/{unit → unit_legacy}/vagrant/action/vm/destroy_test.rb +0 -0
  235. data/test/{unit → unit_legacy}/vagrant/action/vm/destroy_unused_network_interfaces_test.rb +0 -0
  236. data/test/{unit → unit_legacy}/vagrant/action/vm/discard_state_test.rb +0 -0
  237. data/test/{unit → unit_legacy}/vagrant/action/vm/export_test.rb +0 -0
  238. data/test/{unit → unit_legacy}/vagrant/action/vm/forward_ports_helpers_test.rb +0 -0
  239. data/test/{unit → unit_legacy}/vagrant/action/vm/forward_ports_test.rb +0 -0
  240. data/test/{unit → unit_legacy}/vagrant/action/vm/halt_test.rb +0 -0
  241. data/test/{unit → unit_legacy}/vagrant/action/vm/host_name_test.rb +0 -0
  242. data/test/{unit → unit_legacy}/vagrant/action/vm/import_test.rb +0 -0
  243. data/test/{unit → unit_legacy}/vagrant/action/vm/match_mac_address_test.rb +0 -0
  244. data/test/{unit → unit_legacy}/vagrant/action/vm/modify_test.rb +0 -0
  245. data/test/{unit → unit_legacy}/vagrant/action/vm/network_test.rb +0 -0
  246. data/test/{unit → unit_legacy}/vagrant/action/vm/nfs_helpers_test.rb +0 -0
  247. data/test/{unit → unit_legacy}/vagrant/action/vm/nfs_test.rb +0 -0
  248. data/test/{unit → unit_legacy}/vagrant/action/vm/package_test.rb +0 -0
  249. data/test/{unit → unit_legacy}/vagrant/action/vm/package_vagrantfile_test.rb +0 -0
  250. data/test/{unit → unit_legacy}/vagrant/action/vm/provision_test.rb +0 -0
  251. data/test/{unit → unit_legacy}/vagrant/action/vm/provisioner_cleanup_test.rb +0 -0
  252. data/test/{unit → unit_legacy}/vagrant/action/vm/resume_test.rb +0 -0
  253. data/test/{unit → unit_legacy}/vagrant/action/vm/share_folders_test.rb +0 -0
  254. data/test/{unit → unit_legacy}/vagrant/action/vm/suspend_test.rb +0 -0
  255. data/test/{unit → unit_legacy}/vagrant/action_test.rb +0 -0
  256. data/test/unit_legacy/vagrant/box_collection_test.rb +45 -0
  257. data/test/unit_legacy/vagrant/box_test.rb +74 -0
  258. data/test/{unit → unit_legacy}/vagrant/cli_test.rb +0 -0
  259. data/test/unit_legacy/vagrant/command/base_test.rb +23 -0
  260. data/test/{unit → unit_legacy}/vagrant/command/group_base_test.rb +0 -0
  261. data/test/{unit → unit_legacy}/vagrant/command/helpers_test.rb +0 -0
  262. data/test/{unit → unit_legacy}/vagrant/command/init_test.rb +0 -0
  263. data/test/{unit → unit_legacy}/vagrant/command/package_test.rb +0 -0
  264. data/test/unit_legacy/vagrant/config/base_test.rb +52 -0
  265. data/test/{unit → unit_legacy}/vagrant/config/error_recorder_test.rb +0 -0
  266. data/test/{unit → unit_legacy}/vagrant/config/ssh_test.rb +0 -0
  267. data/test/{unit → unit_legacy}/vagrant/config/vagrant_test.rb +0 -0
  268. data/test/{unit → unit_legacy}/vagrant/config/vm/provisioner_test.rb +0 -0
  269. data/test/unit_legacy/vagrant/config/vm_test.rb +47 -0
  270. data/test/unit_legacy/vagrant/config_test.rb +148 -0
  271. data/test/unit_legacy/vagrant/downloaders/http_test.rb +93 -0
  272. data/test/unit_legacy/vagrant/environment_test.rb +539 -0
  273. data/test/{unit → unit_legacy}/vagrant/errors_test.rb +0 -0
  274. data/test/{unit → unit_legacy}/vagrant/hosts/base_test.rb +0 -0
  275. data/test/{unit → unit_legacy}/vagrant/hosts/bsd_test.rb +0 -0
  276. data/test/{unit → unit_legacy}/vagrant/hosts/linux_test.rb +0 -0
  277. data/test/{unit → unit_legacy}/vagrant/plugin_test.rb +0 -0
  278. data/test/{unit → unit_legacy}/vagrant/provisioners/base_test.rb +0 -0
  279. data/test/{unit → unit_legacy}/vagrant/provisioners/chef_client_test.rb +0 -0
  280. data/test/{unit → unit_legacy}/vagrant/provisioners/chef_solo_test.rb +0 -0
  281. data/test/{unit → unit_legacy}/vagrant/provisioners/chef_test.rb +0 -0
  282. data/test/{unit → unit_legacy}/vagrant/provisioners/puppet_server_test.rb +0 -0
  283. data/test/{unit → unit_legacy}/vagrant/provisioners/puppet_test.rb +0 -0
  284. data/test/{unit → unit_legacy}/vagrant/provisioners/shell_test.rb +0 -0
  285. data/test/{unit → unit_legacy}/vagrant/ssh/session_test.rb +0 -0
  286. data/test/{unit → unit_legacy}/vagrant/ssh_test.rb +0 -0
  287. data/test/{unit → unit_legacy}/vagrant/systems/base_test.rb +0 -0
  288. data/test/{unit → unit_legacy}/vagrant/systems/linux_test.rb +0 -0
  289. data/test/{unit → unit_legacy}/vagrant/util/busy_test.rb +0 -0
  290. data/test/{unit → unit_legacy}/vagrant/util/counter_test.rb +0 -0
  291. data/test/{unit → unit_legacy}/vagrant/util/platform_test.rb +0 -0
  292. data/test/{unit → unit_legacy}/vagrant/util/stacked_proc_runner_test.rb +0 -0
  293. data/test/{unit → unit_legacy}/vagrant/util/template_renderer_test.rb +0 -0
  294. data/test/{unit → unit_legacy}/vagrant/vm_test.rb +0 -0
  295. data/vagrant.gemspec +7 -9
  296. metadata +214 -216
  297. data/keys/vagrant.ppk +0 -26
  298. data/lib/vagrant/action/box.rb +0 -11
  299. data/lib/vagrant/action/env.rb +0 -7
  300. data/lib/vagrant/action/general.rb +0 -8
  301. data/lib/vagrant/action/vm.rb +0 -34
  302. data/lib/vagrant/action/vm/forward_ports_helpers.rb +0 -28
  303. data/lib/vagrant/action/vm/modify.rb +0 -37
  304. data/lib/vagrant/action/vm/nfs_helpers.rb +0 -11
  305. data/lib/vagrant/command/group_base.rb +0 -107
  306. data/lib/vagrant/command/helpers.rb +0 -33
  307. data/lib/vagrant/command/named_base.rb +0 -14
  308. data/lib/vagrant/command/upgrade_to_060.rb +0 -45
  309. data/lib/vagrant/command/version.rb +0 -13
  310. data/lib/vagrant/ssh/session.rb +0 -136
  311. data/lib/vagrant/systems.rb +0 -13
  312. data/lib/vagrant/systems/arch.rb +0 -34
  313. data/lib/vagrant/systems/debian.rb +0 -36
  314. data/lib/vagrant/systems/gentoo.rb +0 -27
  315. data/lib/vagrant/systems/linux.rb +0 -82
  316. data/lib/vagrant/systems/linux/error.rb +0 -9
  317. data/lib/vagrant/systems/redhat.rb +0 -48
  318. data/lib/vagrant/systems/solaris.rb +0 -113
  319. data/lib/vagrant/systems/ubuntu.rb +0 -17
  320. data/templates/network_entry_arch.erb +0 -9
  321. data/templates/network_entry_debian.erb +0 -8
  322. data/templates/network_entry_gentoo.erb +0 -5
  323. data/templates/network_entry_redhat.erb +0 -9
  324. data/test/unit/vagrant/ui_test.rb +0 -29
@@ -1,13 +1,13 @@
1
- require "support/isolated_environment"
2
- require "support/output"
3
- require "support/virtualbox"
1
+ require "acceptance/support/isolated_environment"
2
+ require "acceptance/support/output"
3
+ require "acceptance/support/virtualbox"
4
4
 
5
5
  shared_context "acceptance" do
6
6
  # Setup variables for the loggers of this test. These can be used to
7
7
  # create more verbose logs for tests which can be useful in the case
8
8
  # that a test fails.
9
9
  let(:logger_name) { "logger" }
10
- let(:logger) { Log4r::Logger.new("acceptance::#{logger_name}") }
10
+ let(:logger) { Log4r::Logger.new("test::acceptance::#{logger_name}") }
11
11
 
12
12
  # This is the global configuration given by the acceptance test
13
13
  # configurations.
@@ -18,10 +18,7 @@ shared_context "acceptance" do
18
18
  # to replace "vagrant" with the proper path to Vagrant as well
19
19
  # as tell the isolated environment about custom environmental
20
20
  # variables to pass in.
21
- let!(:environment) do
22
- apps = { "vagrant" => config.vagrant_path }
23
- Acceptance::IsolatedEnvironment.new(apps, config.env)
24
- end
21
+ let!(:environment) { new_environment }
25
22
 
26
23
  before(:each) do
27
24
  # Wait for VBoxSVC to disappear, since each test requires its
@@ -33,6 +30,16 @@ shared_context "acceptance" do
33
30
  environment.close
34
31
  end
35
32
 
33
+ # Creates a new isolated environment instance each time it is called.
34
+ #
35
+ # @return [Acceptance::IsolatedEnvironment]
36
+ def new_environment(env=nil)
37
+ apps = { "vagrant" => config.vagrant_path }
38
+ env = config.env.merge(env || {})
39
+
40
+ Acceptance::IsolatedEnvironment.new(apps, env)
41
+ end
42
+
36
43
  # Executes the given command in the context of the isolated environment.
37
44
  #
38
45
  # @return [Object]
@@ -45,7 +52,7 @@ shared_context "acceptance" do
45
52
  # exit status was successful.
46
53
  def assert_execute(*args, &block)
47
54
  result = execute(*args, &block)
48
- assert(result.success?, "expected '#{args.join(" ")}' to succeed")
55
+ assert(result.exit_code == 0, "expected '#{args.join(" ")}' to succeed")
49
56
  result
50
57
  end
51
58
 
@@ -9,8 +9,8 @@ shared_examples "a command that requires a Vagrantfile" do |*args|
9
9
 
10
10
  it "fails if no Vagrantfile is found" do
11
11
  result = execute(*command)
12
- result.should_not be_success
13
- result.stdout.should match_output(:no_vagrantfile)
12
+ result.should_not succeed
13
+ result.stderr.should match_output(:no_vagrantfile)
14
14
  end
15
15
  end
16
16
 
@@ -27,7 +27,7 @@ shared_examples "a command that requires a virtual machine" do |*args|
27
27
  assert_execute("vagrant", "init")
28
28
 
29
29
  result = execute(*command)
30
- result.should_not be_success
31
- result.stdout.should match_output(:error_vm_must_be_created)
30
+ result.should_not succeed
31
+ result.stderr.should match_output(:error_vm_must_be_created)
32
32
  end
33
33
  end
@@ -1,5 +1,5 @@
1
1
  require File.expand_path("../base", __FILE__)
2
- require "support/shared/command_examples"
2
+ require "acceptance/support/shared/command_examples"
3
3
 
4
4
  describe "vagrant suspend" do
5
5
  include_context "acceptance"
@@ -1,5 +1,5 @@
1
1
  require File.expand_path("../base", __FILE__)
2
- require "support/shared/command_examples"
2
+ require "acceptance/support/shared/command_examples"
3
3
 
4
4
  describe "vagrant up", "basics" do
5
5
  include_context "acceptance"
@@ -46,13 +46,32 @@ describe "vagrant up", "basics" do
46
46
  foofile.exist?.should be, "'foo' should exist since it was touched in the shared folder"
47
47
  end
48
48
 
49
- =begin
49
+ it "should create a shared folder if the :create flag is set" do
50
+ initialize_valid_environment
51
+
52
+ # Setup the custom Vagrantfile
53
+ environment.workdir.join("Vagrantfile").open("w+") do |f|
54
+ f.write(<<-VF)
55
+ Vagrant::Config.run do |config|
56
+ config.vm.box = "base"
57
+ config.vm.share_folder "v-root", "/vagrant", "./data", :create => true
58
+ end
59
+ VF
60
+ end
61
+
62
+ data_dir = environment.workdir.join("data")
50
63
 
51
- TODO:
64
+ # Verify the directory doesn't exist prior, for sanity
65
+ data_dir.exist?.should_not be
52
66
 
53
- should "destroy a running virtual machine"
54
- should "save then restore a virtual machine using `vagrant up`"
55
- should "halt then start a virtual machine using `vagrant up`"
67
+ # Bring up the VM
68
+ assert_execute("vagrant", "up")
69
+
70
+ # Verify the directory exists
71
+ data_dir.should be_directory
56
72
 
57
- =end
73
+ # Touch a file and verify it is shared
74
+ assert_execute("vagrant", "ssh", "-c", "touch /vagrant/foo")
75
+ data_dir.join("foo").exist?.should be
76
+ end
58
77
  end
@@ -1,5 +1,5 @@
1
1
  require File.expand_path("../base", __FILE__)
2
- require "support/shared/command_examples"
2
+ require "acceptance/support/shared/command_examples"
3
3
 
4
4
  describe "vagrant up", "with a box URL set" do
5
5
  include_context "acceptance"
@@ -1,5 +1,5 @@
1
1
  require File.expand_path("../base", __FILE__)
2
- require "support/matchers/have_color"
2
+ require "acceptance/support/matchers/have_color"
3
3
 
4
4
  describe "vagrant and color output" do
5
5
  include_context "acceptance"
@@ -3,11 +3,6 @@ require File.expand_path("../base", __FILE__)
3
3
  describe "vagrant version" do
4
4
  include_context "acceptance"
5
5
 
6
- it "prints the version to stdout" do
7
- result = execute("vagrant", "version")
8
- result.stdout.should match_output(:version, config.vagrant_version)
9
- end
10
-
11
6
  it "prints the version when called with '-v'" do
12
7
  result = execute("vagrant", "-v")
13
8
  result.stdout.should match_output(:version, config.vagrant_version)
@@ -0,0 +1,46 @@
1
+ require "fileutils"
2
+ require "pathname"
3
+
4
+ require "log4r"
5
+
6
+ require "support/tempdir"
7
+
8
+ # This class manages an isolated environment for Vagrant to
9
+ # run in. It creates a temporary directory to act as the
10
+ # working directory as well as sets a custom home directory.
11
+ #
12
+ # This class also provides various helpers to create Vagrantfiles,
13
+ # boxes, etc.
14
+ class IsolatedEnvironment
15
+ attr_reader :homedir
16
+ attr_reader :workdir
17
+
18
+ # Initializes an isolated environment. You can pass in some
19
+ # options here to configure runing custom applications in place
20
+ # of others as well as specifying environmental variables.
21
+ #
22
+ # @param [Hash] apps A mapping of application name (such as "vagrant")
23
+ # to an alternate full path to the binary to run.
24
+ # @param [Hash] env Additional environmental variables to inject
25
+ # into the execution environments.
26
+ def initialize
27
+ @logger = Log4r::Logger.new("test::isolated_environment")
28
+
29
+ # Create a temporary directory for our work
30
+ @tempdir = Tempdir.new("vagrant")
31
+ @logger.info("Initialize isolated environment: #{@tempdir.path}")
32
+
33
+ # Setup the home and working directories
34
+ @homedir = Pathname.new(File.join(@tempdir.path, "home"))
35
+ @workdir = Pathname.new(File.join(@tempdir.path, "work"))
36
+
37
+ @homedir.mkdir
38
+ @workdir.mkdir
39
+ end
40
+
41
+ # This closes the environment by cleaning it up.
42
+ def close
43
+ @logger.info("Removing isolated environment: #{@tempdir.path}")
44
+ FileUtils.rm_rf(@tempdir.path)
45
+ end
46
+ end
@@ -0,0 +1,21 @@
1
+ require "rubygems"
2
+ require "rspec/autorun"
3
+
4
+ # Require Vagrant itself so we can reference the proper
5
+ # classes to test.
6
+ require "vagrant"
7
+
8
+ # Add the test directory to the load path
9
+ $:.unshift File.expand_path("../../", __FILE__)
10
+
11
+ # Load in helpers
12
+ require "unit/support/shared/base_context"
13
+
14
+ # Do not buffer output
15
+ $stdout.sync = true
16
+ $stderr.sync = true
17
+
18
+ # Configure RSpec
19
+ RSpec.configure do |c|
20
+ c.expect_with :rspec, :stdlib
21
+ end
@@ -0,0 +1,39 @@
1
+ require "fileutils"
2
+ require "pathname"
3
+
4
+ require "log4r"
5
+
6
+ require "support/isolated_environment"
7
+
8
+ module Unit
9
+ class IsolatedEnvironment < ::IsolatedEnvironment
10
+ def create_vagrant_env(options=nil)
11
+ options = {
12
+ :cwd => @workdir,
13
+ :home_path => @homedir
14
+ }.merge(options || {})
15
+
16
+ Vagrant::Environment.new(options)
17
+ end
18
+
19
+ def vagrantfile(contents, root=nil)
20
+ root ||= @workdir
21
+ root.join("Vagrantfile").open("w+") do |f|
22
+ f.write(contents)
23
+ end
24
+ end
25
+
26
+ def box(name, vagrantfile_contents="")
27
+ box_dir = boxes_dir.join(name)
28
+ box_dir.mkpath
29
+ vagrantfile(vagrantfile_contents, box_dir)
30
+ box_dir
31
+ end
32
+
33
+ def boxes_dir
34
+ dir = @homedir.join("boxes")
35
+ dir.mkpath
36
+ dir
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,30 @@
1
+ require "tempfile"
2
+
3
+ require "unit/support/isolated_environment"
4
+
5
+ shared_context "unit" do
6
+ # This creates an isolated environment so that Vagrant doesn't
7
+ # muck around with your real system during unit tests.
8
+ #
9
+ # The returned isolated environment has a variety of helper
10
+ # methods on it to easily create files, Vagrantfiles, boxes,
11
+ # etc.
12
+ def isolated_environment
13
+ env = Unit::IsolatedEnvironment.new
14
+ yield env if block_given?
15
+ env
16
+ end
17
+
18
+ # This helper creates a temporary file and returns a Pathname
19
+ # object pointed to it.
20
+ def temporary_file(contents=nil)
21
+ f = Tempfile.new("vagrant-unit")
22
+
23
+ if contents
24
+ f.write(contents)
25
+ f.flush
26
+ end
27
+
28
+ return Pathname.new(f.path)
29
+ end
30
+ end
@@ -1,207 +1,156 @@
1
- require "test_helper"
2
- require "logger"
1
+ require File.expand_path("../../../base", __FILE__)
3
2
 
4
- class ActionBuilderTest < Test::Unit::TestCase
5
- setup do
6
- @klass = Vagrant::Action::Builder
3
+ describe Vagrant::Action::Builder do
4
+ let(:data) { { :data => [] } }
5
+ let(:instance) { described_class.new }
6
+
7
+ # This returns a proc that can be used with the builder
8
+ # that simply appends data to an array in the env.
9
+ def appender_proc(data)
10
+ Proc.new { |env| env[:data] << data }
7
11
  end
8
12
 
9
- context "initializing" do
10
- should "setup empty middleware stack" do
11
- builder = @klass.new
12
- assert builder.stack.empty?
13
+ context "basic `use`" do
14
+ it "should add items to the stack and make them callable" do
15
+ data = {}
16
+ proc = Proc.new { |env| env[:data] = true }
17
+
18
+ instance.use proc
19
+ instance.call(data)
20
+
21
+ data[:data].should == true
22
+ end
23
+
24
+ it "should be able to add multiple items" do
25
+ data = {}
26
+ proc1 = Proc.new { |env| env[:one] = true }
27
+ proc2 = Proc.new { |env| env[:two] = true }
28
+
29
+ instance.use proc1
30
+ instance.use proc2
31
+ instance.call(data)
32
+
33
+ data[:one].should == true
34
+ data[:two].should == true
13
35
  end
14
36
 
15
- should "take block to setup stack" do
16
- builder = @klass.new do
17
- use Hash
18
- use lambda { |i| i }
19
- end
37
+ it "should be able to add another builder" do
38
+ data = {}
39
+ proc1 = Proc.new { |env| env[:one] = true }
40
+
41
+ # Build the first builder
42
+ one = described_class.new
43
+ one.use proc1
44
+
45
+ # Add it to this builder
46
+ two = described_class.new
47
+ two.use one
48
+
49
+ # Call the 2nd and verify results
50
+ two.call(data)
51
+ data[:one].should == true
52
+ end
53
+
54
+ it "should be able to set additional variables when using" do
55
+ data = { }
56
+ proc1 = Proc.new { |env| env[:data] += 1 }
57
+
58
+ # Build the first builder
59
+ one = described_class.new
60
+ one.use proc1, :data => 5
61
+ one.call(data)
20
62
 
21
- assert !builder.stack.empty?
22
- assert_equal 2, builder.stack.length
63
+ data[:data].should == 6
23
64
  end
24
65
  end
25
66
 
26
- context "with an instance" do
27
- setup do
28
- @instance = @klass.new
67
+ context "inserting" do
68
+ it "can insert at an index" do
69
+ instance.use appender_proc(1)
70
+ instance.insert(0, appender_proc(2))
71
+ instance.call(data)
72
+
73
+ data[:data].should == [2, 1]
29
74
  end
30
75
 
31
- context "adding to the stack" do
32
- should "return self" do
33
- assert @instance.equal?(@instance.use(1))
34
- end
35
-
36
- should "add to the end" do
37
- @instance.use 1
38
- @instance.use 2
39
- assert_equal [2, [], nil], @instance.stack.last
40
- end
41
-
42
- should "merge in other builder's stack" do
43
- other = @klass.new do
44
- use 2
45
- use 3
46
- end
47
-
48
- @instance.use 1
49
- @instance.use other
50
- assert_equal 3, @instance.stack.length
51
- end
52
-
53
- should "prepend a set environment task for merging middlewares if given" do
54
- other = @klass.new do
55
- use 1
56
- end
57
-
58
- @instance.use 0
59
- @instance.use(other, :foo => :bar)
60
- assert_equal 3, @instance.stack.length
61
- assert_equal Vagrant::Action::Env::Set, @instance.stack[1].first
62
- end
76
+ it "can insert next to a previous object" do
77
+ proc2 = appender_proc(2)
78
+ instance.use appender_proc(1)
79
+ instance.use proc2
80
+ instance.insert(proc2, appender_proc(3))
81
+ instance.call(data)
82
+
83
+ data[:data].should == [1, 3, 2]
63
84
  end
64
85
 
65
- context "flatten" do
66
- should "return the flattened format of the builder" do
67
- env = Vagrant::Action::Environment.new(nil)
68
- env["logger"] = Logger.new(nil)
69
- env.expects(:foo).once
70
-
71
- func = lambda { |x| x.foo }
72
- @instance.use func
73
- proc = @instance.flatten
74
- assert proc.respond_to?(:call)
75
- proc.call(env)
76
- end
86
+ it "can insert before" do
87
+ instance.use appender_proc(1)
88
+ instance.insert_before 0, appender_proc(2)
89
+ instance.call(data)
90
+
91
+ data[:data].should == [2, 1]
77
92
  end
78
93
 
79
- context "inserting" do
80
- setup do
81
- @instance.use "1"
82
- @instance.use "2"
83
- end
84
-
85
- should "insert at the proper numeric index" do
86
- @instance.insert(1, "3")
87
- assert_equal "3", @instance.stack[1].first
88
- end
89
-
90
- should "insert next to the proper object if given" do
91
- @instance.insert("2", "3")
92
- assert_equal "3", @instance.stack[1].first
93
- end
94
-
95
- should "be able to call insert_before as well" do
96
- @instance.insert_before("1", "0")
97
- assert_equal "0", @instance.stack.first.first
98
- end
99
-
100
- should "be able to insert_after" do
101
- @instance.insert_after("1", "0")
102
- assert_equal "0", @instance.stack[1].first
103
- end
104
-
105
- should "be able to insert_after using numeric index" do
106
- @instance.insert_after(1, "0")
107
- assert_equal "0", @instance.stack[2].first
108
- end
109
-
110
- should "raise an exception if invalid index" do
111
- assert_raises(RuntimeError) {
112
- @instance.insert_after("15", "0")
113
- }
114
- end
94
+ it "can insert after" do
95
+ instance.use appender_proc(1)
96
+ instance.use appender_proc(3)
97
+ instance.insert_after 0, appender_proc(2)
98
+ instance.call(data)
99
+
100
+ data[:data].should == [1, 2, 3]
115
101
  end
116
102
 
117
- context "swapping" do
118
- setup do
119
- @instance.use "1"
120
- @instance.use "2"
121
- end
122
-
123
- should "be able to swap using the object" do
124
- @instance.swap "1", "3"
125
- assert_equal "3", @instance.stack.first.first
126
- end
127
-
128
- should "be able to swap using the index" do
129
- @instance.swap 0, "3"
130
- assert_equal "3", @instance.stack.first.first
131
- end
103
+ it "raises an exception if an invalid object given" do
104
+ expect { instance.insert_after "object", appender_proc(1) }.
105
+ to raise_error(RuntimeError)
132
106
  end
107
+ end
133
108
 
134
- context "deleting" do
135
- setup do
136
- @instance.use "1"
137
- end
109
+ context "replace" do
110
+ it "can replace an object" do
111
+ proc1 = appender_proc(1)
112
+ proc2 = appender_proc(2)
138
113
 
139
- should "delete the proper object" do
140
- @instance.delete("1")
141
- assert @instance.stack.empty?
142
- end
114
+ instance.use proc1
115
+ instance.replace proc1, proc2
116
+ instance.call(data)
143
117
 
144
- should "delete by index if given" do
145
- @instance.delete(0)
146
- assert @instance.stack.empty?
147
- end
118
+ data[:data].should == [2]
148
119
  end
149
120
 
150
- context "getting an index of an object" do
151
- should "return the proper index if it exists" do
152
- @instance.use 1
153
- @instance.use 2
154
- @instance.use 3
155
- assert_equal 1, @instance.index(2)
156
- end
121
+ it "can replace by index" do
122
+ proc1 = appender_proc(1)
123
+ proc2 = appender_proc(2)
124
+
125
+ instance.use proc1
126
+ instance.replace 0, proc2
127
+ instance.call(data)
128
+
129
+ data[:data].should == [2]
157
130
  end
131
+ end
132
+
133
+ context "deleting" do
134
+ it "can delete by object" do
135
+ proc1 = appender_proc(1)
158
136
 
159
- context "converting to an app" do
160
- should "make non-classes lambdas" do
161
- env = Vagrant::Action::Environment.new(nil)
162
- env["logger"] = Logger.new(nil)
163
- env.expects(:foo).once
164
-
165
- func = lambda { |x| x.foo }
166
- @instance.use func
167
- @instance.to_app(env).call(env)
168
- end
169
-
170
- should "raise exception if given invalid middleware" do
171
- @instance.use 7
172
- assert_raises(RuntimeError) {
173
- @instance.to_app(nil)
174
- }
175
- end
137
+ instance.use proc1
138
+ instance.use appender_proc(2)
139
+ instance.delete proc1
140
+ instance.call(data)
141
+
142
+ data[:data].should == [2]
176
143
  end
177
144
 
178
- context "calling" do
179
- def mock_middleware
180
- middleware = Class.new do
181
- def initialize(app, env)
182
- @app = app
183
- end
184
-
185
- def call(env)
186
- @app.call(env)
187
- end
188
- end
189
- end
190
-
191
- should "convert to an app then call with the env" do
192
- mw = mock_middleware
193
- mw.any_instance.expects(:call).with() do |env|
194
- assert env.has_key?(:key)
195
- true
196
- end
197
-
198
- env = Vagrant::Action::Environment.new(nil)
199
- env["logger"] = Logger.new(nil)
200
- env[:key] = :value
201
-
202
- @instance.use(mw)
203
- @instance.call(env)
204
- end
145
+ it "can delete by index" do
146
+ proc1 = appender_proc(1)
147
+
148
+ instance.use proc1
149
+ instance.use appender_proc(2)
150
+ instance.delete 0
151
+ instance.call(data)
152
+
153
+ data[:data].should == [2]
205
154
  end
206
155
  end
207
156
  end