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,24 @@
1
+ require "test_helper"
2
+
3
+ class SetEnvActionTest < Test::Unit::TestCase
4
+ setup do
5
+ @klass = Vagrant::Action::Env::Set
6
+ @app, @env = action_env
7
+ @env.clear
8
+ end
9
+
10
+ should "merge in the given options" do
11
+ @klass.new(@app, @env, :foo => :bar)
12
+ assert_equal :bar, @env[:foo]
13
+ end
14
+
15
+ should "not merge in anything if not given" do
16
+ @klass.new(@app, @env)
17
+ assert @env.empty?
18
+ end
19
+
20
+ should "just continue the chain" do
21
+ @app.expects(:call).with(@env)
22
+ @klass.new(@app, @env).call(@env)
23
+ end
24
+ end
@@ -0,0 +1,27 @@
1
+ require "test_helper"
2
+
3
+ class ActionEnvironmentTest < Test::Unit::TestCase
4
+ setup do
5
+ @klass = Vagrant::Action::Environment
6
+ @instance = @klass.new(vagrant_env)
7
+ end
8
+
9
+ should "be a hash with indifferent access" do
10
+ assert @instance.is_a?(Vagrant::Util::HashWithIndifferentAccess)
11
+ end
12
+
13
+ should "default values to those on the env" do
14
+ @instance.env.stubs(:key).returns("value")
15
+ assert_equal "value", @instance["key"]
16
+ end
17
+
18
+ should "setup the UI" do
19
+ assert_equal @instance.env.ui, @instance.ui
20
+ end
21
+
22
+ should "report interrupted if interrupt error" do
23
+ assert !@instance.interrupted?
24
+ @instance.interrupt!
25
+ assert @instance.interrupted?
26
+ end
27
+ end
@@ -0,0 +1,268 @@
1
+ require "test_helper"
2
+
3
+ class PackageGeneralActionTest < Test::Unit::TestCase
4
+ setup do
5
+ @klass = Vagrant::Action::General::Package
6
+ @app, @env = action_env
7
+
8
+ @vm = mock("vm")
9
+ @env["vm"] = @vm
10
+ end
11
+
12
+ context "initializing" do
13
+ setup do
14
+ @tar_path = "foo"
15
+ File.stubs(:exist?).returns(false)
16
+ @klass.any_instance.stubs(:tar_path).returns(@tar_path)
17
+ end
18
+
19
+ should "initialize fine" do
20
+ @klass.new(@app, @env)
21
+ end
22
+
23
+ should "set the output path to configured by default" do
24
+ @klass.new(@app, @env)
25
+ assert_equal @env["config"].package.name, @env["package.output"]
26
+ end
27
+
28
+ should "not set the output path if it is already set" do
29
+ @env["package.output"] = "foo"
30
+ @klass.new(@app, @env)
31
+ assert_equal "foo", @env["package.output"]
32
+ end
33
+
34
+ should "set the included files to empty by default" do
35
+ @klass.new(@app, @env)
36
+ assert_equal [], @env["package.include"]
37
+ end
38
+
39
+ should "not set the include path if it is already set" do
40
+ @env["package.include"] = "foo"
41
+ @klass.new(@app, @env)
42
+ assert_equal "foo", @env["package.include"]
43
+ end
44
+ end
45
+
46
+ context "with an instance" do
47
+ setup do
48
+ File.stubs(:exist?).returns(false)
49
+ File.stubs(:directory?).returns(true)
50
+ @instance = @klass.new(@app, @env)
51
+
52
+ @env["package.directory"] = "foo"
53
+ end
54
+
55
+ context "calling" do
56
+ should "call the proper methods then continue chain" do
57
+ seq = sequence("seq")
58
+ @instance.expects(:verify_files_to_copy).in_sequence(seq).returns(true)
59
+ @instance.expects(:compress).in_sequence(seq)
60
+ @app.expects(:call).with(@env).in_sequence(seq)
61
+ @instance.call(@env)
62
+ end
63
+
64
+ should "halt the chain if the output file already exists" do
65
+ File.expects(:exist?).returns(true)
66
+ @app.expects(:call).never
67
+ assert_raises(Vagrant::Errors::PackageOutputExists) {
68
+ @instance.call(@env)
69
+ }
70
+ end
71
+
72
+ should "halt the chain if directory isn't set" do
73
+ @env["package.directory"] = nil
74
+ @app.expects(:call).never
75
+ assert_raises(Vagrant::Errors::PackageRequiresDirectory) {
76
+ @instance.call(@env)
77
+ }
78
+ end
79
+
80
+ should "halt the chain if directory doesn't exist" do
81
+ File.expects(:directory?).with(@env["package.directory"]).returns(false)
82
+ @app.expects(:call).never
83
+ assert_raises(Vagrant::Errors::PackageRequiresDirectory) {
84
+ @instance.call(@env)
85
+ }
86
+ end
87
+ end
88
+
89
+ context "cleaning up" do
90
+ setup do
91
+ File.stubs(:exist?).returns(false)
92
+ File.stubs(:delete)
93
+
94
+ @instance.stubs(:tar_path).returns("foo")
95
+ end
96
+
97
+ should "do nothing if the file doesn't exist" do
98
+ File.expects(:exist?).with(@instance.tar_path).returns(false)
99
+ File.expects(:delete).never
100
+
101
+ @instance.recover(@env)
102
+ end
103
+
104
+ should "delete the packaged box if it exists" do
105
+ File.expects(:exist?).returns(true)
106
+ File.expects(:delete).with(@instance.tar_path).once
107
+
108
+ @instance.recover(@env)
109
+ end
110
+ end
111
+
112
+ context "files to copy" do
113
+ setup do
114
+ @env["package.include"] = []
115
+ @package_dir = Pathname.new(@env["package.directory"]).join("include")
116
+ end
117
+
118
+ should "have included files whole path if relative" do
119
+ path = "lib/foo"
120
+ @env["package.include"] = [path]
121
+ result = @instance.files_to_copy
122
+ assert_equal @package_dir.join(path), result[path]
123
+ end
124
+
125
+ should "have the filename if an absolute path" do
126
+ path = "/foo/bar"
127
+ @env["package.include"] = [path]
128
+ result = @instance.files_to_copy
129
+ assert_equal @package_dir.join("bar"), result[path]
130
+ end
131
+
132
+ should "include the Vagrantfile if specified" do
133
+ @env["package.vagrantfile"] = "foo"
134
+ result = @instance.files_to_copy
135
+ assert_equal @package_dir.join("_Vagrantfile"), result["foo"]
136
+ end
137
+ end
138
+
139
+ context "verifying files to copy" do
140
+ setup do
141
+ @env["package.include"] = ["foo"]
142
+ File.stubs(:exist?).returns(true)
143
+ end
144
+
145
+ should "error if included file is not found" do
146
+ File.expects(:exist?).with("foo").returns(false)
147
+ assert_raises(Vagrant::Errors::PackageIncludeMissing) {
148
+ @instance.verify_files_to_copy
149
+ }
150
+ end
151
+
152
+ should "return true if all exist" do
153
+ assert_nothing_raised {
154
+ assert @instance.verify_files_to_copy
155
+ }
156
+ end
157
+ end
158
+
159
+ context "copying include files" do
160
+ setup do
161
+ @env["package.include"] = []
162
+ end
163
+
164
+ should "do nothing if no include files are specified" do
165
+ assert @env["package.include"].empty?
166
+ FileUtils.expects(:mkdir_p).never
167
+ FileUtils.expects(:cp).never
168
+ @instance.copy_include_files
169
+ end
170
+
171
+ should "create the include directory and copy files to it" do
172
+ @env["package.include"] = ["/foo/bar", "lib/foo"]
173
+ seq = sequence("seq")
174
+ @instance.files_to_copy.each do |from, to|
175
+ FileUtils.expects(:mkdir_p).with(to.parent).in_sequence(seq)
176
+ File.expects(:directory?).with(from).returns(false).in_sequence(seq)
177
+ FileUtils.expects(:cp).with(from, to).in_sequence(seq)
178
+ end
179
+
180
+ @instance.copy_include_files
181
+ end
182
+
183
+ should "create the include directory and recursively copy globbed files to it" do
184
+ @env["package.include"] = ["foo*.txt"]
185
+ seq = sequence("seq")
186
+ @instance.files_to_copy.each do |from, to|
187
+ FileUtils.expects(:mkdir_p).with(to.parent).in_sequence(seq)
188
+ File.expects(:directory?).with(from).returns(true).in_sequence(seq)
189
+ Dir.expects(:glob).with(from).returns(from).in_sequence(seq)
190
+ FileUtils.expects(:cp_r).with(from, to.parent).in_sequence(seq)
191
+ end
192
+
193
+ @instance.copy_include_files
194
+ end
195
+ end
196
+
197
+ context "compression" do
198
+ setup do
199
+ @env["package.include"] = []
200
+
201
+ @tar_path = "foo"
202
+ @instance.stubs(:tar_path).returns(@tar_path)
203
+
204
+ @pwd = "bar"
205
+ FileUtils.stubs(:pwd).returns(@pwd)
206
+ FileUtils.stubs(:cd)
207
+
208
+ @file = mock("file")
209
+ File.stubs(:open).yields(@file)
210
+
211
+ @output = mock("output")
212
+ @tar = Archive::Tar::Minitar
213
+ Archive::Tar::Minitar::Output.stubs(:open).yields(@output)
214
+ @tar.stubs(:pack_file)
215
+
216
+ @instance.stubs(:copy_include_files)
217
+ end
218
+
219
+ should "open the tar file with the tar path properly" do
220
+ File.expects(:open).with(@tar_path, Vagrant::Util::Platform.tar_file_options).once
221
+ @instance.compress
222
+ end
223
+
224
+ should "open tar file" do
225
+ Archive::Tar::Minitar::Output.expects(:open).with(@file).once
226
+ @instance.compress
227
+ end
228
+
229
+ #----------------------------------------------------------------
230
+ # Methods below this comment test the block yielded by Minitar open
231
+ #----------------------------------------------------------------
232
+ should "cd to the directory and append the directory" do
233
+ @files = []
234
+ compress_seq = sequence("compress_seq")
235
+
236
+ FileUtils.expects(:pwd).once.returns(@pwd).in_sequence(compress_seq)
237
+ @instance.expects(:copy_include_files).once.in_sequence(compress_seq)
238
+ FileUtils.expects(:cd).with(@env["package.directory"]).in_sequence(compress_seq)
239
+ Dir.expects(:glob).returns(@files).in_sequence(compress_seq)
240
+
241
+ 5.times do |i|
242
+ file = mock("file#{i}")
243
+ @tar.expects(:pack_file).with(file, @output).once.in_sequence(compress_seq)
244
+ @files << file
245
+ end
246
+
247
+ FileUtils.expects(:cd).with(@pwd).in_sequence(compress_seq)
248
+ @instance.compress
249
+ end
250
+
251
+ should "pop back to the current directory even if an exception is raised" do
252
+ cd_seq = sequence("cd_seq")
253
+ FileUtils.expects(:cd).with(@env["package.directory"]).raises(Exception).in_sequence(cd_seq)
254
+ FileUtils.expects(:cd).with(@pwd).in_sequence(cd_seq)
255
+
256
+ assert_raises(Exception) {
257
+ @instance.compress
258
+ }
259
+ end
260
+ end
261
+
262
+ context "tar path" do
263
+ should "return proper path" do
264
+ assert_equal File.join(FileUtils.pwd, @env["package.output"]), @instance.tar_path
265
+ end
266
+ end
267
+ end
268
+ end
@@ -0,0 +1,31 @@
1
+ require "test_helper"
2
+
3
+ class ValidateGeneralActionTest < Test::Unit::TestCase
4
+ setup do
5
+ @klass = Vagrant::Action::General::Validate
6
+ @app, @env = action_env
7
+ end
8
+
9
+ should "initialize fine" do
10
+ @klass.new(@app, @env)
11
+ end
12
+
13
+ should "validate and call up" do
14
+ @instance = @klass.new(@app, @env)
15
+
16
+ seq = sequence("seq")
17
+ @env["config"].expects(:validate!).once.in_sequence(seq)
18
+ @app.expects(:call).with(@env).once.in_sequence(seq)
19
+ @instance.call(@env)
20
+ end
21
+
22
+ should "not validate if env says not to" do
23
+ @env["validate"] = false
24
+ @instance = @klass.new(@app, @env)
25
+
26
+ seq = sequence("seq")
27
+ @env["config"].expects(:validate!).never
28
+ @app.expects(:call).with(@env).once.in_sequence(seq)
29
+ @instance.call(@env)
30
+ end
31
+ end
@@ -0,0 +1,66 @@
1
+ require "test_helper"
2
+
3
+ class BootVMActionTest < Test::Unit::TestCase
4
+ setup do
5
+ @klass = Vagrant::Action::VM::Boot
6
+ @app, @env = action_env
7
+
8
+ @vm = mock("vm")
9
+ @vm.stubs(:ssh).returns(mock("ssh"))
10
+ @env["vm"] = @vm
11
+
12
+ @internal_vm = mock("internal")
13
+ @vm.stubs(:vm).returns(@internal_vm)
14
+
15
+ @instance = @klass.new(@app, @env)
16
+ end
17
+
18
+ context "calling" do
19
+ should "run the proper methods on success" do
20
+ boot_seq = sequence("boot_seq")
21
+ @instance.expects(:boot).in_sequence(boot_seq)
22
+ @instance.expects(:wait_for_boot).returns(true).in_sequence(boot_seq)
23
+ @app.expects(:call).with(@env).once.in_sequence(boot_seq)
24
+ @instance.call(@env)
25
+ end
26
+
27
+ should "error and halt chain if boot failed" do
28
+ boot_seq = sequence("boot_seq")
29
+ @instance.expects(:boot).in_sequence(boot_seq)
30
+ @instance.expects(:wait_for_boot).returns(false).in_sequence(boot_seq)
31
+ @app.expects(:call).never
32
+ assert_raises(Vagrant::Errors::VMFailedToBoot) {
33
+ @instance.call(@env)
34
+ }
35
+ end
36
+ end
37
+
38
+ context "booting" do
39
+ should "start the VM in specified mode" do
40
+ mode = mock("boot_mode")
41
+ @env.env.config.vm.boot_mode = mode
42
+ @internal_vm.expects(:start).with(mode).once
43
+ @instance.boot
44
+ end
45
+ end
46
+
47
+ context "waiting for boot" do
48
+ should "repeatedly ping the SSH port and return false with no response" do
49
+ seq = sequence('pings')
50
+ @vm.ssh.expects(:up?).times(@env.env.config.ssh.max_tries.to_i - 1).returns(false).in_sequence(seq)
51
+ @vm.ssh.expects(:up?).once.returns(true).in_sequence(seq)
52
+ assert @instance.wait_for_boot
53
+ end
54
+
55
+ should "return right away if interrupted" do
56
+ @env.interrupt!
57
+ @vm.ssh.expects(:up?).times(1).returns(false)
58
+ assert @instance.wait_for_boot
59
+ end
60
+
61
+ should "ping the max number of times then just return" do
62
+ @vm.ssh.expects(:up?).times(@env.env.config.ssh.max_tries.to_i).returns(false)
63
+ assert !@instance.wait_for_boot
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,56 @@
1
+ require 'test_helper'
2
+
3
+ class CheckBoxVMActionTest < Test::Unit::TestCase
4
+ setup do
5
+ @klass = Vagrant::Action::VM::CheckBox
6
+ end
7
+
8
+ context "calling" do
9
+ should "raise error if box not specified" do
10
+ app, env = action_env(vagrant_env(vagrantfile(<<-vf)))
11
+ config.vm.box = nil
12
+ vf
13
+
14
+ instance = @klass.new(app, env)
15
+ app.expects(:call).never
16
+
17
+ assert_raises(Vagrant::Errors::BoxNotSpecified) {
18
+ instance.call(env)
19
+ }
20
+ end
21
+
22
+ should "error if box does not exist and URL not specified" do
23
+ app, env = action_env(vagrant_env(vagrantfile(<<-vf)))
24
+ config.vm.box = "yo"
25
+ config.vm.box_url = nil
26
+ vf
27
+
28
+ instance = @klass.new(app, env)
29
+ app.expects(:call).never
30
+ env.env.boxes.expects(:find).with(env["config"].vm.box).returns(nil)
31
+
32
+ assert_raises(Vagrant::Errors::BoxSpecifiedDoesntExist) {
33
+ instance.call(env)
34
+ }
35
+ end
36
+
37
+ should "attempt to download box and continue if URL specified" do
38
+ app, env = action_env(vagrant_env(vagrantfile(<<-vf)))
39
+ config.vm.box = "yo"
40
+ config.vm.box_url = "http://google.com"
41
+ vf
42
+
43
+ instance = @klass.new(app, env)
44
+ seq = sequence("seq")
45
+ env.env.boxes.expects(:find).returns(nil)
46
+ Vagrant::Box.expects(:add).with(env.env, env["config"].vm.box, env["config"].vm.box_url).in_sequence(seq)
47
+ env.env.boxes.expects(:reload!).in_sequence(seq)
48
+ env.env.expects(:reload_config!).in_sequence(seq)
49
+ app.expects(:call).with(env).once.in_sequence(seq)
50
+
51
+ assert_nothing_raised {
52
+ instance.call(env)
53
+ }
54
+ end
55
+ end
56
+ end