vagrantup 0.5.2 → 0.5.3
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.
- checksums.yaml +4 -4
- data/.gitignore +10 -0
- data/CHANGELOG.md +48 -0
- data/Gemfile +16 -0
- data/Gemfile.lock +49 -0
- data/README.md +2 -2
- data/Rakefile +22 -0
- data/bin/.gitignore +0 -0
- data/lib/vagrant/provisioners/chef_solo.rb +1 -1
- data/lib/vagrant/util/template_renderer.rb +2 -2
- data/lib/vagrant/version.rb +1 -1
- data/templates/Vagrantfile.erb +1 -1
- data/templates/nfs/exports.erb +4 -2
- data/test/test_helper.rb +128 -0
- data/test/vagrant/action/box/destroy_test.rb +30 -0
- data/test/vagrant/action/box/download_test.rb +141 -0
- data/test/vagrant/action/box/package_test.rb +25 -0
- data/test/vagrant/action/box/unpackage_test.rb +103 -0
- data/test/vagrant/action/box/verify_test.rb +39 -0
- data/test/vagrant/action/builder_test.rb +218 -0
- data/test/vagrant/action/env/error_halt_test.rb +21 -0
- data/test/vagrant/action/env/set_test.rb +24 -0
- data/test/vagrant/action/environment_test.rb +45 -0
- data/test/vagrant/action/exception_catcher_test.rb +30 -0
- data/test/vagrant/action/general/package_test.rb +254 -0
- data/test/vagrant/action/vm/boot_test.rb +83 -0
- data/test/vagrant/action/vm/check_box_test.rb +48 -0
- data/test/vagrant/action/vm/check_guest_additions_test.rb +9 -0
- data/test/vagrant/action/vm/clean_machine_folder_test.rb +82 -0
- data/test/vagrant/action/vm/clear_forwarded_ports_test.rb +72 -0
- data/test/vagrant/action/vm/clear_nfs_exports_test.rb +22 -0
- data/test/vagrant/action/vm/clear_shared_folders_test.rb +49 -0
- data/test/vagrant/action/vm/customize_test.rb +29 -0
- data/test/vagrant/action/vm/destroy_test.rb +26 -0
- data/test/vagrant/action/vm/destroy_unused_network_interfaces_test.rb +46 -0
- data/test/vagrant/action/vm/disable_networks_test.rb +39 -0
- data/test/vagrant/action/vm/discard_state_test.rb +36 -0
- data/test/vagrant/action/vm/export_test.rb +135 -0
- data/test/vagrant/action/vm/forward_ports_helpers_test.rb +70 -0
- data/test/vagrant/action/vm/forward_ports_test.rb +191 -0
- data/test/vagrant/action/vm/halt_test.rb +69 -0
- data/test/vagrant/action/vm/import_test.rb +50 -0
- data/test/vagrant/action/vm/match_mac_address_test.rb +28 -0
- data/test/vagrant/action/vm/network_test.rb +246 -0
- data/test/vagrant/action/vm/nfs_helpers_test.rb +23 -0
- data/test/vagrant/action/vm/nfs_test.rb +269 -0
- data/test/vagrant/action/vm/package_test.rb +25 -0
- data/test/vagrant/action/vm/package_vagrantfile_test.rb +46 -0
- data/test/vagrant/action/vm/persist_test.rb +50 -0
- data/test/vagrant/action/vm/provision_test.rb +134 -0
- data/test/vagrant/action/vm/resume_test.rb +35 -0
- data/test/vagrant/action/vm/share_folders_test.rb +215 -0
- data/test/vagrant/action/vm/suspend_test.rb +35 -0
- data/test/vagrant/action_test.rb +111 -0
- data/test/vagrant/active_list_test.rb +173 -0
- data/test/vagrant/box_test.rb +166 -0
- data/test/vagrant/command_test.rb +53 -0
- data/test/vagrant/commands/base_test.rb +139 -0
- data/test/vagrant/commands/box/add_test.rb +34 -0
- data/test/vagrant/commands/box/list_test.rb +32 -0
- data/test/vagrant/commands/box/remove_test.rb +41 -0
- data/test/vagrant/commands/box/repackage_test.rb +52 -0
- data/test/vagrant/commands/destroy_test.rb +44 -0
- data/test/vagrant/commands/halt_test.rb +50 -0
- data/test/vagrant/commands/init_test.rb +71 -0
- data/test/vagrant/commands/package_test.rb +97 -0
- data/test/vagrant/commands/provision_test.rb +60 -0
- data/test/vagrant/commands/reload_test.rb +47 -0
- data/test/vagrant/commands/resume_test.rb +44 -0
- data/test/vagrant/commands/ssh_config_test.rb +77 -0
- data/test/vagrant/commands/ssh_test.rb +129 -0
- data/test/vagrant/commands/status_test.rb +40 -0
- data/test/vagrant/commands/suspend_test.rb +44 -0
- data/test/vagrant/commands/up_test.rb +49 -0
- data/test/vagrant/config_test.rb +307 -0
- data/test/vagrant/downloaders/base_test.rb +28 -0
- data/test/vagrant/downloaders/file_test.rb +33 -0
- data/test/vagrant/downloaders/http_test.rb +70 -0
- data/test/vagrant/environment_test.rb +770 -0
- data/test/vagrant/hosts/base_test.rb +46 -0
- data/test/vagrant/hosts/bsd_test.rb +56 -0
- data/test/vagrant/hosts/linux_test.rb +56 -0
- data/test/vagrant/provisioners/base_test.rb +36 -0
- data/test/vagrant/provisioners/chef_server_test.rb +182 -0
- data/test/vagrant/provisioners/chef_solo_test.rb +197 -0
- data/test/vagrant/provisioners/chef_test.rb +178 -0
- data/test/vagrant/ssh_session_test.rb +46 -0
- data/test/vagrant/ssh_test.rb +317 -0
- data/test/vagrant/systems/linux_test.rb +179 -0
- data/test/vagrant/util/busy_test.rb +106 -0
- data/test/vagrant/util/plain_logger_test.rb +17 -0
- data/test/vagrant/util/platform_test.rb +18 -0
- data/test/vagrant/util/resource_logger_test.rb +145 -0
- data/test/vagrant/util/stacked_proc_runner_test.rb +43 -0
- data/test/vagrant/util/template_renderer_test.rb +145 -0
- data/test/vagrant/util/translator_test.rb +61 -0
- data/test/vagrant/util_test.rb +27 -0
- data/test/vagrant/vm_test.rb +228 -0
- data/vagrant.gemspec +34 -0
- metadata +130 -9
|
@@ -0,0 +1,307 @@
|
|
|
1
|
+
require "test_helper"
|
|
2
|
+
|
|
3
|
+
class ConfigTest < Test::Unit::TestCase
|
|
4
|
+
context "the ssh config" do
|
|
5
|
+
setup do
|
|
6
|
+
@env = mock_environment
|
|
7
|
+
@env.stubs(:root_path).returns("foo")
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
should "expand any path when requesting the value" do
|
|
11
|
+
result = File.expand_path(@env.config.ssh[:private_key_path], @env.root_path)
|
|
12
|
+
assert_equal result, @env.config.ssh.private_key_path
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
context "adding configures" do
|
|
17
|
+
should "forward the method to the Top class" do
|
|
18
|
+
key = mock("key")
|
|
19
|
+
klass = mock("klass")
|
|
20
|
+
Vagrant::Config::Top.expects(:configures).with(key, klass)
|
|
21
|
+
Vagrant::Config.configures(key, klass)
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
context "resetting" do
|
|
26
|
+
setup do
|
|
27
|
+
Vagrant::Config.run { |config| }
|
|
28
|
+
Vagrant::Config.execute!
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
should "return the same config object typically" do
|
|
32
|
+
config = Vagrant::Config.config
|
|
33
|
+
assert config.equal?(Vagrant::Config.config)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
should "create a new object if cleared" do
|
|
37
|
+
config = Vagrant::Config.config
|
|
38
|
+
Vagrant::Config.reset!
|
|
39
|
+
assert !config.equal?(Vagrant::Config.config)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
should "empty the proc stack" do
|
|
43
|
+
assert !Vagrant::Config.proc_stack.empty?
|
|
44
|
+
Vagrant::Config.reset!
|
|
45
|
+
assert Vagrant::Config.proc_stack.empty?
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
should "reload the config object based on the given environment" do
|
|
49
|
+
env = mock("env")
|
|
50
|
+
Vagrant::Config.expects(:config).with(env).once
|
|
51
|
+
Vagrant::Config.reset!(env)
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
context "initializing" do
|
|
56
|
+
setup do
|
|
57
|
+
Vagrant::Config.reset!
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
should "add the given block to the proc stack" do
|
|
61
|
+
proc = Proc.new {}
|
|
62
|
+
Vagrant::Config.run(&proc)
|
|
63
|
+
assert_equal [proc], Vagrant::Config.proc_stack
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
should "run the proc stack with the config when execute is called" do
|
|
67
|
+
Vagrant::Config.expects(:run_procs!).with(Vagrant::Config.config).once
|
|
68
|
+
Vagrant::Config.execute!
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
should "not be loaded, initially" do
|
|
72
|
+
assert !Vagrant::Config.config.loaded?
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
should "be loaded after running" do
|
|
76
|
+
Vagrant::Config.run {}
|
|
77
|
+
Vagrant::Config.execute!
|
|
78
|
+
assert Vagrant::Config.config.loaded?
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
should "return the configuration on execute!" do
|
|
82
|
+
Vagrant::Config.run {}
|
|
83
|
+
result = Vagrant::Config.execute!
|
|
84
|
+
assert result.is_a?(Vagrant::Config::Top)
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
should "use given configuration object if given" do
|
|
88
|
+
fake_env = mock("env")
|
|
89
|
+
config = Vagrant::Config::Top.new(fake_env)
|
|
90
|
+
result = Vagrant::Config.execute!(config)
|
|
91
|
+
assert_equal config.env, result.env
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
context "base class" do
|
|
96
|
+
setup do
|
|
97
|
+
@base = Vagrant::Config::Base.new
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
should "forward [] access to methods" do
|
|
101
|
+
@base.expects(:foo).once
|
|
102
|
+
@base[:foo]
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
should "return a hash of instance variables" do
|
|
106
|
+
data = { :foo => "bar", :bar => "baz" }
|
|
107
|
+
|
|
108
|
+
data.each do |iv, value|
|
|
109
|
+
@base.instance_variable_set("@#{iv}".to_sym, value)
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
result = @base.instance_variables_hash
|
|
113
|
+
assert_equal data.length, result.length
|
|
114
|
+
|
|
115
|
+
data.each do |iv, value|
|
|
116
|
+
assert_equal value, result[iv]
|
|
117
|
+
end
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
context "converting to JSON" do
|
|
121
|
+
should "convert instance variable hash to json" do
|
|
122
|
+
@json = mock("json")
|
|
123
|
+
@iv_hash = mock("iv_hash")
|
|
124
|
+
@iv_hash.expects(:to_json).once.returns(@json)
|
|
125
|
+
@base.expects(:instance_variables_hash).returns(@iv_hash)
|
|
126
|
+
assert_equal @json, @base.to_json
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
should "not include env in the JSON hash" do
|
|
130
|
+
@base.env = "FOO"
|
|
131
|
+
hash = @base.instance_variables_hash
|
|
132
|
+
assert !hash.has_key?(:env)
|
|
133
|
+
end
|
|
134
|
+
end
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
context "top config class" do
|
|
138
|
+
setup do
|
|
139
|
+
@configures_list = []
|
|
140
|
+
Vagrant::Config::Top.stubs(:configures_list).returns(@configures_list)
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
context "adding configure keys" do
|
|
144
|
+
setup do
|
|
145
|
+
@key = "top_config_foo"
|
|
146
|
+
@klass = mock("klass")
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
should "add key and klass to configures list" do
|
|
150
|
+
@configures_list.expects(:<<).with([@key, @klass])
|
|
151
|
+
Vagrant::Config::Top.configures(@key, @klass)
|
|
152
|
+
end
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
context "configuration keys on instance" do
|
|
156
|
+
setup do
|
|
157
|
+
@configures_list.clear
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
should "initialize each configurer and set it to its key" do
|
|
161
|
+
env = mock('env')
|
|
162
|
+
|
|
163
|
+
5.times do |i|
|
|
164
|
+
key = "key#{i}"
|
|
165
|
+
klass = mock("klass#{i}")
|
|
166
|
+
instance = mock("instance#{i}")
|
|
167
|
+
instance.expects(:env=).with(env)
|
|
168
|
+
klass.expects(:new).returns(instance)
|
|
169
|
+
@configures_list << [key, klass]
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
Vagrant::Config::Top.new(env)
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
should "allow reading via methods" do
|
|
176
|
+
key = "my_foo_bar_key"
|
|
177
|
+
klass = mock("klass")
|
|
178
|
+
instance = mock("instance")
|
|
179
|
+
instance.stubs(:env=)
|
|
180
|
+
klass.expects(:new).returns(instance)
|
|
181
|
+
Vagrant::Config::Top.configures(key, klass)
|
|
182
|
+
|
|
183
|
+
config = Vagrant::Config::Top.new
|
|
184
|
+
assert_equal instance, config.send(key)
|
|
185
|
+
end
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
context "loaded status" do
|
|
189
|
+
setup do
|
|
190
|
+
@top= Vagrant::Config::Top.new
|
|
191
|
+
end
|
|
192
|
+
|
|
193
|
+
should "not be loaded by default" do
|
|
194
|
+
assert !@top.loaded?
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
should "be loaded after calling loaded!" do
|
|
198
|
+
@top.loaded!
|
|
199
|
+
assert @top.loaded?
|
|
200
|
+
end
|
|
201
|
+
end
|
|
202
|
+
|
|
203
|
+
context "deep cloning" do
|
|
204
|
+
class DeepCloneConfig < Vagrant::Config::Base
|
|
205
|
+
attr_accessor :attribute
|
|
206
|
+
end
|
|
207
|
+
|
|
208
|
+
setup do
|
|
209
|
+
Vagrant::Config::Top.configures :deep, DeepCloneConfig
|
|
210
|
+
@top = Vagrant::Config::Top.new
|
|
211
|
+
@top.deep.attribute = [1,2,3]
|
|
212
|
+
end
|
|
213
|
+
|
|
214
|
+
should "deep clone the object" do
|
|
215
|
+
copy = @top.deep_clone
|
|
216
|
+
copy.deep.attribute << 4
|
|
217
|
+
assert_not_equal @top.deep.attribute, copy.deep.attribute
|
|
218
|
+
assert_equal 3, @top.deep.attribute.length
|
|
219
|
+
assert_equal 4, copy.deep.attribute.length
|
|
220
|
+
end
|
|
221
|
+
end
|
|
222
|
+
end
|
|
223
|
+
|
|
224
|
+
context "vagrant configuration" do
|
|
225
|
+
setup do
|
|
226
|
+
@config = Vagrant::Config::VagrantConfig.new
|
|
227
|
+
end
|
|
228
|
+
|
|
229
|
+
should "return nil if home is nil" do
|
|
230
|
+
File.expects(:expand_path).never
|
|
231
|
+
assert @config.home.nil?
|
|
232
|
+
end
|
|
233
|
+
|
|
234
|
+
should "expand the path if home is not nil" do
|
|
235
|
+
@config.home = "foo"
|
|
236
|
+
File.expects(:expand_path).with("foo").once.returns("result")
|
|
237
|
+
assert_equal "result", @config.home
|
|
238
|
+
end
|
|
239
|
+
end
|
|
240
|
+
|
|
241
|
+
context "VM configuration" do
|
|
242
|
+
setup do
|
|
243
|
+
@env = mock_environment
|
|
244
|
+
@config = @env.config.vm
|
|
245
|
+
@env.config.ssh.username = @username
|
|
246
|
+
end
|
|
247
|
+
|
|
248
|
+
context "defining VMs" do
|
|
249
|
+
should "store the proc by name but not run it" do
|
|
250
|
+
foo = mock("proc")
|
|
251
|
+
foo.expects(:call).never
|
|
252
|
+
|
|
253
|
+
proc = Proc.new { foo.call }
|
|
254
|
+
@config.define(:name, &proc)
|
|
255
|
+
assert @config.defined_vms[:name].proc_stack.include?(proc)
|
|
256
|
+
end
|
|
257
|
+
|
|
258
|
+
should "store the options" do
|
|
259
|
+
@config.define(:name, :set => true)
|
|
260
|
+
assert @config.defined_vms[:name].options[:set]
|
|
261
|
+
end
|
|
262
|
+
|
|
263
|
+
should "not have multi-VMs by default" do
|
|
264
|
+
assert !@config.has_multi_vms?
|
|
265
|
+
end
|
|
266
|
+
|
|
267
|
+
should "have multi-VMs once one is specified" do
|
|
268
|
+
@config.define(:foo) {}
|
|
269
|
+
assert @config.has_multi_vms?
|
|
270
|
+
end
|
|
271
|
+
end
|
|
272
|
+
|
|
273
|
+
context "customizing" do
|
|
274
|
+
should "include the stacked proc runner module" do
|
|
275
|
+
assert @config.class.included_modules.include?(Vagrant::Util::StackedProcRunner)
|
|
276
|
+
end
|
|
277
|
+
|
|
278
|
+
should "add the customize proc to the proc stack" do
|
|
279
|
+
proc = Proc.new {}
|
|
280
|
+
@config.customize(&proc)
|
|
281
|
+
assert_equal [proc], @config.proc_stack
|
|
282
|
+
end
|
|
283
|
+
end
|
|
284
|
+
|
|
285
|
+
context "uid/gid" do
|
|
286
|
+
should "return the shared folder UID if set" do
|
|
287
|
+
@config.shared_folder_uid = "foo"
|
|
288
|
+
assert_equal "foo", @config.shared_folder_uid
|
|
289
|
+
end
|
|
290
|
+
|
|
291
|
+
should "return the SSH username if UID not set" do
|
|
292
|
+
@config.shared_folder_uid = nil
|
|
293
|
+
assert_equal @username, @config.shared_folder_uid
|
|
294
|
+
end
|
|
295
|
+
|
|
296
|
+
should "return the shared folder GID if set" do
|
|
297
|
+
@config.shared_folder_gid = "foo"
|
|
298
|
+
assert_equal "foo", @config.shared_folder_gid
|
|
299
|
+
end
|
|
300
|
+
|
|
301
|
+
should "return the SSH username if GID not set" do
|
|
302
|
+
@config.shared_folder_gid = nil
|
|
303
|
+
assert_equal @username, @config.shared_folder_gid
|
|
304
|
+
end
|
|
305
|
+
end
|
|
306
|
+
end
|
|
307
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
require "test_helper"
|
|
2
|
+
|
|
3
|
+
class BaseDownloaderTest < Test::Unit::TestCase
|
|
4
|
+
should "include the util class so subclasses have access to it" do
|
|
5
|
+
assert Vagrant::Downloaders::Base.include?(Vagrant::Util)
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
context "base instance" do
|
|
9
|
+
setup do
|
|
10
|
+
@env = mock_environment
|
|
11
|
+
@base = Vagrant::Downloaders::Base.new(@env)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
should "implement prepare which does nothing" do
|
|
15
|
+
assert_nothing_raised do
|
|
16
|
+
assert @base.respond_to?(:prepare)
|
|
17
|
+
@base.prepare("source")
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
should "implement download! which does nothing" do
|
|
22
|
+
assert_nothing_raised do
|
|
23
|
+
assert @base.respond_to?(:download!)
|
|
24
|
+
@base.download!("source", "destination")
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
require "test_helper"
|
|
2
|
+
|
|
3
|
+
class FileDownloaderTest < Test::Unit::TestCase
|
|
4
|
+
setup do
|
|
5
|
+
@downloader, @tempfile = mock_downloader(Vagrant::Downloaders::File)
|
|
6
|
+
@uri = "foo.box"
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
context "preparing" do
|
|
10
|
+
should "raise an exception if the file does not exist" do
|
|
11
|
+
File.expects(:file?).with(@uri).returns(false)
|
|
12
|
+
@downloader.prepare(@uri)
|
|
13
|
+
assert @downloader.env.error?
|
|
14
|
+
assert_equal :downloader_file_doesnt_exist, @downloader.env.error.first
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
context "downloading" do
|
|
19
|
+
should "cp the file" do
|
|
20
|
+
path = '/path'
|
|
21
|
+
@tempfile.expects(:path).returns(path)
|
|
22
|
+
FileUtils.expects(:cp).with(@uri, path)
|
|
23
|
+
@downloader.download!(@uri, @tempfile)
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
context "matching a uri" do
|
|
28
|
+
should "return true if the File exists on the file system" do
|
|
29
|
+
File.expects(:exists?).with('foo').returns(true)
|
|
30
|
+
assert Vagrant::Downloaders::File.match?('foo')
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
require "test_helper"
|
|
2
|
+
|
|
3
|
+
class HttpDownloaderTest < Test::Unit::TestCase
|
|
4
|
+
setup do
|
|
5
|
+
@downloader, @tempfile = mock_downloader(Vagrant::Downloaders::HTTP)
|
|
6
|
+
@downloader.stubs(:report_progress)
|
|
7
|
+
@downloader.stubs(:complete_progress)
|
|
8
|
+
@uri = "http://google.com/"
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
context "downloading" do
|
|
12
|
+
setup do
|
|
13
|
+
@parsed_uri = URI.parse(@uri)
|
|
14
|
+
@http = Net::HTTP.new(@parsed_uri.host, @parsed_uri.port)
|
|
15
|
+
Net::HTTP.stubs(:new).returns(@http)
|
|
16
|
+
@http.stubs(:start)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
should "create a proper net/http object" do
|
|
20
|
+
Net::HTTP.expects(:new).with(@parsed_uri.host, @parsed_uri.port).once.returns(@http)
|
|
21
|
+
@http.expects(:start)
|
|
22
|
+
@downloader.download!(@uri, @tempfile)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
should "enable SSL if scheme is https" do
|
|
26
|
+
@uri = "https://google.com/"
|
|
27
|
+
@http.expects(:use_ssl=).with(true).once
|
|
28
|
+
@downloader.download!(@uri, @tempfile)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
should "read the body of the response and place each segment into the file" do
|
|
32
|
+
h = mock("http")
|
|
33
|
+
response = mock("response")
|
|
34
|
+
response.stubs(:content_length)
|
|
35
|
+
segment = mock("segment")
|
|
36
|
+
segment.stubs(:length).returns(7)
|
|
37
|
+
|
|
38
|
+
@http.stubs(:start).yields(h)
|
|
39
|
+
h.expects(:request_get).with(@parsed_uri.request_uri).once.yields(response)
|
|
40
|
+
response.expects(:read_body).once.yields(segment)
|
|
41
|
+
@tempfile.expects(:write).with(segment).once
|
|
42
|
+
|
|
43
|
+
@downloader.download!(@uri, @tempfile)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
should "error environment if invalid URL given" do
|
|
47
|
+
Net::HTTP.expects(:new).raises(SocketError.new)
|
|
48
|
+
@downloader.download!(@uri, @tempfile)
|
|
49
|
+
|
|
50
|
+
assert @downloader.env.error?
|
|
51
|
+
assert_equal :box_download_http_socket_error, @downloader.env.error.first
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
context "matching the uri" do
|
|
56
|
+
should "use extract to verify that the string is in fact a uri" do
|
|
57
|
+
URI.expects(:extract).returns(['foo'])
|
|
58
|
+
assert Vagrant::Downloaders::HTTP.match?('foo')
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
should "return false if there are no extract results" do
|
|
62
|
+
URI.expects(:extract).returns([])
|
|
63
|
+
assert !Vagrant::Downloaders::HTTP.match?('foo')
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
context "reporting progress" do
|
|
68
|
+
# TODO: Testing for this, probably
|
|
69
|
+
end
|
|
70
|
+
end
|