virtualbox 0.4.3 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. data/.gitignore +3 -3
  2. data/Gemfile +8 -8
  3. data/Rakefile +2 -0
  4. data/Readme.md +11 -2
  5. data/VERSION +1 -1
  6. data/docs/WhatsNew.md +40 -24
  7. data/lib/virtualbox.rb +9 -0
  8. data/lib/virtualbox/abstract_model.rb +80 -10
  9. data/lib/virtualbox/abstract_model/attributable.rb +61 -1
  10. data/lib/virtualbox/abstract_model/relatable.rb +88 -6
  11. data/lib/virtualbox/attached_device.rb +18 -10
  12. data/lib/virtualbox/command.rb +13 -0
  13. data/lib/virtualbox/dvd.rb +35 -0
  14. data/lib/virtualbox/exceptions.rb +1 -0
  15. data/lib/virtualbox/extra_data.rb +10 -21
  16. data/lib/virtualbox/global.rb +126 -0
  17. data/lib/virtualbox/hard_drive.rb +33 -9
  18. data/lib/virtualbox/image.rb +2 -3
  19. data/lib/virtualbox/media.rb +19 -0
  20. data/lib/virtualbox/nic.rb +28 -67
  21. data/lib/virtualbox/shared_folder.rb +7 -12
  22. data/lib/virtualbox/storage_controller.rb +8 -36
  23. data/lib/virtualbox/system_property.rb +55 -0
  24. data/lib/virtualbox/usb.rb +72 -0
  25. data/lib/virtualbox/vm.rb +126 -25
  26. data/test/test_helper.rb +118 -12
  27. data/test/virtualbox/abstract_model/attributable_test.rb +55 -5
  28. data/test/virtualbox/abstract_model/relatable_test.rb +66 -4
  29. data/test/virtualbox/abstract_model_test.rb +140 -8
  30. data/test/virtualbox/attached_device_test.rb +10 -7
  31. data/test/virtualbox/command_test.rb +13 -0
  32. data/test/virtualbox/dvd_test.rb +50 -28
  33. data/test/virtualbox/extra_data_test.rb +11 -51
  34. data/test/virtualbox/global_test.rb +78 -0
  35. data/test/virtualbox/hard_drive_test.rb +34 -57
  36. data/test/virtualbox/image_test.rb +0 -5
  37. data/test/virtualbox/nic_test.rb +11 -64
  38. data/test/virtualbox/shared_folder_test.rb +5 -5
  39. data/test/virtualbox/storage_controller_test.rb +15 -30
  40. data/test/virtualbox/system_property_test.rb +71 -0
  41. data/test/virtualbox/usb_test.rb +35 -0
  42. data/test/virtualbox/vm_test.rb +62 -121
  43. data/virtualbox.gemspec +15 -2
  44. metadata +23 -4
@@ -34,11 +34,6 @@ class ImageTest < Test::Unit::TestCase
34
34
  assert result.empty_drive?
35
35
  end
36
36
 
37
- should "return nil if uuid is nil and medium isn't empty" do
38
- result = VirtualBox::Image.populate_relationship(@model, {})
39
- assert result.nil?
40
- end
41
-
42
37
  should "result a matching image from subclasses if uuid" do
43
38
  uuid = "foo'"
44
39
 
@@ -2,25 +2,13 @@ require File.join(File.dirname(__FILE__), '..', 'test_helper')
2
2
 
3
3
  class NicTest < Test::Unit::TestCase
4
4
  setup do
5
- @data = {
6
- :nic1 => "bridged",
7
- :nic2 => "foo",
8
- :nic3 => "bar"
9
- }
10
-
11
5
  @caller = mock("caller")
12
6
  @caller.stubs(:name).returns("foo")
13
-
14
- VirtualBox::VM.stubs(:human_info).returns(<<-raw)
15
- NIC 1: MAC: 08002745B49F, Attachment: Bridged Interface 'en0: Ethernet', Cable connected: on, Trace: off (file: none), Type: Am79C973, Reported speed: 0 Mbps
16
- NIC 2: MAC: 08002745B49F, Attachment: Bridged Interface 'en0: Ethernet', Cable connected: on, Trace: off (file: none), Type: Am79C973, Reported speed: 0 Mbps
17
- NIC 3: MAC: 08002745B49F, Attachment: Bridged Interface 'en0: Ethernet', Cable connected: on, Trace: off (file: none), Type: Am79C973, Reported speed: 0 Mbps
18
- raw
19
7
  end
20
8
 
21
9
  context "saving" do
22
10
  setup do
23
- @nic = VirtualBox::Nic.populate_relationship(@caller, @data)
11
+ @nic = VirtualBox::Nic.populate_relationship(@caller, mock_xml_doc)
24
12
  @vmname = "myvm"
25
13
  end
26
14
 
@@ -62,68 +50,27 @@ raw
62
50
 
63
51
  context "populating relationships" do
64
52
  setup do
65
- @value = VirtualBox::Nic.populate_relationship(@caller, @data)
53
+ @value = VirtualBox::Nic.populate_relationship(@caller, mock_xml_doc)
66
54
  end
67
55
 
68
56
  should "create the correct amount of objects" do
69
- assert_equal 3, @value.length
70
- end
71
-
72
- should "parse the type" do
73
- assert_equal "Am79C973", @value[0].nictype
57
+ assert_equal 8, @value.length
74
58
  end
75
- end
76
59
 
77
- context "parsing nic data from human readable output" do
78
- setup do
79
- @raw = "NIC 1: MAC: 08002745B49F, Attachment: Bridged Interface 'en0: Ethernet', Cable connected: on, Trace: off (file: none), Type: Am79C973, Reported speed: 0 Mbps"
80
-
81
- @multiline_raw = <<-raw
82
- Storage Controller Port Count (0): 2
83
- Storage Controller Name (1): Floppy Controller
84
- Storage Controller Type (1): I82078
85
- Storage Controller Instance Number (1): 0
86
- Storage Controller Max Port Count (1): 1
87
- Storage Controller Port Count (1): 1
88
- IDE Controller (0, 0): /Users/mitchellh/Library/VirtualBox/HardDisks/HoboBase.vmdk (UUID: fb0256a9-5685-4bc2-98ff-5b7503586bf3)
89
- IDE Controller (1, 0): Empty
90
- Floppy Controller (0, 0): Empty
91
- NIC 1: MAC: 08002745B49F, Attachment: Bridged Interface 'en0: Ethernet', Cable connected: on, Trace: off (file: none), Type: Am79C973, Reported speed: 0 Mbps
92
- NIC 2: disabled
93
- raw
60
+ should "not be dirty initially" do
61
+ assert !@value[0].changed?
94
62
  end
95
63
 
96
- should "only return valid objects in hash" do
97
- VirtualBox::VM.expects(:human_info).returns(@multiline_raw)
98
- result = VirtualBox::Nic.nic_data("foo")
99
- assert result.is_a?(Hash)
100
- assert_equal 1, result.length
64
+ should "be an existing record" do
65
+ assert !@value[0].new_record?
101
66
  end
102
67
 
103
- should "return nil if its an invalid string" do
104
- assert_nil VirtualBox::Nic.parse_nic("FOO")
105
- end
106
-
107
- should "return proper data for valid string" do
108
- @name = :nic1
109
- @expected = {
110
- :mac => "08002745B49F",
111
- :attachment => "Bridged Interface 'en0: Ethernet'",
112
- :trace => "off (file: none)",
113
- :type => "Am79C973"
114
- }
115
-
116
- name, result = VirtualBox::Nic.parse_nic(@raw)
117
- assert_equal @name, name
118
- assert result.is_a?(Hash)
119
-
120
- @expected.each do |k,v|
121
- assert_equal v, result[k]
122
- end
68
+ should "parse the type" do
69
+ assert_equal "Am79C973", @value[0].nictype
123
70
  end
124
71
 
125
- should "ignore nics that are disabled" do
126
- assert_nil VirtualBox::Nic.parse_nic("NIC 1: disabled")
72
+ should "correctly turn adapters which aren't enabled into 'none'" do
73
+ assert_equal "none", @value[2].nic
127
74
  end
128
75
  end
129
76
  end
@@ -45,7 +45,7 @@ class SharedFolderTest < Test::Unit::TestCase
45
45
 
46
46
  context "saving an existing shared folder" do
47
47
  setup do
48
- @value = VirtualBox::SharedFolder.populate_relationship(@caller, @data)
48
+ @value = VirtualBox::SharedFolder.populate_relationship(@caller, mock_xml_doc)
49
49
  @value = @value[0]
50
50
  @value.name = "different"
51
51
  assert @value.changed?
@@ -170,7 +170,7 @@ class SharedFolderTest < Test::Unit::TestCase
170
170
 
171
171
  context "destroying" do
172
172
  setup do
173
- @value = VirtualBox::SharedFolder.populate_relationship(@caller, @data)
173
+ @value = VirtualBox::SharedFolder.populate_relationship(@caller, mock_xml_doc)
174
174
  @value = @value[0]
175
175
  end
176
176
 
@@ -200,7 +200,7 @@ class SharedFolderTest < Test::Unit::TestCase
200
200
 
201
201
  context "populating relationships" do
202
202
  setup do
203
- @value = VirtualBox::SharedFolder.populate_relationship(@caller, @data)
203
+ @value = VirtualBox::SharedFolder.populate_relationship(@caller, mock_xml_doc)
204
204
  end
205
205
 
206
206
  should "be a 'collection'" do
@@ -213,11 +213,11 @@ class SharedFolderTest < Test::Unit::TestCase
213
213
 
214
214
  should "parse the proper data" do
215
215
  value = @value[0]
216
- assert_equal "foofolder", value.name
216
+ assert_equal "foo", value.name
217
217
  assert_equal "/foo", value.hostpath
218
218
 
219
219
  value = @value[1]
220
- assert_equal "barfolder", value.name
220
+ assert_equal "bar", value.name
221
221
  assert_equal "/bar", value.hostpath
222
222
  end
223
223
  end
@@ -17,7 +17,7 @@ class StorageControllerTest < Test::Unit::TestCase
17
17
 
18
18
  context "saving" do
19
19
  setup do
20
- @value = VirtualBox::StorageController.populate_relationship(@caller, @data)
20
+ @value = VirtualBox::StorageController.populate_relationship(@caller, mock_xml_doc)
21
21
  @value = @value[0]
22
22
  end
23
23
 
@@ -29,7 +29,7 @@ class StorageControllerTest < Test::Unit::TestCase
29
29
 
30
30
  context "destroying" do
31
31
  setup do
32
- @value = VirtualBox::StorageController.populate_relationship(@caller, @data)
32
+ @value = VirtualBox::StorageController.populate_relationship(@caller, mock_xml_doc)
33
33
  @value = @value[0]
34
34
  end
35
35
 
@@ -52,40 +52,25 @@ class StorageControllerTest < Test::Unit::TestCase
52
52
  end
53
53
 
54
54
  context "populating relationships" do
55
- should "create the correct amount of objects" do
56
- value = VirtualBox::StorageController.populate_relationship(@caller, @data)
57
- assert_equal 2, value.length
58
- end
59
-
60
- should "use populate keys when extracting keys" do
61
- value = VirtualBox::StorageController.new(0, @caller, @data)
62
- assert_equal "foo", value.name
63
- assert_equal 7, value.max_ports
55
+ setup do
56
+ @sc = mock_xml_doc.css("StorageControllers StorageController").first
64
57
  end
65
58
 
66
- should "call populate attributes with the merged populate data" do
67
- VirtualBox::StorageController.any_instance.expects(:extract_devices).returns({ :name => "BAR" })
68
- value = VirtualBox::StorageController.new(0, @caller, @data)
69
- assert_equal "BAR", value.name
59
+ should "create a collection proxy" do
60
+ value = VirtualBox::StorageController.populate_relationship(@caller, mock_xml_doc)
61
+ assert value.is_a?(VirtualBox::Proxies::Collection)
70
62
  end
71
- end
72
63
 
73
- context "extracting related device info" do
74
- setup do
75
- @controller = VirtualBox::StorageController.new(0, @caller, @data)
64
+ should "create the correct amount of objects" do
65
+ value = VirtualBox::StorageController.populate_relationship(@caller, mock_xml_doc)
66
+ assert_equal 1, value.length
76
67
  end
77
68
 
78
- should "extract only those keys related to current controller name" do
79
- data = @controller.extract_devices(0, @data)
80
- assert data
81
- assert data.has_key?(:"foo-0-0")
82
- assert data.has_key?(:"foo-1-0")
83
- assert !data.has_key?(:"bar-0-0")
84
-
85
- data = @controller.extract_devices(1, @data)
86
- assert data
87
- assert !data.has_key?(:"foo-0-0")
88
- assert data.has_key?(:"bar-0-0")
69
+ should "use populate keys when extracting keys" do
70
+ value = VirtualBox::StorageController.new(0, @caller, @sc)
71
+ assert_equal "foo", value.name
72
+ assert_equal "2", value.ports
73
+ assert_equal "PIIX4", value.type
89
74
  end
90
75
  end
91
76
  end
@@ -0,0 +1,71 @@
1
+ require File.join(File.dirname(__FILE__), '..', 'test_helper')
2
+
3
+ class SystemPropertyTest < Test::Unit::TestCase
4
+ setup do
5
+ @raw = <<-raw
6
+ VirtualBox Command Line Management Interface Version 3.1.2
7
+ (C) 2005-2009 Sun Microsystems, Inc.
8
+ All rights reserved.
9
+
10
+ Minimum guest RAM size: 4 Megabytes
11
+ Maximum guest RAM size: 3584 Megabytes
12
+ Minimum video RAM size: 1 Megabytes
13
+ Maximum video RAM size: 128 Megabytes
14
+ Minimum guest CPU count: 1
15
+ Maximum guest CPU count: 32
16
+ Maximum VDI size: 2097151 Megabytes
17
+ Maximum Network Adapter count: 8
18
+ Maximum Serial Port count: 2
19
+ Maximum Parallel Port count: 2
20
+ Maximum Boot Position: 4
21
+ Maximum IDE Controllers: 1
22
+ Maximum IDE Port count: 2
23
+ Maximum Devices per IDE Port: 2
24
+ Maximum SATA Controllers: 1
25
+ Maximum SATA Port count: 30
26
+ Maximum Devices per SATA Port: 1
27
+ Maximum SCSI Controllers: 1
28
+ Maximum SCSI Port count: 16
29
+ Maximum Devices per SCSI Port: 1
30
+ Maximum Floppy Controllers: 1
31
+ Maximum Floppy Port count: 1
32
+ Maximum Devices per Floppy Port: 2
33
+ Default machine folder: /Users/mitchellh/Library/VirtualBox/Machines
34
+ Default hard disk folder: /Users/mitchellh/Library/VirtualBox/HardDisks
35
+ VRDP authentication library: VRDPAuth
36
+ Webservice auth. library: VRDPAuth
37
+ Log history count: 3
38
+ raw
39
+ end
40
+
41
+ context "getting all system properties" do
42
+ setup do
43
+ VirtualBox::Command.stubs(:vboxmanage).returns(@raw)
44
+ end
45
+
46
+ should "return a new SystemProperty object" do
47
+ result = VirtualBox::SystemProperty.all
48
+ assert result.is_a?(VirtualBox::SystemProperty)
49
+ end
50
+
51
+ should "run the vboxmanage command and parse its output" do
52
+ raw = mock("raw")
53
+ VirtualBox::Command.expects(:vboxmanage).with("list", "systemproperties").returns(raw)
54
+ VirtualBox::SystemProperty.expects(:parse_raw).with(raw).returns("foo")
55
+ VirtualBox::SystemProperty.all
56
+ end
57
+ end
58
+
59
+ context "parsing the raw output" do
60
+ should "return a hash with the proper number of values" do
61
+ result = VirtualBox::SystemProperty.parse_raw(@raw)
62
+ assert result.is_a?(Hash)
63
+ assert_equal 28, result.length
64
+ end
65
+
66
+ should "lowercase and convert each key to a symbol" do
67
+ result = VirtualBox::SystemProperty.parse_raw(@raw)
68
+ assert_equal "30", result[:maximum_sata_port_count]
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,35 @@
1
+ require File.join(File.dirname(__FILE__), '..', 'test_helper')
2
+
3
+ class UsbTest < Test::Unit::TestCase
4
+ setup do
5
+ @caller = mock("caller")
6
+ @caller.stubs(:name).returns("foo")
7
+ end
8
+
9
+ context "populating relationships" do
10
+ setup do
11
+ @value = VirtualBox::USB.populate_relationship(@caller, mock_xml_doc)
12
+ end
13
+
14
+ should "create the correct amount of objects" do
15
+ assert_equal 2, @value.length
16
+ end
17
+
18
+ should "not be dirty initially" do
19
+ assert !@value[0].changed?
20
+ end
21
+
22
+ should "be an existing record" do
23
+ assert !@value[0].new_record?
24
+ end
25
+
26
+ should "parse attributes correctly" do
27
+ assert_equal 'true', @value[0].active
28
+ assert_equal 'Apple, Inc', @value[0].manufacturer
29
+ assert_equal 'Apple, Inc Apple Keyboard [0069]', @value[0].name
30
+ assert_equal @caller, @value[0].parent
31
+ assert_equal 'Apple Keyboard', @value[0].product
32
+ assert_equal 'no', @value[0].remote
33
+ end
34
+ end
35
+ end
@@ -2,77 +2,8 @@ require File.join(File.dirname(__FILE__), '..', 'test_helper')
2
2
 
3
3
  class VMTest < Test::Unit::TestCase
4
4
  setup do
5
- @raw = <<-showvminfo
6
- name="foo"
7
- ostype="Ubuntu"
8
- UUID="8710d3db-d96a-46ed-9004-59fa891fda90"
9
- CfgFile="/Users/mitchellh/Library/VirtualBox/Machines/foo/foo.xml"
10
- hardwareuuid="8710d3db-d96a-46ed-9004-59fa891fda90"
11
- memory=360
12
- vram=12
13
- cpus=1
14
- synthcpu="off"
15
- bootmenu="messageandmenu"
16
- boot1="floppy"
17
- boot2="dvd"
18
- boot3="disk"
19
- boot4="none"
20
- acpi="on"
21
- ioapic="off"
22
- pae="on"
23
- biossystemtimeoffset=0
24
- hwvirtex="on"
25
- hwvirtexexcl="off"
26
- nestedpaging="off"
27
- vtxvpid="off"
28
- VMState="poweroff"
29
- VMStateChangeTime="2010-01-22T22:02:47.672000000"
30
- monitorcount=1
31
- accelerate3d="off"
32
- accelerate2dvideo="off"
33
- teleporterenabled="off"
34
- teleporterport=0
35
- teleporteraddress="<NULL>"
36
- teleporterpassword="<NULL>"
37
- storagecontrollername0="IDE Controller"
38
- storagecontrollertype0="PIIX4"
39
- storagecontrollerinstance0="0"
40
- storagecontrollermaxportcount0="2"
41
- storagecontrollerportcount0="2"
42
- storagecontrollername1="Floppy Controller"
43
- storagecontrollertype1="I82078"
44
- storagecontrollerinstance1="0"
45
- storagecontrollermaxportcount1="1"
46
- storagecontrollerportcount1="1"
47
- "IDE Controller-0-0"="/Users/mitchellh/Library/VirtualBox/HardDisks/HoboBase.vmdk"
48
- "IDE Controller-ImageUUID-0-0"="5e090af6-7d71-4f40-8b03-33aa665f9ecf"
49
- "IDE Controller-0-1"="none"
50
- "IDE Controller-1-0"="emptydrive"
51
- "IDE Controller-1-1"="none"
52
- "Floppy Controller-0-0"="emptydrive"
53
- "Floppy Controller-0-1"="none"
54
- bridgeadapter1="en1: AirPort"
55
- macaddress1="08002771F257"
56
- cableconnected1="on"
57
- nic1="bridged"
58
- nic2="none"
59
- nic3="none"
60
- nic4="none"
61
- nic5="none"
62
- nic6="none"
63
- nic7="none"
64
- nic8="none"
65
- uart1="off"
66
- uart2="off"
67
- audio="none"
68
- clipboard="bidirectional"
69
- vrdp="off"
70
- usb="off"
71
- SharedFolderNameMachineMapping1="mysharedfolder"
72
- SharedFolderPathMachineMapping1="/virtualbox"
73
- SharedFolderNameMachineMapping2="otherfolder"
74
- SharedFolderPathMachineMapping2="/virtualbox/lib"
75
- showvminfo
5
+ @raw_xml = mock_xml
6
+ @raw_xml_doc = mock_xml_doc
76
7
 
77
8
  @name = "foo"
78
9
 
@@ -81,30 +12,20 @@ showvminfo
81
12
  end
82
13
 
83
14
  def create_vm
84
- VirtualBox::Command.expects(:vboxmanage).with("showvminfo", @name, "--machinereadable").returns(@raw)
85
- VirtualBox::Command.expects(:vboxmanage).with("showvminfo", @name).returns("")
86
- VirtualBox::Command.expects(:vboxmanage).with("list", "hdds").returns("")
87
- VirtualBox::Command.expects(:vboxmanage).with("list", "dvds").returns("")
88
- VirtualBox::Command.expects(:vboxmanage).with("getextradata", @name, "enumerate").returns("")
89
- vm = VirtualBox::VM.find(@name)
15
+ VirtualBox::Command.expects(:parse_xml).returns(@raw_xml_doc)
16
+ vm = VirtualBox::VM.load_from_xml(@name)
90
17
  assert vm
91
18
  vm
92
19
  end
93
20
 
94
- context "human readable info" do
95
- should "not pass --machinereadable into the showvminfo command" do
96
- VirtualBox::Command.expects(:vboxmanage).with("showvminfo", @name).once
97
- VirtualBox::VM.human_info(@name)
98
- end
99
- end
100
-
101
21
  context "reading the VM state" do
102
22
  setup do
103
23
  @vm = create_vm
104
24
  end
105
25
 
106
- should "read the initial state when loading the VM" do
107
- assert_equal "poweroff", @vm.state
26
+ should "lazy load the state" do
27
+ @vm.expects(:load_attribute).with(:state).once
28
+ @vm.state
108
29
  end
109
30
 
110
31
  should "reload the state if true is passed as a parameter" do
@@ -269,24 +190,39 @@ showvminfo
269
190
  VirtualBox::Command.expects(:vboxmanage).with("unregistervm", @name, "--delete").in_sequence(destroy_seq)
270
191
  @vm.destroy
271
192
  end
193
+
194
+ should "mark global for reloading" do
195
+ VirtualBox::Global.expects(:reload!)
196
+ @vm.destroy
197
+ end
272
198
  end
273
199
 
274
200
  context "finding all VMs" do
275
201
  setup do
276
- @raw = <<-raw
277
- "foo" {abcdefg}
278
- "bar" {zefaldf}
279
- raw
202
+ VirtualBox::VM.reloaded!
203
+
204
+ @global = mock("global")
205
+ @global.stubs(:vms)
280
206
  end
281
207
 
282
208
  should "list VMs then parse them" do
283
- all_seq = sequence("all")
284
- VirtualBox::Command.expects(:vboxmanage).with("list", "vms").returns(@raw).in_sequence(all_seq)
285
- VirtualBox::VM.expects(:parse_vm_list).with(@raw).in_sequence(all_seq)
209
+ VirtualBox::Global.expects(:global).with(false).returns(@global)
286
210
  VirtualBox::VM.all
287
211
  end
288
212
 
213
+ should "reload the VMs list if given the reload argument" do
214
+ VirtualBox::Global.expects(:global).with(true).returns(@global)
215
+ VirtualBox::VM.all(true)
216
+ end
217
+
289
218
  context "parser" do
219
+ setup do
220
+ @raw = <<-raw
221
+ "foo" {abcdefg}
222
+ "bar" {zefaldf}
223
+ raw
224
+ end
225
+
290
226
  should "ignore non-matching lines" do
291
227
  assert VirtualBox::VM.parse_vm_list("HEY YOU").empty?
292
228
  end
@@ -344,6 +280,15 @@ raw
344
280
  VirtualBox::AttachedDevice.any_instance.stubs(:save)
345
281
  end
346
282
 
283
+ teardown do
284
+ VirtualBox::Global.reloaded!
285
+ end
286
+
287
+ should "force a reload on the global class" do
288
+ VirtualBox::Global.expects(:reload!).once
289
+ assert @vm.save
290
+ end
291
+
347
292
  should "return false if saving fails" do
348
293
  VirtualBox::Command.stubs(:vboxmanage).raises(VirtualBox::Exceptions::CommandFailedException)
349
294
 
@@ -388,50 +333,46 @@ raw
388
333
  end
389
334
  end
390
335
 
336
+ context "loading a VM from XML" do
337
+ should "parse the XML then initializing the class" do
338
+ VirtualBox::Command.expects(:parse_xml).with("foo").returns(@raw_xml_doc)
339
+ VirtualBox::VM.expects(:new).with(@raw_xml_doc).once
340
+ VirtualBox::VM.load_from_xml("foo")
341
+ end
342
+
343
+ should "initialize the attributes when called with an XML document" do
344
+ VirtualBox::VM.any_instance.expects(:initialize_attributes).once.with(@raw_xml_doc)
345
+ VirtualBox::VM.new(@raw_xml_doc)
346
+ end
347
+ end
348
+
349
+ context "initializing attributes" do
350
+ # TODO: This needs to be tested
351
+ end
352
+
391
353
  context "finding a VM by name" do
392
354
  setup do
393
-
394
355
  @expected = {
395
356
  :name => "foo",
396
357
  :ostype => "Ubuntu",
397
358
  :uuid => "8710d3db-d96a-46ed-9004-59fa891fda90"
398
359
  }
399
-
400
- command_seq = sequence("command_seq)")
401
- VirtualBox::Command.expects(:vboxmanage).with("showvminfo", @name, "--machinereadable").returns(@raw).in_sequence(command_seq)
402
- VirtualBox::Command.expects(:vboxmanage).returns("").at_least(0).in_sequence(command_seq)
403
- @vm = VirtualBox::VM.find(@name)
404
- assert @vm
405
360
  end
406
361
 
407
- should "return a VM object with proper attributes" do
362
+ should "use the global 'all' array to find the VM" do
363
+ VirtualBox::VM.expects(:all).with(true).returns([create_vm])
364
+ vm = VirtualBox::VM.find(@name)
365
+ assert vm
366
+
408
367
  @expected.each do |k,v|
409
- assert_equal v, @vm.read_attribute(k)
368
+ assert_equal v, vm.read_attribute(k)
410
369
  end
411
370
  end
412
371
 
413
372
  should "return nil if the VM doesn't exist" do
414
- VirtualBox::Command.expects(:vboxmanage).raises(VirtualBox::Exceptions::CommandFailedException)
373
+ VirtualBox::VM.expects(:all).returns([])
415
374
  assert_nil VirtualBox::VM.find("dont exist")
416
375
  end
417
-
418
- should "properly load nic relationship" do
419
- assert @vm.nics
420
- assert @vm.nics.is_a?(Array)
421
- assert_equal 8, @vm.nics.length
422
- end
423
-
424
- should "properly load storage controller relationship" do
425
- assert @vm.storage_controllers
426
- assert @vm.storage_controllers.is_a?(Array)
427
- assert_equal 2, @vm.storage_controllers.length
428
- end
429
-
430
- should "properly load shared folder relationship" do
431
- assert @vm.shared_folders
432
- assert @vm.shared_folders.is_a?(Array)
433
- assert_equal 2, @vm.shared_folders.length
434
- end
435
376
  end
436
377
 
437
378
  context "parsing the showvminfo output" do