virtualbox 0.4.1 → 0.4.2
Sign up to get free protection for your applications and to get access to all the features.
- data/Readme.md +9 -9
- data/VERSION +1 -1
- data/docs/GettingStarted.md +11 -11
- data/docs/WhatsNew.md +1 -1
- data/lib/virtualbox.rb +10 -1
- data/lib/virtualbox/abstract_model.rb +47 -29
- data/lib/virtualbox/abstract_model/attributable.rb +16 -16
- data/lib/virtualbox/abstract_model/dirty.rb +10 -10
- data/lib/virtualbox/abstract_model/relatable.rb +22 -22
- data/lib/virtualbox/abstract_model/validatable.rb +4 -4
- data/lib/virtualbox/attached_device.rb +23 -23
- data/lib/virtualbox/command.rb +9 -9
- data/lib/virtualbox/dvd.rb +7 -7
- data/lib/virtualbox/ext/subclass_listing.rb +1 -1
- data/lib/virtualbox/extra_data.rb +17 -17
- data/lib/virtualbox/forwarded_port.rb +23 -23
- data/lib/virtualbox/hard_drive.rb +27 -27
- data/lib/virtualbox/image.rb +25 -18
- data/lib/virtualbox/nic.rb +22 -22
- data/lib/virtualbox/proxies/collection.rb +4 -4
- data/lib/virtualbox/shared_folder.rb +25 -25
- data/lib/virtualbox/storage_controller.rb +16 -16
- data/lib/virtualbox/vm.rb +95 -42
- data/test/virtualbox/abstract_model/attributable_test.rb +28 -28
- data/test/virtualbox/abstract_model/dirty_test.rb +13 -13
- data/test/virtualbox/abstract_model/relatable_test.rb +36 -36
- data/test/virtualbox/abstract_model/validatable_test.rb +22 -22
- data/test/virtualbox/abstract_model_test.rb +46 -36
- data/test/virtualbox/attached_device_test.rb +47 -47
- data/test/virtualbox/command_test.rb +12 -12
- data/test/virtualbox/dvd_test.rb +15 -19
- data/test/virtualbox/ext/subclass_listing_test.rb +2 -2
- data/test/virtualbox/extra_data_test.rb +37 -37
- data/test/virtualbox/forwarded_port_test.rb +31 -31
- data/test/virtualbox/hard_drive_test.rb +40 -48
- data/test/virtualbox/image_test.rb +36 -33
- data/test/virtualbox/nic_test.rb +22 -22
- data/test/virtualbox/proxies/collection_test.rb +6 -6
- data/test/virtualbox/shared_folder_test.rb +36 -36
- data/test/virtualbox/storage_controller_test.rb +14 -14
- data/test/virtualbox/vm_test.rb +121 -70
- data/test/virtualbox_test.rb +19 -0
- data/virtualbox.gemspec +5 -3
- metadata +4 -2
@@ -3,15 +3,11 @@ require File.join(File.dirname(__FILE__), '..', 'test_helper')
|
|
3
3
|
class HardDriveTest < Test::Unit::TestCase
|
4
4
|
setup do
|
5
5
|
VirtualBox::Command.stubs(:execute)
|
6
|
-
|
7
|
-
@find_raw = <<-raw
|
8
|
-
VirtualBox Command Line Management Interface Version 3.1.2
|
9
|
-
(C) 2005-2009 Sun Microsystems, Inc.
|
10
|
-
All rights reserved.
|
11
6
|
|
7
|
+
@find_raw = <<-raw
|
12
8
|
UUID: 11dedd14-57a1-4bdb-adeb-dd1d67f066e1
|
13
9
|
Accessible: yes
|
14
|
-
Description:
|
10
|
+
Description:
|
15
11
|
Logical size: 20480 MBytes
|
16
12
|
Current size on disk: 1218 MBytes
|
17
13
|
Type: normal (base)
|
@@ -22,22 +18,22 @@ raw
|
|
22
18
|
@name = "foo"
|
23
19
|
VirtualBox::Command.stubs(:vboxmanage).with("showhdinfo #{@name}").returns(@find_raw)
|
24
20
|
end
|
25
|
-
|
21
|
+
|
26
22
|
context "validations" do
|
27
23
|
setup do
|
28
24
|
@hd = VirtualBox::HardDrive.new
|
29
25
|
@hd.size = 2000
|
30
26
|
end
|
31
|
-
|
27
|
+
|
32
28
|
should "be valid with a size and format" do
|
33
29
|
assert @hd.valid?
|
34
30
|
end
|
35
|
-
|
31
|
+
|
36
32
|
should "be invalid if size is nil" do
|
37
33
|
@hd.size = nil
|
38
34
|
assert !@hd.valid?
|
39
35
|
end
|
40
|
-
|
36
|
+
|
41
37
|
should "clear validations when rechecking" do
|
42
38
|
@hd.size = nil
|
43
39
|
assert !@hd.valid?
|
@@ -45,22 +41,22 @@ raw
|
|
45
41
|
assert @hd.valid?
|
46
42
|
end
|
47
43
|
end
|
48
|
-
|
44
|
+
|
49
45
|
context "destroying a hard drive" do
|
50
46
|
setup do
|
51
47
|
@hd = VirtualBox::HardDrive.find(@name)
|
52
48
|
end
|
53
|
-
|
49
|
+
|
54
50
|
should "call vboxmanage to destroy it" do
|
55
51
|
VirtualBox::Command.expects(:vboxmanage).with("closemedium disk #{@hd.uuid} --delete")
|
56
52
|
assert @hd.destroy
|
57
53
|
end
|
58
|
-
|
54
|
+
|
59
55
|
should "return false if destroy failed" do
|
60
56
|
VirtualBox::Command.stubs(:vboxmanage).raises(VirtualBox::Exceptions::CommandFailedException)
|
61
57
|
assert !@hd.destroy
|
62
58
|
end
|
63
|
-
|
59
|
+
|
64
60
|
should "raise an exception if failed and flag is set" do
|
65
61
|
VirtualBox::Command.stubs(:vboxmanage).raises(VirtualBox::Exceptions::CommandFailedException)
|
66
62
|
assert_raises(VirtualBox::Exceptions::CommandFailedException) {
|
@@ -68,29 +64,29 @@ raw
|
|
68
64
|
}
|
69
65
|
end
|
70
66
|
end
|
71
|
-
|
67
|
+
|
72
68
|
context "cloning a hard drive" do
|
73
69
|
setup do
|
74
70
|
@hd = VirtualBox::HardDrive.find(@name)
|
75
71
|
VirtualBox::Command.stubs(:vboxmanage).with("clonehd #{@hd.uuid} bar --format VDI --remember").returns(@find_raw)
|
76
72
|
end
|
77
|
-
|
73
|
+
|
78
74
|
should "call vboxmanage with the clone command" do
|
79
75
|
VirtualBox::HardDrive.expects(:find).returns(nil)
|
80
76
|
@hd.clone("bar")
|
81
77
|
end
|
82
|
-
|
78
|
+
|
83
79
|
should "return the newly cloned hard drive" do
|
84
80
|
@new_hd = mock("hd")
|
85
81
|
VirtualBox::HardDrive.expects(:find).returns(@new_hd)
|
86
82
|
assert_equal @new_hd, @hd.clone("bar")
|
87
83
|
end
|
88
|
-
|
84
|
+
|
89
85
|
should "return false on failure" do
|
90
86
|
VirtualBox::Command.stubs(:vboxmanage).raises(VirtualBox::Exceptions::CommandFailedException)
|
91
87
|
assert @hd.clone("bar").nil?
|
92
88
|
end
|
93
|
-
|
89
|
+
|
94
90
|
should "raise an exception if raise_errors is true and failed" do
|
95
91
|
VirtualBox::Command.stubs(:vboxmanage).raises(VirtualBox::Exceptions::CommandFailedException)
|
96
92
|
assert_raises(VirtualBox::Exceptions::CommandFailedException) {
|
@@ -98,74 +94,74 @@ raw
|
|
98
94
|
}
|
99
95
|
end
|
100
96
|
end
|
101
|
-
|
97
|
+
|
102
98
|
context "creating a hard drive" do
|
103
99
|
setup do
|
104
100
|
@location = "foo.foo"
|
105
101
|
@size = "758"
|
106
102
|
@format = "VDI"
|
107
|
-
|
103
|
+
|
108
104
|
@hd = VirtualBox::HardDrive.new
|
109
105
|
@hd.location = @location
|
110
106
|
@hd.size = @size
|
111
|
-
|
107
|
+
|
112
108
|
@fake_hd = mock("hd")
|
113
109
|
@fake_hd.stubs(:attributes).returns({
|
114
110
|
:uuid => "foo"
|
115
111
|
})
|
116
|
-
|
112
|
+
|
117
113
|
VirtualBox::HardDrive.stubs(:find).returns(@fake_hd)
|
118
114
|
VirtualBox::Command.stubs(:vboxmanage).returns("UUID: FOO")
|
119
115
|
end
|
120
|
-
|
116
|
+
|
121
117
|
should "call create on save" do
|
122
118
|
@hd.expects(:create).once
|
123
|
-
|
119
|
+
|
124
120
|
assert @hd.new_record?
|
125
121
|
@hd.save
|
126
122
|
end
|
127
|
-
|
123
|
+
|
128
124
|
should "call not call create on existing records" do
|
129
125
|
@hd.save
|
130
126
|
assert !@hd.new_record?
|
131
|
-
|
127
|
+
|
132
128
|
@hd.expects(:create).never
|
133
129
|
@hd.save
|
134
130
|
end
|
135
|
-
|
131
|
+
|
136
132
|
should "call createhd" do
|
137
133
|
VirtualBox::Command.expects(:vboxmanage).with("createhd --filename #{@location} --size #{@size} --format #{@format} --remember")
|
138
134
|
@hd.save
|
139
135
|
end
|
140
|
-
|
136
|
+
|
141
137
|
should "replace attributes with those of the newly created hard drive" do
|
142
138
|
@hd.save
|
143
|
-
|
139
|
+
|
144
140
|
assert_equal "foo", @hd.uuid
|
145
141
|
end
|
146
|
-
|
142
|
+
|
147
143
|
should "return true if the command was a success" do
|
148
144
|
assert @hd.save
|
149
145
|
end
|
150
|
-
|
146
|
+
|
151
147
|
should "return failure if the command failed" do
|
152
148
|
VirtualBox::Command.stubs(:vboxmanage).raises(VirtualBox::Exceptions::CommandFailedException)
|
153
149
|
assert !@hd.save
|
154
150
|
end
|
155
|
-
|
151
|
+
|
156
152
|
should "raise an exception if flag is set" do
|
157
153
|
VirtualBox::Command.stubs(:vboxmanage).raises(VirtualBox::Exceptions::CommandFailedException)
|
158
154
|
assert_raises(VirtualBox::Exceptions::CommandFailedException) {
|
159
155
|
@hd.save(true)
|
160
156
|
}
|
161
157
|
end
|
162
|
-
|
158
|
+
|
163
159
|
should "not run if invalid" do
|
164
160
|
@hd.expects(:valid?).returns(false)
|
165
161
|
VirtualBox::Command.expects(:vboxmanage).never
|
166
162
|
assert !@hd.save
|
167
163
|
end
|
168
|
-
|
164
|
+
|
169
165
|
should "raise a ValidationFailedException if invalid and raise_errors is true" do
|
170
166
|
@hd.expects(:valid?).returns(false)
|
171
167
|
assert_raises(VirtualBox::Exceptions::ValidationFailedException) {
|
@@ -173,7 +169,7 @@ raw
|
|
173
169
|
}
|
174
170
|
end
|
175
171
|
end
|
176
|
-
|
172
|
+
|
177
173
|
context "finding a single hard drive" do
|
178
174
|
should "parse proper fields" do
|
179
175
|
VirtualBox::Command.expects(:vboxmanage).with("showhdinfo #{@name}").returns(@find_raw)
|
@@ -184,31 +180,27 @@ raw
|
|
184
180
|
:size => "20480",
|
185
181
|
:location => "/Users/mitchellh/Library/VirtualBox/HardDisks/foo.vdi"
|
186
182
|
}
|
187
|
-
|
183
|
+
|
188
184
|
hd = VirtualBox::HardDrive.find(@name)
|
189
185
|
assert hd.is_a?(VirtualBox::HardDrive)
|
190
|
-
|
186
|
+
|
191
187
|
@expected.each do |k,v|
|
192
188
|
assert_equal v, hd.send(k)
|
193
189
|
end
|
194
190
|
end
|
195
|
-
|
191
|
+
|
196
192
|
should "return nil if finding a non-existent hard drive" do
|
197
193
|
VirtualBox::Command.expects(:vboxmanage).with("showhdinfo 12").returns("UH OH (VERR_FILE_NOT_FOUND)")
|
198
|
-
|
194
|
+
|
199
195
|
assert_nothing_raised do
|
200
196
|
assert_nil VirtualBox::HardDrive.find(12)
|
201
197
|
end
|
202
198
|
end
|
203
199
|
end
|
204
|
-
|
200
|
+
|
205
201
|
context "retrieving all hard drives" do
|
206
202
|
setup do
|
207
203
|
@valid = <<-valid
|
208
|
-
VirtualBox Command Line Management Interface Version 3.1.2
|
209
|
-
(C) 2005-2009 Sun Microsystems, Inc.
|
210
|
-
All rights reserved.
|
211
|
-
|
212
204
|
UUID: 9d2e4353-d1e9-466c-ac58-f2249264147b
|
213
205
|
Format: VDI
|
214
206
|
Location: /Users/mitchellh/Library/VirtualBox/HardDisks/foo.vdi
|
@@ -232,16 +224,16 @@ Usage: foo (UUID: 8710d3db-d96a-46ed-9004-59fa891fda90)
|
|
232
224
|
valid
|
233
225
|
|
234
226
|
VirtualBox::Command.expects(:vboxmanage).with("list hdds").returns(@valid)
|
235
|
-
|
227
|
+
|
236
228
|
@hd = mock("hd")
|
237
229
|
@hd.stubs(:is_a?).with(VirtualBox::HardDrive).returns(true)
|
238
230
|
VirtualBox::HardDrive.expects(:find).at_least(0).returns(@hd)
|
239
231
|
end
|
240
|
-
|
232
|
+
|
241
233
|
should "return an array of HardDrive objects" do
|
242
234
|
result = VirtualBox::HardDrive.all
|
243
235
|
assert result.is_a?(Array)
|
244
|
-
|
236
|
+
|
245
237
|
result.each { |v| assert v.is_a?(VirtualBox::HardDrive) }
|
246
238
|
end
|
247
239
|
end
|
@@ -5,61 +5,61 @@ class ImageTest < Test::Unit::TestCase
|
|
5
5
|
setup do
|
6
6
|
@image = VirtualBox::Image.new
|
7
7
|
end
|
8
|
-
|
8
|
+
|
9
9
|
should "raise an exception if image_type is called on Image" do
|
10
10
|
assert_raises(RuntimeError) { @image.image_type }
|
11
11
|
end
|
12
|
-
|
12
|
+
|
13
13
|
should "return false by default on empty_drive?" do
|
14
14
|
assert !@image.empty_drive?
|
15
15
|
end
|
16
16
|
end
|
17
|
-
|
17
|
+
|
18
18
|
context "in a relationship" do
|
19
19
|
class ImageRelationshipModel < VirtualBox::AbstractModel
|
20
20
|
relationship :image, VirtualBox::Image
|
21
21
|
end
|
22
|
-
|
22
|
+
|
23
23
|
setup do
|
24
24
|
@model = ImageRelationshipModel.new
|
25
25
|
end
|
26
|
-
|
26
|
+
|
27
27
|
context "populating a relationship" do
|
28
28
|
should "return 'emptydrive' if the medium is an empty drive" do
|
29
29
|
result = VirtualBox::Image.populate_relationship(@model, {
|
30
30
|
:medium => "emptydrive"
|
31
31
|
})
|
32
|
-
|
32
|
+
|
33
33
|
assert result.is_a?(VirtualBox::DVD)
|
34
34
|
assert result.empty_drive?
|
35
35
|
end
|
36
|
-
|
36
|
+
|
37
37
|
should "return nil if uuid is nil and medium isn't empty" do
|
38
38
|
result = VirtualBox::Image.populate_relationship(@model, {})
|
39
39
|
assert result.nil?
|
40
40
|
end
|
41
|
-
|
41
|
+
|
42
42
|
should "result a matching image from subclasses if uuid" do
|
43
43
|
uuid = "foo'"
|
44
44
|
|
45
45
|
subobject = mock("subobject")
|
46
46
|
subobject.stubs(:uuid).returns(uuid)
|
47
|
-
|
47
|
+
|
48
48
|
subclass = mock("subclass")
|
49
49
|
subclass.stubs(:all).returns([subobject])
|
50
|
-
|
50
|
+
|
51
51
|
VirtualBox::Image.expects(:subclasses).returns([subclass])
|
52
|
-
|
52
|
+
|
53
53
|
result = VirtualBox::Image.populate_relationship(@model, { :uuid => uuid })
|
54
54
|
assert_equal subobject, result
|
55
55
|
end
|
56
|
-
|
56
|
+
|
57
57
|
should "result in nil if suboject can't be found" do
|
58
58
|
VirtualBox::Image.expects(:subclasses).returns([])
|
59
59
|
assert_nil VirtualBox::Image.populate_relationship(@model, { :uuid => "foo" })
|
60
60
|
end
|
61
61
|
end
|
62
|
-
|
62
|
+
|
63
63
|
context "setting relationship object" do
|
64
64
|
should "raise an InvalidRelationshipObjectException if new value is not an image" do
|
65
65
|
assert_raises(VirtualBox::Exceptions::InvalidRelationshipObjectException) {
|
@@ -79,20 +79,16 @@ class ImageTest < Test::Unit::TestCase
|
|
79
79
|
end
|
80
80
|
end
|
81
81
|
end
|
82
|
-
|
82
|
+
|
83
83
|
context "recording subclasses" do
|
84
84
|
should "list all subclasses" do
|
85
85
|
assert_nothing_raised { VirtualBox::Image.subclasses }
|
86
86
|
end
|
87
87
|
end
|
88
|
-
|
88
|
+
|
89
89
|
context "parsing raw" do
|
90
90
|
setup do
|
91
91
|
@raw = <<-raw
|
92
|
-
VirtualBox Command Line Management Interface Version 3.1.2
|
93
|
-
(C) 2005-2009 Sun Microsystems, Inc.
|
94
|
-
All rights reserved.
|
95
|
-
|
96
92
|
UUID: 9d2e4353-d1e9-466c-ac58-f2249264147b
|
97
93
|
Format: VDI
|
98
94
|
Location: /Users/mitchellh/Library/VirtualBox/HardDisks/TestJeOS.vdi
|
@@ -112,21 +108,28 @@ Format: VMDK
|
|
112
108
|
Location: /Users/mitchellh/Library/VirtualBox/HardDisks/HoboBase.vmdk
|
113
109
|
Accessible: yes
|
114
110
|
Type: normal
|
115
|
-
Usage: HoboBase_2 (UUID: 3cc36c5d-562a-4030-8acf-f061f44170c4)
|
111
|
+
Usage: HoboBase_2 (UUID: 3cc36c5d-562a-4030-8acf-f061f44170c4)
|
116
112
|
raw
|
117
113
|
end
|
118
|
-
|
114
|
+
|
119
115
|
should "call parse block the correct number of times" do
|
120
|
-
VirtualBox::Image.expects(:parse_block).times(
|
116
|
+
VirtualBox::Image.expects(:parse_block).times(3).returns({})
|
121
117
|
VirtualBox::Image.parse_raw(@raw)
|
122
118
|
end
|
123
|
-
|
119
|
+
|
124
120
|
should "remove nil (invalid) blocks from result" do
|
125
121
|
result = VirtualBox::Image.parse_raw(@raw)
|
126
122
|
assert_equal 3, result.length
|
127
123
|
end
|
124
|
+
|
125
|
+
should "be able to extract the filename from the location" do
|
126
|
+
result = VirtualBox::Image.parse_raw(@raw)
|
127
|
+
assert_equal "TestJeOS.vdi", result[0].filename
|
128
|
+
assert_equal "HoboBase.vdi", result[1].filename
|
129
|
+
assert_equal "HoboBase.vmdk", result[2].filename
|
130
|
+
end
|
128
131
|
end
|
129
|
-
|
132
|
+
|
130
133
|
context "parsing multiple blocks" do
|
131
134
|
setup do
|
132
135
|
@raw = <<-raw
|
@@ -137,7 +140,7 @@ two
|
|
137
140
|
three
|
138
141
|
raw
|
139
142
|
end
|
140
|
-
|
143
|
+
|
141
144
|
should "call parse block for each multiline" do
|
142
145
|
parse_seq = sequence("parse")
|
143
146
|
VirtualBox::Image.expects(:parse_block).with("one").in_sequence(parse_seq)
|
@@ -145,19 +148,19 @@ raw
|
|
145
148
|
VirtualBox::Image.expects(:parse_block).with("three").in_sequence(parse_seq)
|
146
149
|
VirtualBox::Image.parse_blocks(@raw)
|
147
150
|
end
|
148
|
-
|
151
|
+
|
149
152
|
should "return an array of the parses with nil ignored" do
|
150
153
|
parse_seq = sequence("parse")
|
151
154
|
VirtualBox::Image.expects(:parse_block).with("one").returns({}).in_sequence(parse_seq)
|
152
155
|
VirtualBox::Image.expects(:parse_block).with("two").returns(nil).in_sequence(parse_seq)
|
153
156
|
VirtualBox::Image.expects(:parse_block).with("three").returns({}).in_sequence(parse_seq)
|
154
157
|
result = VirtualBox::Image.parse_blocks(@raw)
|
155
|
-
|
158
|
+
|
156
159
|
assert result.is_a?(Array)
|
157
160
|
assert_equal 2, result.length
|
158
161
|
end
|
159
162
|
end
|
160
|
-
|
163
|
+
|
161
164
|
context "parsing a single block" do
|
162
165
|
setup do
|
163
166
|
@expected = {
|
@@ -165,24 +168,24 @@ raw
|
|
165
168
|
:path => "foo",
|
166
169
|
:accessible => "yes"
|
167
170
|
}
|
168
|
-
|
171
|
+
|
169
172
|
@block = ""
|
170
173
|
@expected.each { |k,v| @block += "#{k}: #{v}\n" }
|
171
174
|
end
|
172
|
-
|
175
|
+
|
173
176
|
should "return nil for an invalid block" do
|
174
177
|
assert VirtualBox::Image.parse_block("HI").nil?
|
175
178
|
end
|
176
|
-
|
179
|
+
|
177
180
|
should "mirror location to path" do
|
178
181
|
result = VirtualBox::Image.parse_block(@block)
|
179
182
|
assert_equal "foo", result[:location]
|
180
183
|
end
|
181
|
-
|
184
|
+
|
182
185
|
should "properly parse if all properties are available" do
|
183
186
|
result = VirtualBox::Image.parse_block(@block)
|
184
187
|
assert !result.nil?
|
185
|
-
|
188
|
+
|
186
189
|
@expected.each do |k,v|
|
187
190
|
k = :location if k == :path
|
188
191
|
assert_equal v, result[k]
|