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,46 @@
1
+ require File.expand_path("../../test_helper", __FILE__)
2
+
3
+ class GlobalTest < Test::Unit::TestCase
4
+ setup do
5
+ @klass = VirtualBox::Global
6
+ end
7
+
8
+ context "getting the global object" do
9
+ setup do
10
+ @lib = mock('lib')
11
+ VirtualBox::Lib.stubs(:lib).returns(@lib)
12
+ @klass.reset!
13
+ end
14
+
15
+ should "initialize the object with the lib once" do
16
+ instance = mock("instance")
17
+ @klass.expects(:new).with(@lib).once.returns(instance)
18
+ assert_equal instance, @klass.global
19
+ assert_equal instance, @klass.global
20
+ assert_equal instance, @klass.global
21
+ end
22
+
23
+ should "initialize the object if reload is set" do
24
+ instance = mock("instance")
25
+ @klass.expects(:new).with(@lib).twice.returns(instance)
26
+ assert_equal instance, @klass.global
27
+ assert_equal instance, @klass.global(true)
28
+ assert_equal instance, @klass.global
29
+ end
30
+ end
31
+
32
+ context "with an instance" do
33
+ setup do
34
+ @lib = mock("lib")
35
+ @instance = @klass.new(@lib)
36
+ end
37
+
38
+ should "be an existing record, always" do
39
+ assert !@instance.new_record?
40
+ end
41
+
42
+ should "setup the lib attribute on initialization" do
43
+ assert_equal @lib, @instance.lib
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,141 @@
1
+ require File.expand_path("../../test_helper", __FILE__)
2
+
3
+ class HardDriveTest < Test::Unit::TestCase
4
+ setup do
5
+ @klass = VirtualBox::HardDrive
6
+ @interface = mock("interface")
7
+ end
8
+
9
+ context "device type" do
10
+ should "be :hard_disk" do
11
+ assert_equal :hard_disk, @klass.device_type
12
+ end
13
+ end
14
+
15
+ context "retrieving all hard drives" do
16
+ should "return an array of HardDrive objects" do
17
+ media = mock("media")
18
+ media.expects(:hard_drives).returns("foo")
19
+ global = mock("global")
20
+ global.expects(:media).returns(media)
21
+ VirtualBox::Global.expects(:global).returns(global)
22
+ assert_equal "foo", VirtualBox::HardDrive.all
23
+ end
24
+ end
25
+
26
+ context "finding a hard drive" do
27
+ setup do
28
+ @all = []
29
+ @klass.stubs(:all).returns(@all)
30
+ end
31
+
32
+ def mock_drive(uuid)
33
+ drive = mock("hd-#{uuid}")
34
+ drive.stubs(:uuid).returns(uuid)
35
+ drive
36
+ end
37
+
38
+ should "return nil if it doesn't exist" do
39
+ @all << mock_drive("foo")
40
+ assert_nil @klass.find("bar")
41
+ end
42
+
43
+ should "return the matching drive if it is found" do
44
+ drive = mock_drive("foo")
45
+ @all << mock_drive("bar")
46
+ @all << drive
47
+ assert_equal drive, @klass.find("foo")
48
+ end
49
+ end
50
+
51
+ context "with an instance" do
52
+ setup do
53
+ @klass.any_instance.stubs(:initialize_attributes)
54
+ @instance = @klass.new(@interface)
55
+ end
56
+
57
+ context "physical size" do
58
+ should "convert bytes to megabytes" do
59
+ nonnormalized = 37548181
60
+ normalized = @instance.bytes_to_megabytes(nonnormalized)
61
+ @instance.expects(:read_attribute).with(:physical_size).returns(nonnormalized)
62
+ assert_equal normalized, @instance.physical_size
63
+ end
64
+ end
65
+
66
+ context "cloning" do
67
+ setup do
68
+ @system_properties = mock("system_properties")
69
+ @virtualbox = mock("virtualbox")
70
+ @lib = mock("lib")
71
+ @new_medium = mock("new_medium")
72
+
73
+ @hard_disk_format = "VDI"
74
+ @hard_disk_folder = "foobar"
75
+
76
+ VirtualBox::Lib.stubs(:lib).returns(@lib)
77
+ @lib.stubs(:virtualbox).returns(@virtualbox)
78
+ @virtualbox.stubs(:system_properties).returns(@system_properties)
79
+ @system_properties.stubs(:default_hard_disk_format).returns(@hard_disk_format)
80
+ @system_properties.stubs(:default_hard_disk_folder).returns(@hard_disk_folder)
81
+ end
82
+
83
+ should "clone the hard drive" do
84
+ progress = mock("progress")
85
+ @instance.expects(:create_hard_disk_medium).with("/foo.vdi", nil).returns(@new_medium)
86
+ @interface.expects(:clone_to).with(@new_medium, :standard, nil).returns(progress)
87
+ progress.expects(:wait_for_completion).with(-1)
88
+
89
+ @instance.clone("/foo.vdi")
90
+ end
91
+ end
92
+ end
93
+
94
+ context "creating a hard drive" do
95
+ setup do
96
+ @klass.any_instance.stubs(:initialize_attributes)
97
+ @instance = @klass.new
98
+ @instance.stubs(:validate)
99
+
100
+ @system_properties = mock("system_properties")
101
+ @virtualbox = mock("virtualbox")
102
+ @lib = mock("lib")
103
+ @new_medium = mock("new_medium")
104
+
105
+ @hard_disk_format = "VDI"
106
+ @hard_disk_folder = "foobar"
107
+
108
+ VirtualBox::Lib.stubs(:lib).returns(@lib)
109
+ @lib.stubs(:virtualbox).returns(@virtualbox)
110
+ @virtualbox.stubs(:system_properties).returns(@system_properties)
111
+ @system_properties.stubs(:default_hard_disk_format).returns(@hard_disk_format)
112
+ @system_properties.stubs(:default_hard_disk_folder).returns(@hard_disk_folder)
113
+ end
114
+
115
+ should "return false unless the record is new" do
116
+ @instance.stubs(:new_record?).returns(false)
117
+ assert_equal false, @instance.create
118
+ end
119
+
120
+ should "raise exception unless the record is valid" do
121
+ @instance.stubs(:valid?).returns(false)
122
+ assert_raises(VirtualBox::Exceptions::ValidationFailedException) do
123
+ @instance.create
124
+ end
125
+ end
126
+
127
+ should "create the hard drive" do
128
+ logical_size = 1000
129
+ progress = mock("progress")
130
+ @instance.stubs(:location).returns(@hard_disk_folder)
131
+ @instance.stubs(:format).returns(@hard_disk_format)
132
+ @instance.stubs(:logical_size).returns(logical_size)
133
+ @instance.expects(:create_hard_disk_medium).with(@hard_disk_folder, @hard_disk_format).returns(@new_medium)
134
+ @new_medium.expects(:create_base_storage).with(logical_size, :standard).returns(progress)
135
+ progress.expects(:wait_for_completion).with(-1)
136
+
137
+ @instance.create
138
+ end
139
+ end
140
+
141
+ end
@@ -0,0 +1,254 @@
1
+ require File.expand_path("../../test_helper", __FILE__)
2
+
3
+ class HostNetworkInterfaceTest < Test::Unit::TestCase
4
+ setup do
5
+ @interface = mock("interface")
6
+ @parent = mock("parent")
7
+
8
+ @klass = VirtualBox::HostNetworkInterface
9
+ end
10
+
11
+ context "class methods" do
12
+ context "populating relationships" do
13
+ setup do
14
+ @instance = mock("instance")
15
+
16
+ @interface.stubs(:network_interfaces).returns([])
17
+ @klass.stubs(:new).returns(@instance)
18
+ end
19
+
20
+ should "return a proxied collection" do
21
+ result = @klass.populate_relationship(nil, @interface)
22
+ assert result.is_a?(VirtualBox::Proxies::Collection)
23
+ end
24
+
25
+ should "call new for every interface" do
26
+ collection = []
27
+ @interface.stubs(:network_interfaces).returns(collection)
28
+ 5.times { |i| collection << mock("a#{i}") }
29
+
30
+ expected_result = []
31
+ new_seq = sequence("new_seq")
32
+ collection.each do |item|
33
+ expected_value = "instance-#{item.inspect}"
34
+ @klass.expects(:new).with(item).in_sequence(new_seq).returns(expected_value)
35
+ expected_result << expected_value
36
+ end
37
+
38
+ assert_equal expected_result, @klass.populate_relationship(@parent, @interface)
39
+ end
40
+ end
41
+
42
+ context "creating" do
43
+ setup do
44
+ @interface = mock("interface")
45
+ @inet = mock("inet")
46
+ @progress = mock("progress")
47
+ end
48
+
49
+ should "create and return new instance" do
50
+ result = mock("result")
51
+ @interface.expects(:create_host_only_network_interface).returns([@inet, @progress]).once
52
+ @progress.expects(:wait)
53
+ @klass.expects(:new).with(@inet).returns(result)
54
+
55
+ assert_equal result, @klass.create(nil, @interface)
56
+ end
57
+ end
58
+ end
59
+
60
+ context "initializing" do
61
+ should "load attributes from the machine" do
62
+ @klass.any_instance.expects(:initialize_attributes).with(@interface).once
63
+ @klass.new(@interface)
64
+ end
65
+ end
66
+
67
+ context "initializing attributes" do
68
+ setup do
69
+ @klass.any_instance.stubs(:load_interface_attributes)
70
+ end
71
+
72
+ should "load interface attribtues" do
73
+ @klass.any_instance.expects(:load_interface_attributes).with(@interface).once
74
+ @klass.new(@interface)
75
+ end
76
+
77
+ should "be existing record" do
78
+ @instance = @klass.new(@interface)
79
+ assert !@instance.new_record?
80
+ end
81
+ end
82
+
83
+ context "instance methods" do
84
+ setup do
85
+ @klass.any_instance.stubs(:initialize_attributes)
86
+
87
+ @parent = mock("parent")
88
+ @interface = mock("interface")
89
+ @instance = @klass.new(@interface)
90
+ @instance.stubs(:interface).returns(@interface)
91
+ @instance.stubs(:parent).returns(@parent)
92
+ @collection = VirtualBox::Proxies::Collection.new(@parent)
93
+ @collection << @instance
94
+ end
95
+
96
+ context "attached VMs" do
97
+ setup do
98
+ @parent_parent = mock("parentparent")
99
+ @parent.stubs(:parent).returns(@parent_parent)
100
+
101
+ @vms = []
102
+ @parent_parent.stubs(:vms).returns(@vms)
103
+ end
104
+
105
+ def stub_vm(*interfaces)
106
+ adapters = []
107
+ vm = mock("vm")
108
+ vm.stubs(:network_adapters).returns(adapters)
109
+
110
+ interfaces.each do |name|
111
+ adapter = mock("adapter")
112
+ adapter.stubs(:host_interface).returns(name)
113
+ adapters << adapter
114
+ end
115
+
116
+ vm
117
+ end
118
+
119
+ should "return no VMs if none are using the interface" do
120
+ assert @instance.attached_vms.empty?
121
+ end
122
+
123
+ should "return only the VMs which are using the interface" do
124
+ name = "foo"
125
+ @instance.stubs(:name).returns(name)
126
+ result = stub_vm(name)
127
+ @vms << stub_vm("bar")
128
+ @vms << result
129
+ @vms << stub_vm("baz")
130
+
131
+ assert_equal [result], @instance.attached_vms
132
+ end
133
+ end
134
+
135
+ context "dhcp server" do
136
+ setup do
137
+ @host = mock("host")
138
+ @dhcp_servers = []
139
+ @parent.stubs(:parent).returns(@host)
140
+ @host.stubs(:dhcp_servers).returns(@dhcp_servers)
141
+ @instance.stubs(:interface_type).returns(:host_only)
142
+
143
+ @name = "foo"
144
+ @instance.stubs(:name).returns(@name)
145
+ end
146
+
147
+ def stub_dhcp_server(name, prefix=true)
148
+ name = "HostInterfaceNetworking-#{name}" if prefix
149
+
150
+ dhcp = mock("dhcp")
151
+ dhcp.stubs(:network_name).returns(name)
152
+ dhcp
153
+ end
154
+
155
+ should "return nil if interface type isn't host only" do
156
+ @instance.stubs(:interface_type).returns(:bridged)
157
+ assert_nil @instance.dhcp_server
158
+ end
159
+
160
+ should "return the DHCP server if it finds one" do
161
+ server = stub_dhcp_server(@name)
162
+ @dhcp_servers << server
163
+ assert_equal server, @instance.dhcp_server
164
+ end
165
+
166
+ should "create a DHCP server if it can't find one" do
167
+ result = mock("result")
168
+ end
169
+
170
+ should "not create a DHCP if specified and not found" do
171
+ @dhcp_servers.expects(:create).never
172
+ assert_nil @instance.dhcp_server(false)
173
+ end
174
+ end
175
+
176
+ context "enabling static IPV4" do
177
+ setup do
178
+ @interface.stubs(:enable_static_ip_config)
179
+ @instance.stubs(:reload)
180
+ end
181
+
182
+ should "enable the ip config" do
183
+ ip = :foo
184
+ netmask = :bar
185
+ @interface.expects(:enable_static_ip_config).with(ip, netmask).once
186
+ @instance.enable_static(ip, netmask)
187
+ end
188
+
189
+ should "by default use the current network mask" do
190
+ ip = :foo
191
+ @interface.expects(:enable_static_ip_config).with(ip, @instance.network_mask).once
192
+ @instance.enable_static(ip)
193
+ end
194
+
195
+ should "reload the instance" do
196
+ result = mock("result")
197
+ @instance.expects(:reload).returns(result)
198
+ assert_equal result, @instance.enable_static(:foo)
199
+ end
200
+ end
201
+
202
+ context "reloading" do
203
+ setup do
204
+ @interface = mock("parent_interface")
205
+ @parent.stubs(:interface).returns(@interface)
206
+ end
207
+
208
+ should "reload based on the interface found by the parent" do
209
+ result = mock("result")
210
+ @interface.expects(:find_host_network_interface_by_id).with(@instance.uuid).once.returns(result)
211
+ @instance.expects(:initialize_attributes).with(result).once
212
+ assert_equal @instance, @instance.reload
213
+ end
214
+ end
215
+
216
+ context "destroying" do
217
+ setup do
218
+ @interface = mock("parent_interface")
219
+ @progress = mock("progress")
220
+ @progress.stubs(:wait)
221
+ @parent.stubs(:interface).returns(@interface)
222
+ @interface.stubs(:remove_host_only_network_interface).returns(@progress)
223
+ @instance.stubs(:dhcp_server).returns(nil)
224
+ @instance.stubs(:interface_type).returns(:host_only)
225
+ end
226
+
227
+ should "do nothing if bridged" do
228
+ @instance.stubs(:interface_type).returns(:bridged)
229
+ @interface.expects(:remove_host_only_network_interface).never
230
+ assert !@instance.destroy
231
+ end
232
+
233
+ should "remove the network interface from VirtualBox" do
234
+ @interface.expects(:remove_host_only_network_interface).with(@instance.uuid).returns(@progress)
235
+
236
+ @instance.destroy
237
+ end
238
+
239
+ should "destroy the DHCP server if it exists" do
240
+ server = mock("server")
241
+ @instance.stubs(:dhcp_server).returns(server)
242
+ server.expects(:destroy).once
243
+
244
+ @instance.destroy
245
+ end
246
+
247
+ should "remove the instance from it's collection" do
248
+ assert @collection.include?(@instance)
249
+ @instance.destroy
250
+ assert !@collection.include?(@instance)
251
+ end
252
+ end
253
+ end
254
+ end
@@ -0,0 +1,94 @@
1
+ require File.expand_path("../../test_helper", __FILE__)
2
+
3
+ class HostTest < Test::Unit::TestCase
4
+ setup do
5
+ @parent = mock("parent")
6
+ @klass = VirtualBox::Host
7
+ @interface = mock("interface")
8
+ end
9
+
10
+ context "initializing" do
11
+ should "load attributes from the machine" do
12
+ @klass.any_instance.expects(:initialize_attributes).with(@parent, @interface).once
13
+ @klass.new(@parent, @interface)
14
+ end
15
+ end
16
+
17
+ context "initializing attributes" do
18
+ setup do
19
+ @klass.any_instance.stubs(:load_interface_attributes)
20
+ @klass.any_instance.stubs(:populate_relationship)
21
+ end
22
+
23
+ should "load interface attribtues" do
24
+ @klass.any_instance.expects(:load_interface_attributes).with(@interface).once
25
+ @klass.new(@parent, @interface)
26
+ end
27
+
28
+ should "populate the relationships" do
29
+ @klass.any_instance.expects(:populate_relationship).with(:network_interfaces, @interface).once
30
+ @klass.new(@parent, @interface)
31
+ end
32
+
33
+ should "setup the interface" do
34
+ instance = @klass.new(@parent, @interface)
35
+ assert_equal @interface, instance.interface
36
+ end
37
+
38
+ should "not be dirty" do
39
+ @instance = @klass.new(@parent, @interface)
40
+ assert !@instance.changed?
41
+ end
42
+
43
+ should "be existing record" do
44
+ @instance = @klass.new(@parent, @interface)
45
+ assert !@instance.new_record?
46
+ end
47
+ end
48
+
49
+ context "class methods" do
50
+ context "populating relationship" do
51
+ setup do
52
+ @instance = mock("instance")
53
+ @klass.stubs(:new).returns(@instance)
54
+ end
55
+
56
+ should "return a SystemProperties instance" do
57
+ result = @klass.populate_relationship(nil, @interface)
58
+ assert_equal @instance, result
59
+ end
60
+
61
+ should "call new for every shared folder" do
62
+ @klass.expects(:new).with(nil, @interface).returns(@instance)
63
+ result = @klass.populate_relationship(nil, @interface)
64
+ assert_equal @instance, result
65
+ end
66
+ end
67
+
68
+ context "saving relationship" do
69
+ setup do
70
+ @item = mock("item")
71
+ end
72
+
73
+ should "just call save on the item" do
74
+ @item.expects(:save)
75
+ @klass.save_relationship(nil, @item)
76
+ end
77
+ end
78
+ end
79
+
80
+ context "instance methods" do
81
+ setup do
82
+ @klass.any_instance.stubs(:load_interface_attributes)
83
+ @klass.any_instance.stubs(:populate_relationship)
84
+ @instance = @klass.new(@parent, @interface)
85
+ end
86
+
87
+ context "saving" do
88
+ should "save changed interface attributes" do
89
+ @instance.expects(:save_changed_interface_attributes).with(@interface)
90
+ @instance.save
91
+ end
92
+ end
93
+ end
94
+ end