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,9 @@
1
+ require "test_helper"
2
+
3
+ class CheckGuestAdditionsVMActionTest < Test::Unit::TestCase
4
+ setup do
5
+ @klass = Vagrant::Action::VM::CheckGuestAdditions
6
+ end
7
+
8
+ # TODO: This isn't tested.
9
+ end
@@ -0,0 +1,84 @@
1
+ require "test_helper"
2
+
3
+ class CleanMachineFolderVMActionTest < Test::Unit::TestCase
4
+ setup do
5
+ @klass = Vagrant::Action::VM::CleanMachineFolder
6
+ @app, @env = action_env
7
+
8
+ @instance = @klass.new(@app, @env)
9
+ end
10
+
11
+ context "calling" do
12
+ should "clean machine folder then continue chain" do
13
+ seq = sequence("seq")
14
+ @instance.expects(:clean_machine_folder).in_sequence(seq)
15
+ @app.expects(:call).with(@env).in_sequence(seq)
16
+ @instance.call(@env)
17
+ end
18
+ end
19
+
20
+ context "cleaning the folder" do
21
+ setup do
22
+ @machine_folder = "/foo/bar/baz"
23
+ @folder = File.join(@machine_folder, "*")
24
+ VirtualBox::Global.global.system_properties.stubs(:default_machine_folder).returns(@machine_folder)
25
+ File.stubs(:file?).returns(true)
26
+ end
27
+
28
+ should "ignore all non-directories" do
29
+ folders = %W[foo bar baz]
30
+ Dir.expects(:[]).with(@folder).returns(folders)
31
+ folders.each do |f|
32
+ File.expects(:directory?).with(f).returns(false)
33
+ end
34
+
35
+ FileUtils.expects(:rm_rf).never
36
+
37
+ @instance.clean_machine_folder
38
+ end
39
+
40
+ should "delete directories with only .vbox-prev files" do
41
+ folders = {
42
+ "sfoo" => %W[foo bar baz.vbox-prev],
43
+ "sbar" => %W[foo.vbox-prev]
44
+ }
45
+
46
+ Dir.expects(:[]).with(@folder).returns(folders.keys)
47
+ folders.each do |folder, subfolders|
48
+ File.expects(:directory?).with(folder).returns(true)
49
+ Dir.expects(:[]).with("#{folder}/**/*").returns(subfolders)
50
+ end
51
+
52
+ FileUtils.expects(:rm_rf).never
53
+ FileUtils.expects(:rm_rf).with("sbar").once
54
+ @instance.clean_machine_folder
55
+ end
56
+
57
+ should "delete directories with only subdirectories" do
58
+ folders = {
59
+ "sfoo" => %W[foo bar],
60
+ "sbar" => %W[foo.vbox-prev]
61
+ }
62
+
63
+ File.stubs(:file?).returns(false)
64
+ Dir.expects(:[]).with(@folder).returns(folders.keys)
65
+ folders.each do |folder, subfolders|
66
+ File.expects(:directory?).with(folder).returns(true)
67
+ Dir.expects(:[]).with("#{folder}/**/*").returns(subfolders)
68
+ end
69
+
70
+ FileUtils.expects(:rm_rf).never
71
+ FileUtils.expects(:rm_rf).with("sfoo").once
72
+ FileUtils.expects(:rm_rf).with("sbar").once
73
+
74
+ @instance.clean_machine_folder
75
+ end
76
+
77
+ should "do nothing if folder is < 10 characters" do
78
+ VirtualBox::Global.global.system_properties.stubs(:default_machine_folder).returns("foo")
79
+ Dir.expects(:[]).never
80
+
81
+ @instance.clean_machine_folder
82
+ end
83
+ end
84
+ end
@@ -0,0 +1,72 @@
1
+ require "test_helper"
2
+
3
+ class ClearForwardedPortsVMActionTest < Test::Unit::TestCase
4
+ setup do
5
+ @klass = Vagrant::Action::VM::ClearForwardedPorts
6
+ @app, @env = action_env
7
+
8
+ @vm = mock("vm")
9
+ @vm.stubs(:name).returns("foo")
10
+ @env["vm"] = @vm
11
+
12
+ @instance = @klass.new(@app, @env)
13
+ end
14
+
15
+ context "calling" do
16
+ should "call the proper methods and continue chain" do
17
+ seq = sequence('seq')
18
+ @instance.expects(:clear).in_sequence(seq)
19
+ @app.expects(:call).with(@env).in_sequence(seq)
20
+ @instance.call(@env)
21
+ end
22
+ end
23
+
24
+ context "clearing forwarded ports" do
25
+ setup do
26
+ @instance.stubs(:used_ports).returns([:a])
27
+ @instance.stubs(:clear_ports)
28
+ end
29
+
30
+ should "call destroy on all forwarded ports" do
31
+ @instance.expects(:clear_ports).once
32
+ @vm.expects(:reload!)
33
+ @instance.clear
34
+ end
35
+
36
+ should "do nothing if there are no forwarded ports" do
37
+ @instance.stubs(:used_ports).returns([])
38
+ @vm.expects(:reload!).never
39
+ @instance.clear
40
+ end
41
+ end
42
+
43
+ context "clearing ports" do
44
+ def mock_fp
45
+ fp = mock("fp")
46
+ fp.expects(:destroy).once
47
+ fp
48
+ end
49
+
50
+ setup do
51
+ VirtualBox.stubs(:version).returns("3.2.8")
52
+ @adapters = []
53
+ @internal_vm = mock("internal_vm")
54
+ @internal_vm.stubs(:network_adapters).returns(@adapters)
55
+ @vm.stubs(:vm).returns(@internal_vm)
56
+ end
57
+
58
+ def mock_adapter
59
+ na = mock("adapter")
60
+ engine = mock("engine")
61
+ engine.stubs(:forwarded_ports).returns([mock_fp])
62
+ na.stubs(:nat_driver).returns(engine)
63
+ na
64
+ end
65
+
66
+ should "destroy each forwarded port" do
67
+ @adapters << mock_adapter
68
+ @adapters << mock_adapter
69
+ @instance.clear_ports
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,22 @@
1
+ require "test_helper"
2
+
3
+ class ClearNFSExportsActionTest < Test::Unit::TestCase
4
+ setup do
5
+ @klass = Vagrant::Action::VM::ClearNFSExports
6
+ @app, @env = action_env
7
+ @env.env.stubs(:host).returns(Vagrant::Hosts::Base.new(@env))
8
+
9
+ @instance = @klass.new(@app, @env)
10
+ end
11
+
12
+ should "include the NFS helpers module" do
13
+ assert @klass.included_modules.include?(Vagrant::Action::VM::NFSHelpers)
14
+ end
15
+
16
+ should "clear NFS exports then continue chain" do
17
+ seq = sequence("seq")
18
+ @instance.expects(:clear_nfs_exports).with(@env).in_sequence(seq)
19
+ @app.expects(:call).with(@env).in_sequence(seq)
20
+ @instance.call(@env)
21
+ end
22
+ end
@@ -0,0 +1,49 @@
1
+ require "test_helper"
2
+
3
+ class ClearSharedFoldersVMActionTest < Test::Unit::TestCase
4
+ setup do
5
+ @klass = Vagrant::Action::VM::ClearSharedFolders
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 "call the proper methods in sequence" do
19
+ seq = sequence("seq")
20
+ @instance.expects(:clear_shared_folders).once.in_sequence(seq)
21
+ @app.expects(:call).with(@env).once
22
+ @instance.call(@env)
23
+ end
24
+ end
25
+
26
+ context "clearing shared folders" do
27
+ setup do
28
+ @shared_folder = mock("shared_folder")
29
+ @shared_folders = [@shared_folder]
30
+ @internal_vm.stubs(:shared_folders).returns(@shared_folders)
31
+ end
32
+
33
+ should "call destroy on each shared folder then reload" do
34
+ destroy_seq = sequence("destroy")
35
+ @shared_folders.each do |sf|
36
+ sf.expects(:destroy).once.in_sequence(destroy_seq)
37
+ end
38
+
39
+ @vm.expects(:reload!).once.in_sequence(destroy_seq)
40
+ @instance.clear_shared_folders
41
+ end
42
+
43
+ should "do nothing if no shared folders existed" do
44
+ @shared_folders.clear
45
+ @vm.expects(:reload!).never
46
+ @instance.clear_shared_folders
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,30 @@
1
+ require "test_helper"
2
+
3
+ class CustomizeVMActionTest < Test::Unit::TestCase
4
+ setup do
5
+ @klass = Vagrant::Action::VM::Customize
6
+ @app, @env = action_env
7
+ @instance = @klass.new(@app, @env)
8
+
9
+ @vm = mock("vm")
10
+ @env["vm"] = @vm
11
+
12
+ @internal_vm = mock("internal")
13
+ @vm.stubs(:vm).returns(@internal_vm)
14
+ end
15
+
16
+ should "not run anything if no customize blocks exist" do
17
+ @env.env.config.vm.proc_stack.clear
18
+ @internal_vm.expects(:save).never
19
+ @app.expects(:call).with(@env).once
20
+ @instance.call(@env)
21
+ end
22
+
23
+ should "run the VM customization procs then save the VM" do
24
+ @env.env.config.vm.customize { |vm| }
25
+ @env.env.config.vm.expects(:run_procs!).with(@internal_vm)
26
+ @internal_vm.expects(:save).once
27
+ @app.expects(:call).with(@env).once
28
+ @instance.call(@env)
29
+ end
30
+ end
@@ -0,0 +1,25 @@
1
+ require "test_helper"
2
+
3
+ class DestroyVMActionTest < Test::Unit::TestCase
4
+ setup do
5
+ @klass = Vagrant::Action::VM::Destroy
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 "destroying the VM" do
18
+ should "destroy VM and attached images" do
19
+ @internal_vm.expects(:destroy).once
20
+ @env["vm"].expects(:vm=).with(nil).once
21
+ @app.expects(:call).with(@env).once
22
+ @instance.call(@env)
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,49 @@
1
+ require "test_helper"
2
+
3
+ class DestroyUnusedNetworkInterfacesVMActionTest < Test::Unit::TestCase
4
+ setup do
5
+ @klass = Vagrant::Action::VM::DestroyUnusedNetworkInterfaces
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
+ setup do
19
+ @interfaces = []
20
+ global = mock("global")
21
+ host = mock("host")
22
+ VirtualBox::Global.stubs(:global).returns(global)
23
+ global.stubs(:host).returns(host)
24
+ host.stubs(:network_interfaces).returns(@interfaces)
25
+ end
26
+
27
+ def stub_interface(length=5, type=:host_only)
28
+ interface = mock("interface")
29
+ interface.stubs(:interface_type).returns(type)
30
+ interface.stubs(:attached_vms).returns(Array.new(length))
31
+
32
+ @interfaces << interface
33
+ interface
34
+ end
35
+
36
+ should "destroy only the unused network interfaces" do
37
+ stub_interface(5)
38
+ stub_interface(7)
39
+ results = [stub_interface(0), stub_interface(0)]
40
+
41
+ results.each do |result|
42
+ result.expects(:destroy).once
43
+ end
44
+
45
+ @app.expects(:call).with(@env).once
46
+ @instance.call(@env)
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,45 @@
1
+ require "test_helper"
2
+
3
+ class DiscardStateVMActionTest < Test::Unit::TestCase
4
+ setup do
5
+ @klass = Vagrant::Action::VM::DiscardState
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
+ setup do
19
+ @vm.stubs(:created?).returns(true)
20
+ @internal_vm.stubs(:saved?).returns(false)
21
+ end
22
+
23
+ should "do nothing if the VM is not created" do
24
+ @vm.stubs(:created?).returns(false)
25
+ @internal_vm.expects(:discard_state).never
26
+ @app.expects(:call).with(@env).once
27
+ @instance.call(@env)
28
+ end
29
+
30
+ should "do nothing if not saved and continue chain" do
31
+ @internal_vm.expects(:saved?).returns(false)
32
+ @internal_vm.expects(:discard_state).never
33
+ @app.expects(:call).with(@env).once
34
+ @instance.call(@env)
35
+ end
36
+
37
+ should "discard state and continue chain" do
38
+ seq = sequence("sequence")
39
+ @internal_vm.expects(:saved?).returns(true).in_sequence(seq)
40
+ @internal_vm.expects(:discard_state).in_sequence(seq)
41
+ @app.expects(:call).with(@env).once.in_sequence(seq)
42
+ @instance.call(@env)
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,107 @@
1
+ require "test_helper"
2
+
3
+ class ExportVMActionTest < Test::Unit::TestCase
4
+ setup do
5
+ @klass = Vagrant::Action::VM::Export
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
+ setup do
19
+ @internal_vm.stubs(:powered_off?).returns(true)
20
+ end
21
+
22
+ should "call the proper methods then continue chain" do
23
+ seq = sequence("seq")
24
+ @instance.expects(:setup_temp_dir).in_sequence(seq)
25
+ @instance.expects(:export).in_sequence(seq)
26
+ @app.expects(:call).with(@env).in_sequence(seq)
27
+ @instance.expects(:recover).in_sequence(seq).with(@env)
28
+
29
+ @instance.call(@env)
30
+ end
31
+
32
+ should "halt the chain if not powered off" do
33
+ @internal_vm.stubs(:powered_off?).returns(false)
34
+ @instance.expects(:setup_temp_dir).never
35
+ @instance.expects(:export).never
36
+ @app.expects(:call).with(@env).never
37
+ @instance.expects(:recover).never
38
+
39
+ assert_raises(Vagrant::Errors::VMPowerOffToPackage) {
40
+ @instance.call(@env)
41
+ }
42
+ end
43
+ end
44
+
45
+ context "cleaning up" do
46
+ setup do
47
+ @temp_dir = "foo"
48
+ @instance.stubs(:temp_dir).returns(@temp_dir)
49
+ File.stubs(:exist?).returns(true)
50
+ end
51
+
52
+ should "delete the temporary file if it exists" do
53
+ File.expects(:unlink).with(@temp_dir).once
54
+ @instance.recover(nil)
55
+ end
56
+
57
+ should "not delete anything if it doesn't exist" do
58
+ File.stubs(:exist?).returns(false)
59
+ File.expects(:unlink).never
60
+ @instance.recover(nil)
61
+ end
62
+ end
63
+
64
+ context "setting up the temporary directory" do
65
+ setup do
66
+ @time_now = Time.now.to_i.to_s
67
+ Time.stubs(:now).returns(@time_now)
68
+
69
+ @temp_dir = @env.env.tmp_path.join(@time_now)
70
+ FileUtils.stubs(:mkpath)
71
+ end
72
+
73
+ should "create the temporary directory using the current time" do
74
+ FileUtils.expects(:mkpath).with(@temp_dir).once
75
+ @instance.setup_temp_dir
76
+ end
77
+
78
+ should "set to the environment" do
79
+ @instance.setup_temp_dir
80
+ assert_equal @temp_dir, @env["export.temp_dir"]
81
+ assert_equal @temp_dir, @instance.temp_dir
82
+ end
83
+ end
84
+
85
+ context "exporting" do
86
+ setup do
87
+ @ovf_path = mock("ovf_path")
88
+ @instance.stubs(:ovf_path).returns(@ovf_path)
89
+ end
90
+
91
+ should "call export on the runner with the ovf path" do
92
+ @internal_vm.expects(:export).with(@ovf_path).once
93
+ @instance.export
94
+ end
95
+ end
96
+
97
+ context "path to OVF file" do
98
+ setup do
99
+ @temp_dir = "foo"
100
+ @env["export.temp_dir"] = @temp_dir
101
+ end
102
+
103
+ should "be the temporary directory joined with the OVF filename" do
104
+ assert_equal File.join(@temp_dir, @env.env.config.vm.box_ovf), @instance.ovf_path
105
+ end
106
+ end
107
+ end