bbrowning-virtualbox 0.7.6.dev

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 (281) hide show
  1. data/.gitignore +8 -0
  2. data/.yardopts +3 -0
  3. data/Gemfile +16 -0
  4. data/LICENSE +19 -0
  5. data/Rakefile +33 -0
  6. data/Readme.md +70 -0
  7. data/docs/GettingStarted.md +196 -0
  8. data/docs/WhatsNew.md +12 -0
  9. data/features/README.md +33 -0
  10. data/features/global.feature +19 -0
  11. data/features/global_extra_data.feature +27 -0
  12. data/features/step_definitions/abstract_model_steps.rb +39 -0
  13. data/features/step_definitions/extra_data_steps.rb +36 -0
  14. data/features/step_definitions/global_steps.rb +29 -0
  15. data/features/step_definitions/nat_engine_steps.rb +76 -0
  16. data/features/step_definitions/network_adapter_steps.rb +38 -0
  17. data/features/step_definitions/shared_folder_steps.rb +76 -0
  18. data/features/step_definitions/snapshot_steps.rb +74 -0
  19. data/features/step_definitions/storage_controller_steps.rb +16 -0
  20. data/features/step_definitions/virtualbox_steps.rb +17 -0
  21. data/features/step_definitions/vm_steps.rb +50 -0
  22. data/features/support/env.rb +61 -0
  23. data/features/support/helpers.rb +38 -0
  24. data/features/support/hooks.rb +30 -0
  25. data/features/support/ordered_hash.rb +49 -0
  26. data/features/support/vboxmanage.rb +191 -0
  27. data/features/version.feature +16 -0
  28. data/features/vm.feature +13 -0
  29. data/features/vm_bios.feature +29 -0
  30. data/features/vm_cpu.feature +29 -0
  31. data/features/vm_extra_data.feature +35 -0
  32. data/features/vm_hw_virt.feature +29 -0
  33. data/features/vm_nat_engine.feature +57 -0
  34. data/features/vm_network_adapters.feature +27 -0
  35. data/features/vm_shared_folders.feature +42 -0
  36. data/features/vm_snapshots.feature +29 -0
  37. data/features/vm_storage_controllers.feature +11 -0
  38. data/lib/virtualbox.rb +11 -0
  39. data/lib/virtualbox/abstract_model.rb +281 -0
  40. data/lib/virtualbox/abstract_model/attributable.rb +290 -0
  41. data/lib/virtualbox/abstract_model/dirty.rb +177 -0
  42. data/lib/virtualbox/abstract_model/interface_attributes.rb +98 -0
  43. data/lib/virtualbox/abstract_model/relatable.rb +332 -0
  44. data/lib/virtualbox/abstract_model/validatable.rb +167 -0
  45. data/lib/virtualbox/abstract_model/version_matcher.rb +35 -0
  46. data/lib/virtualbox/appliance.rb +62 -0
  47. data/lib/virtualbox/audio_adapter.rb +52 -0
  48. data/lib/virtualbox/bios.rb +50 -0
  49. data/lib/virtualbox/com.rb +23 -0
  50. data/lib/virtualbox/com/abstract_enum.rb +43 -0
  51. data/lib/virtualbox/com/abstract_implementer.rb +45 -0
  52. data/lib/virtualbox/com/abstract_interface.rb +167 -0
  53. data/lib/virtualbox/com/base_interface.rb +38 -0
  54. data/lib/virtualbox/com/ffi/interface.rb +150 -0
  55. data/lib/virtualbox/com/ffi/interfaces.rb +54 -0
  56. data/lib/virtualbox/com/ffi/util.rb +119 -0
  57. data/lib/virtualbox/com/ffi/vboxxpcomc.rb +31 -0
  58. data/lib/virtualbox/com/ffi_interface.rb +96 -0
  59. data/lib/virtualbox/com/implementer/base.rb +59 -0
  60. data/lib/virtualbox/com/implementer/ffi.rb +361 -0
  61. data/lib/virtualbox/com/implementer/mscom.rb +175 -0
  62. data/lib/virtualbox/com/implementer/nil.rb +10 -0
  63. data/lib/virtualbox/com/interface/3.1.x/access_mode.rb +11 -0
  64. data/lib/virtualbox/com/interface/3.1.x/appliance.rb +22 -0
  65. data/lib/virtualbox/com/interface/3.1.x/audio_adapter.rb +15 -0
  66. data/lib/virtualbox/com/interface/3.1.x/audio_controller_type.rb +11 -0
  67. data/lib/virtualbox/com/interface/3.1.x/audio_driver_type.rb +11 -0
  68. data/lib/virtualbox/com/interface/3.1.x/bios_boot_menu_mode.rb +11 -0
  69. data/lib/virtualbox/com/interface/3.1.x/bios_settings.rb +21 -0
  70. data/lib/virtualbox/com/interface/3.1.x/clipboard_mode.rb +11 -0
  71. data/lib/virtualbox/com/interface/3.1.x/console.rb +50 -0
  72. data/lib/virtualbox/com/interface/3.1.x/cpu_property_type.rb +11 -0
  73. data/lib/virtualbox/com/interface/3.1.x/device_type.rb +11 -0
  74. data/lib/virtualbox/com/interface/3.1.x/dhcp_server.rb +22 -0
  75. data/lib/virtualbox/com/interface/3.1.x/firmware_type.rb +11 -0
  76. data/lib/virtualbox/com/interface/3.1.x/guest_os_type.rb +23 -0
  77. data/lib/virtualbox/com/interface/3.1.x/host.rb +42 -0
  78. data/lib/virtualbox/com/interface/3.1.x/host_network_interface.rb +30 -0
  79. data/lib/virtualbox/com/interface/3.1.x/host_network_interface_medium_type.rb +11 -0
  80. data/lib/virtualbox/com/interface/3.1.x/host_network_interface_status.rb +11 -0
  81. data/lib/virtualbox/com/interface/3.1.x/host_network_interface_type.rb +11 -0
  82. data/lib/virtualbox/com/interface/3.1.x/host_usb_device.rb +13 -0
  83. data/lib/virtualbox/com/interface/3.1.x/host_usb_device_filter.rb +13 -0
  84. data/lib/virtualbox/com/interface/3.1.x/hw_virt_ex_property_type.rb +11 -0
  85. data/lib/virtualbox/com/interface/3.1.x/machine.rb +105 -0
  86. data/lib/virtualbox/com/interface/3.1.x/machine_state.rb +14 -0
  87. data/lib/virtualbox/com/interface/3.1.x/medium.rb +50 -0
  88. data/lib/virtualbox/com/interface/3.1.x/medium_attachment.rb +18 -0
  89. data/lib/virtualbox/com/interface/3.1.x/medium_format.rb +18 -0
  90. data/lib/virtualbox/com/interface/3.1.x/medium_state.rb +11 -0
  91. data/lib/virtualbox/com/interface/3.1.x/medium_type.rb +11 -0
  92. data/lib/virtualbox/com/interface/3.1.x/medium_variant.rb +11 -0
  93. data/lib/virtualbox/com/interface/3.1.x/network_adapter.rb +30 -0
  94. data/lib/virtualbox/com/interface/3.1.x/network_adapter_type.rb +11 -0
  95. data/lib/virtualbox/com/interface/3.1.x/network_attachment_type.rb +11 -0
  96. data/lib/virtualbox/com/interface/3.1.x/nsiexception.rb +23 -0
  97. data/lib/virtualbox/com/interface/3.1.x/nsisupports.rb +15 -0
  98. data/lib/virtualbox/com/interface/3.1.x/parallel_port.rb +17 -0
  99. data/lib/virtualbox/com/interface/3.1.x/port_mode.rb +11 -0
  100. data/lib/virtualbox/com/interface/3.1.x/progress.rb +63 -0
  101. data/lib/virtualbox/com/interface/3.1.x/serial_port.rb +19 -0
  102. data/lib/virtualbox/com/interface/3.1.x/session.rb +18 -0
  103. data/lib/virtualbox/com/interface/3.1.x/session_state.rb +11 -0
  104. data/lib/virtualbox/com/interface/3.1.x/session_type.rb +11 -0
  105. data/lib/virtualbox/com/interface/3.1.x/shared_folder.rb +17 -0
  106. data/lib/virtualbox/com/interface/3.1.x/snapshot.rb +20 -0
  107. data/lib/virtualbox/com/interface/3.1.x/storage_bus.rb +11 -0
  108. data/lib/virtualbox/com/interface/3.1.x/storage_controller.rb +23 -0
  109. data/lib/virtualbox/com/interface/3.1.x/storage_controller_type.rb +11 -0
  110. data/lib/virtualbox/com/interface/3.1.x/system_properties.rb +37 -0
  111. data/lib/virtualbox/com/interface/3.1.x/usb_controller.rb +20 -0
  112. data/lib/virtualbox/com/interface/3.1.x/usb_device.rb +24 -0
  113. data/lib/virtualbox/com/interface/3.1.x/usb_device_filter.rb +23 -0
  114. data/lib/virtualbox/com/interface/3.1.x/usb_device_filter_action.rb +11 -0
  115. data/lib/virtualbox/com/interface/3.1.x/usb_device_state.rb +11 -0
  116. data/lib/virtualbox/com/interface/3.1.x/virtual_box_error_info.rb +17 -0
  117. data/lib/virtualbox/com/interface/3.1.x/virtual_system_description.rb +19 -0
  118. data/lib/virtualbox/com/interface/3.1.x/virtual_system_description_type.rb +14 -0
  119. data/lib/virtualbox/com/interface/3.1.x/virtual_system_description_value_type.rb +11 -0
  120. data/lib/virtualbox/com/interface/3.1.x/virtualbox.rb +67 -0
  121. data/lib/virtualbox/com/interface/3.1.x/vrdp_auth_type.rb +11 -0
  122. data/lib/virtualbox/com/interface/3.1.x/vrdp_server.rb +19 -0
  123. data/lib/virtualbox/com/interface/3.2.x/access_mode.rb +11 -0
  124. data/lib/virtualbox/com/interface/3.2.x/appliance.rb +22 -0
  125. data/lib/virtualbox/com/interface/3.2.x/audio_adapter.rb +15 -0
  126. data/lib/virtualbox/com/interface/3.2.x/audio_controller_type.rb +11 -0
  127. data/lib/virtualbox/com/interface/3.2.x/audio_driver_type.rb +11 -0
  128. data/lib/virtualbox/com/interface/3.2.x/bios_boot_menu_mode.rb +11 -0
  129. data/lib/virtualbox/com/interface/3.2.x/bios_settings.rb +21 -0
  130. data/lib/virtualbox/com/interface/3.2.x/clipboard_mode.rb +11 -0
  131. data/lib/virtualbox/com/interface/3.2.x/console.rb +50 -0
  132. data/lib/virtualbox/com/interface/3.2.x/cpu_property_type.rb +11 -0
  133. data/lib/virtualbox/com/interface/3.2.x/device_type.rb +11 -0
  134. data/lib/virtualbox/com/interface/3.2.x/dhcp_server.rb +22 -0
  135. data/lib/virtualbox/com/interface/3.2.x/firmware_type.rb +11 -0
  136. data/lib/virtualbox/com/interface/3.2.x/guest.rb +13 -0
  137. data/lib/virtualbox/com/interface/3.2.x/guest_os_type.rb +33 -0
  138. data/lib/virtualbox/com/interface/3.2.x/host.rb +43 -0
  139. data/lib/virtualbox/com/interface/3.2.x/host_network_interface.rb +30 -0
  140. data/lib/virtualbox/com/interface/3.2.x/host_network_interface_medium_type.rb +11 -0
  141. data/lib/virtualbox/com/interface/3.2.x/host_network_interface_status.rb +11 -0
  142. data/lib/virtualbox/com/interface/3.2.x/host_network_interface_type.rb +11 -0
  143. data/lib/virtualbox/com/interface/3.2.x/host_usb_device.rb +13 -0
  144. data/lib/virtualbox/com/interface/3.2.x/host_usb_device_filter.rb +13 -0
  145. data/lib/virtualbox/com/interface/3.2.x/hw_virt_ex_property_type.rb +11 -0
  146. data/lib/virtualbox/com/interface/3.2.x/keyboard_hid_type.rb +11 -0
  147. data/lib/virtualbox/com/interface/3.2.x/machine.rb +118 -0
  148. data/lib/virtualbox/com/interface/3.2.x/machine_state.rb +14 -0
  149. data/lib/virtualbox/com/interface/3.2.x/medium.rb +51 -0
  150. data/lib/virtualbox/com/interface/3.2.x/medium_attachment.rb +18 -0
  151. data/lib/virtualbox/com/interface/3.2.x/medium_format.rb +18 -0
  152. data/lib/virtualbox/com/interface/3.2.x/medium_state.rb +11 -0
  153. data/lib/virtualbox/com/interface/3.2.x/medium_type.rb +11 -0
  154. data/lib/virtualbox/com/interface/3.2.x/medium_variant.rb +11 -0
  155. data/lib/virtualbox/com/interface/3.2.x/nat_alias_mode.rb +11 -0
  156. data/lib/virtualbox/com/interface/3.2.x/nat_engine.rb +27 -0
  157. data/lib/virtualbox/com/interface/3.2.x/nat_protocol.rb +11 -0
  158. data/lib/virtualbox/com/interface/3.2.x/network_adapter.rb +34 -0
  159. data/lib/virtualbox/com/interface/3.2.x/network_adapter_type.rb +11 -0
  160. data/lib/virtualbox/com/interface/3.2.x/network_attachment_type.rb +11 -0
  161. data/lib/virtualbox/com/interface/3.2.x/nsiexception.rb +23 -0
  162. data/lib/virtualbox/com/interface/3.2.x/nsisupports.rb +15 -0
  163. data/lib/virtualbox/com/interface/3.2.x/parallel_port.rb +17 -0
  164. data/lib/virtualbox/com/interface/3.2.x/pointing_hid_type.rb +11 -0
  165. data/lib/virtualbox/com/interface/3.2.x/port_mode.rb +11 -0
  166. data/lib/virtualbox/com/interface/3.2.x/progress.rb +63 -0
  167. data/lib/virtualbox/com/interface/3.2.x/serial_port.rb +19 -0
  168. data/lib/virtualbox/com/interface/3.2.x/session.rb +18 -0
  169. data/lib/virtualbox/com/interface/3.2.x/session_state.rb +11 -0
  170. data/lib/virtualbox/com/interface/3.2.x/session_type.rb +11 -0
  171. data/lib/virtualbox/com/interface/3.2.x/shared_folder.rb +17 -0
  172. data/lib/virtualbox/com/interface/3.2.x/snapshot.rb +20 -0
  173. data/lib/virtualbox/com/interface/3.2.x/storage_bus.rb +11 -0
  174. data/lib/virtualbox/com/interface/3.2.x/storage_controller.rb +24 -0
  175. data/lib/virtualbox/com/interface/3.2.x/storage_controller_type.rb +11 -0
  176. data/lib/virtualbox/com/interface/3.2.x/system_properties.rb +42 -0
  177. data/lib/virtualbox/com/interface/3.2.x/usb_controller.rb +21 -0
  178. data/lib/virtualbox/com/interface/3.2.x/usb_device.rb +24 -0
  179. data/lib/virtualbox/com/interface/3.2.x/usb_device_filter.rb +23 -0
  180. data/lib/virtualbox/com/interface/3.2.x/usb_device_filter_action.rb +11 -0
  181. data/lib/virtualbox/com/interface/3.2.x/usb_device_state.rb +11 -0
  182. data/lib/virtualbox/com/interface/3.2.x/virtual_box_error_info.rb +17 -0
  183. data/lib/virtualbox/com/interface/3.2.x/virtual_system_description.rb +19 -0
  184. data/lib/virtualbox/com/interface/3.2.x/virtual_system_description_type.rb +14 -0
  185. data/lib/virtualbox/com/interface/3.2.x/virtual_system_description_value_type.rb +11 -0
  186. data/lib/virtualbox/com/interface/3.2.x/virtualbox.rb +67 -0
  187. data/lib/virtualbox/com/interface/3.2.x/vrdp_auth_type.rb +11 -0
  188. data/lib/virtualbox/com/interface/3.2.x/vrdp_server.rb +21 -0
  189. data/lib/virtualbox/com/mscom_interface.rb +44 -0
  190. data/lib/virtualbox/com/nil_interface.rb +7 -0
  191. data/lib/virtualbox/com/util.rb +32 -0
  192. data/lib/virtualbox/cpu.rb +61 -0
  193. data/lib/virtualbox/dhcp_server.rb +89 -0
  194. data/lib/virtualbox/dvd.rb +27 -0
  195. data/lib/virtualbox/exceptions.rb +39 -0
  196. data/lib/virtualbox/ext/byte_normalizer.rb +17 -0
  197. data/lib/virtualbox/ext/glob_loader.rb +22 -0
  198. data/lib/virtualbox/ext/logger.rb +38 -0
  199. data/lib/virtualbox/ext/platform.rb +27 -0
  200. data/lib/virtualbox/ext/subclass_listing.rb +24 -0
  201. data/lib/virtualbox/extra_data.rb +127 -0
  202. data/lib/virtualbox/forwarded_port.rb +222 -0
  203. data/lib/virtualbox/global.rb +102 -0
  204. data/lib/virtualbox/guest_property.rb +116 -0
  205. data/lib/virtualbox/hard_drive.rb +246 -0
  206. data/lib/virtualbox/host.rb +71 -0
  207. data/lib/virtualbox/host_network_interface.rb +137 -0
  208. data/lib/virtualbox/hw_virtualization.rb +63 -0
  209. data/lib/virtualbox/lib.rb +84 -0
  210. data/lib/virtualbox/media.rb +20 -0
  211. data/lib/virtualbox/medium.rb +145 -0
  212. data/lib/virtualbox/medium_attachment.rb +61 -0
  213. data/lib/virtualbox/nat_engine.rb +71 -0
  214. data/lib/virtualbox/nat_forwarded_port.rb +171 -0
  215. data/lib/virtualbox/network_adapter.rb +166 -0
  216. data/lib/virtualbox/proxies/collection.rb +57 -0
  217. data/lib/virtualbox/shared_folder.rb +220 -0
  218. data/lib/virtualbox/snapshot.rb +185 -0
  219. data/lib/virtualbox/storage_controller.rb +160 -0
  220. data/lib/virtualbox/system_properties.rb +74 -0
  221. data/lib/virtualbox/usb_controller.rb +59 -0
  222. data/lib/virtualbox/usb_device_filter.rb +74 -0
  223. data/lib/virtualbox/version.rb +36 -0
  224. data/lib/virtualbox/virtual_system_description.rb +47 -0
  225. data/lib/virtualbox/vm.rb +684 -0
  226. data/lib/virtualbox/vrdp_server.rb +59 -0
  227. data/test/test_helper.rb +18 -0
  228. data/test/virtualbox/abstract_model/attributable_test.rb +269 -0
  229. data/test/virtualbox/abstract_model/dirty_test.rb +83 -0
  230. data/test/virtualbox/abstract_model/interface_attributes_test.rb +194 -0
  231. data/test/virtualbox/abstract_model/relatable_test.rb +348 -0
  232. data/test/virtualbox/abstract_model/validatable_test.rb +308 -0
  233. data/test/virtualbox/abstract_model/version_matcher_test.rb +41 -0
  234. data/test/virtualbox/abstract_model_test.rb +462 -0
  235. data/test/virtualbox/appliance_test.rb +159 -0
  236. data/test/virtualbox/audio_adapter_test.rb +83 -0
  237. data/test/virtualbox/bios_test.rb +83 -0
  238. data/test/virtualbox/com/abstract_enum_test.rb +49 -0
  239. data/test/virtualbox/com/abstract_implementer_test.rb +40 -0
  240. data/test/virtualbox/com/abstract_interface_test.rb +140 -0
  241. data/test/virtualbox/com/ffi/interface_test.rb +249 -0
  242. data/test/virtualbox/com/ffi/util_test.rb +108 -0
  243. data/test/virtualbox/com/ffi_interface_test.rb +42 -0
  244. data/test/virtualbox/com/implementer/base_test.rb +38 -0
  245. data/test/virtualbox/com/implementer/ffi_test.rb +527 -0
  246. data/test/virtualbox/com/implementer/mscom_test.rb +247 -0
  247. data/test/virtualbox/com/mscom_interface_test.rb +17 -0
  248. data/test/virtualbox/com/util_test.rb +17 -0
  249. data/test/virtualbox/cpu_test.rb +103 -0
  250. data/test/virtualbox/dhcp_server_test.rb +165 -0
  251. data/test/virtualbox/dvd_test.rb +28 -0
  252. data/test/virtualbox/ext/byte_normalizer_test.rb +34 -0
  253. data/test/virtualbox/ext/platform_test.rb +50 -0
  254. data/test/virtualbox/ext/subclass_listing_test.rb +25 -0
  255. data/test/virtualbox/extra_data_test.rb +155 -0
  256. data/test/virtualbox/forwarded_port_test.rb +286 -0
  257. data/test/virtualbox/global_test.rb +46 -0
  258. data/test/virtualbox/hard_drive_test.rb +141 -0
  259. data/test/virtualbox/host_network_interface_test.rb +254 -0
  260. data/test/virtualbox/host_test.rb +94 -0
  261. data/test/virtualbox/hw_virtualization_test.rb +103 -0
  262. data/test/virtualbox/lib_test.rb +93 -0
  263. data/test/virtualbox/medium_attachment_test.rb +147 -0
  264. data/test/virtualbox/medium_test.rb +192 -0
  265. data/test/virtualbox/nat_engine_test.rb +106 -0
  266. data/test/virtualbox/nat_forwarded_port_test.rb +222 -0
  267. data/test/virtualbox/network_adapter_test.rb +191 -0
  268. data/test/virtualbox/proxies/collection_test.rb +102 -0
  269. data/test/virtualbox/shared_folder_test.rb +219 -0
  270. data/test/virtualbox/snapshot_test.rb +231 -0
  271. data/test/virtualbox/storage_controller_test.rb +197 -0
  272. data/test/virtualbox/system_properties_test.rb +87 -0
  273. data/test/virtualbox/usb_controller_test.rb +112 -0
  274. data/test/virtualbox/usb_device_filter_test.rb +93 -0
  275. data/test/virtualbox/version_test.rb +59 -0
  276. data/test/virtualbox/virtual_system_description_test.rb +61 -0
  277. data/test/virtualbox/vm_test.rb +637 -0
  278. data/test/virtualbox/vrdp_server_test.rb +83 -0
  279. data/test/virtualbox_test.rb +11 -0
  280. data/virtualbox.gemspec +25 -0
  281. metadata +397 -0
@@ -0,0 +1,103 @@
1
+ require File.expand_path("../../test_helper", __FILE__)
2
+
3
+ class HWVirtualizationTest < Test::Unit::TestCase
4
+ setup do
5
+ @klass = VirtualBox::HWVirtualization
6
+ @interface = mock("interface")
7
+ @parent = mock("parent")
8
+ end
9
+
10
+ context "class methods" do
11
+ context "populating relationship" do
12
+ setup do
13
+ @instance = mock("instance")
14
+ @klass.stubs(:new).returns(@instance)
15
+ end
16
+
17
+ should "call new for the interface" do
18
+ @klass.expects(:new).with(nil, @interface).once.returns(@instance)
19
+ assert_equal @instance, @klass.populate_relationship(nil, @interface)
20
+ end
21
+ end
22
+
23
+ context "saving relationship" do
24
+ should "call save with the interface on the instance" do
25
+ instance = mock("instance")
26
+ instance.expects(:save).once
27
+
28
+ @klass.save_relationship(nil, instance)
29
+ end
30
+ end
31
+ end
32
+
33
+ context "initializing" do
34
+ setup do
35
+ @klass.any_instance.stubs(:load_interface_attributes)
36
+ end
37
+
38
+ should "load interface attribtues" do
39
+ @klass.any_instance.expects(:load_interface_attributes).with(@interface).once
40
+ @klass.new(@parent, @interface)
41
+ end
42
+
43
+ should "not be dirty" do
44
+ @instance = @klass.new(@parent, @interface)
45
+ assert !@instance.changed?
46
+ end
47
+
48
+ should "be existing record" do
49
+ @instance = @klass.new(@parent, @interface)
50
+ assert !@instance.new_record?
51
+ end
52
+ end
53
+
54
+ context "instance methods" do
55
+ setup do
56
+ @klass.any_instance.stubs(:load_interface_attributes)
57
+
58
+ @parent = mock("parent")
59
+ @interface = mock("interface")
60
+ @instance = @klass.new(@parent, @interface)
61
+ end
62
+
63
+ context "getting a property" do
64
+ setup do
65
+ @key = :foo
66
+ end
67
+
68
+ should "call proper function on interface" do
69
+ result = mock("result")
70
+ @interface.expects(:get_hw_virt_ex_property).with(@key).returns(result)
71
+ assert_equal result, @instance.get_property(@interface, @key)
72
+ end
73
+ end
74
+
75
+ context "setting a property" do
76
+ setup do
77
+ @key = :foo
78
+ @value = :bar
79
+ end
80
+
81
+ should "call proper function on interface" do
82
+ @interface.expects(:set_hw_virt_ex_property).with(@key, @value).once
83
+ @instance.set_property(@interface, @key, @value)
84
+ end
85
+ end
86
+
87
+ context "saving" do
88
+ setup do
89
+ @bios_settings = mock("bios_settings")
90
+ @session = mock("session")
91
+ @machine = mock("machine")
92
+ @session.stubs(:machine).returns(@machine)
93
+ @parent.stubs(:with_open_session).yields(@session)
94
+ end
95
+
96
+ should "save the interface settings with the new bios settings" do
97
+ save_seq = sequence("save_seq")
98
+ @instance.expects(:save_changed_interface_attributes).with(@machine).once.in_sequence(save_seq)
99
+ @instance.save
100
+ end
101
+ end
102
+ end
103
+ end
@@ -0,0 +1,93 @@
1
+ require File.expand_path("../../test_helper", __FILE__)
2
+
3
+ class LibTest < Test::Unit::TestCase
4
+ context "the virtualbox library file path" do
5
+ setup do
6
+ VirtualBox::Lib.lib_path = nil
7
+ end
8
+
9
+ should "return the path if its set" do
10
+ File.expects(:expand_path).with("foo").returns("expanded_foo")
11
+ VirtualBox::Lib.lib_path = "foo"
12
+ assert_equal "expanded_foo", VirtualBox::Lib.lib_path
13
+ end
14
+
15
+ should "return Mac-path if on mac" do
16
+ result = ["/Applications/VirtualBox.app/Contents/MacOS/VBoxXPCOMC.dylib"]
17
+ VirtualBox::Platform.stubs(:mac?).returns(true)
18
+
19
+ assert_equal result, VirtualBox::Lib.lib_path
20
+ end
21
+
22
+ should "return Windows-path if on windows" do
23
+ result = "Unknown"
24
+ VirtualBox::Platform.stubs(:mac?).returns(false)
25
+ VirtualBox::Platform.stubs(:linux?).returns(false)
26
+ VirtualBox::Platform.stubs(:windows?).returns(true)
27
+
28
+ assert_equal result, VirtualBox::Lib.lib_path
29
+ end
30
+
31
+ should "return Linux-path if on linux" do
32
+ result = ["/opt/VirtualBox/VBoxXPCOMC.so", "/usr/lib/virtualbox/VBoxXPCOMC.so"]
33
+ VirtualBox::Platform.stubs(:mac?).returns(false)
34
+ VirtualBox::Platform.stubs(:windows?).returns(false)
35
+ VirtualBox::Platform.stubs(:linux?).returns(true)
36
+
37
+ assert_equal result, VirtualBox::Lib.lib_path
38
+ end
39
+
40
+ should "return 'unknown' otherwise" do
41
+ result = "Unknown"
42
+ VirtualBox::Platform.stubs(:mac?).returns(false)
43
+ VirtualBox::Platform.stubs(:windows?).returns(false)
44
+ VirtualBox::Platform.stubs(:linux?).returns(false)
45
+
46
+ assert_equal result, VirtualBox::Lib.lib_path
47
+ end
48
+ end
49
+
50
+ context "accessing the lib" do
51
+ setup do
52
+ @lib_path = "foo"
53
+ VirtualBox::Lib.stubs(:lib_path).returns(@lib_path)
54
+ VirtualBox::Lib.reset!
55
+ end
56
+
57
+ should "create a new Lib instance with the lib path once" do
58
+ instance = mock("instance")
59
+ VirtualBox::Lib.expects(:new).once.returns(instance)
60
+ assert_equal instance, VirtualBox::Lib.lib
61
+ assert_equal instance, VirtualBox::Lib.lib
62
+ assert_equal instance, VirtualBox::Lib.lib
63
+ end
64
+ end
65
+
66
+ context "init-ing" do
67
+ setup do
68
+ @lib_path = "foo"
69
+
70
+ @virtualbox = mock("virtualbox")
71
+ @session = mock("session")
72
+ @interface = mock("interface")
73
+ @interface.stubs(:virtualbox).returns(@virtualbox)
74
+ @interface.stubs(:session).returns(@session)
75
+ end
76
+
77
+ should "call init on FFI with the lib path for mac" do
78
+ VirtualBox::Platform.stubs(:windows?).returns(false)
79
+ VirtualBox::COM::FFIInterface.expects(:create).with(@lib_path).once.returns(@interface)
80
+ lib = VirtualBox::Lib.new(@lib_path)
81
+ assert_equal @virtualbox, lib.virtualbox
82
+ assert_equal @session, lib.session
83
+ end
84
+
85
+ should "init MSCOM for windows" do
86
+ VirtualBox::Platform.stubs(:windows?).returns(true)
87
+ VirtualBox::COM::MSCOMInterface.expects(:new).once.returns(@interface)
88
+ lib = VirtualBox::Lib.new(@lib_path)
89
+ assert_equal @virtualbox, lib.virtualbox
90
+ assert_equal @session, lib.session
91
+ end
92
+ end
93
+ end
@@ -0,0 +1,147 @@
1
+ require File.expand_path("../../test_helper", __FILE__)
2
+
3
+ class MediumAttachmentTest < Test::Unit::TestCase
4
+ setup do
5
+ @interface = mock("interface")
6
+ @interface.stubs(:medium)
7
+ @parent = mock("parent")
8
+
9
+ @klass = VirtualBox::MediumAttachment
10
+ end
11
+
12
+ context "class methods" do
13
+ context "populating relationships" do
14
+ setup do
15
+ @instance = mock("instance")
16
+
17
+ @interface.stubs(:medium_attachments).returns([])
18
+
19
+ @klass.stubs(:device_type).returns(:all)
20
+ @klass.stubs(:new).returns(@instance)
21
+ end
22
+
23
+ should "return a proxied collection" do
24
+ result = @klass.populate_relationship(nil, @interface)
25
+ assert result.is_a?(VirtualBox::Proxies::Collection)
26
+ end
27
+
28
+ should "call new for every medium if device type is all" do
29
+ attachments = []
30
+ @interface.stubs(:medium_attachments).returns(attachments)
31
+ 5.times { |i| attachments << mock("a#{i}") }
32
+
33
+ expected_result = []
34
+ new_seq = sequence("new_seq")
35
+ attachments.each do |attachment|
36
+ expected_value = "instance-#{attachment.inspect}"
37
+ @klass.expects(:new).with(@parent, attachment).in_sequence(new_seq).returns(expected_value)
38
+ expected_result << expected_value
39
+ end
40
+
41
+ assert_equal expected_result, @klass.populate_relationship(@parent, @interface)
42
+ end
43
+ end
44
+ end
45
+
46
+ context "initializing" do
47
+ should "load attributes from the machine" do
48
+ @klass.any_instance.expects(:initialize_attributes).with(@interface).once
49
+ @klass.new(@parent, @interface)
50
+ end
51
+ end
52
+
53
+ context "initializing attributes" do
54
+ setup do
55
+ @klass.any_instance.stubs(:load_interface_attributes)
56
+ @klass.any_instance.stubs(:populate_relationship)
57
+ end
58
+
59
+ should "load interface attribtues" do
60
+ @klass.any_instance.expects(:load_interface_attributes).with(@interface).once
61
+ @klass.new(@parent, @interface)
62
+ end
63
+
64
+ should "populate relationships" do
65
+ @klass.any_instance.expects(:populate_relationship).twice
66
+ @klass.new(@parent, @interface)
67
+ end
68
+
69
+ should "not be dirty" do
70
+ @instance = @klass.new(@parent, @interface)
71
+ assert !@instance.changed?
72
+ end
73
+
74
+ should "be existing record" do
75
+ @instance = @klass.new(@parent, @interface)
76
+ assert !@instance.new_record?
77
+ end
78
+ end
79
+
80
+ context "instance methods" do
81
+ setup do
82
+ @klass.any_instance.stubs(:initialize_attributes)
83
+
84
+ @parent = mock("parent")
85
+ @interface = mock("interface")
86
+ @instance = @klass.new(@parent, @interface)
87
+ end
88
+
89
+ context "detaching" do
90
+ setup do
91
+ @machine = mock("machine")
92
+ @session = mock("session")
93
+ @session.stubs(:machine).returns(@machine)
94
+
95
+ @sc = mock("storage_controller")
96
+ @sc.stubs(:name).returns("foo")
97
+ @instance.stubs(:storage_controller).returns(@sc)
98
+ @instance.stubs(:port).returns(7)
99
+ @instance.stubs(:device).returns(12)
100
+ end
101
+
102
+ should "open session, detach, then save" do
103
+ det_seq = sequence("detach_seq")
104
+ @parent.expects(:with_open_session).yields(@session).in_sequence(det_seq)
105
+ @machine.expects(:detach_device).with(@sc.name, @instance.port, @instance.device).in_sequence(det_seq)
106
+
107
+ @instance.detach
108
+ end
109
+ end
110
+
111
+ context "destroying" do
112
+ setup do
113
+ @medium = mock("medium")
114
+ @instance.stubs(:medium).returns(@medium)
115
+ end
116
+
117
+ should "just detach" do
118
+ @instance.expects(:detach).once
119
+ @instance.destroy
120
+ end
121
+
122
+ should "not destroy medium if nil but specified" do
123
+ @instance.stubs(:medium).returns(nil)
124
+
125
+ @instance.expects(:detach).once
126
+ @medium.expects(:destroy).with(false).never
127
+ assert_nothing_raised {
128
+ @instance.destroy(:destroy_medium => true)
129
+ }
130
+ end
131
+
132
+ should "destroy medium if specified" do
133
+ destroy_seq = sequence("destroy_seq")
134
+ @instance.expects(:detach).once.in_sequence(destroy_seq)
135
+ @medium.expects(:destroy).with(false).once.in_sequence(destroy_seq)
136
+ @instance.destroy(:destroy_medium => true)
137
+ end
138
+
139
+ should "destroy medium and backing store if specified" do
140
+ destroy_seq = sequence("destroy_seq")
141
+ @instance.expects(:detach).once.in_sequence(destroy_seq)
142
+ @medium.expects(:destroy).with(true).once.in_sequence(destroy_seq)
143
+ @instance.destroy(:destroy_medium => :delete)
144
+ end
145
+ end
146
+ end
147
+ end
@@ -0,0 +1,192 @@
1
+ require File.expand_path("../../test_helper", __FILE__)
2
+
3
+ class MediumTest < Test::Unit::TestCase
4
+ setup do
5
+ @klass = VirtualBox::Medium
6
+ @imedium = mock("IMedium")
7
+ @interface = @imedium
8
+ @imedium.stubs(:refresh_state)
9
+ end
10
+
11
+ context "class methods" do
12
+ context "device type" do
13
+ should "be all on the medium" do
14
+ assert_equal :all, @klass.device_type
15
+ end
16
+ end
17
+
18
+ context "populating relationships" do
19
+ setup do
20
+ @caller = mock("caller")
21
+ end
22
+
23
+ should "call populate_array_relationship for arrays" do
24
+ @klass.expects(:populate_array_relationship).with(@caller, []).once
25
+ @klass.populate_relationship(@caller, [])
26
+ end
27
+
28
+ should "call populate_single_relationship for non-arrays" do
29
+ @klass.expects(:populate_single_relationship).with(@caller, nil).once
30
+ @klass.populate_relationship(@caller, nil)
31
+ end
32
+ end
33
+
34
+ context "populating array relationship" do
35
+ setup do
36
+ @instance = mock("instance")
37
+
38
+ @klass.stubs(:device_type).returns(:all)
39
+ @klass.stubs(:new).returns(@instance)
40
+ end
41
+
42
+ def mock_medium(device_type)
43
+ medium = mock("medium")
44
+ medium.stubs(:device_type).returns(device_type)
45
+ medium
46
+ end
47
+
48
+ should "return a proxied collection" do
49
+ result = @klass.populate_array_relationship(nil, [])
50
+ assert result.is_a?(VirtualBox::Proxies::Collection)
51
+ end
52
+
53
+ should "call new for every medium if device type is all" do
54
+ media = []
55
+ 5.times { |i| media << mock_medium("m#{i}") }
56
+
57
+ expected_result = []
58
+ new_seq = sequence("new_seq")
59
+ media.each do |medium|
60
+ expected_value = "instance-#{medium.inspect}"
61
+ @klass.expects(:new).with(medium).in_sequence(new_seq).returns(expected_value)
62
+ expected_result << expected_value
63
+ end
64
+
65
+ assert_equal expected_result, @klass.populate_array_relationship(nil, media)
66
+ end
67
+
68
+ should "ignore non-matching devices if device_type is not :all" do
69
+ @klass.stubs(:device_type).returns(:foo)
70
+
71
+ media = [mock_medium(:foo), mock_medium(:bar)]
72
+ result = @klass.populate_array_relationship(nil, media)
73
+ assert_equal 1, result.length
74
+ end
75
+ end
76
+
77
+ context "populating a single relationship" do
78
+ setup do
79
+ @subclasses = []
80
+ @klass.stubs(:subclasses).returns(@subclasses)
81
+ @imedium.stubs(:get_device_type).returns(nil)
82
+ end
83
+
84
+ def mock_subclass(device_type)
85
+ subclass = mock("subclass")
86
+ subclass.stubs(:device_type).returns(device_type)
87
+ subclass
88
+ end
89
+
90
+ should "instantiate the matching subclass" do
91
+ type = :foo
92
+ result = mock("result")
93
+ matching = mock_subclass(type)
94
+ matching.expects(:new).with(@imedium).once.returns(result)
95
+ @subclasses << matching
96
+ @imedium.stubs(:device_type).returns(type)
97
+
98
+ assert_equal result, @klass.populate_single_relationship(nil, @imedium)
99
+ end
100
+
101
+ should "return a Medium if nothing matches" do
102
+ result = mock("result")
103
+ @klass.expects(:new).with(@imedium).returns(result)
104
+ assert_equal result, @klass.populate_single_relationship(nil, @imedium)
105
+ end
106
+
107
+ should "return nil if medium given is nil" do
108
+ @klass.expects(:new).never
109
+ assert_nil @klass.populate_single_relationship(nil, nil)
110
+ end
111
+ end
112
+ end
113
+
114
+ context "initializing" do
115
+ should "load attributes from the machine" do
116
+ @klass.any_instance.expects(:initialize_attributes).with(@interface).once
117
+ @klass.new(@interface)
118
+ end
119
+
120
+ should "set the interface as the interface attribute" do
121
+ @klass.any_instance.stubs(:initialize_attributes)
122
+ instance = @klass.new(@interface)
123
+ assert_equal @interface, instance.interface
124
+ end
125
+ end
126
+
127
+ context "initializing attributes" do
128
+ setup do
129
+ @interface.stubs(:refresh_state)
130
+ @klass.any_instance.stubs(:load_interface_attributes)
131
+ end
132
+
133
+ should "refresh state then load interface attribtues" do
134
+ init_seq = sequence("init_seq")
135
+ @interface.expects(:refresh_state).in_sequence(init_seq)
136
+ @klass.any_instance.expects(:load_interface_attributes).with(@interface).once.in_sequence(init_seq)
137
+ @klass.new(@interface)
138
+ end
139
+
140
+ should "not be dirty" do
141
+ @instance = @klass.new(@interface)
142
+ assert !@instance.changed?
143
+ end
144
+
145
+ should "be existing record" do
146
+ @instance = @klass.new(@interface)
147
+ assert !@instance.new_record?
148
+ end
149
+ end
150
+
151
+ context "with an instance" do
152
+ setup do
153
+ @klass.any_instance.stubs(:initialize_attributes)
154
+ @instance = @klass.new(@imedium)
155
+ end
156
+
157
+ context "filename" do
158
+ setup do
159
+ @location = "/foo/bar/baz.rb"
160
+ @instance.stubs(:location).returns(@location)
161
+ end
162
+
163
+ should "return the basename of the location" do
164
+ assert_equal File.basename(@location), @instance.filename
165
+ end
166
+ end
167
+
168
+ context "destroy storage" do
169
+ should "delete the storage then wait for it to complete" do
170
+ progress = mock("progress")
171
+
172
+ @imedium.expects(:delete_storage).once.returns(progress)
173
+ progress.expects(:wait_for_completion).with(-1).once
174
+
175
+ @instance.destroy_storage
176
+ end
177
+ end
178
+
179
+ context "destroying" do
180
+ should "just close the medium if first argument is not specified" do
181
+ @instance.expects(:destroy_storage).never
182
+ @imedium.expects(:close).once
183
+ @instance.destroy
184
+ end
185
+
186
+ should "destroy the storage if first argument is true" do
187
+ @instance.expects(:destroy_storage).once
188
+ @instance.destroy(true)
189
+ end
190
+ end
191
+ end
192
+ end