rvagrant 0.8.7.dev

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 (251) hide show
  1. data/.gitignore +25 -0
  2. data/.yardopts +1 -0
  3. data/CHANGELOG.md +386 -0
  4. data/Gemfile +21 -0
  5. data/LICENSE +21 -0
  6. data/README.md +61 -0
  7. data/Rakefile +11 -0
  8. data/bin/vagrant +28 -0
  9. data/config/default.rb +38 -0
  10. data/contrib/README.md +12 -0
  11. data/contrib/emacs/vagrant.el +8 -0
  12. data/contrib/vim/vagrantfile.vim +9 -0
  13. data/keys/README.md +17 -0
  14. data/keys/vagrant +27 -0
  15. data/keys/vagrant.ppk +26 -0
  16. data/keys/vagrant.pub +1 -0
  17. data/lib/vagrant.rb +44 -0
  18. data/lib/vagrant/action.rb +138 -0
  19. data/lib/vagrant/action/box.rb +11 -0
  20. data/lib/vagrant/action/box/destroy.rb +21 -0
  21. data/lib/vagrant/action/box/download.rb +72 -0
  22. data/lib/vagrant/action/box/package.rb +19 -0
  23. data/lib/vagrant/action/box/unpackage.rb +55 -0
  24. data/lib/vagrant/action/box/verify.rb +23 -0
  25. data/lib/vagrant/action/builder.rb +124 -0
  26. data/lib/vagrant/action/builtin.rb +108 -0
  27. data/lib/vagrant/action/env.rb +7 -0
  28. data/lib/vagrant/action/env/set.rb +18 -0
  29. data/lib/vagrant/action/environment.rb +50 -0
  30. data/lib/vagrant/action/general.rb +8 -0
  31. data/lib/vagrant/action/general/package.rb +113 -0
  32. data/lib/vagrant/action/general/validate.rb +19 -0
  33. data/lib/vagrant/action/vm.rb +34 -0
  34. data/lib/vagrant/action/vm/boot.rb +48 -0
  35. data/lib/vagrant/action/vm/check_accessible.rb +23 -0
  36. data/lib/vagrant/action/vm/check_box.rb +28 -0
  37. data/lib/vagrant/action/vm/check_guest_additions.rb +35 -0
  38. data/lib/vagrant/action/vm/clean_machine_folder.rb +43 -0
  39. data/lib/vagrant/action/vm/clear_forwarded_ports.rb +26 -0
  40. data/lib/vagrant/action/vm/clear_nfs_exports.rb +20 -0
  41. data/lib/vagrant/action/vm/clear_shared_folders.rb +27 -0
  42. data/lib/vagrant/action/vm/customize.rb +26 -0
  43. data/lib/vagrant/action/vm/destroy.rb +19 -0
  44. data/lib/vagrant/action/vm/destroy_unused_network_interfaces.rb +30 -0
  45. data/lib/vagrant/action/vm/discard_state.rb +22 -0
  46. data/lib/vagrant/action/vm/export.rb +52 -0
  47. data/lib/vagrant/action/vm/forward_ports.rb +133 -0
  48. data/lib/vagrant/action/vm/forward_ports_helpers.rb +28 -0
  49. data/lib/vagrant/action/vm/halt.rb +29 -0
  50. data/lib/vagrant/action/vm/host_name.rb +21 -0
  51. data/lib/vagrant/action/vm/import.rb +40 -0
  52. data/lib/vagrant/action/vm/match_mac_address.rb +26 -0
  53. data/lib/vagrant/action/vm/modify.rb +37 -0
  54. data/lib/vagrant/action/vm/network.rb +146 -0
  55. data/lib/vagrant/action/vm/nfs.rb +160 -0
  56. data/lib/vagrant/action/vm/nfs_helpers.rb +11 -0
  57. data/lib/vagrant/action/vm/package.rb +23 -0
  58. data/lib/vagrant/action/vm/package_vagrantfile.rb +33 -0
  59. data/lib/vagrant/action/vm/provision.rb +34 -0
  60. data/lib/vagrant/action/vm/provisioner_cleanup.rb +26 -0
  61. data/lib/vagrant/action/vm/resume.rb +20 -0
  62. data/lib/vagrant/action/vm/share_folders.rb +78 -0
  63. data/lib/vagrant/action/vm/suspend.rb +20 -0
  64. data/lib/vagrant/action/warden.rb +85 -0
  65. data/lib/vagrant/box.rb +90 -0
  66. data/lib/vagrant/box_collection.rb +53 -0
  67. data/lib/vagrant/cli.rb +55 -0
  68. data/lib/vagrant/command.rb +25 -0
  69. data/lib/vagrant/command/base.rb +106 -0
  70. data/lib/vagrant/command/box.rb +33 -0
  71. data/lib/vagrant/command/destroy.rb +17 -0
  72. data/lib/vagrant/command/group_base.rb +107 -0
  73. data/lib/vagrant/command/halt.rb +18 -0
  74. data/lib/vagrant/command/helpers.rb +33 -0
  75. data/lib/vagrant/command/init.rb +14 -0
  76. data/lib/vagrant/command/named_base.rb +14 -0
  77. data/lib/vagrant/command/package.rb +41 -0
  78. data/lib/vagrant/command/provision.rb +23 -0
  79. data/lib/vagrant/command/reload.rb +17 -0
  80. data/lib/vagrant/command/resume.rb +17 -0
  81. data/lib/vagrant/command/ssh.rb +49 -0
  82. data/lib/vagrant/command/ssh_config.rb +29 -0
  83. data/lib/vagrant/command/status.rb +31 -0
  84. data/lib/vagrant/command/suspend.rb +17 -0
  85. data/lib/vagrant/command/up.rb +19 -0
  86. data/lib/vagrant/command/upgrade_to_060.rb +45 -0
  87. data/lib/vagrant/command/version.rb +13 -0
  88. data/lib/vagrant/config.rb +123 -0
  89. data/lib/vagrant/config/base.rb +85 -0
  90. data/lib/vagrant/config/error_recorder.rb +19 -0
  91. data/lib/vagrant/config/nfs.rb +10 -0
  92. data/lib/vagrant/config/package.rb +9 -0
  93. data/lib/vagrant/config/ssh.rb +38 -0
  94. data/lib/vagrant/config/top.rb +61 -0
  95. data/lib/vagrant/config/vagrant.rb +17 -0
  96. data/lib/vagrant/config/vm.rb +148 -0
  97. data/lib/vagrant/config/vm/provisioner.rb +56 -0
  98. data/lib/vagrant/config/vm/sub_vm.rb +17 -0
  99. data/lib/vagrant/data_store.rb +70 -0
  100. data/lib/vagrant/downloaders.rb +7 -0
  101. data/lib/vagrant/downloaders/base.rb +23 -0
  102. data/lib/vagrant/downloaders/file.rb +22 -0
  103. data/lib/vagrant/downloaders/http.rb +70 -0
  104. data/lib/vagrant/environment.rb +516 -0
  105. data/lib/vagrant/errors.rb +352 -0
  106. data/lib/vagrant/hosts.rb +9 -0
  107. data/lib/vagrant/hosts/arch.rb +27 -0
  108. data/lib/vagrant/hosts/base.rb +76 -0
  109. data/lib/vagrant/hosts/bsd.rb +58 -0
  110. data/lib/vagrant/hosts/fedora.rb +11 -0
  111. data/lib/vagrant/hosts/linux.rb +69 -0
  112. data/lib/vagrant/plugin.rb +79 -0
  113. data/lib/vagrant/provisioners.rb +9 -0
  114. data/lib/vagrant/provisioners/base.rb +67 -0
  115. data/lib/vagrant/provisioners/chef.rb +155 -0
  116. data/lib/vagrant/provisioners/chef_client.rb +120 -0
  117. data/lib/vagrant/provisioners/chef_solo.rb +135 -0
  118. data/lib/vagrant/provisioners/puppet.rb +137 -0
  119. data/lib/vagrant/provisioners/puppet_server.rb +55 -0
  120. data/lib/vagrant/provisioners/shell.rb +96 -0
  121. data/lib/vagrant/ssh.rb +224 -0
  122. data/lib/vagrant/ssh/session.rb +136 -0
  123. data/lib/vagrant/systems.rb +13 -0
  124. data/lib/vagrant/systems/arch.rb +34 -0
  125. data/lib/vagrant/systems/base.rb +87 -0
  126. data/lib/vagrant/systems/debian.rb +36 -0
  127. data/lib/vagrant/systems/freebsd.rb +84 -0
  128. data/lib/vagrant/systems/gentoo.rb +27 -0
  129. data/lib/vagrant/systems/linux.rb +82 -0
  130. data/lib/vagrant/systems/linux/config.rb +21 -0
  131. data/lib/vagrant/systems/linux/error.rb +9 -0
  132. data/lib/vagrant/systems/redhat.rb +48 -0
  133. data/lib/vagrant/systems/solaris.rb +67 -0
  134. data/lib/vagrant/systems/suse.rb +9 -0
  135. data/lib/vagrant/systems/ubuntu.rb +17 -0
  136. data/lib/vagrant/test_helpers.rb +128 -0
  137. data/lib/vagrant/ui.rb +81 -0
  138. data/lib/vagrant/util.rb +13 -0
  139. data/lib/vagrant/util/busy.rb +59 -0
  140. data/lib/vagrant/util/counter.rb +24 -0
  141. data/lib/vagrant/util/hash_with_indifferent_access.rb +63 -0
  142. data/lib/vagrant/util/platform.rb +57 -0
  143. data/lib/vagrant/util/retryable.rb +25 -0
  144. data/lib/vagrant/util/safe_exec.rb +35 -0
  145. data/lib/vagrant/util/stacked_proc_runner.rb +35 -0
  146. data/lib/vagrant/util/template_renderer.rb +83 -0
  147. data/lib/vagrant/version.rb +6 -0
  148. data/lib/vagrant/vm.rb +181 -0
  149. data/templates/chef_server_client.erb +32 -0
  150. data/templates/chef_solo_solo.erb +23 -0
  151. data/templates/commands/init/Vagrantfile.erb +86 -0
  152. data/templates/config/validation_failed.erb +7 -0
  153. data/templates/locales/en.yml +556 -0
  154. data/templates/network_entry_arch.erb +9 -0
  155. data/templates/network_entry_debian.erb +8 -0
  156. data/templates/network_entry_gentoo.erb +5 -0
  157. data/templates/network_entry_redhat.erb +9 -0
  158. data/templates/nfs/exports.erb +5 -0
  159. data/templates/nfs/exports_linux.erb +5 -0
  160. data/templates/package_Vagrantfile.erb +11 -0
  161. data/templates/ssh_config.erb +15 -0
  162. data/test/unit/locales/en.yml +8 -0
  163. data/test/unit/test_helper.rb +28 -0
  164. data/test/unit/vagrant/action/box/destroy_test.rb +18 -0
  165. data/test/unit/vagrant/action/box/download_test.rb +125 -0
  166. data/test/unit/vagrant/action/box/package_test.rb +25 -0
  167. data/test/unit/vagrant/action/box/unpackage_test.rb +84 -0
  168. data/test/unit/vagrant/action/box/verify_test.rb +30 -0
  169. data/test/unit/vagrant/action/builder_test.rb +207 -0
  170. data/test/unit/vagrant/action/env/set_test.rb +24 -0
  171. data/test/unit/vagrant/action/environment_test.rb +27 -0
  172. data/test/unit/vagrant/action/general/package_test.rb +268 -0
  173. data/test/unit/vagrant/action/general/validate_test.rb +31 -0
  174. data/test/unit/vagrant/action/vm/boot_test.rb +66 -0
  175. data/test/unit/vagrant/action/vm/check_accessible_test.rb +61 -0
  176. data/test/unit/vagrant/action/vm/check_box_test.rb +56 -0
  177. data/test/unit/vagrant/action/vm/check_guest_additions_test.rb +9 -0
  178. data/test/unit/vagrant/action/vm/clean_machine_folder_test.rb +84 -0
  179. data/test/unit/vagrant/action/vm/clear_forwarded_ports_test.rb +52 -0
  180. data/test/unit/vagrant/action/vm/clear_nfs_exports_test.rb +22 -0
  181. data/test/unit/vagrant/action/vm/clear_shared_folders_test.rb +40 -0
  182. data/test/unit/vagrant/action/vm/customize_test.rb +37 -0
  183. data/test/unit/vagrant/action/vm/destroy_test.rb +25 -0
  184. data/test/unit/vagrant/action/vm/destroy_unused_network_interfaces_test.rb +49 -0
  185. data/test/unit/vagrant/action/vm/discard_state_test.rb +45 -0
  186. data/test/unit/vagrant/action/vm/export_test.rb +107 -0
  187. data/test/unit/vagrant/action/vm/forward_ports_helpers_test.rb +77 -0
  188. data/test/unit/vagrant/action/vm/forward_ports_test.rb +213 -0
  189. data/test/unit/vagrant/action/vm/halt_test.rb +79 -0
  190. data/test/unit/vagrant/action/vm/host_name_test.rb +36 -0
  191. data/test/unit/vagrant/action/vm/import_test.rb +66 -0
  192. data/test/unit/vagrant/action/vm/match_mac_address_test.rb +40 -0
  193. data/test/unit/vagrant/action/vm/modify_test.rb +38 -0
  194. data/test/unit/vagrant/action/vm/network_test.rb +286 -0
  195. data/test/unit/vagrant/action/vm/nfs_helpers_test.rb +26 -0
  196. data/test/unit/vagrant/action/vm/nfs_test.rb +260 -0
  197. data/test/unit/vagrant/action/vm/package_test.rb +25 -0
  198. data/test/unit/vagrant/action/vm/package_vagrantfile_test.rb +46 -0
  199. data/test/unit/vagrant/action/vm/provision_test.rb +65 -0
  200. data/test/unit/vagrant/action/vm/provisioner_cleanup_test.rb +56 -0
  201. data/test/unit/vagrant/action/vm/resume_test.rb +35 -0
  202. data/test/unit/vagrant/action/vm/share_folders_test.rb +144 -0
  203. data/test/unit/vagrant/action/vm/suspend_test.rb +35 -0
  204. data/test/unit/vagrant/action/warden_test.rb +125 -0
  205. data/test/unit/vagrant/action_test.rb +89 -0
  206. data/test/unit/vagrant/box_collection_test.rb +45 -0
  207. data/test/unit/vagrant/box_test.rb +74 -0
  208. data/test/unit/vagrant/cli_test.rb +35 -0
  209. data/test/unit/vagrant/command/base_test.rb +23 -0
  210. data/test/unit/vagrant/command/group_base_test.rb +15 -0
  211. data/test/unit/vagrant/command/helpers_test.rb +88 -0
  212. data/test/unit/vagrant/command/package_test.rb +27 -0
  213. data/test/unit/vagrant/config/base_test.rb +52 -0
  214. data/test/unit/vagrant/config/error_recorder_test.rb +18 -0
  215. data/test/unit/vagrant/config/ssh_test.rb +12 -0
  216. data/test/unit/vagrant/config/vagrant_test.rb +35 -0
  217. data/test/unit/vagrant/config/vm/provisioner_test.rb +92 -0
  218. data/test/unit/vagrant/config/vm_test.rb +56 -0
  219. data/test/unit/vagrant/config_test.rb +162 -0
  220. data/test/unit/vagrant/data_store_test.rb +77 -0
  221. data/test/unit/vagrant/downloaders/base_test.rb +28 -0
  222. data/test/unit/vagrant/downloaders/file_test.rb +48 -0
  223. data/test/unit/vagrant/downloaders/http_test.rb +82 -0
  224. data/test/unit/vagrant/environment_test.rb +598 -0
  225. data/test/unit/vagrant/errors_test.rb +42 -0
  226. data/test/unit/vagrant/hosts/base_test.rb +46 -0
  227. data/test/unit/vagrant/hosts/bsd_test.rb +53 -0
  228. data/test/unit/vagrant/hosts/linux_test.rb +54 -0
  229. data/test/unit/vagrant/plugin_test.rb +9 -0
  230. data/test/unit/vagrant/provisioners/base_test.rb +63 -0
  231. data/test/unit/vagrant/provisioners/chef_client_test.rb +190 -0
  232. data/test/unit/vagrant/provisioners/chef_solo_test.rb +114 -0
  233. data/test/unit/vagrant/provisioners/chef_test.rb +202 -0
  234. data/test/unit/vagrant/provisioners/puppet_server_test.rb +68 -0
  235. data/test/unit/vagrant/provisioners/puppet_test.rb +182 -0
  236. data/test/unit/vagrant/provisioners/shell_test.rb +79 -0
  237. data/test/unit/vagrant/ssh/session_test.rb +40 -0
  238. data/test/unit/vagrant/ssh_test.rb +307 -0
  239. data/test/unit/vagrant/systems/base_test.rb +18 -0
  240. data/test/unit/vagrant/systems/linux_test.rb +104 -0
  241. data/test/unit/vagrant/ui_test.rb +29 -0
  242. data/test/unit/vagrant/util/busy_test.rb +106 -0
  243. data/test/unit/vagrant/util/counter_test.rb +29 -0
  244. data/test/unit/vagrant/util/hash_with_indifferent_access_test.rb +39 -0
  245. data/test/unit/vagrant/util/platform_test.rb +18 -0
  246. data/test/unit/vagrant/util/retryable_test.rb +50 -0
  247. data/test/unit/vagrant/util/stacked_proc_runner_test.rb +43 -0
  248. data/test/unit/vagrant/util/template_renderer_test.rb +145 -0
  249. data/test/unit/vagrant/vm_test.rb +300 -0
  250. data/vagrant.gemspec +35 -0
  251. metadata +431 -0
@@ -0,0 +1,25 @@
1
+ require "test_helper"
2
+
3
+ class PackageVMActionTest < Test::Unit::TestCase
4
+ setup do
5
+ @klass = Vagrant::Action::VM::Package
6
+ @app, @env = action_env
7
+ @env["export.temp_dir"] = "foo"
8
+
9
+ @instance = @klass.new(@app, @env)
10
+ end
11
+
12
+ should "be a subclass of general packaging middleware" do
13
+ assert @instance.is_a?(Vagrant::Action::General::Package)
14
+ end
15
+
16
+ should "set the package directory then call parent" do
17
+ @instance.expects(:general_call).once.with() do |env|
18
+ assert env["package.directory"]
19
+ assert_equal env["package.directory"], env["export.temp_dir"]
20
+ true
21
+ end
22
+
23
+ @instance.call(@env)
24
+ end
25
+ end
@@ -0,0 +1,46 @@
1
+ require "test_helper"
2
+
3
+ class PackageVagrantfileVMActionTest < Test::Unit::TestCase
4
+ setup do
5
+ @klass = Vagrant::Action::VM::PackageVagrantfile
6
+ @app, @env = action_env
7
+
8
+ @vm = mock("vm")
9
+ @env["vm"] = @vm
10
+ @env["export.temp_dir"] = "foo"
11
+
12
+ @internal_vm = mock("internal")
13
+ @vm.stubs(:vm).returns(@internal_vm)
14
+ @instance = @klass.new(@app, @env)
15
+ end
16
+
17
+ context "calling" do
18
+ should "create the vagrantfile then continue chain" do
19
+ seq = sequence("sequence")
20
+ @instance.expects(:create_vagrantfile).in_sequence(seq)
21
+ @app.expects(:call).with(@env).in_sequence(seq)
22
+
23
+ @instance.call(@env)
24
+ end
25
+ end
26
+
27
+ context "creating vagrantfile" do
28
+ setup do
29
+ @network_adapter = mock("nic")
30
+ @network_adapter.stubs(:mac_address).returns("mac_address")
31
+ @internal_vm.stubs(:network_adapters).returns([@network_adapter])
32
+ end
33
+
34
+ should "write the rendered vagrantfile to temp_path Vagrantfile" do
35
+ f = mock("file")
36
+ rendered = mock("rendered")
37
+ File.expects(:open).with(File.join(@env["export.temp_dir"], "Vagrantfile"), "w").yields(f)
38
+ Vagrant::Util::TemplateRenderer.expects(:render).returns(rendered).with("package_Vagrantfile", {
39
+ :base_mac => @internal_vm.network_adapters.first.mac_address
40
+ })
41
+ f.expects(:write).with(rendered)
42
+
43
+ @instance.create_vagrantfile
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,65 @@
1
+ require "test_helper"
2
+
3
+ class ProvisionVMActionTest < Test::Unit::TestCase
4
+ setup do
5
+ @klass = Vagrant::Action::VM::Provision
6
+ @app, @env = action_env
7
+
8
+ @vm = mock("vm")
9
+ @vm.stubs(:name).returns("foo")
10
+ @vm.stubs(:ssh).returns(mock("ssh"))
11
+ @vm.stubs(:system).returns(mock("system"))
12
+ @env["vm"] = @vm
13
+
14
+ @internal_vm = mock("internal")
15
+ @vm.stubs(:vm).returns(@internal_vm)
16
+ end
17
+
18
+ context "with an instance" do
19
+ setup do
20
+ # Set provisioner to nil so the provisioner isn't loaded on init
21
+ @env["config"].vm.provisioners.clear
22
+ @instance = @klass.new(@app, @env)
23
+ end
24
+
25
+ context "loading a provisioner" do
26
+ should "instantiate and prepare each provisioner" do
27
+ @env["config"].vm.provision :chef_solo
28
+ @env["config"].vm.provision :chef_solo
29
+ provisioners = @instance.enabled_provisioners
30
+
31
+ assert_equal 2, provisioners.length
32
+ end
33
+
34
+ should "set the config for each provisioner" do
35
+ @env["config"].vm.provision :chef_solo do |chef|
36
+ chef.cookbooks_path = "foo"
37
+ end
38
+
39
+ provisioners = @instance.enabled_provisioners
40
+
41
+ assert_equal "foo", provisioners.first.config.cookbooks_path
42
+ end
43
+ end
44
+
45
+ context "calling" do
46
+ should "provision and continue chain" do
47
+ provisioners = [mock("one"), mock("two")]
48
+ seq = sequence("seq")
49
+ @instance.stubs(:enabled_provisioners).returns(provisioners)
50
+
51
+ provisioners.each do |prov|
52
+ prov.expects(:prepare).in_sequence(seq)
53
+ end
54
+
55
+ @app.expects(:call).with(@env).in_sequence(seq)
56
+
57
+ provisioners.each do |prov|
58
+ prov.expects(:provision!).in_sequence(seq)
59
+ end
60
+
61
+ @instance.call(@env)
62
+ end
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,56 @@
1
+ require "test_helper"
2
+
3
+ class ProvisionerCleanupVMActionTest < Test::Unit::TestCase
4
+ setup do
5
+ @klass = Vagrant::Action::VM::ProvisionerCleanup
6
+ @app, @env = action_env
7
+
8
+ @vm = mock("vm")
9
+ @env["vm"] = @vm
10
+
11
+ @internal_vm = mock("internal")
12
+ @vm.stubs(:vm).returns(@internal_vm)
13
+ end
14
+
15
+ context "with an instance" do
16
+ setup do
17
+ # Set provisioner to nil so the provisioner isn't loaded on init
18
+ @env["config"].vm.provisioners.clear
19
+ @instance = @klass.new(@app, @env)
20
+ end
21
+
22
+ context "loading a provisioner" do
23
+ should "instantiate and prepare each provisioner" do
24
+ @env["config"].vm.provision :chef_solo
25
+ @env["config"].vm.provision :chef_solo
26
+ provisioners = @instance.enabled_provisioners
27
+
28
+ assert_equal 2, provisioners.length
29
+ end
30
+
31
+ should "set the config for each provisioner" do
32
+ @env["config"].vm.provision :chef_solo do |chef|
33
+ chef.cookbooks_path = "foo"
34
+ end
35
+
36
+ provisioners = @instance.enabled_provisioners
37
+
38
+ assert_equal "foo", provisioners.first.config.cookbooks_path
39
+ end
40
+ end
41
+
42
+ context "calling" do
43
+ should "provision and continue chain" do
44
+ provisioners = [mock("one"), mock("two")]
45
+ seq = sequence("seq")
46
+ @instance.stubs(:enabled_provisioners).returns(provisioners)
47
+ provisioners.each do |prov|
48
+ prov.expects(:cleanup).in_sequence(seq)
49
+ end
50
+ @app.expects(:call).with(@env).in_sequence(seq)
51
+
52
+ @instance.call(@env)
53
+ end
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,35 @@
1
+ require "test_helper"
2
+
3
+ class ResumeVMActionTest < Test::Unit::TestCase
4
+ setup do
5
+ @klass = Vagrant::Action::VM::Resume
6
+ @app, @env = action_env
7
+
8
+ @vm = mock("vm")
9
+ @env["vm"] = @vm
10
+
11
+ @internal_vm = mock("internal")
12
+ @vm.stubs(:vm).returns(@internal_vm)
13
+
14
+ @instance = @klass.new(@app, @env)
15
+ end
16
+
17
+ context "calling" do
18
+ should "run the proper methods when saved" do
19
+ @internal_vm.expects(:saved?).returns(true)
20
+
21
+ seq = sequence("seq")
22
+ @env.env.actions.expects(:run).with(Vagrant::Action::VM::Boot).once.in_sequence(seq)
23
+ @app.expects(:call).with(@env).once.in_sequence(seq)
24
+ @instance.call(@env)
25
+ end
26
+
27
+ should "do nothing if VM is not saved" do
28
+ @internal_vm.expects(:saved?).returns(false)
29
+
30
+ @vm.expects(:start).never
31
+ @app.expects(:call).with(@env).once
32
+ @instance.call(@env)
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,144 @@
1
+ require "test_helper"
2
+
3
+ class ShareFoldersVMActionTest < Test::Unit::TestCase
4
+ setup do
5
+ @klass = Vagrant::Action::VM::ShareFolders
6
+ @app, @env = action_env
7
+
8
+ @vm = mock("vm")
9
+ @vm.stubs(:name).returns("foo")
10
+ @vm.stubs(:ssh).returns(mock("ssh"))
11
+ @vm.stubs(:system).returns(mock("system"))
12
+ @env["vm"] = @vm
13
+ @env["vm.modify"] = mock("proc")
14
+
15
+ @internal_vm = mock("internal")
16
+ @vm.stubs(:vm).returns(@internal_vm)
17
+
18
+ # No validation for this test since its a nightmare due to all the
19
+ # nonexistent shared folders.
20
+ Vagrant::Config::Top.any_instance.stubs(:validate!)
21
+
22
+ @instance = @klass.new(@app, @env)
23
+ end
24
+
25
+ def stub_shared_folders(contents)
26
+ env = vagrant_env(vagrantfile(<<-vf))
27
+ config.vm.shared_folders.clear
28
+ #{contents}
29
+ vf
30
+
31
+ @env.stubs(:env).returns(env)
32
+ env.config.vm.shared_folders
33
+ end
34
+
35
+ context "calling" do
36
+ should "run the methods in the proper order" do
37
+ before_seq = sequence("before")
38
+ @instance.expects(:create_metadata).once.in_sequence(before_seq)
39
+ @app.expects(:call).with(@env).in_sequence(before_seq)
40
+ @instance.expects(:mount_shared_folders).once.in_sequence(before_seq)
41
+
42
+ @instance.call(@env)
43
+ end
44
+ end
45
+
46
+ context "collecting shared folders" do
47
+ should "return a hash of the shared folders" do
48
+ data = {
49
+ "foo" => %W[bar baz],
50
+ "bar" => %W[foo baz]
51
+ }
52
+
53
+ stub_shared_folders(<<-sf)
54
+ config.vm.share_folder("foo", "bar", "baz")
55
+ config.vm.share_folder("bar", "foo", "baz")
56
+ sf
57
+
58
+ result = @instance.shared_folders
59
+ assert_equal data.length, result.length
60
+ data.each do |name, value|
61
+ guest, host = value
62
+ assert_equal guest, result[name][:guestpath]
63
+ assert_equal host, result[name][:hostpath]
64
+ end
65
+ end
66
+
67
+ should "ignore disabled shared folders" do
68
+ stub_shared_folders(<<-sf)
69
+ config.vm.share_folder("v-foo", "/foo", "/foo")
70
+ config.vm.share_folder("v-root", "/vagrant", ".", :disabled => true)
71
+ config.vm.share_folder("v-bar", "/bar", "/bar")
72
+ sf
73
+
74
+ assert_equal 2, @instance.shared_folders.length
75
+ assert_equal %W[v-bar v-foo], @instance.shared_folders.keys.sort
76
+ end
77
+
78
+ should "not destroy original hash" do
79
+ @folders = stub_shared_folders(<<-sf)
80
+ config.vm.share_folder("foo", "bar", "baz", :sync => true)
81
+ sf
82
+
83
+ folder = @folders["foo"].dup
84
+
85
+ @instance.shared_folders
86
+ assert_equal folder, @env.env.config.vm.shared_folders["foo"]
87
+ end
88
+ end
89
+
90
+ context "setting up shared folder metadata" do
91
+ setup do
92
+ stub_shared_folders(<<-sf)
93
+ config.vm.share_folder("foo", "fooguest", "foohost")
94
+ config.vm.share_folder("bar", "barguest", "barhost")
95
+ sf
96
+ end
97
+
98
+ should "add all shared folders to the VM" do
99
+ shared_folders = []
100
+ data = %W[foo bar]
101
+ shared_folders.expects(:<<).times(data.length).with() do |sf|
102
+ hostpath = File.expand_path("#{sf.name}host", @env.env.root_path)
103
+ assert data.include?(sf.name)
104
+ assert_equal hostpath, sf.host_path
105
+ true
106
+ end
107
+
108
+ @internal_vm.stubs(:shared_folders).returns(shared_folders)
109
+
110
+ @env["vm.modify"].expects(:call).with() do |proc|
111
+ proc.call(@internal_vm)
112
+ true
113
+ end
114
+
115
+ @instance.create_metadata
116
+ end
117
+ end
118
+
119
+ context "mounting the shared folders" do
120
+ setup do
121
+ @folders = stub_shared_folders(<<-sf)
122
+ config.vm.share_folder("foo", "fooguest", "foohost", :owner => "yo", :group => "fo")
123
+ config.vm.share_folder("bar", "barguest", "barhost", :owner => "foo", :group => "bar")
124
+ config.vm.share_folder("foo_no_mount", nil, "foohost2")
125
+ sf
126
+ @ssh = mock("ssh")
127
+ @vm.ssh.stubs(:execute).yields(@ssh)
128
+ @vm.system.stubs(:mount_shared_folder)
129
+ end
130
+
131
+ should "mount all shared folders to the VM" do
132
+ mount_seq = sequence("mount_seq")
133
+ @folders.each do |name, data|
134
+ if data[:guestpath]
135
+ @vm.system.expects(:mount_shared_folder).with(@ssh, name, data[:guestpath], data[:owner], data[:group]).in_sequence(mount_seq)
136
+ else
137
+ @vm.system.expects(:mount_shared_folder).with(@ssh, name, anything, anything, anything).never
138
+ end
139
+ end
140
+
141
+ @instance.mount_shared_folders
142
+ end
143
+ end
144
+ end
@@ -0,0 +1,35 @@
1
+ require "test_helper"
2
+
3
+ class SuspendVMActionTest < Test::Unit::TestCase
4
+ setup do
5
+ @klass = Vagrant::Action::VM::Suspend
6
+ @app, @env = action_env
7
+
8
+ @vm = mock("vm")
9
+ @env["vm"] = @vm
10
+
11
+ @internal_vm = mock("internal")
12
+ @vm.stubs(:vm).returns(@internal_vm)
13
+
14
+ @instance = @klass.new(@app, @env)
15
+ end
16
+
17
+ context "calling" do
18
+ should "run the proper methods when running" do
19
+ @internal_vm.expects(:running?).returns(true)
20
+
21
+ seq = sequence("seq")
22
+ @internal_vm.expects(:save_state).once.in_sequence(seq)
23
+ @app.expects(:call).with(@env).once.in_sequence(seq)
24
+ @instance.call(@env)
25
+ end
26
+
27
+ should "do nothing if VM is not running" do
28
+ @internal_vm.expects(:running?).returns(false)
29
+
30
+ @internal_vm.expects(:save_state).never
31
+ @app.expects(:call).with(@env).once
32
+ @instance.call(@env)
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,125 @@
1
+ require "test_helper"
2
+ require "logger"
3
+
4
+ class ActionWardenTest < Test::Unit::TestCase
5
+ setup do
6
+ @klass = Vagrant::Action::Warden
7
+ @instance = @klass.new([], {})
8
+ end
9
+
10
+ context "initializing" do
11
+ should "finalize the middleware" do
12
+ env = new_env
13
+ middleware = [1,2,3]
14
+ middleware.each do |m|
15
+ @klass.any_instance.expects(:finalize_action).with(m, env).returns(m)
16
+ end
17
+ @warden = @klass.new(middleware, env)
18
+ assert_equal @warden.actions, [1,2,3]
19
+ end
20
+ end
21
+
22
+ context "setting up middleware" do
23
+ should "make non-classes lambdas" do
24
+ env = new_env
25
+ env.expects(:foo).once
26
+
27
+ func = lambda { |x| x.foo }
28
+ @instance.finalize_action(func, env).call(env)
29
+ end
30
+
31
+ should "raise exception if given invalid middleware" do
32
+ assert_raises(RuntimeError) {
33
+ @instance.finalize_action(7, nil)
34
+ }
35
+ end
36
+ end
37
+
38
+ context "calling" do
39
+ should "return if there are no actions to execute" do
40
+ @instance.actions.expects(:pop).never
41
+ assert !@instance.call(new_env)
42
+ end
43
+
44
+ should "move the last action to the front of the stack" do
45
+ @instance.actions << lambda { |env| }
46
+ assert @instance.stack.empty?
47
+ @instance.call(new_env)
48
+ assert !@instance.stack.empty?
49
+ assert @instance.actions.empty?
50
+ end
51
+
52
+ should "call the next action" do
53
+ env = new_env
54
+ action = mock('action')
55
+ action.expects(:call).with(env)
56
+ @instance.actions << action
57
+ @instance.call(env)
58
+ end
59
+
60
+ should "begin recovery sequence when the called action raises an exception" do
61
+ class Foo
62
+ def initialize(*args); end
63
+ def call(env)
64
+ raise "An exception"
65
+ end
66
+ end
67
+
68
+ @instance.actions << Foo.new
69
+ @instance.expects(:begin_rescue).with() do |env|
70
+ assert env["vagrant.error"].is_a?(RuntimeError)
71
+ true
72
+ end
73
+ assert_raises(RuntimeError) { @instance.call(new_env) }
74
+ end
75
+
76
+ should "not begin recovery sequence if a SystemExit is raised" do
77
+ class Foo
78
+ def initialize(*args); end
79
+ def call(env)
80
+ # Raises a system exit
81
+ abort
82
+ end
83
+ end
84
+
85
+ @instance.actions << Foo.new
86
+ @instance.expects(:begin_rescue).never
87
+ assert_raises(SystemExit) { @instance.call(new_env) }
88
+ end
89
+
90
+ should "raise interrupt if the environment is interupted" do
91
+ env = new_env
92
+ env.expects(:interrupted?).returns(true)
93
+ @instance.actions << lambda { |env| }
94
+
95
+ assert_raises(Vagrant::Errors::VagrantInterrupt) {
96
+ @instance.call(env)
97
+ }
98
+ end
99
+ end
100
+
101
+ context "recover" do
102
+ should "call recover on all items in the stack" do
103
+ env = new_env
104
+ seq = sequence("sequence")
105
+ @instance.stack = [rescueable_mock("action"), rescueable_mock("another")]
106
+ @instance.stack.each do |action|
107
+ action.expects(:recover).with(env).in_sequence(seq)
108
+ end
109
+
110
+ @instance.begin_rescue(env)
111
+ end
112
+ end
113
+
114
+ def new_env
115
+ env = Vagrant::Action::Environment.new(nil)
116
+ env["logger"] = Logger.new(nil)
117
+ env
118
+ end
119
+
120
+ def rescueable_mock(name)
121
+ mock_action = mock(name)
122
+ mock_action.stubs(:respond_to?).with(:recover).returns(true)
123
+ mock_action
124
+ end
125
+ end