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,23 +1,150 @@
1
- require "test_helper"
1
+ require File.expand_path("../../../base", __FILE__)
2
+ require 'optparse'
2
3
 
3
- class CommandBaseTest < Test::Unit::TestCase
4
- setup do
5
- @klass = Vagrant::Command::Base
6
- @env = vagrant_env
4
+ describe Vagrant::Command::Base do
5
+ describe "parsing options" do
6
+ let(:klass) do
7
+ Class.new(described_class) do
8
+ # Make the method public since it is normally protected
9
+ public :parse_options
10
+ end
11
+ end
12
+
13
+ it "returns the remaining arguments" do
14
+ options = {}
15
+ opts = OptionParser.new do |opts|
16
+ opts.on("-f") do |f|
17
+ options[:f] = f
18
+ end
19
+ end
20
+
21
+ result = klass.new(["-f", "foo"], nil).parse_options(opts)
22
+
23
+ # Check the results
24
+ options[:f].should be
25
+ result.should == ["foo"]
26
+ end
27
+
28
+ it "creates an option parser if none is given" do
29
+ result = klass.new(["foo"], nil).parse_options(nil)
30
+ result.should == ["foo"]
31
+ end
32
+
33
+ ["-h", "--help"].each do |help_string|
34
+ it "returns nil and prints the help if '#{help_string}' is given" do
35
+ instance = klass.new([help_string], nil)
36
+ instance.should_receive(:puts)
37
+ instance.parse_options(OptionParser.new).should be_nil
38
+ end
39
+ end
40
+
41
+ it "raises an error if invalid options are given" do
42
+ instance = klass.new(["-f"], nil)
43
+ expect { instance.parse_options(OptionParser.new) }.
44
+ to raise_error(Vagrant::Errors::CLIInvalidOptions)
45
+ end
7
46
  end
8
47
 
9
- context "initialization" do
10
- should "require an environment" do
11
- assert_raises(Vagrant::Errors::CLIMissingEnvironment) { @klass.new([], {}, {}) }
12
- assert_nothing_raised { @klass.new([], {}, { :env => @env }) }
48
+ describe "target VMs" do
49
+ let(:klass) do
50
+ Class.new(described_class) do
51
+ # Make the method public since it is normally protected
52
+ public :with_target_vms
53
+ end
54
+ end
55
+
56
+ let(:environment) do
57
+ env = double("environment")
58
+ env.stub(:root_path => "foo")
59
+ env
60
+ end
61
+
62
+ let(:instance) { klass.new([], environment) }
63
+
64
+ it "should raise an exception if a root_path is not available" do
65
+ environment.stub(:root_path => nil)
66
+
67
+ expect { instance.with_target_vms }.
68
+ to raise_error(Vagrant::Errors::NoEnvironmentError)
69
+ end
70
+
71
+ it "should raise an exception if a name is given in a non-multivm environment" do
72
+ environment.stub(:multivm?).and_return(false)
73
+
74
+ expect { instance.with_target_vms("foo") }.
75
+ to raise_error(Vagrant::Errors::MultiVMEnvironmentRequired)
76
+ end
77
+
78
+ it "should yield every VM in order is no name is given" do
79
+ foo_vm = double("foo")
80
+ foo_vm.stub(:name).and_return("foo")
81
+
82
+ bar_vm = double("bar")
83
+ bar_vm.stub(:name).and_return("bar")
84
+
85
+ environment.stub(:multivm? => true,
86
+ :vms => { "foo" => foo_vm, "bar" => bar_vm },
87
+ :vms_ordered => [foo_vm, bar_vm])
88
+
89
+ vms = []
90
+ instance.with_target_vms do |vm|
91
+ vms << vm
92
+ end
93
+
94
+ vms.should == [foo_vm, bar_vm]
95
+ end
96
+
97
+ it "raises an exception if the named VM doesn't exist" do
98
+ environment.stub(:multivm? => true, :vms => {})
99
+
100
+ expect { instance.with_target_vms("foo") }.
101
+ to raise_error(Vagrant::Errors::VMNotFoundError)
102
+ end
103
+
104
+ it "yields the given VM if a name is given" do
105
+ foo_vm = double("foo")
106
+ foo_vm.stub(:name).and_return(:foo)
107
+
108
+ environment.stub(:multivm? => true,
109
+ :vms => { :foo => foo_vm, :bar => nil })
110
+
111
+ vms = []
112
+ instance.with_target_vms("foo") { |vm| vms << vm }
113
+ vms.should == [foo_vm]
13
114
  end
14
115
  end
15
116
 
16
- context "extracting a name from a usage string" do
17
- should "extract properly" do
18
- assert_equal "init", @klass.extract_name_from_usage("init")
19
- assert_equal "init", @klass.extract_name_from_usage("init [foo] [bar]")
20
- assert_equal "ssh-config", @klass.extract_name_from_usage("ssh-config")
117
+ describe "splitting the main and subcommand args" do
118
+ let(:instance) do
119
+ Class.new(described_class) do
120
+ # Make the method public since it is normally protected
121
+ public :split_main_and_subcommand
122
+ end.new(nil, nil)
123
+ end
124
+
125
+ it "should work when given all 3 parts" do
126
+ result = instance.split_main_and_subcommand(["-v", "status", "-h", "-v"])
127
+ result.should == [["-v"], "status", ["-h", "-v"]]
128
+ end
129
+
130
+ it "should work when given only a subcommand and args" do
131
+ result = instance.split_main_and_subcommand(["status", "-h"])
132
+ result.should == [[], "status", ["-h"]]
133
+ end
134
+
135
+ it "should work when given only main flags" do
136
+ result = instance.split_main_and_subcommand(["-v", "-h"])
137
+ result.should == [["-v", "-h"], nil, []]
138
+ end
139
+
140
+ it "should work when given only a subcommand" do
141
+ result = instance.split_main_and_subcommand(["status"])
142
+ result.should == [[], "status", []]
143
+ end
144
+
145
+ it "works when there are other non-flag args after the subcommand" do
146
+ result = instance.split_main_and_subcommand(["-v", "box", "add", "-h"])
147
+ result.should == [["-v"], "box", ["add", "-h"]]
21
148
  end
22
149
  end
23
150
  end
@@ -1,52 +1,25 @@
1
- require "test_helper"
1
+ require File.expand_path("../../../base", __FILE__)
2
2
 
3
- class ConfigBaseTest < Test::Unit::TestCase
4
- setup do
5
- @klass = Vagrant::Config::Base
6
- end
3
+ describe Vagrant::Config::Base do
4
+ include_context "unit"
7
5
 
8
- context "class methods" do
9
- should "enable configuration with proper accessor" do
10
- klass = Class.new(@klass)
11
- acc = :foo
12
- Vagrant::Config::Top.expects(:configures).with(acc, klass)
13
- klass.configures(acc)
6
+ let(:foo_class) do
7
+ Class.new(described_class) do
8
+ attr_accessor :one
9
+ attr_accessor :two
14
10
  end
15
11
  end
16
12
 
17
- context "instance methods" do
18
- setup do
19
- @base = @klass.new
20
- end
21
-
22
- should "return a hash of instance variables" do
23
- data = { "foo" => "bar", "bar" => "baz" }
24
-
25
- data.each do |iv, value|
26
- @base.instance_variable_set("@#{iv}".to_sym, value)
27
- end
13
+ it "should merge by default by simply copying each instance variable" do
14
+ one = foo_class.new
15
+ one.one = 2
16
+ one.two = 1
28
17
 
29
- result = @base.instance_variables_hash
30
- assert_equal data.length, result.length
18
+ two = foo_class.new
19
+ two.two = 5
31
20
 
32
- data.each do |iv, value|
33
- assert_equal value, result[iv]
34
- end
35
- end
36
-
37
- context "converting to JSON" do
38
- should "include magic `json_class`" do
39
- @iv_hash = { "foo" => "bar" }
40
- @base.expects(:instance_variables_hash).returns(@iv_hash)
41
- @json = { 'json_class' => @base.class.name }.merge(@iv_hash).to_json
42
- assert_equal @json, @base.to_json
43
- end
44
-
45
- should "not include top in the JSON hash" do
46
- @base.top = "FOO"
47
- hash = @base.instance_variables_hash
48
- assert !hash.has_key?(:top)
49
- end
50
- end
21
+ result = one.merge(two)
22
+ result.one.should == 2
23
+ result.two.should == 5
51
24
  end
52
25
  end
@@ -0,0 +1,79 @@
1
+ require File.expand_path("../../../base", __FILE__)
2
+
3
+ describe Vagrant::Config::Loader do
4
+ include_context "unit"
5
+
6
+ let(:instance) { described_class.new }
7
+
8
+ it "should ignore non-existent load order keys" do
9
+ instance.load_order = [:foo]
10
+ instance.load
11
+ end
12
+
13
+ it "should load and return the configuration" do
14
+ proc = Proc.new do |config|
15
+ config.vagrant.dotfile_name = "foo"
16
+ end
17
+
18
+ instance.load_order = [:proc]
19
+ instance.set(:proc, proc)
20
+ config = instance.load
21
+
22
+ config.vagrant.dotfile_name.should == "foo"
23
+ end
24
+
25
+ it "should only run the same proc once" do
26
+ count = 0
27
+ proc = Proc.new do |config|
28
+ config.vagrant.dotfile_name = "foo"
29
+ count += 1
30
+ end
31
+
32
+ instance.load_order = [:proc]
33
+ instance.set(:proc, proc)
34
+
35
+ 5.times do
36
+ result = instance.load
37
+
38
+ # Verify the config result
39
+ result.vagrant.dotfile_name.should == "foo"
40
+
41
+ # Verify the count is only one
42
+ count.should == 1
43
+ end
44
+ end
45
+
46
+ it "should only load configuration files once" do
47
+ $_config_data = 0
48
+
49
+ # We test both setting a file multiple times as well as multiple
50
+ # loads, since both should not cache the data.
51
+ file = temporary_file("$_config_data += 1")
52
+ instance.load_order = [:file]
53
+ 5.times { instance.set(:file, file) }
54
+ 5.times { instance.load }
55
+
56
+ $_config_data.should == 1
57
+ end
58
+
59
+ it "should not clear the cache if setting to the same value multiple times" do
60
+ $_config_data = 0
61
+
62
+ file = temporary_file("$_config_data += 1")
63
+
64
+ instance.load_order = [:proc]
65
+ instance.set(:proc, file)
66
+ 5.times { instance.load }
67
+
68
+ instance.set(:proc, file)
69
+ 5.times { instance.load }
70
+
71
+ $_config_data.should == 1
72
+ end
73
+
74
+ it "should raise proper error if there is a syntax error in a Vagrantfile" do
75
+ instance.load_order = [:file]
76
+ expect { instance.set(:file, temporary_file("Vagrant:^Config")) }.
77
+ to raise_exception(Vagrant::Errors::VagrantfileSyntaxError)
78
+ end
79
+ end
@@ -0,0 +1,69 @@
1
+ require File.expand_path("../../../base", __FILE__)
2
+
3
+ require "vagrant/registry"
4
+
5
+ describe Vagrant::Config::Top do
6
+ include_context "unit"
7
+
8
+ let(:registry) { Vagrant::Registry.new }
9
+ let(:instance) { described_class.new(registry) }
10
+
11
+ it "should load in the proper config class" do
12
+ registry.register(:foo, Object)
13
+
14
+ instance.foo.should be_kind_of(Object)
15
+ end
16
+
17
+ it "should load the proper config class only once" do
18
+ registry.register(:foo, Object)
19
+
20
+ obj = instance.foo
21
+ instance.foo.should eql(obj)
22
+ end
23
+
24
+ it "still raises a method missing error if invalid key" do
25
+ expect { instance.foo }.to raise_error(NoMethodError)
26
+ end
27
+
28
+ describe "merging" do
29
+ let(:foo_class) do
30
+ Class.new do
31
+ attr_accessor :one
32
+ attr_accessor :two
33
+
34
+ def merge(other)
35
+ result = self.class.new
36
+ result.one = other.one || one
37
+ result.two = other.two || two
38
+ result
39
+ end
40
+ end
41
+ end
42
+
43
+ it "merges each key by calling `merge` on the class" do
44
+ registry.register(:foo, foo_class)
45
+
46
+ instance.foo.one = 1
47
+ instance.foo.two = 2
48
+
49
+ another = described_class.new(registry)
50
+ another.foo.one = 2
51
+
52
+ result = instance.merge(another)
53
+ result.foo.one.should == 2
54
+ result.foo.two.should == 2
55
+ end
56
+
57
+ it "merges keys that aren't in the source instance" do
58
+ reg = Vagrant::Registry.new
59
+ reg.register(:foo, foo_class)
60
+
61
+ another = described_class.new(reg)
62
+ another.foo.one = 2
63
+
64
+ result = instance.merge(another)
65
+ result.foo.one.should == 2
66
+ result.foo.two.should be_nil
67
+ end
68
+ end
69
+ end
@@ -1,56 +1,71 @@
1
- require "test_helper"
1
+ require File.expand_path("../../../base", __FILE__)
2
2
 
3
- class ConfigVMTest < Test::Unit::TestCase
4
- setup do
5
- @username = "mitchellh"
3
+ describe Vagrant::Config::VMConfig do
4
+ include_context "unit"
6
5
 
7
- @env = vagrant_env
8
- @config = @env.config.vm
9
- @env.config.ssh.username = @username
6
+ it "merges by appending forwarded ports" do
7
+ a = described_class.new
8
+ a.forward_port 80, 8080
9
+
10
+ b = described_class.new
11
+ b.forward_port 100, 1000
12
+
13
+ c = a.merge(b)
14
+ c.forwarded_ports.length.should == 2
15
+ c.forwarded_ports[0][:guestport].should == 80
16
+ c.forwarded_ports[0][:hostport].should == 8080
17
+ c.forwarded_ports[1][:guestport].should == 100
18
+ c.forwarded_ports[1][:hostport].should == 1000
10
19
  end
11
20
 
12
- context "defining VMs" do
13
- should "store the proc by name but not run it" do
14
- foo = mock("proc")
15
- foo.expects(:call).never
16
-
17
- proc = Proc.new { foo.call }
18
- @config.define(:name, &proc)
19
- assert @config.defined_vms[:name].proc_stack.include?(proc)
20
- end
21
-
22
- should "store the options" do
23
- @config.define(:name, :set => true)
24
- assert @config.defined_vms[:name].options[:set]
25
- end
26
-
27
- should "not have multi-VMs by default" do
28
- assert !@config.has_multi_vms?
29
- end
30
-
31
- should "have multi-VMs once one is specified" do
32
- @config.define(:foo) {}
33
- assert @config.has_multi_vms?
34
- end
35
-
36
- should "retain vm definition order" do
37
- @config.define(:a) {}
38
- @config.define(:b) {}
39
- @config.define(:c) {}
40
-
41
- assert_equal [:a, :b, :c], @config.defined_vm_keys
42
- end
21
+ it "merges by merging shared folders" do
22
+ a = described_class.new
23
+ a.share_folder "a", "/guest", "/host"
24
+ a.share_folder "b", "/guest", "/host"
25
+
26
+ b = described_class.new
27
+ b.share_folder "c", "/guest", "/host"
28
+
29
+ c = a.merge(b)
30
+ c.shared_folders.has_key?("a").should be
31
+ c.shared_folders.has_key?("b").should be
32
+ c.shared_folders.has_key?("c").should be
43
33
  end
44
34
 
45
- context "customizing" do
46
- should "include the stacked proc runner module" do
47
- assert @config.class.included_modules.include?(Vagrant::Util::StackedProcRunner)
48
- end
35
+ it "merges by appending networks" do
36
+ a = described_class.new
37
+ a.network :hostonly, "33.33.33.10"
38
+
39
+ b = described_class.new
40
+ b.network :hostonly, "33.33.33.11"
41
+
42
+ c = a.merge(b)
43
+ c.networks.length.should == 2
44
+ c.networks[0].should == [:hostonly, ["33.33.33.10"]]
45
+ c.networks[1].should == [:hostonly, ["33.33.33.11"]]
46
+ end
47
+
48
+ it "merges by appending provisioners" do
49
+ a = described_class.new
50
+ a.provision :foo
51
+
52
+ b = described_class.new
53
+ b.provision :bar
54
+
55
+ c = a.merge(b)
56
+ c.provisioners.length.should == 2
57
+ c.provisioners[0].shortcut.should == :foo
58
+ c.provisioners[1].shortcut.should == :bar
59
+ end
60
+
61
+ it "merges by appending customizations" do
62
+ a = described_class.new
63
+ a.customize "a"
64
+
65
+ b = described_class.new
66
+ b.customize "b"
49
67
 
50
- should "add the customize proc to the proc stack" do
51
- proc = Proc.new {}
52
- @config.customize(&proc)
53
- assert @config.proc_stack.include?(proc)
54
- end
68
+ c = a.merge(b)
69
+ c.customizations.should == ["a", "b"]
55
70
  end
56
71
  end