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