virtualbox 0.4.3 → 0.5.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/.gitignore +3 -3
- data/Gemfile +8 -8
- data/Rakefile +2 -0
- data/Readme.md +11 -2
- data/VERSION +1 -1
- data/docs/WhatsNew.md +40 -24
- data/lib/virtualbox.rb +9 -0
- data/lib/virtualbox/abstract_model.rb +80 -10
- data/lib/virtualbox/abstract_model/attributable.rb +61 -1
- data/lib/virtualbox/abstract_model/relatable.rb +88 -6
- data/lib/virtualbox/attached_device.rb +18 -10
- data/lib/virtualbox/command.rb +13 -0
- data/lib/virtualbox/dvd.rb +35 -0
- data/lib/virtualbox/exceptions.rb +1 -0
- data/lib/virtualbox/extra_data.rb +10 -21
- data/lib/virtualbox/global.rb +126 -0
- data/lib/virtualbox/hard_drive.rb +33 -9
- data/lib/virtualbox/image.rb +2 -3
- data/lib/virtualbox/media.rb +19 -0
- data/lib/virtualbox/nic.rb +28 -67
- data/lib/virtualbox/shared_folder.rb +7 -12
- data/lib/virtualbox/storage_controller.rb +8 -36
- data/lib/virtualbox/system_property.rb +55 -0
- data/lib/virtualbox/usb.rb +72 -0
- data/lib/virtualbox/vm.rb +126 -25
- data/test/test_helper.rb +118 -12
- data/test/virtualbox/abstract_model/attributable_test.rb +55 -5
- data/test/virtualbox/abstract_model/relatable_test.rb +66 -4
- data/test/virtualbox/abstract_model_test.rb +140 -8
- data/test/virtualbox/attached_device_test.rb +10 -7
- data/test/virtualbox/command_test.rb +13 -0
- data/test/virtualbox/dvd_test.rb +50 -28
- data/test/virtualbox/extra_data_test.rb +11 -51
- data/test/virtualbox/global_test.rb +78 -0
- data/test/virtualbox/hard_drive_test.rb +34 -57
- data/test/virtualbox/image_test.rb +0 -5
- data/test/virtualbox/nic_test.rb +11 -64
- data/test/virtualbox/shared_folder_test.rb +5 -5
- data/test/virtualbox/storage_controller_test.rb +15 -30
- data/test/virtualbox/system_property_test.rb +71 -0
- data/test/virtualbox/usb_test.rb +35 -0
- data/test/virtualbox/vm_test.rb +62 -121
- data/virtualbox.gemspec +15 -2
- metadata +23 -4
@@ -17,6 +17,9 @@ class AttachedDeviceTest < Test::Unit::TestCase
|
|
17
17
|
|
18
18
|
# Stub execute to make sure nothing actually happens
|
19
19
|
VirtualBox::Command.stubs(:execute).returns('')
|
20
|
+
|
21
|
+
# Stub the config
|
22
|
+
VirtualBox::Global.stubs(:config).returns(mock_xml_doc)
|
20
23
|
end
|
21
24
|
|
22
25
|
context "validations" do
|
@@ -71,7 +74,7 @@ class AttachedDeviceTest < Test::Unit::TestCase
|
|
71
74
|
|
72
75
|
context "saving an existing device" do
|
73
76
|
setup do
|
74
|
-
@value = VirtualBox::AttachedDevice.populate_relationship(@caller,
|
77
|
+
@value = VirtualBox::AttachedDevice.populate_relationship(@caller, mock_xml_doc)
|
75
78
|
@value = @value[0]
|
76
79
|
@value.image = VirtualBox::DVD.empty_drive
|
77
80
|
assert @value.changed?
|
@@ -210,7 +213,7 @@ class AttachedDeviceTest < Test::Unit::TestCase
|
|
210
213
|
|
211
214
|
context "destroying" do
|
212
215
|
setup do
|
213
|
-
@value = VirtualBox::AttachedDevice.populate_relationship(@caller,
|
216
|
+
@value = VirtualBox::AttachedDevice.populate_relationship(@caller, mock_xml_doc)
|
214
217
|
@value = @value[0]
|
215
218
|
|
216
219
|
@image = mock("image")
|
@@ -278,7 +281,7 @@ class AttachedDeviceTest < Test::Unit::TestCase
|
|
278
281
|
|
279
282
|
context "populating relationships" do
|
280
283
|
setup do
|
281
|
-
@value = VirtualBox::AttachedDevice.populate_relationship(@caller,
|
284
|
+
@value = VirtualBox::AttachedDevice.populate_relationship(@caller, mock_xml_doc)
|
282
285
|
end
|
283
286
|
|
284
287
|
should "create the correct amount of objects" do
|
@@ -288,13 +291,13 @@ class AttachedDeviceTest < Test::Unit::TestCase
|
|
288
291
|
should "create objects with proper values" do
|
289
292
|
obj = @value[0]
|
290
293
|
assert_equal "none", obj.medium
|
291
|
-
assert_equal "
|
292
|
-
assert_equal 0, obj.port
|
294
|
+
assert_equal "2c16dd48-4cf1-497e-98fa-84ed55cfe71f", obj.uuid
|
295
|
+
assert_equal "0", obj.port
|
293
296
|
|
294
297
|
obj = @value[1]
|
295
|
-
assert_equal "
|
298
|
+
assert_equal "emptydrive", obj.medium
|
296
299
|
assert_nil obj.uuid
|
297
|
-
assert_equal 1, obj.port
|
300
|
+
assert_equal "1", obj.port
|
298
301
|
end
|
299
302
|
end
|
300
303
|
end
|
@@ -1,6 +1,19 @@
|
|
1
1
|
require File.join(File.dirname(__FILE__), '..', 'test_helper')
|
2
2
|
|
3
3
|
class CommandTest < Test::Unit::TestCase
|
4
|
+
context "parsing XML" do
|
5
|
+
should "open the file, parse it, and close the file" do
|
6
|
+
arg = "foo"
|
7
|
+
file = mock("file")
|
8
|
+
seq = sequence("seq")
|
9
|
+
File.expects(:open).with(arg, "r").returns(file).in_sequence(seq)
|
10
|
+
Nokogiri.expects(:XML).in_sequence(seq)
|
11
|
+
file.expects(:close).in_sequence(seq)
|
12
|
+
|
13
|
+
VirtualBox::Command.parse_xml(arg)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
4
17
|
context "shell escaping" do
|
5
18
|
should "convert value to string" do
|
6
19
|
assert_nothing_raised do
|
data/test/virtualbox/dvd_test.rb
CHANGED
@@ -8,6 +8,7 @@ class DVDTest < Test::Unit::TestCase
|
|
8
8
|
context "destroying a dvd" do
|
9
9
|
setup do
|
10
10
|
@dvd = VirtualBox::DVD.new
|
11
|
+
VirtualBox::DVD.reloaded!
|
11
12
|
end
|
12
13
|
|
13
14
|
should "return false if attempting to destroy an empty drive" do
|
@@ -30,6 +31,11 @@ class DVDTest < Test::Unit::TestCase
|
|
30
31
|
@dvd.destroy(true)
|
31
32
|
}
|
32
33
|
end
|
34
|
+
|
35
|
+
should "mark the global class for reloading" do
|
36
|
+
VirtualBox::Global.expects(:reload!)
|
37
|
+
assert @dvd.destroy
|
38
|
+
end
|
33
39
|
end
|
34
40
|
|
35
41
|
context "empty drive" do
|
@@ -46,19 +52,34 @@ class DVDTest < Test::Unit::TestCase
|
|
46
52
|
|
47
53
|
context "retrieving all dvds" do
|
48
54
|
setup do
|
49
|
-
@
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
55
|
+
@media = mock("media")
|
56
|
+
@media.expects(:dvds).returns([])
|
57
|
+
@global = mock("global")
|
58
|
+
@global.expects(:media).returns(@media)
|
59
|
+
end
|
60
|
+
|
61
|
+
should "return an array of DVD objects" do
|
62
|
+
VirtualBox::Global.expects(:global).returns(@global)
|
63
|
+
result = VirtualBox::DVD.all
|
64
|
+
assert result.is_a?(Array)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
context "retrieving all dvds by command" do
|
69
|
+
setup do
|
70
|
+
@expectations = {
|
71
|
+
"d3252617-8176-4f8c-9d73-1c9c82b23960" => {
|
72
|
+
:location => "/Users/mitchellh/Downloads/jeos-8.04.3-jeos-i386.iso",
|
73
|
+
:accessible => "yes"
|
74
|
+
},
|
75
|
+
|
76
|
+
"4a08f52c-bca3-4908-8da4-4f48aaa4ebba" => {
|
77
|
+
:location => "/Applications/VirtualBox.app/Contents/MacOS/VBoxGuestAdditions.iso",
|
78
|
+
:accessible => "yes"
|
79
|
+
}
|
58
80
|
}
|
59
|
-
}
|
60
81
|
|
61
|
-
|
82
|
+
@valid = <<-valid
|
62
83
|
UUID: d3252617-8176-4f8c-9d73-1c9c82b23960
|
63
84
|
Path: /Users/mitchellh/Downloads/jeos-8.04.3-jeos-i386.iso
|
64
85
|
Accessible: yes
|
@@ -69,29 +90,30 @@ Accessible: yes
|
|
69
90
|
Usage: TestJeOS (UUID: 3d0f87b4-50f7-4fc5-ad89-93375b1b32a3)
|
70
91
|
valid
|
71
92
|
|
72
|
-
|
73
|
-
|
93
|
+
VirtualBox::Command.expects(:vboxmanage).with("list", "dvds").returns(@valid).once
|
94
|
+
end
|
74
95
|
|
75
|
-
|
76
|
-
|
77
|
-
|
96
|
+
should "return an array of DVD objects" do
|
97
|
+
result = VirtualBox::DVD.all_from_command
|
98
|
+
assert result.is_a?(Array)
|
99
|
+
assert_equal @expectations.length, result.length
|
78
100
|
|
79
|
-
|
80
|
-
|
101
|
+
result.each { |v| assert v.is_a?(VirtualBox::DVD) }
|
102
|
+
end
|
81
103
|
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
104
|
+
should "return the proper results" do
|
105
|
+
result = VirtualBox::DVD.all_from_command
|
106
|
+
assert result.is_a?(Array)
|
107
|
+
assert_equal @expectations.length, result.length
|
86
108
|
|
87
|
-
|
88
|
-
|
89
|
-
|
109
|
+
result.each do |image|
|
110
|
+
expected_image = @expectations[image.uuid]
|
111
|
+
assert expected_image
|
90
112
|
|
91
|
-
|
92
|
-
|
113
|
+
expected_image.each do |k,v|
|
114
|
+
assert_equal v, image.read_attribute(k)
|
115
|
+
end
|
93
116
|
end
|
94
117
|
end
|
95
118
|
end
|
96
|
-
end
|
97
119
|
end
|
@@ -38,23 +38,11 @@ raw
|
|
38
38
|
setup do
|
39
39
|
@caller = mock("caller")
|
40
40
|
@caller.stubs(:name).returns("foocaller")
|
41
|
-
|
42
|
-
VirtualBox::Command.stubs(:vboxmanage).returns(@raw)
|
43
41
|
end
|
44
42
|
|
45
43
|
context "populating" do
|
46
|
-
should "
|
47
|
-
VirtualBox::
|
48
|
-
VirtualBox::ExtraData.populate_relationship(@caller, {})
|
49
|
-
end
|
50
|
-
|
51
|
-
should "call pairs_to_objects with parent set to the caller" do
|
52
|
-
VirtualBox::ExtraData.expects(:parse_kv_pairs).with(@raw, @caller).once
|
53
|
-
VirtualBox::ExtraData.populate_relationship(@caller, {})
|
54
|
-
end
|
55
|
-
|
56
|
-
should "return an array of ExtraData objects" do
|
57
|
-
result = VirtualBox::ExtraData.populate_relationship(@caller, {})
|
44
|
+
should "return a ExtraData object" do
|
45
|
+
result = VirtualBox::ExtraData.populate_relationship(@caller, mock_xml_doc)
|
58
46
|
assert result.is_a?(VirtualBox::ExtraData)
|
59
47
|
end
|
60
48
|
end
|
@@ -153,24 +141,25 @@ raw
|
|
153
141
|
|
154
142
|
context "global extra data" do
|
155
143
|
setup do
|
156
|
-
|
157
|
-
|
158
|
-
VirtualBox::
|
144
|
+
global = mock("global")
|
145
|
+
global.expects(:extra_data).once.returns("foo")
|
146
|
+
VirtualBox::Global.expects(:global).returns(global)
|
159
147
|
@global = VirtualBox::ExtraData.global(true)
|
160
148
|
end
|
161
149
|
|
162
|
-
should "call the
|
163
|
-
assert_equal "
|
150
|
+
should "call the global extra data if it has never been loaded" do
|
151
|
+
assert_equal "foo", VirtualBox::ExtraData.global
|
164
152
|
end
|
165
153
|
|
166
154
|
should "return the same object if it exists for global data, rather than recreating it" do
|
167
|
-
VirtualBox::
|
155
|
+
VirtualBox::Global.expects(:global).never
|
168
156
|
assert_equal @global, VirtualBox::ExtraData.global
|
169
157
|
end
|
170
158
|
|
171
159
|
should "return a new object if reload is true" do
|
172
|
-
|
173
|
-
|
160
|
+
global = mock("global")
|
161
|
+
global.expects(:extra_data).once.returns("bar")
|
162
|
+
VirtualBox::Global.expects(:global).returns(global)
|
174
163
|
assert !@global.equal?(VirtualBox::ExtraData.global(true))
|
175
164
|
end
|
176
165
|
end
|
@@ -186,33 +175,4 @@ raw
|
|
186
175
|
assert_equal "global", ed.parent
|
187
176
|
end
|
188
177
|
end
|
189
|
-
|
190
|
-
context "parsing KV pairs" do
|
191
|
-
setup do
|
192
|
-
@data = VirtualBox::ExtraData.parse_kv_pairs(@raw)
|
193
|
-
end
|
194
|
-
|
195
|
-
should "return the proper number of items" do
|
196
|
-
# Shows that it skips over non-matching lines as well
|
197
|
-
assert_equal 6, @data.length
|
198
|
-
end
|
199
|
-
|
200
|
-
should "return as an ExtraData Hash" do
|
201
|
-
assert @data.is_a?(Hash)
|
202
|
-
assert @data.is_a?(VirtualBox::ExtraData)
|
203
|
-
end
|
204
|
-
|
205
|
-
should "return proper values, trimmed" do
|
206
|
-
assert_equal "1 d, 2010-01-29, stable", @data["GUI/UpdateDate"]
|
207
|
-
end
|
208
|
-
|
209
|
-
should "send the 2nd param as the parent to the ED object" do
|
210
|
-
@data = VirtualBox::ExtraData.parse_kv_pairs(@raw, "FOO")
|
211
|
-
assert_equal "FOO", @data.parent
|
212
|
-
end
|
213
|
-
|
214
|
-
should "return an unchanged ED object" do
|
215
|
-
assert !@data.changed?
|
216
|
-
end
|
217
|
-
end
|
218
178
|
end
|
@@ -0,0 +1,78 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), '..', 'test_helper')
|
2
|
+
|
3
|
+
class GlobalTest < Test::Unit::TestCase
|
4
|
+
context "getting the global config" do
|
5
|
+
should "only get it once, then cache" do
|
6
|
+
VirtualBox::Global.expects(:config).returns(mock_xml_doc).once
|
7
|
+
result = VirtualBox::Global.global(true)
|
8
|
+
assert result
|
9
|
+
assert result.equal?(VirtualBox::Global.global)
|
10
|
+
end
|
11
|
+
|
12
|
+
should "reload if reload is true" do
|
13
|
+
VirtualBox::Global.expects(:config).returns(mock_xml_doc).twice
|
14
|
+
result = VirtualBox::Global.global(true)
|
15
|
+
assert result
|
16
|
+
assert !result.equal?(VirtualBox::Global.global(true))
|
17
|
+
end
|
18
|
+
|
19
|
+
should "reload if global reload flag is set" do
|
20
|
+
VirtualBox::Global.reload!
|
21
|
+
VirtualBox::Global.expects(:config).returns(mock_xml_doc).once
|
22
|
+
VirtualBox::Global.global
|
23
|
+
assert !VirtualBox::Global.reload?
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
context "parsing configuration XML" do
|
28
|
+
setup do
|
29
|
+
File.stubs(:exist?).returns(true)
|
30
|
+
VirtualBox::Command.stubs(:parse_xml)
|
31
|
+
end
|
32
|
+
|
33
|
+
should "check the file with the expanded path" do
|
34
|
+
File.stubs(:expand_path).returns("FOO")
|
35
|
+
File.expects(:exist?).with("FOO").returns(true)
|
36
|
+
VirtualBox::Global.config
|
37
|
+
end
|
38
|
+
|
39
|
+
should "raise an error if the config XML doesn't exist" do
|
40
|
+
File.expects(:exist?).returns(false)
|
41
|
+
assert_raises(VirtualBox::Exceptions::ConfigurationException) do
|
42
|
+
VirtualBox::Global.config
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
should "use Command.parse_xml to parse" do
|
47
|
+
VirtualBox::Command.expects(:parse_xml).with(anything).once
|
48
|
+
VirtualBox::Global.config
|
49
|
+
end
|
50
|
+
|
51
|
+
should "use the set vboxconfig to parse xml" do
|
52
|
+
VirtualBox::Global.vboxconfig = "/foo"
|
53
|
+
VirtualBox::Command.expects(:parse_xml).with("/foo").once
|
54
|
+
VirtualBox::Global.config
|
55
|
+
end
|
56
|
+
|
57
|
+
should "file expand path the vboxconfig path" do
|
58
|
+
VirtualBox::Global.vboxconfig = "foo"
|
59
|
+
VirtualBox::Command.expects(:parse_xml).with(File.expand_path("foo")).once
|
60
|
+
VirtualBox::Global.config
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
context "expanding path" do
|
65
|
+
setup do
|
66
|
+
VirtualBox::Global.vboxconfig = "/foo/bar/baz.rb"
|
67
|
+
end
|
68
|
+
|
69
|
+
should "expand the path properly" do
|
70
|
+
assert_equal "/foo/bar/vroom/rawr.bak", VirtualBox::Global.expand_path("vroom/rawr.bak")
|
71
|
+
end
|
72
|
+
|
73
|
+
should "expand the path relative to the vboxconfig directory" do
|
74
|
+
File.expects(:expand_path).with("foo", "/foo/bar").once
|
75
|
+
VirtualBox::Global.expand_path("foo")
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
@@ -19,6 +19,34 @@ raw
|
|
19
19
|
VirtualBox::Command.stubs(:vboxmanage).with("showhdinfo", @name).returns(@find_raw)
|
20
20
|
end
|
21
21
|
|
22
|
+
context "populating relationship" do
|
23
|
+
setup do
|
24
|
+
@xml = <<-xml
|
25
|
+
<MediaRegistry>
|
26
|
+
<HardDisks>
|
27
|
+
<HardDisk uuid="{9d2e4353-d1e9-466c-ac58-f2249264147b}" location="HardDisks/TestJeOS.vdi" format="VDI" type="Normal"/>
|
28
|
+
<HardDisk uuid="{5f7ccd06-78ef-47e9-b2bc-515aedd2f288}" location="HardDisks/hobobase.vdi" format="VDI" type="Normal"/>
|
29
|
+
</HardDisks>
|
30
|
+
</MediaRegistry>
|
31
|
+
xml
|
32
|
+
@doc = Nokogiri::XML(@xml)
|
33
|
+
end
|
34
|
+
|
35
|
+
should "create an object for each hard disk entry" do
|
36
|
+
result = VirtualBox::HardDrive.populate_relationship(nil, @doc)
|
37
|
+
assert_equal 2, result.length
|
38
|
+
end
|
39
|
+
|
40
|
+
should "properly extract uuid, location, and format" do
|
41
|
+
VirtualBox::Global.vboxconfig = "/foo/rawr.rb"
|
42
|
+
result = VirtualBox::HardDrive.populate_relationship(nil, @doc)
|
43
|
+
result = result[0]
|
44
|
+
assert_equal "9d2e4353-d1e9-466c-ac58-f2249264147b", result.uuid
|
45
|
+
assert_equal "VDI", result.format
|
46
|
+
assert_equal "/foo/HardDisks/TestJeOS.vdi", result.location
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
22
50
|
context "validations" do
|
23
51
|
setup do
|
24
52
|
@hd = VirtualBox::HardDrive.new
|
@@ -206,64 +234,13 @@ raw
|
|
206
234
|
end
|
207
235
|
|
208
236
|
context "retrieving all hard drives" do
|
209
|
-
setup do
|
210
|
-
@valid = <<-valid
|
211
|
-
UUID: 9d2e4353-d1e9-466c-ac58-f2249264147b
|
212
|
-
Format: VDI
|
213
|
-
Location: /Users/mitchellh/Library/VirtualBox/HardDisks/foo.vdi
|
214
|
-
Accessible: yes
|
215
|
-
Type: normal
|
216
|
-
Usage: TestJeOS (UUID: 3d0f87b4-50f7-4fc5-ad89-93375b1b32a3)
|
217
|
-
|
218
|
-
UUID: 11dedd14-57a1-4bdb-adeb-dd1d67f066e1
|
219
|
-
Format: VDI
|
220
|
-
Location: /Users/mitchellh/Library/VirtualBox/HardDisks/bar.vdi
|
221
|
-
Accessible: yes
|
222
|
-
Type: normal
|
223
|
-
Usage: HoboBase (UUID: 696249ad-00b6-4087-b47f-9b82629efc31)
|
224
|
-
|
225
|
-
UUID: 5e090af6-7d71-4f40-8b03-33aa665f9ecf
|
226
|
-
Format: VMDK
|
227
|
-
Location: /Users/mitchellh/Library/VirtualBox/HardDisks/baz.vmdk
|
228
|
-
Accessible: yes
|
229
|
-
Type: normal
|
230
|
-
Usage: foo (UUID: 8710d3db-d96a-46ed-9004-59fa891fda90)
|
231
|
-
valid
|
232
|
-
|
233
|
-
VirtualBox::Command.stubs(:vboxmanage).with("list", "hdds").returns(@valid)
|
234
|
-
|
235
|
-
@hd = mock("hd")
|
236
|
-
@hd.stubs(:is_a?).with(VirtualBox::HardDrive).returns(true)
|
237
|
-
VirtualBox::HardDrive.expects(:find).at_least(0).returns(@hd)
|
238
|
-
end
|
239
|
-
|
240
237
|
should "return an array of HardDrive objects" do
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
should "forward the raise_error flag to find" do
|
248
|
-
VirtualBox::HardDrive.expects(:find).with(anything, true).raises(VirtualBox::Exceptions::CommandFailedException)
|
249
|
-
assert_raises(VirtualBox::Exceptions::CommandFailedException) {
|
250
|
-
VirtualBox::HardDrive.all(true)
|
251
|
-
}
|
252
|
-
end
|
253
|
-
|
254
|
-
should "return false if an error occured" do
|
255
|
-
VirtualBox::Command.stubs(:vboxmanage).raises(VirtualBox::Exceptions::CommandFailedException)
|
256
|
-
|
257
|
-
assert_nothing_raised do
|
258
|
-
assert !VirtualBox::HardDrive.all
|
259
|
-
end
|
260
|
-
end
|
261
|
-
|
262
|
-
should "raise an exception if flag is set" do
|
263
|
-
VirtualBox::Command.stubs(:vboxmanage).raises(VirtualBox::Exceptions::CommandFailedException)
|
264
|
-
assert_raises(VirtualBox::Exceptions::CommandFailedException) {
|
265
|
-
VirtualBox::HardDrive.all(true)
|
266
|
-
}
|
238
|
+
media = mock("media")
|
239
|
+
media.expects(:hard_drives).returns("foo")
|
240
|
+
global = mock("global")
|
241
|
+
global.expects(:media).returns(media)
|
242
|
+
VirtualBox::Global.expects(:global).returns(global)
|
243
|
+
assert_equal "foo", VirtualBox::HardDrive.all
|
267
244
|
end
|
268
245
|
end
|
269
246
|
end
|