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,70 @@
1
+ require "test_helper"
2
+
3
+ class ForwardPortsHelpersVMActionTest < Test::Unit::TestCase
4
+ setup do
5
+ @klass = Class.new do
6
+ include Vagrant::Action::VM::ForwardPortsHelpers
7
+ def initialize(env); @env = env; end
8
+ end
9
+
10
+ @app, @env = action_env
11
+
12
+ @vm = mock("vm")
13
+ @vm.stubs(:name).returns("foo")
14
+ @env["vm"] = @vm
15
+
16
+ @instance = @klass.new(@env)
17
+ end
18
+
19
+ context "getting list of used ports" do
20
+ setup do
21
+ @vms = []
22
+ VirtualBox::VM.stubs(:all).returns(@vms)
23
+ VirtualBox.stubs(:version).returns("3.1.0")
24
+ @vm.stubs(:uuid).returns(:bar)
25
+ end
26
+
27
+ def mock_vm(options={})
28
+ options = {
29
+ :running? => true,
30
+ :uuid => :foo
31
+ }.merge(options)
32
+
33
+ vm = mock("vm")
34
+ options.each do |k,v|
35
+ vm.stubs(k).returns(v)
36
+ end
37
+
38
+ vm
39
+ end
40
+
41
+ def mock_fp(hostport)
42
+ fp = mock("fp")
43
+ fp.stubs(:hostport).returns(hostport.to_s)
44
+ fp
45
+ end
46
+
47
+ should "ignore VMs which aren't running" do
48
+ @vms << mock_vm(:running? => false)
49
+ @vms[0].expects(:forwarded_ports).never
50
+ @instance.used_ports
51
+ end
52
+
53
+ should "ignore VMs of the same uuid" do
54
+ @vms << mock_vm(:uuid => @vm.uuid)
55
+ @vms[0].expects(:forwarded_ports).never
56
+ @instance.used_ports
57
+ end
58
+
59
+ should "return the forwarded ports for VB 3.2.x" do
60
+ VirtualBox.stubs(:version).returns("3.2.4")
61
+ fps = [mock_fp(2222), mock_fp(80)]
62
+ na = mock("na")
63
+ ne = mock("ne")
64
+ na.stubs(:nat_driver).returns(ne)
65
+ ne.stubs(:forwarded_ports).returns(fps)
66
+ @vms << mock_vm(:network_adapters => [na])
67
+ assert_equal [2222, 80], @instance.used_ports
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,194 @@
1
+ require "test_helper"
2
+
3
+ class ForwardPortsVMActionTest < Test::Unit::TestCase
4
+ setup do
5
+ @klass = Vagrant::Action::VM::ForwardPorts
6
+ @app, @env = action_env
7
+
8
+ @vm = mock("vm")
9
+ @vm.stubs(:name).returns("foo")
10
+ @env["vm"] = @vm
11
+ end
12
+
13
+ context "initializing" do
14
+ should "call proper methods" do
15
+ @klass.any_instance.expects(:threshold_check)
16
+ @klass.any_instance.expects(:external_collision_check)
17
+ @klass.new(@app, @env)
18
+ end
19
+ end
20
+
21
+ context "checking for threshold" do
22
+ setup do
23
+ @klass.any_instance.stubs(:external_collision_check)
24
+ end
25
+
26
+ should "error if has a port below threshold" do
27
+ @env.env.config.vm.forwarded_ports.clear
28
+ @env.env.config.vm.forward_port("foo", 22, 222)
29
+
30
+ assert_raises(Vagrant::Errors::ForwardPortBelowThreshold) {
31
+ @klass.new(@app, @env)
32
+ }
33
+ end
34
+
35
+ should "not error if ports are fine" do
36
+ @env.env.config.vm.forwarded_ports.clear
37
+ @env.env.config.vm.forward_port("foo", 22, 2222)
38
+
39
+ assert_nothing_raised {
40
+ @klass.new(@app, @env)
41
+ }
42
+ end
43
+ end
44
+
45
+ context "checking for colliding external ports" do
46
+ setup do
47
+ @env.env.config.vm.forwarded_ports.clear
48
+ @env.env.config.vm.forward_port("ssh", 22, 2222)
49
+
50
+ @used_ports = []
51
+ @klass.any_instance.stubs(:used_ports).returns(@used_ports)
52
+ @klass.any_instance.stubs(:handle_collision)
53
+ end
54
+
55
+ should "not raise any errors if no forwarded ports collide" do
56
+ @used_ports << 80
57
+ assert_nothing_raised { @klass.new(@app, @env) }
58
+ end
59
+
60
+ should "handle collision if it happens" do
61
+ @used_ports << 2222
62
+ @klass.any_instance.expects(:handle_collision).with("ssh", anything, anything).once
63
+ assert_nothing_raised { @klass.new(@app, @env) }
64
+ end
65
+ end
66
+
67
+ context "with instance" do
68
+ setup do
69
+ @klass.any_instance.stubs(:threshold_check)
70
+ @klass.any_instance.stubs(:external_collision_check)
71
+ @instance = @klass.new(@app, @env)
72
+ end
73
+
74
+ context "handling collisions" do
75
+ setup do
76
+ @name = :foo
77
+ @options = {
78
+ :hostport => 0,
79
+ :auto => true
80
+ }
81
+ @used_ports = [1,2,3]
82
+
83
+ @env.env.config.vm.auto_port_range = (1..5)
84
+ end
85
+
86
+ should "error if auto forwarding is disabled" do
87
+ @options[:auto] = false
88
+
89
+ assert_raises(Vagrant::Errors::ForwardPortCollision) {
90
+ @instance.handle_collision(@name, @options, @used_ports)
91
+ }
92
+ end
93
+
94
+ should "set the host port to the first available port" do
95
+ assert_equal 0, @options[:hostport]
96
+ @instance.handle_collision(@name, @options, @used_ports)
97
+ assert_equal 4, @options[:hostport]
98
+ end
99
+
100
+ should "add the newly used port to the list of used ports" do
101
+ assert !@used_ports.include?(4)
102
+ @instance.handle_collision(@name, @options, @used_ports)
103
+ assert @used_ports.include?(4)
104
+ end
105
+
106
+ should "not use a host port which is being forwarded later" do
107
+ @env.env.config.vm.forward_port("http", 80, 4)
108
+
109
+ assert_equal 0, @options[:hostport]
110
+ @instance.handle_collision(@name, @options, @used_ports)
111
+ assert_equal 5, @options[:hostport]
112
+ end
113
+
114
+ should "raise an exception if there are no auto ports available" do
115
+ @env.env.config.vm.auto_port_range = (1..3)
116
+
117
+ assert_raises(Vagrant::Errors::ForwardPortAutolistEmpty) {
118
+ @instance.handle_collision(@name, @options, @used_ports)
119
+ }
120
+ end
121
+ end
122
+
123
+ context "calling" do
124
+ should "clear all previous ports and forward new ports" do
125
+ exec_seq = sequence("exec_seq")
126
+ @instance.expects(:forward_ports).once.in_sequence(exec_seq)
127
+ @app.expects(:call).once.with(@env).in_sequence(exec_seq)
128
+ @instance.call(@env)
129
+ end
130
+ end
131
+
132
+ context "forwarding ports" do
133
+ setup do
134
+ @internal_vm = mock("internal_vm")
135
+ @vm.stubs(:vm).returns(@internal_vm)
136
+ end
137
+
138
+ should "create a port forwarding for the VM" do
139
+ forwarded_ports = mock("forwarded_ports")
140
+ network_adapter = mock("network_adapter")
141
+
142
+ @internal_vm.stubs(:network_adapters).returns([network_adapter])
143
+ network_adapter.expects(:attachment_type).returns(:nat)
144
+
145
+ @instance.expects(:forward_port).once
146
+ @internal_vm.expects(:save).once
147
+ @vm.expects(:reload!).once
148
+ @instance.forward_ports
149
+ end
150
+
151
+ should "not port forward for non NAT interfaces" do
152
+ forwarded_ports = mock("forwarded_ports")
153
+ network_adapter = mock("network_adapter")
154
+
155
+ @internal_vm.expects(:network_adapters).returns([network_adapter])
156
+ network_adapter.expects(:attachment_type).returns(:host_only)
157
+ @internal_vm.expects(:save).once
158
+ @vm.expects(:reload!).once
159
+ @instance.forward_ports
160
+ end
161
+ end
162
+
163
+ context "forwarding ports implementation" do
164
+ setup do
165
+ VirtualBox.stubs(:version).returns("3.2.8")
166
+
167
+ @internal_vm = mock("internal_vm")
168
+ @vm.stubs(:vm).returns(@internal_vm)
169
+ end
170
+
171
+ should "forward ports" do
172
+ name, opts = @env.env.config.vm.forwarded_ports.first
173
+
174
+ adapters = []
175
+ adapter = mock("adapter")
176
+ engine = mock("engine")
177
+ fps = mock("forwarded ports")
178
+ adapter.stubs(:nat_driver).returns(engine)
179
+ engine.stubs(:forwarded_ports).returns(fps)
180
+ fps.expects(:<<).with do |port|
181
+ assert_equal name, port.name
182
+ assert_equal opts[:hostport], port.hostport
183
+ assert_equal opts[:guestport], port.guestport
184
+ true
185
+ end
186
+
187
+ adapters[opts[:adapter]] = adapter
188
+ @internal_vm.stubs(:network_adapters).returns(adapters)
189
+
190
+ @instance.forward_port(name, opts)
191
+ end
192
+ end
193
+ end
194
+ end
@@ -0,0 +1,79 @@
1
+ require "test_helper"
2
+
3
+ class HaltVMActionTest < Test::Unit::TestCase
4
+ setup do
5
+ @klass = Vagrant::Action::VM::Halt
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
+ @instance = @klass.new(@app, @env)
18
+ end
19
+
20
+ context "initializing" do
21
+ should "merge in the given options" do
22
+ @klass.new(@app, @env, :foo => :bar)
23
+ assert_equal :bar, @env[:foo]
24
+ end
25
+ end
26
+
27
+ context "calling" do
28
+ setup do
29
+ @vm.stubs(:created?).returns(true)
30
+ @internal_vm.stubs(:running?).returns(true)
31
+
32
+ @vm.system.stubs(:halt)
33
+ @internal_vm.stubs(:stop)
34
+ @internal_vm.stubs(:state).returns(:powered_off)
35
+ end
36
+
37
+ should "do nothing if VM is not created" do
38
+ @internal_vm.stubs(:created?).returns(false)
39
+ @vm.system.expects(:halt).never
40
+ @internal_vm.expects(:stop).never
41
+ @app.expects(:call).once
42
+
43
+ @instance.call(@env)
44
+ end
45
+
46
+ should "do nothing if VM not running" do
47
+ @internal_vm.stubs(:running?).returns(false)
48
+ @vm.system.expects(:halt).never
49
+ @internal_vm.expects(:stop).never
50
+ @app.expects(:call).once
51
+
52
+ @instance.call(@env)
53
+ end
54
+
55
+ should "halt with the system and NOT force VM to stop if powered off" do
56
+ @internal_vm.expects(:state).with(true).returns(:powered_off)
57
+ @vm.system.expects(:halt).once
58
+ @internal_vm.expects(:stop).never
59
+ @app.expects(:call).once
60
+
61
+ @instance.call(@env)
62
+ end
63
+
64
+ should "halt with the system and force VM to stop if NOT powered off" do
65
+ @internal_vm.expects(:state).with(true).returns(:running)
66
+ @vm.system.expects(:halt).once
67
+ @internal_vm.expects(:stop).once
68
+ @app.expects(:call).once
69
+
70
+ @instance.call(@env)
71
+ end
72
+
73
+ should "not call halt on the system if forcing" do
74
+ @env[:force] = true
75
+ @vm.system.expects(:halt).never
76
+ @instance.call(@env)
77
+ end
78
+ end
79
+ end
@@ -0,0 +1,36 @@
1
+ require "test_helper"
2
+
3
+ class HostNameVMActionTest < Test::Unit::TestCase
4
+ setup do
5
+ @klass = Vagrant::Action::VM::HostName
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 host name is set" do
17
+ @env["config"].vm.host_name = nil
18
+ @env["vm"].expects(:system).never
19
+ @app.expects(:call).with(@env).once
20
+
21
+ @instance.call(@env)
22
+ end
23
+
24
+ should "change host name if set" do
25
+ @env["config"].vm.host_name = "foo"
26
+
27
+ system = mock("system")
28
+ @vm.stubs(:system).returns(system)
29
+
30
+ seq = sequence("host_seq")
31
+ @app.expects(:call).with(@env).in_sequence(seq)
32
+ system.expects(:change_host_name).with(@env["config"].vm.host_name).in_sequence(seq)
33
+
34
+ @instance.call(@env)
35
+ end
36
+ end
@@ -0,0 +1,66 @@
1
+ require "test_helper"
2
+
3
+ class ImportVMActionTest < Test::Unit::TestCase
4
+ setup do
5
+ clean_paths
6
+ vagrant_box("foo")
7
+
8
+ @klass = Vagrant::Action::VM::Import
9
+ @app, @env = action_env(vagrant_env(vagrantfile(<<-vf)))
10
+ config.vm.box = "foo"
11
+ vf
12
+
13
+ @instance = @klass.new(@app, @env)
14
+
15
+ @env.env.vm = Vagrant::VM.new(:env => @env.env, :name => "foobar")
16
+
17
+ VirtualBox::VM.stubs(:import)
18
+
19
+ @vm = mock("vm")
20
+ @vm.stubs(:uuid).returns("foobar")
21
+ end
22
+
23
+ should "call import on VirtualBox with proper base" do
24
+ VirtualBox::VM.expects(:import).once.with(@env.env.box.ovf_file.to_s).returns(@vm)
25
+ @instance.call(@env)
26
+ end
27
+
28
+ should "call next in chain on success and set VM" do
29
+ VirtualBox::VM.stubs(:import).returns(@vm)
30
+ @app.expects(:call).with(@env).once
31
+ @instance.call(@env)
32
+
33
+ assert_equal @vm, @env["vm"].vm
34
+ end
35
+
36
+ should "mark environment erroneous and not continue chain on failure" do
37
+ @app.expects(:call).never
38
+ assert_raises(Vagrant::Errors::VMImportFailure) {
39
+ @instance.call(@env)
40
+ }
41
+ end
42
+
43
+ context "recovery" do
44
+ setup do
45
+ @env.env.vm.stubs(:created?).returns(true)
46
+ end
47
+
48
+ should "not run the destroy action on recover if error is a VagrantError" do
49
+ @env["vagrant.error"] = Vagrant::Errors::VMImportFailure.new
50
+ @env.env.actions.expects(:run).never
51
+ @instance.recover(@env)
52
+ end
53
+
54
+ should "not run the destroy action on recover if VM is not created" do
55
+ @env.env.vm.stubs(:created?).returns(false)
56
+ @env.env.actions.expects(:run).never
57
+ @instance.recover(@env)
58
+ end
59
+
60
+ should "run the destroy action on recover" do
61
+ @env.env.vm.stubs(:created?).returns(true)
62
+ @env.env.actions.expects(:run).with(:destroy).once
63
+ @instance.recover(@env)
64
+ end
65
+ end
66
+ end