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,215 @@
1
+ require "test_helper"
2
+
3
+ class ShareFoldersVMActionTest < Test::Unit::TestCase
4
+ setup do
5
+ @klass = Vagrant::Action::VM::ShareFolders
6
+ @app, @env = mock_action_data
7
+
8
+ @vm = mock("vm")
9
+ @vm.stubs(:name).returns("foo")
10
+ @vm.stubs(:ssh).returns(mock("ssh"))
11
+ @vm.stubs(:system).returns(mock("system"))
12
+ @env["vm"] = @vm
13
+
14
+ @internal_vm = mock("internal")
15
+ @vm.stubs(:vm).returns(@internal_vm)
16
+
17
+ @instance = @klass.new(@app, @env)
18
+ end
19
+
20
+ def stub_shared_folders
21
+ env = mock_environment do |config|
22
+ config.vm.shared_folders.clear
23
+
24
+ if block_given?
25
+ yield config
26
+ else
27
+ folders = [%w{foo fooguest foohost}, %w{bar barguest barhost}]
28
+ folders.each do |data|
29
+ config.vm.share_folder(*data)
30
+ end
31
+ end
32
+ end
33
+
34
+ @env.stubs(:env).returns(env)
35
+ env.config.vm.shared_folders
36
+ end
37
+
38
+ context "calling" do
39
+ should "run the methods in the proper order" do
40
+ before_seq = sequence("before")
41
+ @instance.expects(:create_metadata).once.in_sequence(before_seq)
42
+ @app.expects(:call).with(@env).in_sequence(before_seq)
43
+ @instance.expects(:mount_shared_folders).once.in_sequence(before_seq)
44
+ @instance.expects(:setup_unison).once.in_sequence(before_seq)
45
+
46
+ @instance.call(@env)
47
+ end
48
+
49
+ should "run only the metadata actions if erroneous environment" do
50
+ @env.error!(:foo)
51
+
52
+ before_seq = sequence("before")
53
+ @instance.expects(:create_metadata).once.in_sequence(before_seq)
54
+ @app.expects(:call).with(@env).in_sequence(before_seq)
55
+ @instance.expects(:mount_shared_folders).never
56
+ @instance.expects(:setup_unison).never
57
+
58
+ @instance.call(@env)
59
+ end
60
+ end
61
+
62
+ context "collecting shared folders" do
63
+ setup do
64
+ File.stubs(:expand_path).returns("baz")
65
+ end
66
+
67
+ should "return a hash of the shared folders" do
68
+ data = {
69
+ "foo" => %W[bar baz],
70
+ "bar" => %W[foo baz]
71
+ }
72
+
73
+ stub_shared_folders do |config|
74
+ data.each do |name, value|
75
+ config.vm.share_folder(name, *value)
76
+ end
77
+ end
78
+
79
+ result = @instance.shared_folders
80
+ assert_equal data.length, result.length
81
+ data.each do |name, value|
82
+ guest, host = value
83
+ assert_equal guest, result[name][:guestpath]
84
+ assert_equal host, result[name][:hostpath]
85
+ end
86
+ end
87
+
88
+ should "ignore disabled shared folders" do
89
+ stub_shared_folders do |config|
90
+ config.vm.share_folder("v-foo", "/foo", "/foo")
91
+ config.vm.share_folder("v-root", "/vagrant", ".", :disabled => true)
92
+ config.vm.share_folder("v-bar", "/bar", "/bar")
93
+ end
94
+
95
+ assert_equal 2, @instance.shared_folders.length
96
+ assert_equal %W[v-bar v-foo], @instance.shared_folders.keys.sort
97
+ end
98
+
99
+ should "append sync suffix if sync enabled to a folder" do
100
+ name = "foo"
101
+ guest = "bar"
102
+ host = "baz"
103
+
104
+ stub_shared_folders do |config|
105
+ config.vm.share_folder(name, guest, host, :sync => true)
106
+ end
107
+
108
+ result = @instance.shared_folders
109
+ assert_equal "#{guest}#{@env.env.config.unison.folder_suffix}", result[name][:guestpath]
110
+ assert_equal guest, result[name][:original][:guestpath]
111
+ end
112
+
113
+ should "not destroy original hash" do
114
+ @folders = stub_shared_folders do |config|
115
+ config.vm.share_folder("foo", "bar", "baz", :sync => true)
116
+ end
117
+
118
+ folder = @folders["foo"].dup
119
+
120
+ @instance.shared_folders
121
+ assert_equal folder, @env.env.config.vm.shared_folders["foo"]
122
+ end
123
+ end
124
+
125
+ context "unison shared folders" do
126
+ setup do
127
+ @folders = stub_shared_folders do |config|
128
+ config.vm.share_folder("foo", "bar", "baz", :sync => true)
129
+ config.vm.share_folder("bar", "foo", "baz")
130
+ end
131
+ end
132
+
133
+ should "only return the folders marked for syncing" do
134
+ result = @instance.unison_folders
135
+ assert_equal 1, result.length
136
+ assert result.has_key?("foo")
137
+ assert !result.has_key?("bar")
138
+ end
139
+ end
140
+
141
+ context "setting up shared folder metadata" do
142
+ setup do
143
+ stub_shared_folders
144
+ end
145
+
146
+ should "add all shared folders to the VM" do
147
+ shared_folders = []
148
+ data = %W[foo bar]
149
+ shared_folders.expects(:<<).times(data.length).with() do |sf|
150
+ hostpath = File.expand_path("#{sf.name}host", @env.env.root_path)
151
+ assert data.include?(sf.name)
152
+ assert_equal hostpath, sf.host_path
153
+ true
154
+ end
155
+
156
+ @internal_vm.stubs(:shared_folders).returns(shared_folders)
157
+ @internal_vm.expects(:save).once
158
+
159
+ @instance.create_metadata
160
+ end
161
+ end
162
+
163
+ context "mounting the shared folders" do
164
+ setup do
165
+ @folders = stub_shared_folders
166
+ @ssh = mock("ssh")
167
+ @vm.ssh.stubs(:execute).yields(@ssh)
168
+ @vm.system.stubs(:mount_shared_folder)
169
+ end
170
+
171
+ should "mount all shared folders to the VM" do
172
+ mount_seq = sequence("mount_seq")
173
+ @folders.each do |name, data|
174
+ @vm.system.expects(:mount_shared_folder).with(@ssh, name, data[:guestpath]).in_sequence(mount_seq)
175
+ end
176
+
177
+ @instance.mount_shared_folders
178
+ end
179
+ end
180
+
181
+ context "setting up unison" do
182
+ setup do
183
+ @ssh = mock("ssh")
184
+ @vm.ssh.stubs(:execute).yields(@ssh)
185
+
186
+ @folders = stub_shared_folders do |config|
187
+ config.vm.share_folder("foo", "bar", "baz", :sync => true)
188
+ config.vm.share_folder("bar", "foo", "baz")
189
+ end
190
+ end
191
+
192
+ should "do nothing if unison folders is empty" do
193
+ @instance.stubs(:unison_folders).returns({})
194
+ @vm.ssh.expects(:execute).never
195
+ @instance.setup_unison
196
+ end
197
+
198
+ should "prepare unison then create for each folder" do
199
+ seq = sequence("unison seq")
200
+ @vm.system.expects(:prepare_unison).with(@ssh).once.in_sequence(seq)
201
+ @instance.unison_folders.each do |name, data|
202
+ if data[:sync]
203
+ @vm.system.expects(:create_unison).with do |ssh, opts|
204
+ assert_equal @ssh, ssh
205
+ assert_equal data, opts
206
+
207
+ true
208
+ end
209
+ end
210
+ end
211
+
212
+ @instance.setup_unison
213
+ end
214
+ end
215
+ end
@@ -0,0 +1,35 @@
1
+ require "test_helper"
2
+
3
+ class SuspendVMActionTest < Test::Unit::TestCase
4
+ setup do
5
+ @klass = Vagrant::Action::VM::Suspend
6
+ @app, @env = mock_action_data
7
+
8
+ @vm = mock("vm")
9
+ @env["vm"] = @vm
10
+
11
+ @internal_vm = mock("internal")
12
+ @vm.stubs(:vm).returns(@internal_vm)
13
+
14
+ @instance = @klass.new(@app, @env)
15
+ end
16
+
17
+ context "calling" do
18
+ should "run the proper methods when running" do
19
+ @internal_vm.expects(:running?).returns(true)
20
+
21
+ seq = sequence("seq")
22
+ @internal_vm.expects(:save_state).once.in_sequence(seq)
23
+ @app.expects(:call).with(@env).once.in_sequence(seq)
24
+ @instance.call(@env)
25
+ end
26
+
27
+ should "do nothing if VM is not running" do
28
+ @internal_vm.expects(:running?).returns(false)
29
+
30
+ @internal_vm.expects(:save_state).never
31
+ @app.expects(:call).with(@env).once
32
+ @instance.call(@env)
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,111 @@
1
+ require "test_helper"
2
+
3
+ class ActionTest < Test::Unit::TestCase
4
+ setup do
5
+ @klass = Vagrant::Action
6
+ end
7
+
8
+ context "with a class" do
9
+ teardown do
10
+ @klass.actions.clear
11
+ end
12
+
13
+ should "be able to register an action" do
14
+ @klass.register(:foo, :bar)
15
+ assert @klass.actions.has_key?(:foo)
16
+ assert_equal :bar, @klass.actions[:foo]
17
+ end
18
+
19
+ should "be able to retrieve an action using []" do
20
+ @klass.register(:foo, :bar)
21
+ assert_equal :bar, @klass[:foo]
22
+ end
23
+ end
24
+
25
+ context "with an instance" do
26
+ setup do
27
+ @instance = @klass.new(mock_environment)
28
+ end
29
+
30
+ teardown do
31
+ @klass.actions.clear
32
+ end
33
+
34
+ should "raise an exception if a nil action is given" do
35
+ assert_raises(Vagrant::Exceptions::UncallableAction) { @instance.run(nil) }
36
+ assert_raises(Vagrant::Exceptions::UncallableAction) { @instance.run(:dontexist) }
37
+ end
38
+
39
+ should "run the callable item with the proper context" do
40
+ callable = mock("callable")
41
+ callable.expects(:call).with() do |env|
42
+ assert env.kind_of?(Vagrant::Action::Environment)
43
+ assert_equal @instance.env, env.env
44
+ true
45
+ end
46
+
47
+ @instance.run(callable)
48
+ end
49
+
50
+ should "run the callable with the passed in options if given" do
51
+ options = {
52
+ :key => :value,
53
+ :another => %W[1 2 3]
54
+ }
55
+
56
+ callable = mock("callable")
57
+ callable.expects(:call).with() do |env|
58
+ assert env.kind_of?(Vagrant::Action::Environment)
59
+ assert_equal @instance.env, env.env
60
+
61
+ options.each do |k,v|
62
+ assert_equal v, env[k]
63
+ end
64
+
65
+ true
66
+ end
67
+
68
+ @instance.run(callable, options)
69
+ end
70
+
71
+ should "run the registered callable if a symbol is given" do
72
+ callable = mock("callable")
73
+ callable.expects(:call).once
74
+
75
+ @klass.register(:call, callable)
76
+ @instance.run(:call)
77
+ end
78
+
79
+ should "run the given class if a class is given" do
80
+ callable = Class.new do
81
+ def initialize(app, env); end
82
+ end
83
+
84
+ callable.any_instance.expects(:call).with() do |env|
85
+ assert_equal :foo, env[:bar]
86
+ true
87
+ end
88
+
89
+ @instance.run(callable, :bar => :foo)
90
+ end
91
+
92
+ should "exit if environment was marked as interrupted" do
93
+ callable = lambda do |env|
94
+ env.error!(:interrupt)
95
+ end
96
+
97
+ @instance.stubs(:error_and_exit)
98
+ @instance.expects(:exit).once
99
+ @instance.run(callable)
100
+ end
101
+
102
+ should "error and exit if erroneous environment results" do
103
+ callable = lambda do |env|
104
+ env.error!(:key, :foo => :bar)
105
+ end
106
+
107
+ @instance.expects(:error_and_exit).with(:key, :foo => :bar)
108
+ @instance.run(callable)
109
+ end
110
+ end
111
+ end
@@ -0,0 +1,173 @@
1
+ require "test_helper"
2
+
3
+ class ActiveListTest < Test::Unit::TestCase
4
+ setup do
5
+ @env = mock_environment
6
+ @list = Vagrant::ActiveList.new(@env)
7
+ end
8
+
9
+ context "initializing" do
10
+ should "set the environment to nil if not specified" do
11
+ assert_nothing_raised {
12
+ list = Vagrant::ActiveList.new
13
+ assert list.env.nil?
14
+ }
15
+ end
16
+
17
+ should "set the environment to the given parameter if specified" do
18
+ env = mock("env")
19
+ list = Vagrant::ActiveList.new(env)
20
+ assert_equal env, list.env
21
+ end
22
+ end
23
+
24
+ context "listing" do
25
+ setup do
26
+ @path = "foo"
27
+ @list.stubs(:path).returns(@path)
28
+ end
29
+
30
+ should "load if reload is given" do
31
+ File.stubs(:file?).returns(true)
32
+ File.expects(:open).once
33
+ @list.list(true)
34
+ end
35
+
36
+ should "not load if the active json file doesn't exist" do
37
+ File.expects(:file?).with(@list.path).returns(false)
38
+ File.expects(:open).never
39
+ assert_equal Hash.new, @list.list(true)
40
+ end
41
+
42
+ should "parse the JSON by reading the file" do
43
+ file = mock("file")
44
+ data = mock("data")
45
+ result = { :hey => :yep }
46
+ File.expects(:file?).returns(true)
47
+ File.expects(:open).with(@list.path, 'r').once.yields(file)
48
+ file.expects(:read).returns(data)
49
+ JSON.expects(:parse).with(data).returns(result)
50
+ assert_equal result, @list.list(true)
51
+ end
52
+
53
+ should "not load if reload flag is false and already loaded" do
54
+ File.expects(:file?).once.returns(false)
55
+ result = @list.list(true)
56
+ assert result.equal?(@list.list)
57
+ assert result.equal?(@list.list)
58
+ assert result.equal?(@list.list)
59
+ end
60
+
61
+ should "be an empty hash if JSON parsing raises an exception" do
62
+ file = mock("file")
63
+ file.stubs(:read)
64
+ File.expects(:file?).returns(true)
65
+ File.expects(:open).with(@list.path, 'r').once.yields(file)
66
+ JSON.expects(:parse).raises(Exception)
67
+
68
+ assert_nothing_raised do
69
+ assert_equal Hash.new, @list.list(true)
70
+ end
71
+ end
72
+ end
73
+
74
+ context "filter list" do
75
+ should "remove nonexistent VMs" do
76
+ list = {}
77
+ result = {}
78
+ 5.times do |i|
79
+ vm = mock("vm#{i}")
80
+ vm.stubs(:uuid).returns(i)
81
+
82
+ list[vm.uuid] = {}
83
+
84
+ found_vm = i % 2 ? nil : vm
85
+ Vagrant::VM.stubs(:find).with(vm.uuid, @env).returns(found_vm)
86
+ results[vm.uuid] = {} if found_vm
87
+ end
88
+
89
+ @list.stubs(:list).returns(list)
90
+ assert_equal result, @list.filter_list
91
+ end
92
+ end
93
+
94
+ context "adding a VM to the list" do
95
+ setup do
96
+ @the_list = {}
97
+ @list.stubs(:list).returns(@the_list)
98
+ @list.stubs(:save)
99
+
100
+ @uuid = "foo"
101
+ @vm = mock("vm")
102
+ @vm.stubs(:uuid).returns(@uuid)
103
+ end
104
+
105
+ should "add the VMs UUID to the list" do
106
+ @list.add(@vm)
107
+ assert @the_list[@uuid]
108
+ assert @the_list[@uuid].is_a?(Hash)
109
+ end
110
+
111
+ should "save after adding" do
112
+ save_seq = sequence('save')
113
+ @the_list.expects(:[]=).in_sequence(save_seq)
114
+ @list.expects(:save).in_sequence(save_seq)
115
+ @list.add(@vm)
116
+ end
117
+ end
118
+
119
+ context "deleting a VM from the list" do
120
+ setup do
121
+ @the_list = ["bar"]
122
+ @list.stubs(:list).returns(@the_list)
123
+ @list.stubs(:save)
124
+
125
+ @uuid = "bar"
126
+ @vm = mock("vm")
127
+ @vm.stubs(:uuid).returns(@uuid)
128
+ @vm.stubs(:is_a?).with(Vagrant::VM).returns(true)
129
+ end
130
+
131
+ should "delete the uuid from the list of a VM" do
132
+ @list.remove(@vm)
133
+ assert @the_list.empty?
134
+ end
135
+
136
+ should "delete just the string if a string is given" do
137
+ @the_list << "zoo"
138
+ @list.remove("zoo")
139
+ assert !@the_list.include?("zoo")
140
+ end
141
+
142
+ should "save after removing" do
143
+ save_seq = sequence('save')
144
+ @the_list.expects(:delete).in_sequence(save_seq)
145
+ @list.expects(:save).in_sequence(save_seq)
146
+ @list.remove(@vm)
147
+ end
148
+ end
149
+
150
+ context "saving" do
151
+ setup do
152
+ @filtered = ["zoo"]
153
+ @list.stubs(:filter_list).returns(@filtered)
154
+ end
155
+
156
+ should "open the JSON path and save to it" do
157
+ file = mock("file")
158
+ File.expects(:open).with(@list.path, "w+").yields(file)
159
+ file.expects(:write).with(@filtered.to_json)
160
+ @list.save
161
+ end
162
+ end
163
+
164
+ context "path" do
165
+ setup do
166
+ @env.stubs(:home_path).returns("foo")
167
+ end
168
+
169
+ should "return the active file within the home path" do
170
+ assert_equal File.join(@env.home_path, Vagrant::ActiveList::FILENAME), @list.path
171
+ end
172
+ end
173
+ end
@@ -0,0 +1,166 @@
1
+ require "test_helper"
2
+
3
+ class BoxTest < Test::Unit::TestCase
4
+ context "class methods" do
5
+ setup do
6
+ @env = mock_environment
7
+ end
8
+
9
+ context "listing all boxes" do
10
+ setup do
11
+ Dir.stubs(:open)
12
+ File.stubs(:directory?).returns(true)
13
+
14
+ @boxes_path = "foo"
15
+ @env.stubs(:boxes_path).returns(@boxes_path)
16
+ end
17
+
18
+ should "open the boxes directory" do
19
+ Dir.expects(:open).with(@env.boxes_path)
20
+ Vagrant::Box.all(@env)
21
+ end
22
+
23
+ should "return an array" do
24
+ result = Vagrant::Box.all(@env)
25
+ assert result.is_a?(Array)
26
+ end
27
+
28
+ should "not return the '.' and '..' directories" do
29
+ dir = [".", "..", "..", ".", ".."]
30
+ Dir.expects(:open).yields(dir)
31
+ result = Vagrant::Box.all(@env)
32
+ assert result.empty?
33
+ end
34
+
35
+ should "return the other directories" do
36
+ dir = [".", "foo", "bar", "baz"]
37
+ Dir.expects(:open).yields(dir)
38
+ result = Vagrant::Box.all(@env)
39
+ assert_equal ["foo", "bar", "baz"], result
40
+ end
41
+
42
+ should "ignore the files" do
43
+ dir = ["foo", "bar"]
44
+ files = [true, false]
45
+ Dir.expects(:open).yields(dir)
46
+ dir_sequence = sequence("directory")
47
+ dir.each_with_index do |dir, index|
48
+ File.expects(:directory?).with(File.join(@boxes_path, dir)).returns(files[index]).in_sequence(dir_sequence)
49
+ end
50
+
51
+ result = Vagrant::Box.all(@env)
52
+ assert_equal ["foo"], result
53
+ end
54
+ end
55
+
56
+ context "finding" do
57
+ setup do
58
+ @dir = "foo"
59
+ @name = "bar"
60
+ Vagrant::Box.stubs(:directory).with(@env, @name).returns(@dir)
61
+ end
62
+
63
+ should "return nil if the box doesn't exist" do
64
+ File.expects(:directory?).with(@dir).once.returns(false)
65
+ assert_nil Vagrant::Box.find(@env, @name)
66
+ end
67
+
68
+ should "return a box object with the proper name set" do
69
+ File.expects(:directory?).with(@dir).once.returns(true)
70
+ result = Vagrant::Box.find(@env, @name)
71
+ assert result
72
+ assert_equal @name, result.name
73
+ end
74
+
75
+ should "return a box object with the proper env set" do
76
+ File.expects(:directory?).with(@dir).once.returns(true)
77
+ result = Vagrant::Box.find(@env, @name)
78
+ assert result
79
+ assert_equal @env, result.env
80
+ end
81
+ end
82
+
83
+ context "adding" do
84
+ setup do
85
+ @name = "foo"
86
+ @uri = "bar"
87
+ end
88
+
89
+ should "create a new instance, set the variables, and add it" do
90
+ box = mock("box")
91
+ box.expects(:name=).with(@name)
92
+ box.expects(:uri=).with(@uri)
93
+ box.expects(:env=).with(@env)
94
+ box.expects(:add).once
95
+ Vagrant::Box.expects(:new).returns(box)
96
+ Vagrant::Box.add(@env, @name, @uri)
97
+ end
98
+ end
99
+
100
+ context "box directory" do
101
+ setup do
102
+ @name = "foo"
103
+ @box_dir = File.join(@env.boxes_path, @name)
104
+ end
105
+
106
+ should "return the boxes_path joined with the name" do
107
+ assert_equal @box_dir, Vagrant::Box.directory(@env, @name)
108
+ end
109
+ end
110
+ end
111
+
112
+ context "instance methods" do
113
+ setup do
114
+ @box = Vagrant::Box.new
115
+ @box.env = mock_environment
116
+ end
117
+
118
+ should "execute the Add action when add is called" do
119
+ @box.env.actions.expects(:run).with(:box_add, { "box" => @box })
120
+ @box.add
121
+ end
122
+
123
+ context "box directory" do
124
+ setup do
125
+ @box.name = "foo"
126
+ end
127
+
128
+ should "return the boxes_path joined with the name" do
129
+ result = mock("object")
130
+ Vagrant::Box.expects(:directory).with(@box.env, @box.name).returns(result)
131
+ assert result.equal?(@box.directory)
132
+ end
133
+ end
134
+
135
+ context "destroying" do
136
+ should "execute the destroy action" do
137
+ @box.env.actions.expects(:run).with(:box_remove, { "box" => @box })
138
+ @box.destroy
139
+ end
140
+ end
141
+
142
+ context "repackaging" do
143
+ should "execute the repackage action" do
144
+ @box.env.actions.expects(:run).with(:box_repackage, { "box" => @box })
145
+ @box.repackage
146
+ end
147
+
148
+ should "forward given options into the action" do
149
+ @box.env.actions.expects(:run).with(:box_repackage, { "box" => @box, "foo" => "bar" })
150
+ @box.repackage("foo" => "bar")
151
+ end
152
+ end
153
+
154
+ context "ovf file" do
155
+ setup do
156
+ @box.stubs(:directory).returns("foo")
157
+
158
+ @box.env.config.vm.box_ovf = "foo.ovf"
159
+ end
160
+
161
+ should "be the directory joined with the config ovf file" do
162
+ assert_equal File.join(@box.directory, @box.env.config.vm.box_ovf), @box.ovf_file
163
+ end
164
+ end
165
+ end
166
+ end