vagrant 0.2.0 → 0.3.0
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.
- data/Gemfile +4 -4
- data/Rakefile +3 -3
- data/VERSION +1 -1
- data/bin/vagrant +5 -13
- data/config/default.rb +1 -0
- data/keys/README.md +8 -1
- data/keys/vagrant.ppk +26 -0
- data/lib/vagrant.rb +3 -3
- data/lib/vagrant/actions/base.rb +15 -4
- data/lib/vagrant/actions/box/add.rb +1 -1
- data/lib/vagrant/actions/box/download.rb +72 -66
- data/lib/vagrant/actions/box/unpackage.rb +1 -4
- data/lib/vagrant/actions/runner.rb +1 -1
- data/lib/vagrant/actions/vm/boot.rb +5 -7
- data/lib/vagrant/actions/vm/customize.rb +2 -2
- data/lib/vagrant/actions/vm/destroy.rb +2 -2
- data/lib/vagrant/actions/vm/down.rb +7 -0
- data/lib/vagrant/actions/vm/export.rb +10 -4
- data/lib/vagrant/actions/vm/forward_ports.rb +5 -15
- data/lib/vagrant/actions/vm/halt.rb +5 -3
- data/lib/vagrant/actions/vm/import.rb +10 -3
- data/lib/vagrant/actions/vm/move_hard_drive.rb +1 -3
- data/lib/vagrant/actions/vm/package.rb +33 -10
- data/lib/vagrant/actions/vm/provision.rb +4 -4
- data/lib/vagrant/actions/vm/reload.rb +1 -1
- data/lib/vagrant/actions/vm/resume.rb +1 -1
- data/lib/vagrant/actions/vm/shared_folders.rb +7 -7
- data/lib/vagrant/actions/vm/start.rb +3 -2
- data/lib/vagrant/actions/vm/suspend.rb +2 -2
- data/lib/vagrant/actions/vm/up.rb +7 -17
- data/lib/vagrant/active_list.rb +52 -45
- data/lib/vagrant/box.rb +18 -11
- data/lib/vagrant/busy.rb +7 -0
- data/lib/vagrant/command.rb +27 -0
- data/lib/vagrant/commands/base.rb +163 -0
- data/lib/vagrant/commands/box.rb +16 -0
- data/lib/vagrant/commands/box/add.rb +24 -0
- data/lib/vagrant/commands/box/list.rb +30 -0
- data/lib/vagrant/commands/box/remove.rb +31 -0
- data/lib/vagrant/commands/destroy.rb +23 -0
- data/lib/vagrant/commands/down.rb +16 -0
- data/lib/vagrant/commands/halt.rb +23 -0
- data/lib/vagrant/commands/init.rb +32 -0
- data/lib/vagrant/commands/package.rb +46 -0
- data/lib/vagrant/commands/reload.rb +22 -0
- data/lib/vagrant/commands/resume.rb +22 -0
- data/lib/vagrant/commands/ssh.rb +22 -0
- data/lib/vagrant/commands/ssh_config.rb +30 -0
- data/lib/vagrant/commands/status.rb +58 -0
- data/lib/vagrant/commands/suspend.rb +23 -0
- data/lib/vagrant/commands/up.rb +26 -0
- data/lib/vagrant/config.rb +21 -11
- data/lib/vagrant/downloaders/file.rb +5 -5
- data/lib/vagrant/downloaders/http.rb +10 -15
- data/lib/vagrant/environment.rb +259 -0
- data/lib/vagrant/provisioners/base.rb +7 -0
- data/lib/vagrant/provisioners/chef.rb +24 -9
- data/lib/vagrant/provisioners/chef_server.rb +23 -48
- data/lib/vagrant/provisioners/chef_solo.rb +48 -22
- data/lib/vagrant/ssh.rb +95 -46
- data/lib/vagrant/util.rb +2 -2
- data/lib/vagrant/util/errors.rb +36 -0
- data/lib/vagrant/util/platform.rb +12 -0
- data/lib/vagrant/util/progress_meter.rb +33 -0
- data/lib/vagrant/util/stacked_proc_runner.rb +35 -0
- data/lib/vagrant/util/template_renderer.rb +83 -0
- data/lib/vagrant/vm.rb +1 -0
- data/templates/{Vagrantfile → Vagrantfile.erb} +2 -2
- data/templates/chef_server_client.erb +16 -0
- data/templates/chef_solo_solo.erb +4 -0
- data/templates/errors.yml +157 -0
- data/templates/package_Vagrantfile.erb +11 -0
- data/templates/ssh_config.erb +7 -0
- data/test/test_helper.rb +12 -15
- data/test/vagrant/actions/box/add_test.rb +1 -2
- data/test/vagrant/actions/box/destroy_test.rb +0 -1
- data/test/vagrant/actions/box/download_test.rb +40 -15
- data/test/vagrant/actions/box/unpackage_test.rb +2 -3
- data/test/vagrant/actions/collection_test.rb +8 -5
- data/test/vagrant/actions/runner_test.rb +8 -6
- data/test/vagrant/actions/vm/boot_test.rb +12 -11
- data/test/vagrant/actions/vm/customize_test.rb +2 -3
- data/test/vagrant/actions/vm/destroy_test.rb +2 -3
- data/test/vagrant/actions/vm/down_test.rb +16 -3
- data/test/vagrant/actions/vm/export_test.rb +4 -5
- data/test/vagrant/actions/vm/forward_ports_test.rb +6 -5
- data/test/vagrant/actions/vm/halt_test.rb +8 -2
- data/test/vagrant/actions/vm/import_test.rb +5 -5
- data/test/vagrant/actions/vm/move_hard_drive_test.rb +4 -6
- data/test/vagrant/actions/vm/package_test.rb +60 -22
- data/test/vagrant/actions/vm/provision_test.rb +7 -16
- data/test/vagrant/actions/vm/reload_test.rb +3 -2
- data/test/vagrant/actions/vm/resume_test.rb +0 -1
- data/test/vagrant/actions/vm/shared_folders_test.rb +17 -12
- data/test/vagrant/actions/vm/start_test.rb +10 -3
- data/test/vagrant/actions/vm/suspend_test.rb +1 -2
- data/test/vagrant/actions/vm/up_test.rb +19 -11
- data/test/vagrant/active_list_test.rb +148 -129
- data/test/vagrant/box_test.rb +26 -14
- data/test/vagrant/busy_test.rb +15 -6
- data/test/vagrant/command_test.rb +53 -0
- data/test/vagrant/commands/base_test.rb +118 -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/destroy_test.rb +32 -0
- data/test/vagrant/commands/down_test.rb +17 -0
- data/test/vagrant/commands/halt_test.rb +28 -0
- data/test/vagrant/commands/init_test.rb +55 -0
- data/test/vagrant/commands/package_test.rb +84 -0
- data/test/vagrant/commands/reload_test.rb +28 -0
- data/test/vagrant/commands/resume_test.rb +33 -0
- data/test/vagrant/commands/ssh_config_test.rb +54 -0
- data/test/vagrant/commands/ssh_test.rb +32 -0
- data/test/vagrant/commands/status_test.rb +20 -0
- data/test/vagrant/commands/suspend_test.rb +33 -0
- data/test/vagrant/commands/up_test.rb +41 -0
- data/test/vagrant/config_test.rb +42 -17
- data/test/vagrant/downloaders/file_test.rb +7 -0
- data/test/vagrant/downloaders/http_test.rb +12 -0
- data/test/vagrant/environment_test.rb +595 -0
- data/test/vagrant/provisioners/base_test.rb +7 -1
- data/test/vagrant/provisioners/chef_server_test.rb +41 -51
- data/test/vagrant/provisioners/chef_solo_test.rb +93 -62
- data/test/vagrant/provisioners/chef_test.rb +61 -15
- data/test/vagrant/ssh_test.rb +166 -38
- data/test/vagrant/util/errors_test.rb +57 -0
- data/test/vagrant/util/progress_meter_test.rb +33 -0
- data/test/vagrant/{stacked_proc_runner_test.rb → util/stacked_proc_runner_test.rb} +3 -3
- data/test/vagrant/util/template_renderer_test.rb +138 -0
- data/test/vagrant/vm_test.rb +3 -2
- data/vagrant.gemspec +88 -33
- metadata +94 -51
- data/bin/vagrant-box +0 -34
- data/bin/vagrant-down +0 -27
- data/bin/vagrant-halt +0 -28
- data/bin/vagrant-init +0 -27
- data/bin/vagrant-package +0 -29
- data/bin/vagrant-reload +0 -29
- data/bin/vagrant-resume +0 -27
- data/bin/vagrant-ssh +0 -27
- data/bin/vagrant-status +0 -29
- data/bin/vagrant-suspend +0 -27
- data/bin/vagrant-up +0 -29
- data/lib/vagrant/commands.rb +0 -234
- data/lib/vagrant/env.rb +0 -189
- data/lib/vagrant/stacked_proc_runner.rb +0 -33
- data/test/vagrant/commands_test.rb +0 -269
- data/test/vagrant/env_test.rb +0 -418
@@ -23,4 +23,11 @@ class FileDownloaderTest < Test::Unit::TestCase
|
|
23
23
|
@downloader.download!(@uri, @tempfile)
|
24
24
|
end
|
25
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
|
26
33
|
end
|
@@ -34,6 +34,18 @@ class HttpDownloaderTest < Test::Unit::TestCase
|
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
37
|
+
context "matching the uri" do
|
38
|
+
should "use extract to verify that the string is in fact a uri" do
|
39
|
+
URI.expects(:extract).returns(['foo'])
|
40
|
+
assert Vagrant::Downloaders::HTTP.match?('foo')
|
41
|
+
end
|
42
|
+
|
43
|
+
should "return false if there are no extract results" do
|
44
|
+
URI.expects(:extract).returns([])
|
45
|
+
assert !Vagrant::Downloaders::HTTP.match?('foo')
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
37
49
|
context "reporting progress" do
|
38
50
|
# TODO: Testing for this, probably
|
39
51
|
end
|
@@ -0,0 +1,595 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), '..', 'test_helper')
|
2
|
+
|
3
|
+
class EnvironmentTest < Test::Unit::TestCase
|
4
|
+
context "class method check virtualbox version" do
|
5
|
+
setup do
|
6
|
+
VirtualBox.stubs(:version).returns("3.1.4")
|
7
|
+
end
|
8
|
+
|
9
|
+
should "not error and exit if everything is good" do
|
10
|
+
VirtualBox.expects(:version).returns("3.1.4")
|
11
|
+
Vagrant::Environment.expects(:error_and_exit).never
|
12
|
+
Vagrant::Environment.check_virtualbox!
|
13
|
+
end
|
14
|
+
|
15
|
+
should "error and exit if VirtualBox is not installed or detected" do
|
16
|
+
Vagrant::Environment.expects(:error_and_exit).with(:virtualbox_not_detected).once
|
17
|
+
VirtualBox.expects(:version).returns(nil)
|
18
|
+
Vagrant::Environment.check_virtualbox!
|
19
|
+
end
|
20
|
+
|
21
|
+
should "error and exit if VirtualBox is lower than version 3.1" do
|
22
|
+
version = "3.0.12r1041"
|
23
|
+
Vagrant::Environment.expects(:error_and_exit).with(:virtualbox_invalid_version, :version => version.to_s).once
|
24
|
+
VirtualBox.expects(:version).returns(version)
|
25
|
+
Vagrant::Environment.check_virtualbox!
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
context "class method load!" do
|
30
|
+
setup do
|
31
|
+
@cwd = mock('cwd')
|
32
|
+
|
33
|
+
@env = mock('env')
|
34
|
+
@env.stubs(:load!).returns(@env)
|
35
|
+
end
|
36
|
+
|
37
|
+
should "create the environment with given cwd, load it, and return it" do
|
38
|
+
Vagrant::Environment.expects(:new).with(@cwd).once.returns(@env)
|
39
|
+
@env.expects(:load!).returns(@env)
|
40
|
+
assert_equal @env, Vagrant::Environment.load!(@cwd)
|
41
|
+
end
|
42
|
+
|
43
|
+
should "work without a given cwd" do
|
44
|
+
Vagrant::Environment.expects(:new).with(nil).returns(@env)
|
45
|
+
|
46
|
+
assert_nothing_raised {
|
47
|
+
env = Vagrant::Environment.load!
|
48
|
+
assert_equal env, @env
|
49
|
+
}
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
context "initialization" do
|
54
|
+
should "set the cwd if given" do
|
55
|
+
cwd = "foobarbaz"
|
56
|
+
env = Vagrant::Environment.new(cwd)
|
57
|
+
assert_equal cwd, env.cwd
|
58
|
+
end
|
59
|
+
|
60
|
+
should "default to pwd if cwd is nil" do
|
61
|
+
env = Vagrant::Environment.new
|
62
|
+
assert_equal Dir.pwd, env.cwd
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
context "paths" do
|
67
|
+
setup do
|
68
|
+
@env = mock_environment
|
69
|
+
end
|
70
|
+
|
71
|
+
context "cwd" do
|
72
|
+
should "default to Dir.pwd" do
|
73
|
+
assert_equal Dir.pwd, @env.cwd
|
74
|
+
end
|
75
|
+
|
76
|
+
should "return cwd if set" do
|
77
|
+
@env.cwd = "foo"
|
78
|
+
assert_equal "foo", @env.cwd
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
context "dotfile path" do
|
83
|
+
setup do
|
84
|
+
@env.stubs(:root_path).returns("foo")
|
85
|
+
end
|
86
|
+
|
87
|
+
should "build up the dotfile out of the root path and the dotfile name" do
|
88
|
+
assert_equal File.join(@env.root_path, @env.config.vagrant.dotfile_name), @env.dotfile_path
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
context "home path" do
|
93
|
+
should "return nil if config is not yet loaded" do
|
94
|
+
@env.stubs(:config).returns(nil)
|
95
|
+
assert_nil @env.home_path
|
96
|
+
end
|
97
|
+
|
98
|
+
should "return the home path if it loaded" do
|
99
|
+
assert_equal @env.config.vagrant.home, @env.home_path
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
context "temp path" do
|
104
|
+
should "return the home path joined with 'tmp'" do
|
105
|
+
home_path = "foo"
|
106
|
+
@env.stubs(:home_path).returns(home_path)
|
107
|
+
assert_equal File.join("foo", "tmp"), @env.tmp_path
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
context "boxes path" do
|
112
|
+
should "return the home path joined with 'tmp'" do
|
113
|
+
home_path = "foo"
|
114
|
+
@env.stubs(:home_path).returns(home_path)
|
115
|
+
assert_equal File.join("foo", "boxes"), @env.boxes_path
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
context "loading" do
|
121
|
+
setup do
|
122
|
+
@env = mock_environment
|
123
|
+
end
|
124
|
+
|
125
|
+
context "overall load method" do
|
126
|
+
should "load! should call proper sequence and return itself" do
|
127
|
+
call_seq = sequence("call_sequence")
|
128
|
+
@env.expects(:load_root_path!).once.in_sequence(call_seq)
|
129
|
+
@env.expects(:load_config!).once.in_sequence(call_seq)
|
130
|
+
@env.expects(:load_home_directory!).once.in_sequence(call_seq)
|
131
|
+
@env.expects(:load_box!).once.in_sequence(call_seq)
|
132
|
+
@env.expects(:load_config!).once.in_sequence(call_seq)
|
133
|
+
Vagrant::Environment.expects(:check_virtualbox!).once.in_sequence(call_seq)
|
134
|
+
@env.expects(:load_vm!).once.in_sequence(call_seq)
|
135
|
+
@env.expects(:load_ssh!).once.in_sequence(call_seq)
|
136
|
+
@env.expects(:load_active_list!).once.in_sequence(call_seq)
|
137
|
+
@env.expects(:load_commands!).once.in_sequence(call_seq)
|
138
|
+
assert_equal @env, @env.load!
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
142
|
+
context "loading the root path" do
|
143
|
+
setup do
|
144
|
+
@env.cwd = "/foo"
|
145
|
+
end
|
146
|
+
|
147
|
+
should "default the path to the cwd instance var if nil" do
|
148
|
+
@path = mock("path")
|
149
|
+
@path.stubs(:root?).returns(true)
|
150
|
+
File.expects(:expand_path).with(@env.cwd).returns(@env.cwd)
|
151
|
+
Pathname.expects(:new).with(@env.cwd).returns(@path)
|
152
|
+
@env.load_root_path!(nil)
|
153
|
+
end
|
154
|
+
|
155
|
+
should "not default the path to pwd if its not nil" do
|
156
|
+
@path = mock("path")
|
157
|
+
@path.stubs(:to_s).returns("/")
|
158
|
+
File.expects(:expand_path).with(@path).returns("/")
|
159
|
+
Pathname.expects(:new).with("/").returns(@path)
|
160
|
+
@path.stubs(:root?).returns(true)
|
161
|
+
@env.load_root_path!(@path)
|
162
|
+
end
|
163
|
+
|
164
|
+
should "should walk the parent directories looking for rootfile" do
|
165
|
+
paths = [
|
166
|
+
Pathname.new("/foo/bar/baz"),
|
167
|
+
Pathname.new("/foo/bar"),
|
168
|
+
Pathname.new("/foo")
|
169
|
+
]
|
170
|
+
|
171
|
+
search_seq = sequence("search_seq")
|
172
|
+
paths.each do |path|
|
173
|
+
# NOTE File.expect(:expand_path) causes tests to hang in windows below is the interim solution
|
174
|
+
File.expects(:exist?).with("#{File.expand_path(path)}/#{Vagrant::Environment::ROOTFILE_NAME}").returns(false).in_sequence(search_seq)
|
175
|
+
end
|
176
|
+
|
177
|
+
assert !@env.load_root_path!(paths.first)
|
178
|
+
end
|
179
|
+
|
180
|
+
should "return false if not found" do
|
181
|
+
path = Pathname.new("/")
|
182
|
+
assert !@env.load_root_path!(path)
|
183
|
+
end
|
184
|
+
|
185
|
+
should "return false if not found on windows-style root" do
|
186
|
+
# TODO: Is there _any_ way to test this on unix machines? The
|
187
|
+
# expand path doesn't work [properly for the test] on unix machines.
|
188
|
+
if RUBY_PLATFORM.downcase.include?("mswin")
|
189
|
+
# Note the escaped back slash
|
190
|
+
path = Pathname.new("C:\\")
|
191
|
+
assert !@env.load_root_path!(path)
|
192
|
+
end
|
193
|
+
end
|
194
|
+
|
195
|
+
should "should set the path for the rootfile" do
|
196
|
+
# NOTE File.expect(:expand_path) causes tests to hang in windows below is the interim solution
|
197
|
+
path = File.expand_path("/foo")
|
198
|
+
File.expects(:exist?).with("#{path}/#{Vagrant::Environment::ROOTFILE_NAME}").returns(true)
|
199
|
+
|
200
|
+
assert @env.load_root_path!(Pathname.new(path))
|
201
|
+
assert_equal path, @env.root_path
|
202
|
+
end
|
203
|
+
end
|
204
|
+
|
205
|
+
context "loading config" do
|
206
|
+
setup do
|
207
|
+
@root_path = "/foo"
|
208
|
+
@home_path = "/bar"
|
209
|
+
@env.stubs(:root_path).returns(@root_path)
|
210
|
+
@env.stubs(:home_path).returns(@home_path)
|
211
|
+
|
212
|
+
File.stubs(:exist?).returns(false)
|
213
|
+
Vagrant::Config.stubs(:execute!)
|
214
|
+
Vagrant::Config.stubs(:reset!)
|
215
|
+
end
|
216
|
+
|
217
|
+
should "reset the configuration object" do
|
218
|
+
Vagrant::Config.expects(:reset!).with(@env).once
|
219
|
+
@env.load_config!
|
220
|
+
end
|
221
|
+
|
222
|
+
should "load from the project root" do
|
223
|
+
File.expects(:exist?).with(File.join(PROJECT_ROOT, "config", "default.rb")).once
|
224
|
+
@env.load_config!
|
225
|
+
end
|
226
|
+
|
227
|
+
should "load from the root path" do
|
228
|
+
File.expects(:exist?).with(File.join(@root_path, Vagrant::Environment::ROOTFILE_NAME)).once
|
229
|
+
@env.load_config!
|
230
|
+
end
|
231
|
+
|
232
|
+
should "not load from the root path if nil" do
|
233
|
+
@env.stubs(:root_path).returns(nil)
|
234
|
+
File.expects(:exist?).with(File.join(@root_path, Vagrant::Environment::ROOTFILE_NAME)).never
|
235
|
+
@env.load_config!
|
236
|
+
end
|
237
|
+
|
238
|
+
should "load from the home directory" do
|
239
|
+
File.expects(:exist?).with(File.join(@env.home_path, Vagrant::Environment::ROOTFILE_NAME)).once
|
240
|
+
@env.load_config!
|
241
|
+
end
|
242
|
+
|
243
|
+
should "not load from the home directory if the config is nil" do
|
244
|
+
@env.stubs(:home_path).returns(nil)
|
245
|
+
File.expects(:exist?).twice.returns(false)
|
246
|
+
@env.load_config!
|
247
|
+
end
|
248
|
+
|
249
|
+
should "not load from the box directory if it is nil" do
|
250
|
+
@env.expects(:box).once.returns(nil)
|
251
|
+
File.expects(:exist?).twice.returns(false)
|
252
|
+
@env.load_config!
|
253
|
+
end
|
254
|
+
|
255
|
+
should "load from the box directory if it is not nil" do
|
256
|
+
dir = "foo"
|
257
|
+
box = mock("box")
|
258
|
+
box.stubs(:directory).returns(dir)
|
259
|
+
@env.expects(:box).twice.returns(box)
|
260
|
+
File.expects(:exist?).with(File.join(dir, Vagrant::Environment::ROOTFILE_NAME)).once
|
261
|
+
@env.load_config!
|
262
|
+
end
|
263
|
+
|
264
|
+
should "load the files only if exist? returns true" do
|
265
|
+
File.expects(:exist?).once.returns(true)
|
266
|
+
@env.expects(:load).once
|
267
|
+
@env.load_config!
|
268
|
+
end
|
269
|
+
|
270
|
+
should "not load the files if exist? returns false" do
|
271
|
+
@env.expects(:load).never
|
272
|
+
@env.load_config!
|
273
|
+
end
|
274
|
+
|
275
|
+
should "execute after loading and set result to environment config" do
|
276
|
+
result = mock("result")
|
277
|
+
File.expects(:exist?).once.returns(true)
|
278
|
+
@env.expects(:load).once
|
279
|
+
Vagrant::Config.expects(:execute!).once.returns(result)
|
280
|
+
@env.load_config!
|
281
|
+
assert_equal result, @env.config
|
282
|
+
end
|
283
|
+
end
|
284
|
+
|
285
|
+
context "loading home directory" do
|
286
|
+
setup do
|
287
|
+
@env = mock_environment
|
288
|
+
@home_dir = File.expand_path(@env.config.vagrant.home)
|
289
|
+
|
290
|
+
File.stubs(:directory?).returns(true)
|
291
|
+
FileUtils.stubs(:mkdir_p)
|
292
|
+
end
|
293
|
+
|
294
|
+
should "create each directory if it doesn't exist" do
|
295
|
+
create_seq = sequence("create_seq")
|
296
|
+
File.stubs(:directory?).returns(false)
|
297
|
+
Vagrant::Environment::HOME_SUBDIRS.each do |subdir|
|
298
|
+
FileUtils.expects(:mkdir_p).with(File.join(@home_dir, subdir)).in_sequence(create_seq)
|
299
|
+
end
|
300
|
+
|
301
|
+
@env.load_home_directory!
|
302
|
+
end
|
303
|
+
|
304
|
+
should "not create directories if they exist" do
|
305
|
+
File.stubs(:directory?).returns(true)
|
306
|
+
FileUtils.expects(:mkdir_p).never
|
307
|
+
@env.load_home_directory!
|
308
|
+
end
|
309
|
+
end
|
310
|
+
|
311
|
+
context "loading box" do
|
312
|
+
setup do
|
313
|
+
@box = mock("box")
|
314
|
+
@box.stubs(:env=)
|
315
|
+
|
316
|
+
@env = mock_environment
|
317
|
+
@env.stubs(:root_path).returns("foo")
|
318
|
+
end
|
319
|
+
|
320
|
+
should "do nothing if the root path is nil" do
|
321
|
+
Vagrant::Box.expects(:find).never
|
322
|
+
@env.stubs(:root_path).returns(nil)
|
323
|
+
@env.load_box!
|
324
|
+
end
|
325
|
+
|
326
|
+
should "not load the box if its not set" do
|
327
|
+
@env = mock_environment do |config|
|
328
|
+
config.vm.box = nil
|
329
|
+
end
|
330
|
+
|
331
|
+
Vagrant::Box.expects(:find).never
|
332
|
+
@env.load_box!
|
333
|
+
end
|
334
|
+
|
335
|
+
should "set the box to what is found by the Box class" do
|
336
|
+
Vagrant::Box.expects(:find).with(@env, @env.config.vm.box).once.returns(@box)
|
337
|
+
@env.load_box!
|
338
|
+
assert @box.equal?(@env.box)
|
339
|
+
end
|
340
|
+
end
|
341
|
+
|
342
|
+
context "loading the UUID out from the persisted dotfile" do
|
343
|
+
setup do
|
344
|
+
@env = mock_environment
|
345
|
+
@env.stubs(:root_path).returns("foo")
|
346
|
+
|
347
|
+
File.stubs(:file?).returns(true)
|
348
|
+
end
|
349
|
+
|
350
|
+
should "loading of the uuid from the dotfile" do
|
351
|
+
vm = mock("vm")
|
352
|
+
vm.expects(:env=).with(@env)
|
353
|
+
|
354
|
+
filemock = mock("filemock")
|
355
|
+
filemock.expects(:read).returns("foo")
|
356
|
+
Vagrant::VM.expects(:find).with("foo").returns(vm)
|
357
|
+
File.expects(:open).with(@env.dotfile_path).once.yields(filemock)
|
358
|
+
File.expects(:file?).with(@env.dotfile_path).once.returns(true)
|
359
|
+
@env.load_vm!
|
360
|
+
|
361
|
+
assert_equal vm, @env.vm
|
362
|
+
end
|
363
|
+
|
364
|
+
should "not set the environment if the VM is nil" do
|
365
|
+
filemock = mock("filemock")
|
366
|
+
filemock.expects(:read).returns("foo")
|
367
|
+
Vagrant::VM.expects(:find).with("foo").returns(nil)
|
368
|
+
File.expects(:open).with(@env.dotfile_path).once.yields(filemock)
|
369
|
+
File.expects(:file?).with(@env.dotfile_path).once.returns(true)
|
370
|
+
|
371
|
+
assert_nothing_raised { @env.load_vm! }
|
372
|
+
assert_nil @env.vm
|
373
|
+
end
|
374
|
+
|
375
|
+
should "do nothing if the root path is nil" do
|
376
|
+
File.expects(:open).never
|
377
|
+
@env.stubs(:root_path).returns(nil)
|
378
|
+
@env.load_vm!
|
379
|
+
end
|
380
|
+
|
381
|
+
should "do nothing if dotfile is not a file" do
|
382
|
+
File.expects(:file?).returns(false)
|
383
|
+
File.expects(:open).never
|
384
|
+
@env.load_vm!
|
385
|
+
end
|
386
|
+
|
387
|
+
should "uuid should be nil if dotfile didn't exist" do
|
388
|
+
File.expects(:open).raises(Errno::ENOENT)
|
389
|
+
@env.load_vm!
|
390
|
+
assert_nil @env.vm
|
391
|
+
end
|
392
|
+
end
|
393
|
+
|
394
|
+
context "loading SSH" do
|
395
|
+
setup do
|
396
|
+
@env = mock_environment
|
397
|
+
end
|
398
|
+
|
399
|
+
should "initialize the SSH object with the given environment" do
|
400
|
+
ssh = mock("ssh")
|
401
|
+
Vagrant::SSH.expects(:new).with(@env).returns(ssh)
|
402
|
+
@env.load_ssh!
|
403
|
+
assert_equal ssh, @env.ssh
|
404
|
+
end
|
405
|
+
end
|
406
|
+
|
407
|
+
context "loading the active list" do
|
408
|
+
setup do
|
409
|
+
@env = mock_environment
|
410
|
+
end
|
411
|
+
|
412
|
+
should "initialize the ActiveList object with the given environment" do
|
413
|
+
active_list = mock("active_list")
|
414
|
+
Vagrant::ActiveList.expects(:new).with(@env).returns(active_list)
|
415
|
+
@env.load_active_list!
|
416
|
+
assert_equal active_list, @env.active_list
|
417
|
+
end
|
418
|
+
end
|
419
|
+
|
420
|
+
context "loading the commands" do
|
421
|
+
setup do
|
422
|
+
@env = mock_environment
|
423
|
+
end
|
424
|
+
|
425
|
+
should "initialize the Commands object with the given environment" do
|
426
|
+
commands = mock("commands")
|
427
|
+
Vagrant::Command.expects(:new).with(@env).returns(commands)
|
428
|
+
@env.load_commands!
|
429
|
+
assert_equal commands, @env.commands
|
430
|
+
end
|
431
|
+
end
|
432
|
+
end
|
433
|
+
|
434
|
+
context "requiring properties" do
|
435
|
+
setup do
|
436
|
+
@env = mock_environment
|
437
|
+
end
|
438
|
+
|
439
|
+
context "requiring boxes" do
|
440
|
+
setup do
|
441
|
+
reconfig_environment
|
442
|
+
end
|
443
|
+
|
444
|
+
def reconfig_environment
|
445
|
+
@env = mock_environment do |config|
|
446
|
+
yield config if block_given?
|
447
|
+
end
|
448
|
+
|
449
|
+
@env.stubs(:require_root_path)
|
450
|
+
@env.stubs(:error_and_exit)
|
451
|
+
end
|
452
|
+
|
453
|
+
should "require root path" do
|
454
|
+
@env.expects(:require_root_path).once
|
455
|
+
@env.require_box
|
456
|
+
end
|
457
|
+
|
458
|
+
should "error and exit if no box is specified" do
|
459
|
+
reconfig_environment do |config|
|
460
|
+
config.vm.box = nil
|
461
|
+
end
|
462
|
+
|
463
|
+
@env.expects(:box).returns(nil)
|
464
|
+
@env.expects(:error_and_exit).once.with(:box_not_specified)
|
465
|
+
@env.require_box
|
466
|
+
end
|
467
|
+
|
468
|
+
should "error and exit if box is specified but doesn't exist" do
|
469
|
+
reconfig_environment do |config|
|
470
|
+
config.vm.box = "foo"
|
471
|
+
end
|
472
|
+
|
473
|
+
@env.expects(:box).returns(nil)
|
474
|
+
@env.expects(:error_and_exit).once.with(:box_specified_doesnt_exist, :box_name => "foo")
|
475
|
+
@env.require_box
|
476
|
+
end
|
477
|
+
end
|
478
|
+
|
479
|
+
context "requiring root_path" do
|
480
|
+
should "error and exit if no root_path is set" do
|
481
|
+
@env.expects(:root_path).returns(nil)
|
482
|
+
@env.expects(:error_and_exit).with(:rootfile_not_found).once
|
483
|
+
@env.require_root_path
|
484
|
+
end
|
485
|
+
|
486
|
+
should "not error and exit if root_path is set" do
|
487
|
+
@env.expects(:root_path).returns("foo")
|
488
|
+
@env.expects(:error_and_exit).never
|
489
|
+
@env.require_root_path
|
490
|
+
end
|
491
|
+
end
|
492
|
+
|
493
|
+
context "requiring a persisted VM" do
|
494
|
+
setup do
|
495
|
+
@env.stubs(:vm).returns("foo")
|
496
|
+
@env.stubs(:require_root_path)
|
497
|
+
end
|
498
|
+
|
499
|
+
should "require a root path" do
|
500
|
+
@env.expects(:require_root_path).once
|
501
|
+
@env.expects(:error_and_exit).never
|
502
|
+
@env.require_persisted_vm
|
503
|
+
end
|
504
|
+
|
505
|
+
should "error and exit if the VM is not set" do
|
506
|
+
@env.expects(:vm).returns(nil)
|
507
|
+
@env.expects(:error_and_exit).once
|
508
|
+
@env.require_persisted_vm
|
509
|
+
end
|
510
|
+
end
|
511
|
+
end
|
512
|
+
|
513
|
+
context "managing VM" do
|
514
|
+
setup do
|
515
|
+
@env = mock_environment
|
516
|
+
|
517
|
+
@dotfile_path = "foo"
|
518
|
+
@env.stubs(:dotfile_path).returns(@dotfile_path)
|
519
|
+
end
|
520
|
+
|
521
|
+
def mock_vm
|
522
|
+
@vm = mock("vm")
|
523
|
+
@vm.stubs(:uuid).returns("foo")
|
524
|
+
@env.stubs(:vm).returns(@vm)
|
525
|
+
end
|
526
|
+
|
527
|
+
context "creating a new VM" do
|
528
|
+
should "create a new VM" do
|
529
|
+
assert_nil @env.vm
|
530
|
+
@env.create_vm
|
531
|
+
assert !@env.vm.nil?
|
532
|
+
assert @env.vm.is_a?(Vagrant::VM)
|
533
|
+
end
|
534
|
+
|
535
|
+
should "set the new VM's environment to the env" do
|
536
|
+
@env.create_vm
|
537
|
+
assert_equal @env, @env.vm.env
|
538
|
+
end
|
539
|
+
|
540
|
+
should "return the new VM" do
|
541
|
+
result = @env.create_vm
|
542
|
+
assert result.is_a?(Vagrant::VM)
|
543
|
+
end
|
544
|
+
end
|
545
|
+
|
546
|
+
context "persisting the VM into a file" do
|
547
|
+
setup do
|
548
|
+
mock_vm
|
549
|
+
|
550
|
+
File.stubs(:open)
|
551
|
+
@env.active_list.stubs(:add)
|
552
|
+
end
|
553
|
+
|
554
|
+
should "should save it to the dotfile path" do
|
555
|
+
filemock = mock("filemock")
|
556
|
+
filemock.expects(:write).with(@vm.uuid)
|
557
|
+
File.expects(:open).with(@env.dotfile_path, 'w+').once.yields(filemock)
|
558
|
+
@env.persist_vm
|
559
|
+
end
|
560
|
+
|
561
|
+
should "add the VM to the activelist" do
|
562
|
+
@env.active_list.expects(:add).with(@vm)
|
563
|
+
@env.persist_vm
|
564
|
+
end
|
565
|
+
end
|
566
|
+
|
567
|
+
context "depersisting the VM" do
|
568
|
+
setup do
|
569
|
+
mock_vm
|
570
|
+
|
571
|
+
File.stubs(:exist?).returns(false)
|
572
|
+
File.stubs(:delete)
|
573
|
+
|
574
|
+
@env.active_list.stubs(:remove)
|
575
|
+
end
|
576
|
+
|
577
|
+
should "remove the dotfile if it exists" do
|
578
|
+
File.expects(:exist?).with(@env.dotfile_path).returns(true)
|
579
|
+
File.expects(:delete).with(@env.dotfile_path).once
|
580
|
+
@env.depersist_vm
|
581
|
+
end
|
582
|
+
|
583
|
+
should "not remove the dotfile if it doesn't exist" do
|
584
|
+
File.expects(:exist?).returns(false)
|
585
|
+
File.expects(:delete).never
|
586
|
+
@env.depersist_vm
|
587
|
+
end
|
588
|
+
|
589
|
+
should "remove from the active list" do
|
590
|
+
@env.active_list.expects(:remove).with(@vm)
|
591
|
+
@env.depersist_vm
|
592
|
+
end
|
593
|
+
end
|
594
|
+
end
|
595
|
+
end
|