virtualbox 0.5.4 → 0.6.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 +2 -1
- data/Gemfile +1 -1
- data/Rakefile +1 -1
- data/Readme.md +5 -21
- data/VERSION +1 -1
- data/docs/WhatsNew.md +9 -47
- data/lib/virtualbox.rb +7 -30
- data/lib/virtualbox/abstract_model.rb +25 -5
- data/lib/virtualbox/abstract_model/attributable.rb +5 -1
- data/lib/virtualbox/abstract_model/dirty.rb +2 -0
- data/lib/virtualbox/abstract_model/interface_attributes.rb +96 -0
- data/lib/virtualbox/abstract_model/relatable.rb +19 -8
- data/lib/virtualbox/appliance.rb +59 -0
- data/lib/virtualbox/audio_adapter.rb +44 -0
- data/lib/virtualbox/bios.rb +44 -0
- data/lib/virtualbox/com.rb +23 -0
- data/lib/virtualbox/com/abstract_enum.rb +42 -0
- data/lib/virtualbox/com/abstract_implementer.rb +43 -0
- data/lib/virtualbox/com/abstract_interface.rb +165 -0
- data/lib/virtualbox/com/ffi/interface.rb +141 -0
- data/lib/virtualbox/com/ffi/interfaces.rb +42 -0
- data/lib/virtualbox/com/ffi/util.rb +101 -0
- data/lib/virtualbox/com/ffi/vboxxpcomc.rb +31 -0
- data/lib/virtualbox/com/ffi_interface.rb +65 -0
- data/lib/virtualbox/com/implementer/base.rb +52 -0
- data/lib/virtualbox/com/implementer/ffi.rb +350 -0
- data/lib/virtualbox/com/implementer/mscom.rb +165 -0
- data/lib/virtualbox/com/implementer/nil.rb +10 -0
- data/lib/virtualbox/com/interface/appliance.rb +20 -0
- data/lib/virtualbox/com/interface/audio_adapter.rb +13 -0
- data/lib/virtualbox/com/interface/audio_controller_type.rb +9 -0
- data/lib/virtualbox/com/interface/audio_driver_type.rb +9 -0
- data/lib/virtualbox/com/interface/bios_boot_menu_mode.rb +9 -0
- data/lib/virtualbox/com/interface/bios_settings.rb +19 -0
- data/lib/virtualbox/com/interface/clipboard_mode.rb +9 -0
- data/lib/virtualbox/com/interface/console.rb +48 -0
- data/lib/virtualbox/com/interface/cpu_property_type.rb +9 -0
- data/lib/virtualbox/com/interface/device_type.rb +9 -0
- data/lib/virtualbox/com/interface/dhcp_server.rb +20 -0
- data/lib/virtualbox/com/interface/firmware_type.rb +9 -0
- data/lib/virtualbox/com/interface/guest_os_type.rb +21 -0
- data/lib/virtualbox/com/interface/host.rb +40 -0
- data/lib/virtualbox/com/interface/host_network_interface.rb +28 -0
- data/lib/virtualbox/com/interface/host_network_interface_medium_type.rb +9 -0
- data/lib/virtualbox/com/interface/host_network_interface_status.rb +9 -0
- data/lib/virtualbox/com/interface/host_network_interface_type.rb +9 -0
- data/lib/virtualbox/com/interface/host_usb_device.rb +11 -0
- data/lib/virtualbox/com/interface/host_usb_device_filter.rb +11 -0
- data/lib/virtualbox/com/interface/hw_virt_ex_property_type.rb +9 -0
- data/lib/virtualbox/com/interface/machine.rb +103 -0
- data/lib/virtualbox/com/interface/machine_state.rb +12 -0
- data/lib/virtualbox/com/interface/medium.rb +48 -0
- data/lib/virtualbox/com/interface/medium_attachment.rb +16 -0
- data/lib/virtualbox/com/interface/medium_format.rb +16 -0
- data/lib/virtualbox/com/interface/medium_state.rb +9 -0
- data/lib/virtualbox/com/interface/medium_type.rb +9 -0
- data/lib/virtualbox/com/interface/medium_variant.rb +9 -0
- data/lib/virtualbox/com/interface/network_adapter.rb +28 -0
- data/lib/virtualbox/com/interface/network_adapter_type.rb +9 -0
- data/lib/virtualbox/com/interface/network_attachment_type.rb +9 -0
- data/lib/virtualbox/com/interface/nsiexception.rb +21 -0
- data/lib/virtualbox/com/interface/nsisupports.rb +13 -0
- data/lib/virtualbox/com/interface/parallel_port.rb +15 -0
- data/lib/virtualbox/com/interface/port_mode.rb +9 -0
- data/lib/virtualbox/com/interface/progress.rb +58 -0
- data/lib/virtualbox/com/interface/serial_port.rb +17 -0
- data/lib/virtualbox/com/interface/session.rb +16 -0
- data/lib/virtualbox/com/interface/session_state.rb +9 -0
- data/lib/virtualbox/com/interface/session_type.rb +9 -0
- data/lib/virtualbox/com/interface/shared_folder.rb +15 -0
- data/lib/virtualbox/com/interface/snapshot.rb +18 -0
- data/lib/virtualbox/com/interface/storage_bus.rb +9 -0
- data/lib/virtualbox/com/interface/storage_controller.rb +21 -0
- data/lib/virtualbox/com/interface/storage_controller_type.rb +9 -0
- data/lib/virtualbox/com/interface/system_properties.rb +35 -0
- data/lib/virtualbox/com/interface/usb_controller.rb +18 -0
- data/lib/virtualbox/com/interface/usb_device.rb +22 -0
- data/lib/virtualbox/com/interface/usb_device_filter.rb +21 -0
- data/lib/virtualbox/com/interface/usb_device_filter_action.rb +9 -0
- data/lib/virtualbox/com/interface/usb_device_state.rb +9 -0
- data/lib/virtualbox/com/interface/virtual_box_error_info.rb +15 -0
- data/lib/virtualbox/com/interface/virtual_system_description.rb +17 -0
- data/lib/virtualbox/com/interface/virtual_system_description_type.rb +12 -0
- data/lib/virtualbox/com/interface/virtual_system_description_value_type.rb +9 -0
- data/lib/virtualbox/com/interface/virtualbox.rb +54 -0
- data/lib/virtualbox/com/interface/vrdp_auth_type.rb +9 -0
- data/lib/virtualbox/com/interface/vrdp_server.rb +17 -0
- data/lib/virtualbox/com/mscom_interface.rb +22 -0
- data/lib/virtualbox/com/util.rb +18 -0
- data/lib/virtualbox/dvd.rb +7 -94
- data/lib/virtualbox/exceptions.rb +24 -0
- data/lib/virtualbox/ext/glob_loader.rb +22 -0
- data/lib/virtualbox/ext/logger.rb +38 -0
- data/lib/virtualbox/ext/platform.rb +1 -1
- data/lib/virtualbox/extra_data.rb +25 -37
- data/lib/virtualbox/forwarded_port.rb +35 -13
- data/lib/virtualbox/global.rb +22 -80
- data/lib/virtualbox/hard_drive.rb +30 -97
- data/lib/virtualbox/lib.rb +82 -0
- data/lib/virtualbox/media.rb +7 -6
- data/lib/virtualbox/medium.rb +138 -0
- data/lib/virtualbox/medium_attachment.rb +61 -0
- data/lib/virtualbox/network_adapter.rb +134 -0
- data/lib/virtualbox/shared_folder.rb +53 -78
- data/lib/virtualbox/storage_controller.rb +76 -20
- data/lib/virtualbox/system_properties.rb +74 -0
- data/lib/virtualbox/usb_controller.rb +55 -0
- data/lib/virtualbox/version.rb +15 -0
- data/lib/virtualbox/virtual_system_description.rb +47 -0
- data/lib/virtualbox/vm.rb +160 -272
- data/test/test_helper.rb +0 -108
- data/test/virtualbox/abstract_model/attributable_test.rb +7 -1
- data/test/virtualbox/abstract_model/dirty_test.rb +1 -1
- data/test/virtualbox/abstract_model/interface_attributes_test.rb +169 -0
- data/test/virtualbox/abstract_model/relatable_test.rb +20 -0
- data/test/virtualbox/abstract_model_test.rb +40 -5
- data/test/virtualbox/appliance_test.rb +152 -0
- data/test/virtualbox/audio_adapter_test.rb +83 -0
- data/test/virtualbox/bios_test.rb +83 -0
- data/test/virtualbox/com/abstract_enum_test.rb +48 -0
- data/test/virtualbox/com/abstract_implementer_test.rb +39 -0
- data/test/virtualbox/com/abstract_interface_test.rb +139 -0
- data/test/virtualbox/com/ffi/interface_test.rb +249 -0
- data/test/virtualbox/com/ffi/util_test.rb +86 -0
- data/test/virtualbox/com/ffi_interface_test.rb +42 -0
- data/test/virtualbox/com/implementer/base_test.rb +37 -0
- data/test/virtualbox/com/implementer/ffi_test.rb +519 -0
- data/test/virtualbox/com/implementer/mscom_test.rb +208 -0
- data/test/virtualbox/com/mscom_interface_test.rb +17 -0
- data/test/virtualbox/com/util_test.rb +17 -0
- data/test/virtualbox/dvd_test.rb +4 -95
- data/test/virtualbox/ext/platform_test.rb +8 -0
- data/test/virtualbox/extra_data_test.rb +78 -102
- data/test/virtualbox/forwarded_port_test.rb +57 -7
- data/test/virtualbox/global_test.rb +25 -115
- data/test/virtualbox/hard_drive_test.rb +49 -212
- data/test/virtualbox/lib_test.rb +93 -0
- data/test/virtualbox/medium_attachment_test.rb +147 -0
- data/test/virtualbox/medium_test.rb +192 -0
- data/test/virtualbox/network_adapter_test.rb +160 -0
- data/test/virtualbox/shared_folder_test.rb +144 -160
- data/test/virtualbox/storage_controller_test.rb +166 -45
- data/test/virtualbox/system_properties_test.rb +87 -0
- data/test/virtualbox/usb_controller_test.rb +104 -0
- data/test/virtualbox/version_test.rb +34 -0
- data/test/virtualbox/virtual_system_description_test.rb +61 -0
- data/test/virtualbox/vm_test.rb +288 -322
- data/test/virtualbox_test.rb +1 -9
- data/virtualbox.gemspec +139 -23
- metadata +143 -27
- data/lib/virtualbox/attached_device.rb +0 -249
- data/lib/virtualbox/command.rb +0 -109
- data/lib/virtualbox/image.rb +0 -137
- data/lib/virtualbox/nic.rb +0 -111
- data/lib/virtualbox/system_property.rb +0 -55
- data/lib/virtualbox/usb.rb +0 -72
- data/test/virtualbox/attached_device_test.rb +0 -303
- data/test/virtualbox/command_test.rb +0 -152
- data/test/virtualbox/image_test.rb +0 -190
- data/test/virtualbox/nic_test.rb +0 -76
- data/test/virtualbox/system_property_test.rb +0 -71
- data/test/virtualbox/usb_test.rb +0 -35
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
require File.join(File.dirname(__FILE__), '..', '..', '..', 'test_helper')
|
|
2
|
+
|
|
3
|
+
class COMImplementerMSCOMTest < Test::Unit::TestCase
|
|
4
|
+
setup do
|
|
5
|
+
@klass = VirtualBox::COM::Implementer::MSCOM
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
context "initializing" do
|
|
9
|
+
setup do
|
|
10
|
+
@interface = mock("interface")
|
|
11
|
+
@lib = mock("lib")
|
|
12
|
+
@object = mock("object")
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
should "make the lib base and object accessible" do
|
|
16
|
+
instance = @klass.new(@interface, @lib, @object)
|
|
17
|
+
assert_equal @lib, instance.lib
|
|
18
|
+
assert_equal @object, instance.object
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
context "with an instance" do
|
|
23
|
+
setup do
|
|
24
|
+
@lib = mock("lib")
|
|
25
|
+
@object = mock("object")
|
|
26
|
+
@instance = @klass.new(@interface, @lib, @object)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
context "spec to formal argument list" do
|
|
30
|
+
should "replace primitives with their types" do
|
|
31
|
+
assert_equal [7], @instance.spec_to_args([:int], [7])
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
should "replace booleans with 1/0" do
|
|
35
|
+
bool = VirtualBox::COM::T_BOOL
|
|
36
|
+
assert_equal [1,0], @instance.spec_to_args([bool, bool], [true, false])
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
should "convert interfaces with nil arguments to nil" do
|
|
40
|
+
spec = [:Machine]
|
|
41
|
+
args = [nil]
|
|
42
|
+
|
|
43
|
+
assert_equal [nil], @instance.spec_to_args(spec, args)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
should "convert enums to their property indices" do
|
|
47
|
+
spec = [:FirmwareType]
|
|
48
|
+
args = [:efi]
|
|
49
|
+
|
|
50
|
+
assert_equal [1], @instance.spec_to_args(spec, args)
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
should "ignore out parameters" do
|
|
54
|
+
spec = [[:out, :hey], :int]
|
|
55
|
+
args = [7]
|
|
56
|
+
|
|
57
|
+
assert_equal [7], @instance.spec_to_args(spec, args)
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
context "reading a property" do
|
|
62
|
+
should "read the property on the object and return it" do
|
|
63
|
+
name = :foo_bar
|
|
64
|
+
value = mock("value")
|
|
65
|
+
result = mock("result")
|
|
66
|
+
opts = { :value_type => :foo }
|
|
67
|
+
@object.expects(:[]).with('FooBar').once.returns(value)
|
|
68
|
+
@instance.expects(:returnable_value).with(value, opts[:value_type]).returns(result)
|
|
69
|
+
|
|
70
|
+
assert_equal result, @instance.read_property(name, opts)
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
context "writing a property" do
|
|
75
|
+
should "convert the args and set it on the object" do
|
|
76
|
+
name = :foo_bar
|
|
77
|
+
opts = { :value_type => :foo }
|
|
78
|
+
@instance.expects(:spec_to_args).with([:foo], [:value]).returns([:modified])
|
|
79
|
+
@object.expects(:[]=).with('FooBar', :modified).once
|
|
80
|
+
|
|
81
|
+
@instance.write_property(name, :value, opts)
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
context "calling a function" do
|
|
86
|
+
should "send the method and args to the object and return the value" do
|
|
87
|
+
name = :foo_bar
|
|
88
|
+
args = [1,2,3]
|
|
89
|
+
formal_args = [4,5,6]
|
|
90
|
+
result = mock("result")
|
|
91
|
+
value = mock("value")
|
|
92
|
+
opts = { :value_type => :foo, :spec => :foo }
|
|
93
|
+
@object.expects(:send).with('FooBar', *formal_args).once.returns(value)
|
|
94
|
+
@instance.expects(:spec_to_args).with(opts[:spec], args).returns(formal_args)
|
|
95
|
+
@instance.expects(:returnable_value).with(value, opts[:value_type]).returns(result)
|
|
96
|
+
|
|
97
|
+
assert_equal result, @instance.call_function(name, args, opts)
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
context "returnable values" do
|
|
102
|
+
should "just return nil if type is nil" do
|
|
103
|
+
assert_nil @instance.returnable_value(7, nil)
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
should "just return nil if type is void" do
|
|
107
|
+
assert_nil @instance.returnable_value(7, :void)
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
should "infer the type then attempt to read that type" do
|
|
111
|
+
@instance.expects(:infer_type).with(:bar).returns([nil, :foo])
|
|
112
|
+
@instance.expects(:read_foo).with(7, :bar).once
|
|
113
|
+
@instance.returnable_value(7, :bar)
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
should "infer type and call array method for arrays" do
|
|
117
|
+
@instance.expects(:infer_type).with(:bar).returns([nil, :foo])
|
|
118
|
+
@instance.expects(:read_array_of_foo).with(7, [:bar]).once
|
|
119
|
+
@instance.returnable_value(7, [:bar])
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
should "return the value of the read method" do
|
|
123
|
+
result = mock("result")
|
|
124
|
+
@instance.expects(:infer_type).with(:bar).returns([nil, :foo])
|
|
125
|
+
@instance.expects(:read_foo).with(7, :bar).once.returns(result)
|
|
126
|
+
assert_equal result, @instance.returnable_value(7, :bar)
|
|
127
|
+
end
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
context "reading primitive values" do
|
|
131
|
+
# Yes, it typically avoid meta-programming, but this is such a
|
|
132
|
+
# repetitive and simple case that I am doing it
|
|
133
|
+
[:ushort, :uint, :ulong, :int, :long].each do |prim|
|
|
134
|
+
should "read #{prim} and convert to int" do
|
|
135
|
+
assert_equal 7, @instance.send("read_#{prim}".to_sym, "7", prim)
|
|
136
|
+
end
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
should "return strings as is" do
|
|
140
|
+
assert_equal "foo", @instance.read_unicode_string("foo", :unicode_string)
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
should "read char as a boolean value" do
|
|
144
|
+
assert_equal true, @instance.read_char('1', :char)
|
|
145
|
+
assert_equal false, @instance.read_char('0', :char)
|
|
146
|
+
assert_equal true, @instance.read_char(1, :char)
|
|
147
|
+
assert_equal false, @instance.read_char(0, :char)
|
|
148
|
+
end
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
context "reading enums" do
|
|
152
|
+
setup do
|
|
153
|
+
@interface_klass = mock("klass")
|
|
154
|
+
|
|
155
|
+
@type = :foo
|
|
156
|
+
@value = :bar
|
|
157
|
+
@result = mock("result")
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
should "index the value on the interface class" do
|
|
161
|
+
@instance.expects(:interface_klass).with(@type).returns(@interface_klass)
|
|
162
|
+
@interface_klass.expects(:[]).with(@value).returns(@result)
|
|
163
|
+
|
|
164
|
+
assert_equal @result, @instance.read_enum(@value, @type)
|
|
165
|
+
end
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
context "reading interfaces" do
|
|
169
|
+
setup do
|
|
170
|
+
@interface_klass = mock("klass")
|
|
171
|
+
|
|
172
|
+
@type = :foo
|
|
173
|
+
@value = :bar
|
|
174
|
+
@result = mock("result")
|
|
175
|
+
end
|
|
176
|
+
|
|
177
|
+
should "instantiate the klass properly" do
|
|
178
|
+
@instance.expects(:interface_klass).with(@type).returns(@interface_klass)
|
|
179
|
+
@interface_klass.expects(:new).with(@instance.class, @instance.lib, @value).returns(@result)
|
|
180
|
+
|
|
181
|
+
assert_equal @result, @instance.read_interface(@value, @type)
|
|
182
|
+
end
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
context "reading an array of strings" do
|
|
186
|
+
should "just return as is" do
|
|
187
|
+
assert_equal ["foo", "bar"], @instance.read_array_of_unicode_string(["foo", "bar"], :unicode_string)
|
|
188
|
+
end
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
context "read array of interface" do
|
|
192
|
+
setup do
|
|
193
|
+
@interface_klass = mock("klass")
|
|
194
|
+
|
|
195
|
+
@type = :foo
|
|
196
|
+
@value = [:foo, nil]
|
|
197
|
+
@result = mock("result")
|
|
198
|
+
end
|
|
199
|
+
|
|
200
|
+
should "instantiate the klass properly for non-nil values" do
|
|
201
|
+
@instance.expects(:interface_klass).with(@type).returns(@interface_klass)
|
|
202
|
+
@interface_klass.expects(:new).with(@instance.class, @instance.lib, @value[0]).returns(@result)
|
|
203
|
+
|
|
204
|
+
assert_equal [@result, nil], @instance.read_array_of_interface(@value, [@type])
|
|
205
|
+
end
|
|
206
|
+
end
|
|
207
|
+
end
|
|
208
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
require File.join(File.dirname(__FILE__), '..', '..', 'test_helper')
|
|
2
|
+
|
|
3
|
+
class COMMSCOMInterfaceBaseTest < Test::Unit::TestCase
|
|
4
|
+
setup do
|
|
5
|
+
@klass = VirtualBox::COM::MSCOMInterface
|
|
6
|
+
end
|
|
7
|
+
context "initialization" do
|
|
8
|
+
should "initialize MSCOM interface" do
|
|
9
|
+
@klass.any_instance.expects(:initialize_mscom).once
|
|
10
|
+
@klass.new
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
context "initializing mscom interface" do
|
|
15
|
+
# TODO
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
require File.join(File.dirname(__FILE__), '..', '..', 'test_helper')
|
|
2
|
+
|
|
3
|
+
class COMUtilTest < Test::Unit::TestCase
|
|
4
|
+
setup do
|
|
5
|
+
@klass = VirtualBox::COM::Util
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
context "checking for interfaces" do
|
|
9
|
+
should "return true for existing interfaces" do
|
|
10
|
+
assert @klass.interface?(:VirtualBox)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
should "return false for non-existing interfaces" do
|
|
14
|
+
assert !@klass.interface?(:IDontExist)
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
data/test/virtualbox/dvd_test.rb
CHANGED
|
@@ -2,51 +2,12 @@ require File.join(File.dirname(__FILE__), '..', 'test_helper')
|
|
|
2
2
|
|
|
3
3
|
class DVDTest < Test::Unit::TestCase
|
|
4
4
|
setup do
|
|
5
|
-
VirtualBox::
|
|
5
|
+
@klass = VirtualBox::DVD
|
|
6
6
|
end
|
|
7
7
|
|
|
8
|
-
context "
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
VirtualBox::DVD.reloaded!
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
should "return false if attempting to destroy an empty drive" do
|
|
15
|
-
assert !VirtualBox::DVD.empty_drive.destroy
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
should "call vboxmanage to destroy it" do
|
|
19
|
-
VirtualBox::Command.expects(:vboxmanage).with("closemedium", "dvd", @dvd.uuid, "--delete")
|
|
20
|
-
assert @dvd.destroy
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
should "return false if destroy failed" do
|
|
24
|
-
VirtualBox::Command.stubs(:vboxmanage).raises(VirtualBox::Exceptions::CommandFailedException)
|
|
25
|
-
assert !@dvd.destroy
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
should "raise an exception if failed and flag is set" do
|
|
29
|
-
VirtualBox::Command.stubs(:vboxmanage).raises(VirtualBox::Exceptions::CommandFailedException)
|
|
30
|
-
assert_raises(VirtualBox::Exceptions::CommandFailedException) {
|
|
31
|
-
@dvd.destroy(true)
|
|
32
|
-
}
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
should "mark the global class for reloading" do
|
|
36
|
-
VirtualBox::Global.expects(:reload!)
|
|
37
|
-
assert @dvd.destroy
|
|
38
|
-
end
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
context "empty drive" do
|
|
42
|
-
should "return an empty drive instance by calling new with :empty_drive" do
|
|
43
|
-
dvd = VirtualBox::DVD.new(:empty_drive)
|
|
44
|
-
assert dvd.empty_drive?
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
should "call new with :empty_drive with empty_drive class method" do
|
|
48
|
-
dvd = VirtualBox::DVD.empty_drive
|
|
49
|
-
assert dvd.empty_drive?
|
|
8
|
+
context "device type" do
|
|
9
|
+
should "be :dvd" do
|
|
10
|
+
assert_equal :dvd, @klass.device_type
|
|
50
11
|
end
|
|
51
12
|
end
|
|
52
13
|
|
|
@@ -64,56 +25,4 @@ class DVDTest < Test::Unit::TestCase
|
|
|
64
25
|
assert result.is_a?(Array)
|
|
65
26
|
end
|
|
66
27
|
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
|
-
}
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
@valid = <<-valid
|
|
83
|
-
UUID: d3252617-8176-4f8c-9d73-1c9c82b23960
|
|
84
|
-
Path: /Users/mitchellh/Downloads/jeos-8.04.3-jeos-i386.iso
|
|
85
|
-
Accessible: yes
|
|
86
|
-
|
|
87
|
-
UUID: 4a08f52c-bca3-4908-8da4-4f48aaa4ebba
|
|
88
|
-
Path: /Applications/VirtualBox.app/Contents/MacOS/VBoxGuestAdditions.iso
|
|
89
|
-
Accessible: yes
|
|
90
|
-
Usage: TestJeOS (UUID: 3d0f87b4-50f7-4fc5-ad89-93375b1b32a3)
|
|
91
|
-
valid
|
|
92
|
-
|
|
93
|
-
VirtualBox::Command.expects(:vboxmanage).with("list", "dvds").returns(@valid).once
|
|
94
|
-
end
|
|
95
|
-
|
|
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
|
|
100
|
-
|
|
101
|
-
result.each { |v| assert v.is_a?(VirtualBox::DVD) }
|
|
102
|
-
end
|
|
103
|
-
|
|
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
|
|
108
|
-
|
|
109
|
-
result.each do |image|
|
|
110
|
-
expected_image = @expectations[image.uuid]
|
|
111
|
-
assert expected_image
|
|
112
|
-
|
|
113
|
-
expected_image.each do |k,v|
|
|
114
|
-
assert_equal v, image.read_attribute(k)
|
|
115
|
-
end
|
|
116
|
-
end
|
|
117
|
-
end
|
|
118
|
-
end
|
|
119
28
|
end
|
|
@@ -28,6 +28,14 @@ class PlatformTest < Test::Unit::TestCase
|
|
|
28
28
|
assert VirtualBox::Platform.windows?
|
|
29
29
|
end
|
|
30
30
|
end
|
|
31
|
+
|
|
32
|
+
should "return true if it contains cygwin" do
|
|
33
|
+
success = ["i386-cygwin", "i686-cygwin64", "cygwin"]
|
|
34
|
+
success.each do |item|
|
|
35
|
+
VirtualBox::Platform.stubs(:platform).returns(item)
|
|
36
|
+
assert VirtualBox::Platform.windows?
|
|
37
|
+
end
|
|
38
|
+
end
|
|
31
39
|
end
|
|
32
40
|
|
|
33
41
|
context "linux" do
|
|
@@ -2,38 +2,13 @@ require File.join(File.dirname(__FILE__), '..', 'test_helper')
|
|
|
2
2
|
|
|
3
3
|
class ExtraDataTest < Test::Unit::TestCase
|
|
4
4
|
setup do
|
|
5
|
-
@
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
Key: GUI/LastWindowPostion, Value: 99,457,770,550
|
|
9
|
-
Key: GUI/SUNOnlineData, Value: triesLeft=0
|
|
10
|
-
Key: GUI/SuppressMessages, Value: ,confirmInputCapture,remindAboutAutoCapture,confirmRemoveMedium,remindAboutInaccessibleMedia,confirmGoingFullscreen,remindAboutMouseIntegrationOn
|
|
11
|
-
Key: GUI/UpdateCheckCount, Value: 13
|
|
12
|
-
Key: GUI/UpdateDate, Value: 1 d, 2010-01-29, stable
|
|
13
|
-
raw
|
|
14
|
-
|
|
15
|
-
VirtualBox::Command.stubs(:execute)
|
|
16
|
-
|
|
17
|
-
@ed = VirtualBox::ExtraData.new
|
|
5
|
+
@parent = mock("parent")
|
|
6
|
+
@interface = mock("interface")
|
|
7
|
+
@ed = VirtualBox::ExtraData.new(@parent, @interface)
|
|
18
8
|
@ed["foo"] = "bar"
|
|
19
9
|
@ed.clear_dirty!
|
|
20
10
|
end
|
|
21
11
|
|
|
22
|
-
context "attributes" do
|
|
23
|
-
should "return parent name if its a VM object" do
|
|
24
|
-
vm = mock("vm")
|
|
25
|
-
vm.stubs(:is_a?).with(VirtualBox::VM).returns(true)
|
|
26
|
-
vm.stubs(:name).returns("FOO")
|
|
27
|
-
|
|
28
|
-
@ed.parent = vm
|
|
29
|
-
assert_equal "FOO", @ed.parent_name
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
should "return default otherwise" do
|
|
33
|
-
assert_equal "global", @ed.parent_name
|
|
34
|
-
end
|
|
35
|
-
end
|
|
36
|
-
|
|
37
12
|
context "relationships" do
|
|
38
13
|
setup do
|
|
39
14
|
@caller = mock("caller")
|
|
@@ -41,10 +16,35 @@ raw
|
|
|
41
16
|
end
|
|
42
17
|
|
|
43
18
|
context "populating" do
|
|
19
|
+
setup do
|
|
20
|
+
@interface = mock("interface")
|
|
21
|
+
@interface.stubs(:get_extra_data_keys).returns([])
|
|
22
|
+
end
|
|
23
|
+
|
|
44
24
|
should "return a ExtraData object" do
|
|
45
|
-
result = VirtualBox::ExtraData.populate_relationship(@caller,
|
|
25
|
+
result = VirtualBox::ExtraData.populate_relationship(@caller, @interface)
|
|
46
26
|
assert result.is_a?(VirtualBox::ExtraData)
|
|
47
27
|
end
|
|
28
|
+
|
|
29
|
+
should "not be dirty" do
|
|
30
|
+
result = VirtualBox::ExtraData.populate_relationship(@caller, @interface)
|
|
31
|
+
assert !result.changed?
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
should "add the value of each key to the ED hash" do
|
|
35
|
+
expected_hash = { :a => 1, :b => 2, :c => 4 }
|
|
36
|
+
@interface.expects(:get_extra_data_keys).returns(expected_hash.keys)
|
|
37
|
+
|
|
38
|
+
expected_hash.each do |k, v|
|
|
39
|
+
@interface.expects(:get_extra_data).with(k).returns(v)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
result = VirtualBox::ExtraData.populate_relationship(@caller, @interface)
|
|
43
|
+
assert_equal expected_hash.length, result.length
|
|
44
|
+
result.each do |k, v|
|
|
45
|
+
assert_equal expected_hash[k], v
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
48
|
end
|
|
49
49
|
|
|
50
50
|
context "saving" do
|
|
@@ -57,75 +57,9 @@ raw
|
|
|
57
57
|
end
|
|
58
58
|
end
|
|
59
59
|
|
|
60
|
-
context "destroying (deleting)" do
|
|
61
|
-
setup do
|
|
62
|
-
@key = "foo"
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
should "call the proper vbox command" do
|
|
66
|
-
VirtualBox::Command.expects(:vboxmanage).with("setextradata", "global", "foo")
|
|
67
|
-
assert @ed.delete(@key)
|
|
68
|
-
end
|
|
69
|
-
|
|
70
|
-
should "remove the key from the hash" do
|
|
71
|
-
assert @ed.has_key?(@key)
|
|
72
|
-
assert @ed.delete(@key)
|
|
73
|
-
assert !@ed.has_key?(@key)
|
|
74
|
-
end
|
|
75
|
-
|
|
76
|
-
should "raise an exception if true sent to save and error occured" do
|
|
77
|
-
VirtualBox::Command.stubs(:vboxmanage).raises(VirtualBox::Exceptions::CommandFailedException)
|
|
78
|
-
assert_raises(VirtualBox::Exceptions::CommandFailedException) {
|
|
79
|
-
@ed.delete(@key, true)
|
|
80
|
-
}
|
|
81
|
-
end
|
|
82
|
-
|
|
83
|
-
should "return false if the command failed" do
|
|
84
|
-
VirtualBox::Command.stubs(:vboxmanage).raises(VirtualBox::Exceptions::CommandFailedException)
|
|
85
|
-
assert !@ed.delete(@key)
|
|
86
|
-
end
|
|
87
|
-
end
|
|
88
|
-
|
|
89
|
-
context "saving" do
|
|
90
|
-
setup do
|
|
91
|
-
@ed["foo"] = "BAR"
|
|
92
|
-
assert @ed.changed?
|
|
93
|
-
end
|
|
94
|
-
|
|
95
|
-
should "do nothing if there are no changes" do
|
|
96
|
-
@ed.clear_dirty!
|
|
97
|
-
VirtualBox::Command.expects(:vboxmanage).never
|
|
98
|
-
assert @ed.save
|
|
99
|
-
end
|
|
100
|
-
|
|
101
|
-
should "call the proper vbox command" do
|
|
102
|
-
VirtualBox::Command.expects(:vboxmanage).with("setextradata", "global", "foo", "BAR")
|
|
103
|
-
assert @ed.save
|
|
104
|
-
end
|
|
105
|
-
|
|
106
|
-
should "return false if the command failed" do
|
|
107
|
-
VirtualBox::Command.stubs(:vboxmanage).raises(VirtualBox::Exceptions::CommandFailedException)
|
|
108
|
-
assert !@ed.save
|
|
109
|
-
end
|
|
110
|
-
|
|
111
|
-
should "raise an exception if true sent to save and error occured" do
|
|
112
|
-
VirtualBox::Command.stubs(:vboxmanage).raises(VirtualBox::Exceptions::CommandFailedException)
|
|
113
|
-
assert_raises(VirtualBox::Exceptions::CommandFailedException) {
|
|
114
|
-
@ed.save(true)
|
|
115
|
-
}
|
|
116
|
-
end
|
|
117
|
-
|
|
118
|
-
should "clear dirty state" do
|
|
119
|
-
@ed["value"] = "rawr"
|
|
120
|
-
assert @ed.changed?
|
|
121
|
-
assert @ed.save
|
|
122
|
-
assert !@ed.changed?
|
|
123
|
-
end
|
|
124
|
-
end
|
|
125
|
-
|
|
126
60
|
context "setting dirty state" do
|
|
127
61
|
setup do
|
|
128
|
-
@ed = VirtualBox::ExtraData.new
|
|
62
|
+
@ed = VirtualBox::ExtraData.new(@parent, @interface)
|
|
129
63
|
end
|
|
130
64
|
|
|
131
65
|
should "not be dirty initially" do
|
|
@@ -135,7 +69,7 @@ raw
|
|
|
135
69
|
should "be dirty when setting a value" do
|
|
136
70
|
@ed["foo"] = "bar"
|
|
137
71
|
assert @ed.changed?
|
|
138
|
-
assert @ed.changes.has_key?(
|
|
72
|
+
assert @ed.changes.has_key?(:foo)
|
|
139
73
|
end
|
|
140
74
|
end
|
|
141
75
|
|
|
@@ -165,14 +99,56 @@ raw
|
|
|
165
99
|
end
|
|
166
100
|
|
|
167
101
|
context "constructor" do
|
|
168
|
-
should "set the parent with the given argument" do
|
|
169
|
-
ed = VirtualBox::ExtraData.new("JOEY")
|
|
102
|
+
should "set the parent and interface with the given argument" do
|
|
103
|
+
ed = VirtualBox::ExtraData.new("JOEY", @interface)
|
|
170
104
|
assert_equal "JOEY", ed.parent
|
|
105
|
+
assert_equal @interface, ed.interface
|
|
171
106
|
end
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
context "saving extra data" do
|
|
110
|
+
setup do
|
|
111
|
+
@interface.stubs(:set_extra_data)
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
should "only save changed keys" do
|
|
115
|
+
@interface.expects(:set_extra_data).never
|
|
116
|
+
@interface.expects(:set_extra_data).with("bar", "baz").once
|
|
117
|
+
|
|
118
|
+
@ed["bar"] = "baz"
|
|
119
|
+
@ed.save
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
should "convert values to strings" do
|
|
123
|
+
@interface.expects(:set_extra_data).never
|
|
124
|
+
@interface.expects(:set_extra_data).with("bar", "7").once
|
|
125
|
+
|
|
126
|
+
@ed["bar"] = 7
|
|
127
|
+
@ed.save
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
should "clear the dirty status of keys" do
|
|
131
|
+
@ed["bar"] = "baz"
|
|
132
|
+
assert @ed.bar_changed?
|
|
133
|
+
@ed.save
|
|
134
|
+
assert !@ed.bar_changed?
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
should "remove nil keys from the hash" do
|
|
138
|
+
@ed["bar"] = "baz"
|
|
139
|
+
@ed.save
|
|
140
|
+
@ed["bar"] = nil
|
|
141
|
+
assert @ed.bar_changed?
|
|
142
|
+
@ed.save
|
|
143
|
+
assert !@ed.keys.include?("bar")
|
|
144
|
+
end
|
|
145
|
+
end
|
|
172
146
|
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
147
|
+
context "deleteting extra data" do
|
|
148
|
+
should "call set its value to nil" do
|
|
149
|
+
key = :foo
|
|
150
|
+
@ed.expects(:[]=).with(key, nil).once
|
|
151
|
+
@ed.delete(key)
|
|
176
152
|
end
|
|
177
153
|
end
|
|
178
154
|
end
|