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.
Files changed (100) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +10 -0
  3. data/CHANGELOG.md +48 -0
  4. data/Gemfile +16 -0
  5. data/Gemfile.lock +49 -0
  6. data/README.md +2 -2
  7. data/Rakefile +22 -0
  8. data/bin/.gitignore +0 -0
  9. data/lib/vagrant/provisioners/chef_solo.rb +1 -1
  10. data/lib/vagrant/util/template_renderer.rb +2 -2
  11. data/lib/vagrant/version.rb +1 -1
  12. data/templates/Vagrantfile.erb +1 -1
  13. data/templates/nfs/exports.erb +4 -2
  14. data/test/test_helper.rb +128 -0
  15. data/test/vagrant/action/box/destroy_test.rb +30 -0
  16. data/test/vagrant/action/box/download_test.rb +141 -0
  17. data/test/vagrant/action/box/package_test.rb +25 -0
  18. data/test/vagrant/action/box/unpackage_test.rb +103 -0
  19. data/test/vagrant/action/box/verify_test.rb +39 -0
  20. data/test/vagrant/action/builder_test.rb +218 -0
  21. data/test/vagrant/action/env/error_halt_test.rb +21 -0
  22. data/test/vagrant/action/env/set_test.rb +24 -0
  23. data/test/vagrant/action/environment_test.rb +45 -0
  24. data/test/vagrant/action/exception_catcher_test.rb +30 -0
  25. data/test/vagrant/action/general/package_test.rb +254 -0
  26. data/test/vagrant/action/vm/boot_test.rb +83 -0
  27. data/test/vagrant/action/vm/check_box_test.rb +48 -0
  28. data/test/vagrant/action/vm/check_guest_additions_test.rb +9 -0
  29. data/test/vagrant/action/vm/clean_machine_folder_test.rb +82 -0
  30. data/test/vagrant/action/vm/clear_forwarded_ports_test.rb +72 -0
  31. data/test/vagrant/action/vm/clear_nfs_exports_test.rb +22 -0
  32. data/test/vagrant/action/vm/clear_shared_folders_test.rb +49 -0
  33. data/test/vagrant/action/vm/customize_test.rb +29 -0
  34. data/test/vagrant/action/vm/destroy_test.rb +26 -0
  35. data/test/vagrant/action/vm/destroy_unused_network_interfaces_test.rb +46 -0
  36. data/test/vagrant/action/vm/disable_networks_test.rb +39 -0
  37. data/test/vagrant/action/vm/discard_state_test.rb +36 -0
  38. data/test/vagrant/action/vm/export_test.rb +135 -0
  39. data/test/vagrant/action/vm/forward_ports_helpers_test.rb +70 -0
  40. data/test/vagrant/action/vm/forward_ports_test.rb +191 -0
  41. data/test/vagrant/action/vm/halt_test.rb +69 -0
  42. data/test/vagrant/action/vm/import_test.rb +50 -0
  43. data/test/vagrant/action/vm/match_mac_address_test.rb +28 -0
  44. data/test/vagrant/action/vm/network_test.rb +246 -0
  45. data/test/vagrant/action/vm/nfs_helpers_test.rb +23 -0
  46. data/test/vagrant/action/vm/nfs_test.rb +269 -0
  47. data/test/vagrant/action/vm/package_test.rb +25 -0
  48. data/test/vagrant/action/vm/package_vagrantfile_test.rb +46 -0
  49. data/test/vagrant/action/vm/persist_test.rb +50 -0
  50. data/test/vagrant/action/vm/provision_test.rb +134 -0
  51. data/test/vagrant/action/vm/resume_test.rb +35 -0
  52. data/test/vagrant/action/vm/share_folders_test.rb +215 -0
  53. data/test/vagrant/action/vm/suspend_test.rb +35 -0
  54. data/test/vagrant/action_test.rb +111 -0
  55. data/test/vagrant/active_list_test.rb +173 -0
  56. data/test/vagrant/box_test.rb +166 -0
  57. data/test/vagrant/command_test.rb +53 -0
  58. data/test/vagrant/commands/base_test.rb +139 -0
  59. data/test/vagrant/commands/box/add_test.rb +34 -0
  60. data/test/vagrant/commands/box/list_test.rb +32 -0
  61. data/test/vagrant/commands/box/remove_test.rb +41 -0
  62. data/test/vagrant/commands/box/repackage_test.rb +52 -0
  63. data/test/vagrant/commands/destroy_test.rb +44 -0
  64. data/test/vagrant/commands/halt_test.rb +50 -0
  65. data/test/vagrant/commands/init_test.rb +71 -0
  66. data/test/vagrant/commands/package_test.rb +97 -0
  67. data/test/vagrant/commands/provision_test.rb +60 -0
  68. data/test/vagrant/commands/reload_test.rb +47 -0
  69. data/test/vagrant/commands/resume_test.rb +44 -0
  70. data/test/vagrant/commands/ssh_config_test.rb +77 -0
  71. data/test/vagrant/commands/ssh_test.rb +129 -0
  72. data/test/vagrant/commands/status_test.rb +40 -0
  73. data/test/vagrant/commands/suspend_test.rb +44 -0
  74. data/test/vagrant/commands/up_test.rb +49 -0
  75. data/test/vagrant/config_test.rb +307 -0
  76. data/test/vagrant/downloaders/base_test.rb +28 -0
  77. data/test/vagrant/downloaders/file_test.rb +33 -0
  78. data/test/vagrant/downloaders/http_test.rb +70 -0
  79. data/test/vagrant/environment_test.rb +770 -0
  80. data/test/vagrant/hosts/base_test.rb +46 -0
  81. data/test/vagrant/hosts/bsd_test.rb +56 -0
  82. data/test/vagrant/hosts/linux_test.rb +56 -0
  83. data/test/vagrant/provisioners/base_test.rb +36 -0
  84. data/test/vagrant/provisioners/chef_server_test.rb +182 -0
  85. data/test/vagrant/provisioners/chef_solo_test.rb +197 -0
  86. data/test/vagrant/provisioners/chef_test.rb +178 -0
  87. data/test/vagrant/ssh_session_test.rb +46 -0
  88. data/test/vagrant/ssh_test.rb +317 -0
  89. data/test/vagrant/systems/linux_test.rb +179 -0
  90. data/test/vagrant/util/busy_test.rb +106 -0
  91. data/test/vagrant/util/plain_logger_test.rb +17 -0
  92. data/test/vagrant/util/platform_test.rb +18 -0
  93. data/test/vagrant/util/resource_logger_test.rb +145 -0
  94. data/test/vagrant/util/stacked_proc_runner_test.rb +43 -0
  95. data/test/vagrant/util/template_renderer_test.rb +145 -0
  96. data/test/vagrant/util/translator_test.rb +61 -0
  97. data/test/vagrant/util_test.rb +27 -0
  98. data/test/vagrant/vm_test.rb +228 -0
  99. data/vagrant.gemspec +34 -0
  100. 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