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,77 @@
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
+ :accessible? => true,
31
+ :uuid => :foo
32
+ }.merge(options)
33
+
34
+ vm = mock("vm")
35
+ options.each do |k,v|
36
+ vm.stubs(k).returns(v)
37
+ end
38
+
39
+ vm
40
+ end
41
+
42
+ def mock_fp(hostport)
43
+ fp = mock("fp")
44
+ fp.stubs(:hostport).returns(hostport.to_s)
45
+ fp
46
+ end
47
+
48
+ should "ignore VMs which aren't running" do
49
+ @vms << mock_vm(:running? => false)
50
+ @vms[0].expects(:forwarded_ports).never
51
+ @instance.used_ports
52
+ end
53
+
54
+ should "ignore VMs which aren't accessible" do
55
+ @vms << mock_vm(:accessible? => false)
56
+ @vms[0].expects(:forwarded_ports).never
57
+ @instance.used_ports
58
+ end
59
+
60
+ should "ignore VMs of the same uuid" do
61
+ @vms << mock_vm(:uuid => @vm.uuid)
62
+ @vms[0].expects(:forwarded_ports).never
63
+ @instance.used_ports
64
+ end
65
+
66
+ should "return the forwarded ports for VB 3.2.x" do
67
+ VirtualBox.stubs(:version).returns("3.2.4")
68
+ fps = [mock_fp(2222), mock_fp(80)]
69
+ na = mock("na")
70
+ ne = mock("ne")
71
+ na.stubs(:nat_driver).returns(ne)
72
+ ne.stubs(:forwarded_ports).returns(fps)
73
+ @vms << mock_vm(:network_adapters => [na])
74
+ assert_equal [2222, 80], @instance.used_ports
75
+ end
76
+ end
77
+ end
@@ -0,0 +1,213 @@
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
+ @env["vm.modify"] = mock("proc")
12
+ ENV["USER"] = "not-root"
13
+ end
14
+
15
+ context "initializing" do
16
+ should "call proper methods" do
17
+ @klass.any_instance.expects(:threshold_check)
18
+ @klass.any_instance.expects(:external_collision_check)
19
+ @klass.new(@app, @env)
20
+ end
21
+ end
22
+
23
+ context "checking for threshold" do
24
+ setup do
25
+ @klass.any_instance.stubs(:external_collision_check)
26
+ @env.env.config.vm.forwarded_ports.clear
27
+ end
28
+
29
+ context "for non-root users" do
30
+
31
+ should "error if has a port below threshold" do
32
+ @env.env.config.vm.forward_port("foo", 22, 222)
33
+ assert_raises(Vagrant::Errors::ForwardPortBelowThreshold) { @klass.new(@app, @env) }
34
+ end
35
+
36
+ should "not error if ports are fine" do
37
+ @env.env.config.vm.forward_port("foo", 22, 2222)
38
+ assert_nothing_raised { @klass.new(@app, @env) }
39
+ end
40
+
41
+ end
42
+ context "for a root user" do
43
+ setup do
44
+ ENV["USER"] = "root"
45
+ end
46
+
47
+ should "not error for any port" do
48
+ @env.env.config.vm.forward_port("foo", 22, 222)
49
+ assert_nothing_raised { @klass.new(@app, @env) }
50
+
51
+ @env.env.config.vm.forward_port("foo", 22, 2222)
52
+ assert_nothing_raised { @klass.new(@app, @env) }
53
+ end
54
+
55
+ end
56
+
57
+ end
58
+
59
+ context "checking for colliding external ports" do
60
+ setup do
61
+ @env.env.config.vm.forwarded_ports.clear
62
+ @env.env.config.vm.forward_port("ssh", 22, 2222)
63
+
64
+ @used_ports = []
65
+ @klass.any_instance.stubs(:used_ports).returns(@used_ports)
66
+ @klass.any_instance.stubs(:handle_collision)
67
+ end
68
+
69
+ should "not raise any errors if no forwarded ports collide" do
70
+ @used_ports << 80
71
+ assert_nothing_raised { @klass.new(@app, @env) }
72
+ end
73
+
74
+ should "handle collision if it happens" do
75
+ @used_ports << 2222
76
+ @klass.any_instance.expects(:handle_collision).with("ssh", anything, anything).once
77
+ assert_nothing_raised { @klass.new(@app, @env) }
78
+ end
79
+ end
80
+
81
+ context "with instance" do
82
+ setup do
83
+ @klass.any_instance.stubs(:threshold_check)
84
+ @klass.any_instance.stubs(:external_collision_check)
85
+ @instance = @klass.new(@app, @env)
86
+ end
87
+
88
+ context "handling collisions" do
89
+ setup do
90
+ @name = :foo
91
+ @options = {
92
+ :hostport => 0,
93
+ :auto => true
94
+ }
95
+ @used_ports = [1,2,3]
96
+
97
+ @env.env.config.vm.auto_port_range = (1..5)
98
+ end
99
+
100
+ should "error if auto forwarding is disabled" do
101
+ @options[:auto] = false
102
+
103
+ assert_raises(Vagrant::Errors::ForwardPortCollision) {
104
+ @instance.handle_collision(@name, @options, @used_ports)
105
+ }
106
+ end
107
+
108
+ should "set the host port to the first available port" do
109
+ assert_equal 0, @options[:hostport]
110
+ @instance.handle_collision(@name, @options, @used_ports)
111
+ assert_equal 4, @options[:hostport]
112
+ end
113
+
114
+ should "add the newly used port to the list of used ports" do
115
+ assert !@used_ports.include?(4)
116
+ @instance.handle_collision(@name, @options, @used_ports)
117
+ assert @used_ports.include?(4)
118
+ end
119
+
120
+ should "not use a host port which is being forwarded later" do
121
+ @env.env.config.vm.forward_port("http", 80, 4)
122
+
123
+ assert_equal 0, @options[:hostport]
124
+ @instance.handle_collision(@name, @options, @used_ports)
125
+ assert_equal 5, @options[:hostport]
126
+ end
127
+
128
+ should "raise an exception if there are no auto ports available" do
129
+ @env.env.config.vm.auto_port_range = (1..3)
130
+
131
+ assert_raises(Vagrant::Errors::ForwardPortAutolistEmpty) {
132
+ @instance.handle_collision(@name, @options, @used_ports)
133
+ }
134
+ end
135
+ end
136
+
137
+ context "calling" do
138
+ should "clear all previous ports and forward new ports" do
139
+ exec_seq = sequence("exec_seq")
140
+
141
+ @env["vm.modify"].expects(:call).with() do |proc|
142
+ proc.call(@internal_vm)
143
+ true
144
+ end
145
+
146
+ @instance.expects(:forward_ports).once.in_sequence(exec_seq)
147
+ @app.expects(:call).once.with(@env).in_sequence(exec_seq)
148
+ @instance.call(@env)
149
+ end
150
+ end
151
+
152
+ context "forwarding ports" do
153
+ setup do
154
+ @internal_vm = mock("internal_vm")
155
+ @vm.stubs(:vm).returns(@internal_vm)
156
+ end
157
+
158
+ should "create a port forwarding for the VM" do
159
+ forwarded_ports = mock("forwarded_ports")
160
+ network_adapter = mock("network_adapter")
161
+
162
+ @internal_vm.stubs(:network_adapters).returns([network_adapter])
163
+ network_adapter.expects(:attachment_type).returns(:nat)
164
+
165
+ @instance.expects(:forward_port).once
166
+
167
+ @instance.forward_ports(@internal_vm)
168
+ end
169
+
170
+ should "not port forward for non NAT interfaces" do
171
+ forwarded_ports = mock("forwarded_ports")
172
+ network_adapter = mock("network_adapter")
173
+
174
+ @internal_vm.expects(:network_adapters).returns([network_adapter])
175
+ network_adapter.expects(:attachment_type).returns(:host_only)
176
+
177
+ @instance.forward_ports(@internal_vm)
178
+ end
179
+ end
180
+
181
+ context "forwarding ports implementation" do
182
+ setup do
183
+ VirtualBox.stubs(:version).returns("3.2.8")
184
+
185
+ @internal_vm = mock("internal_vm")
186
+ @vm.stubs(:vm).returns(@internal_vm)
187
+ end
188
+
189
+ should "forward ports" do
190
+ name = @env.env.config.vm.forwarded_ports.keys.first
191
+ opts = @env.env.config.vm.forwarded_ports[name]
192
+
193
+ adapters = []
194
+ adapter = mock("adapter")
195
+ engine = mock("engine")
196
+ fps = mock("forwarded ports")
197
+ adapter.stubs(:nat_driver).returns(engine)
198
+ engine.stubs(:forwarded_ports).returns(fps)
199
+ fps.expects(:<<).with do |port|
200
+ assert_equal name, port.name
201
+ assert_equal opts[:hostport], port.hostport
202
+ assert_equal opts[:guestport], port.guestport
203
+ true
204
+ end
205
+
206
+ adapters[opts[:adapter]] = adapter
207
+ @internal_vm.stubs(:network_adapters).returns(adapters)
208
+
209
+ @instance.forward_port(@internal_vm, name, opts)
210
+ end
211
+ end
212
+ end
213
+ 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