virtualbox 0.6.1 → 0.7.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.
Files changed (268) hide show
  1. data/.yardopts +0 -1
  2. data/Rakefile +1 -1
  3. data/VERSION +1 -1
  4. data/lib/virtualbox/abstract_model/attributable.rb +1 -0
  5. data/lib/virtualbox/abstract_model/validatable.rb +133 -10
  6. data/lib/virtualbox/abstract_model.rb +3 -3
  7. data/lib/virtualbox/appliance.rb +5 -2
  8. data/lib/virtualbox/audio_adapter.rb +11 -3
  9. data/lib/virtualbox/bios.rb +10 -4
  10. data/lib/virtualbox/com/abstract_enum.rb +6 -5
  11. data/lib/virtualbox/com/abstract_implementer.rb +4 -2
  12. data/lib/virtualbox/com/abstract_interface.rb +6 -4
  13. data/lib/virtualbox/com/base_interface.rb +38 -0
  14. data/lib/virtualbox/com/ffi/interface.rb +14 -5
  15. data/lib/virtualbox/com/ffi/interfaces.rb +36 -32
  16. data/lib/virtualbox/com/ffi/util.rb +22 -4
  17. data/lib/virtualbox/com/ffi_interface.rb +39 -8
  18. data/lib/virtualbox/com/implementer/base.rb +2 -2
  19. data/lib/virtualbox/com/implementer/ffi.rb +55 -44
  20. data/lib/virtualbox/com/implementer/mscom.rb +2 -4
  21. data/lib/virtualbox/com/interface/3.1.x/appliance.rb +22 -0
  22. data/lib/virtualbox/com/interface/3.1.x/audio_adapter.rb +15 -0
  23. data/lib/virtualbox/com/interface/3.1.x/audio_controller_type.rb +11 -0
  24. data/lib/virtualbox/com/interface/3.1.x/audio_driver_type.rb +11 -0
  25. data/lib/virtualbox/com/interface/3.1.x/bios_boot_menu_mode.rb +11 -0
  26. data/lib/virtualbox/com/interface/3.1.x/bios_settings.rb +21 -0
  27. data/lib/virtualbox/com/interface/3.1.x/clipboard_mode.rb +11 -0
  28. data/lib/virtualbox/com/interface/3.1.x/console.rb +50 -0
  29. data/lib/virtualbox/com/interface/3.1.x/cpu_property_type.rb +11 -0
  30. data/lib/virtualbox/com/interface/3.1.x/device_type.rb +11 -0
  31. data/lib/virtualbox/com/interface/3.1.x/dhcp_server.rb +22 -0
  32. data/lib/virtualbox/com/interface/3.1.x/firmware_type.rb +11 -0
  33. data/lib/virtualbox/com/interface/3.1.x/guest_os_type.rb +23 -0
  34. data/lib/virtualbox/com/interface/3.1.x/host.rb +42 -0
  35. data/lib/virtualbox/com/interface/3.1.x/host_network_interface.rb +30 -0
  36. data/lib/virtualbox/com/interface/3.1.x/host_network_interface_medium_type.rb +11 -0
  37. data/lib/virtualbox/com/interface/3.1.x/host_network_interface_status.rb +11 -0
  38. data/lib/virtualbox/com/interface/3.1.x/host_network_interface_type.rb +11 -0
  39. data/lib/virtualbox/com/interface/3.1.x/host_usb_device.rb +13 -0
  40. data/lib/virtualbox/com/interface/3.1.x/host_usb_device_filter.rb +13 -0
  41. data/lib/virtualbox/com/interface/3.1.x/hw_virt_ex_property_type.rb +11 -0
  42. data/lib/virtualbox/com/interface/3.1.x/machine.rb +105 -0
  43. data/lib/virtualbox/com/interface/3.1.x/machine_state.rb +14 -0
  44. data/lib/virtualbox/com/interface/3.1.x/medium.rb +50 -0
  45. data/lib/virtualbox/com/interface/3.1.x/medium_attachment.rb +18 -0
  46. data/lib/virtualbox/com/interface/3.1.x/medium_format.rb +18 -0
  47. data/lib/virtualbox/com/interface/3.1.x/medium_state.rb +11 -0
  48. data/lib/virtualbox/com/interface/3.1.x/medium_type.rb +11 -0
  49. data/lib/virtualbox/com/interface/3.1.x/medium_variant.rb +11 -0
  50. data/lib/virtualbox/com/interface/3.1.x/network_adapter.rb +30 -0
  51. data/lib/virtualbox/com/interface/3.1.x/network_adapter_type.rb +11 -0
  52. data/lib/virtualbox/com/interface/3.1.x/network_attachment_type.rb +11 -0
  53. data/lib/virtualbox/com/interface/3.1.x/nsiexception.rb +23 -0
  54. data/lib/virtualbox/com/interface/3.1.x/nsisupports.rb +15 -0
  55. data/lib/virtualbox/com/interface/3.1.x/parallel_port.rb +17 -0
  56. data/lib/virtualbox/com/interface/3.1.x/port_mode.rb +11 -0
  57. data/lib/virtualbox/com/interface/3.1.x/progress.rb +63 -0
  58. data/lib/virtualbox/com/interface/3.1.x/serial_port.rb +19 -0
  59. data/lib/virtualbox/com/interface/3.1.x/session.rb +18 -0
  60. data/lib/virtualbox/com/interface/3.1.x/session_state.rb +11 -0
  61. data/lib/virtualbox/com/interface/3.1.x/session_type.rb +11 -0
  62. data/lib/virtualbox/com/interface/3.1.x/shared_folder.rb +17 -0
  63. data/lib/virtualbox/com/interface/3.1.x/snapshot.rb +20 -0
  64. data/lib/virtualbox/com/interface/3.1.x/storage_bus.rb +11 -0
  65. data/lib/virtualbox/com/interface/3.1.x/storage_controller.rb +23 -0
  66. data/lib/virtualbox/com/interface/3.1.x/storage_controller_type.rb +11 -0
  67. data/lib/virtualbox/com/interface/3.1.x/system_properties.rb +37 -0
  68. data/lib/virtualbox/com/interface/3.1.x/usb_controller.rb +20 -0
  69. data/lib/virtualbox/com/interface/3.1.x/usb_device.rb +24 -0
  70. data/lib/virtualbox/com/interface/3.1.x/usb_device_filter.rb +23 -0
  71. data/lib/virtualbox/com/interface/3.1.x/usb_device_filter_action.rb +11 -0
  72. data/lib/virtualbox/com/interface/3.1.x/usb_device_state.rb +11 -0
  73. data/lib/virtualbox/com/interface/3.1.x/virtual_box_error_info.rb +17 -0
  74. data/lib/virtualbox/com/interface/3.1.x/virtual_system_description.rb +19 -0
  75. data/lib/virtualbox/com/interface/3.1.x/virtual_system_description_type.rb +14 -0
  76. data/lib/virtualbox/com/interface/3.1.x/virtual_system_description_value_type.rb +11 -0
  77. data/lib/virtualbox/com/interface/3.1.x/virtualbox.rb +67 -0
  78. data/lib/virtualbox/com/interface/3.1.x/vrdp_auth_type.rb +11 -0
  79. data/lib/virtualbox/com/interface/3.1.x/vrdp_server.rb +19 -0
  80. data/lib/virtualbox/com/interface/3.2.x/appliance.rb +22 -0
  81. data/lib/virtualbox/com/interface/3.2.x/audio_adapter.rb +15 -0
  82. data/lib/virtualbox/com/interface/3.2.x/audio_controller_type.rb +11 -0
  83. data/lib/virtualbox/com/interface/3.2.x/audio_driver_type.rb +11 -0
  84. data/lib/virtualbox/com/interface/3.2.x/bios_boot_menu_mode.rb +11 -0
  85. data/lib/virtualbox/com/interface/3.2.x/bios_settings.rb +21 -0
  86. data/lib/virtualbox/com/interface/3.2.x/clipboard_mode.rb +11 -0
  87. data/lib/virtualbox/com/interface/3.2.x/console.rb +50 -0
  88. data/lib/virtualbox/com/interface/3.2.x/cpu_property_type.rb +11 -0
  89. data/lib/virtualbox/com/interface/3.2.x/device_type.rb +11 -0
  90. data/lib/virtualbox/com/interface/3.2.x/dhcp_server.rb +22 -0
  91. data/lib/virtualbox/com/interface/3.2.x/firmware_type.rb +11 -0
  92. data/lib/virtualbox/com/interface/3.2.x/guest.rb +13 -0
  93. data/lib/virtualbox/com/interface/3.2.x/guest_os_type.rb +33 -0
  94. data/lib/virtualbox/com/interface/3.2.x/host.rb +43 -0
  95. data/lib/virtualbox/com/interface/3.2.x/host_network_interface.rb +30 -0
  96. data/lib/virtualbox/com/interface/3.2.x/host_network_interface_medium_type.rb +11 -0
  97. data/lib/virtualbox/com/interface/3.2.x/host_network_interface_status.rb +11 -0
  98. data/lib/virtualbox/com/interface/3.2.x/host_network_interface_type.rb +11 -0
  99. data/lib/virtualbox/com/interface/3.2.x/host_usb_device.rb +13 -0
  100. data/lib/virtualbox/com/interface/3.2.x/host_usb_device_filter.rb +13 -0
  101. data/lib/virtualbox/com/interface/3.2.x/hw_virt_ex_property_type.rb +11 -0
  102. data/lib/virtualbox/com/interface/3.2.x/keyboard_hid_type.rb +11 -0
  103. data/lib/virtualbox/com/interface/3.2.x/machine.rb +118 -0
  104. data/lib/virtualbox/com/interface/3.2.x/machine_state.rb +14 -0
  105. data/lib/virtualbox/com/interface/3.2.x/medium.rb +51 -0
  106. data/lib/virtualbox/com/interface/3.2.x/medium_attachment.rb +18 -0
  107. data/lib/virtualbox/com/interface/3.2.x/medium_format.rb +18 -0
  108. data/lib/virtualbox/com/interface/3.2.x/medium_state.rb +11 -0
  109. data/lib/virtualbox/com/interface/3.2.x/medium_type.rb +11 -0
  110. data/lib/virtualbox/com/interface/3.2.x/medium_variant.rb +11 -0
  111. data/lib/virtualbox/com/interface/3.2.x/nat_alias_mode.rb +11 -0
  112. data/lib/virtualbox/com/interface/3.2.x/nat_engine.rb +27 -0
  113. data/lib/virtualbox/com/interface/3.2.x/nat_protocol.rb +11 -0
  114. data/lib/virtualbox/com/interface/3.2.x/network_adapter.rb +34 -0
  115. data/lib/virtualbox/com/interface/3.2.x/network_adapter_type.rb +11 -0
  116. data/lib/virtualbox/com/interface/3.2.x/network_attachment_type.rb +11 -0
  117. data/lib/virtualbox/com/interface/3.2.x/nsiexception.rb +23 -0
  118. data/lib/virtualbox/com/interface/3.2.x/nsisupports.rb +15 -0
  119. data/lib/virtualbox/com/interface/3.2.x/parallel_port.rb +17 -0
  120. data/lib/virtualbox/com/interface/3.2.x/pointing_hid_type.rb +11 -0
  121. data/lib/virtualbox/com/interface/3.2.x/port_mode.rb +11 -0
  122. data/lib/virtualbox/com/interface/3.2.x/progress.rb +63 -0
  123. data/lib/virtualbox/com/interface/3.2.x/serial_port.rb +19 -0
  124. data/lib/virtualbox/com/interface/3.2.x/session.rb +18 -0
  125. data/lib/virtualbox/com/interface/3.2.x/session_state.rb +11 -0
  126. data/lib/virtualbox/com/interface/3.2.x/session_type.rb +11 -0
  127. data/lib/virtualbox/com/interface/3.2.x/shared_folder.rb +17 -0
  128. data/lib/virtualbox/com/interface/3.2.x/snapshot.rb +20 -0
  129. data/lib/virtualbox/com/interface/3.2.x/storage_bus.rb +11 -0
  130. data/lib/virtualbox/com/interface/3.2.x/storage_controller.rb +24 -0
  131. data/lib/virtualbox/com/interface/3.2.x/storage_controller_type.rb +11 -0
  132. data/lib/virtualbox/com/interface/3.2.x/system_properties.rb +42 -0
  133. data/lib/virtualbox/com/interface/3.2.x/usb_controller.rb +21 -0
  134. data/lib/virtualbox/com/interface/3.2.x/usb_device.rb +24 -0
  135. data/lib/virtualbox/com/interface/3.2.x/usb_device_filter.rb +23 -0
  136. data/lib/virtualbox/com/interface/3.2.x/usb_device_filter_action.rb +11 -0
  137. data/lib/virtualbox/com/interface/3.2.x/usb_device_state.rb +11 -0
  138. data/lib/virtualbox/com/interface/3.2.x/virtual_box_error_info.rb +17 -0
  139. data/lib/virtualbox/com/interface/3.2.x/virtual_system_description.rb +19 -0
  140. data/lib/virtualbox/com/interface/3.2.x/virtual_system_description_type.rb +14 -0
  141. data/lib/virtualbox/com/interface/3.2.x/virtual_system_description_value_type.rb +11 -0
  142. data/lib/virtualbox/com/interface/3.2.x/virtualbox.rb +67 -0
  143. data/lib/virtualbox/com/interface/3.2.x/vrdp_auth_type.rb +11 -0
  144. data/lib/virtualbox/com/interface/3.2.x/vrdp_server.rb +21 -0
  145. data/lib/virtualbox/com/mscom_interface.rb +9 -4
  146. data/lib/virtualbox/com/nil_interface.rb +7 -0
  147. data/lib/virtualbox/com/util.rb +16 -2
  148. data/lib/virtualbox/com.rb +1 -1
  149. data/lib/virtualbox/cpu.rb +61 -0
  150. data/lib/virtualbox/dhcp_server.rb +89 -0
  151. data/lib/virtualbox/dvd.rb +2 -2
  152. data/lib/virtualbox/exceptions.rb +4 -0
  153. data/lib/virtualbox/ext/platform.rb +2 -2
  154. data/lib/virtualbox/extra_data.rb +5 -6
  155. data/lib/virtualbox/forwarded_port.rb +11 -7
  156. data/lib/virtualbox/global.rb +17 -6
  157. data/lib/virtualbox/hard_drive.rb +129 -66
  158. data/lib/virtualbox/host.rb +71 -0
  159. data/lib/virtualbox/host_network_interface.rb +137 -0
  160. data/lib/virtualbox/hw_virtualization.rb +12 -6
  161. data/lib/virtualbox/lib.rb +2 -2
  162. data/lib/virtualbox/media.rb +2 -2
  163. data/lib/virtualbox/medium.rb +10 -3
  164. data/lib/virtualbox/medium_attachment.rb +2 -2
  165. data/lib/virtualbox/network_adapter.rb +12 -4
  166. data/lib/virtualbox/proxies/collection.rb +26 -6
  167. data/lib/virtualbox/shared_folder.rb +22 -15
  168. data/lib/virtualbox/snapshot.rb +185 -0
  169. data/lib/virtualbox/storage_controller.rb +3 -3
  170. data/lib/virtualbox/system_properties.rb +1 -1
  171. data/lib/virtualbox/usb_controller.rb +8 -4
  172. data/lib/virtualbox/usb_device_filter.rb +74 -0
  173. data/lib/virtualbox/version.rb +12 -1
  174. data/lib/virtualbox/virtual_system_description.rb +4 -4
  175. data/lib/virtualbox/vm.rb +273 -64
  176. data/lib/virtualbox/vrdp_server.rb +59 -0
  177. data/test/test_helper.rb +7 -1
  178. data/test/virtualbox/abstract_model/attributable_test.rb +8 -0
  179. data/test/virtualbox/abstract_model/relatable_test.rb +5 -5
  180. data/test/virtualbox/abstract_model/validatable_test.rb +186 -3
  181. data/test/virtualbox/abstract_model_test.rb +3 -3
  182. data/test/virtualbox/appliance_test.rb +8 -1
  183. data/test/virtualbox/com/abstract_enum_test.rb +1 -0
  184. data/test/virtualbox/com/abstract_implementer_test.rb +4 -3
  185. data/test/virtualbox/com/abstract_interface_test.rb +3 -2
  186. data/test/virtualbox/com/ffi/interface_test.rb +4 -4
  187. data/test/virtualbox/com/ffi/util_test.rb +23 -1
  188. data/test/virtualbox/com/implementer/base_test.rb +4 -3
  189. data/test/virtualbox/com/implementer/ffi_test.rb +18 -10
  190. data/test/virtualbox/cpu_test.rb +103 -0
  191. data/test/virtualbox/dhcp_server_test.rb +165 -0
  192. data/test/virtualbox/extra_data_test.rb +4 -3
  193. data/test/virtualbox/forwarded_port_test.rb +17 -4
  194. data/test/virtualbox/hard_drive_test.rb +54 -5
  195. data/test/virtualbox/host_network_interface_test.rb +254 -0
  196. data/test/virtualbox/host_test.rb +94 -0
  197. data/test/virtualbox/network_adapter_test.rb +30 -1
  198. data/test/virtualbox/proxies/collection_test.rb +63 -21
  199. data/test/virtualbox/shared_folder_test.rb +16 -13
  200. data/test/virtualbox/snapshot_test.rb +231 -0
  201. data/test/virtualbox/storage_controller_test.rb +1 -1
  202. data/test/virtualbox/usb_controller_test.rb +7 -0
  203. data/test/virtualbox/usb_device_filter_test.rb +93 -0
  204. data/test/virtualbox/version_test.rb +13 -1
  205. data/test/virtualbox/vm_test.rb +245 -11
  206. data/test/virtualbox/vrdp_server_test.rb +83 -0
  207. data/virtualbox.gemspec +183 -97
  208. metadata +182 -96
  209. data/TODO +0 -9
  210. data/lib/virtualbox/com/interface/appliance.rb +0 -20
  211. data/lib/virtualbox/com/interface/audio_adapter.rb +0 -13
  212. data/lib/virtualbox/com/interface/audio_controller_type.rb +0 -9
  213. data/lib/virtualbox/com/interface/audio_driver_type.rb +0 -9
  214. data/lib/virtualbox/com/interface/bios_boot_menu_mode.rb +0 -9
  215. data/lib/virtualbox/com/interface/bios_settings.rb +0 -19
  216. data/lib/virtualbox/com/interface/clipboard_mode.rb +0 -9
  217. data/lib/virtualbox/com/interface/console.rb +0 -48
  218. data/lib/virtualbox/com/interface/cpu_property_type.rb +0 -9
  219. data/lib/virtualbox/com/interface/device_type.rb +0 -9
  220. data/lib/virtualbox/com/interface/dhcp_server.rb +0 -20
  221. data/lib/virtualbox/com/interface/firmware_type.rb +0 -9
  222. data/lib/virtualbox/com/interface/guest_os_type.rb +0 -21
  223. data/lib/virtualbox/com/interface/host.rb +0 -40
  224. data/lib/virtualbox/com/interface/host_network_interface.rb +0 -28
  225. data/lib/virtualbox/com/interface/host_network_interface_medium_type.rb +0 -9
  226. data/lib/virtualbox/com/interface/host_network_interface_status.rb +0 -9
  227. data/lib/virtualbox/com/interface/host_network_interface_type.rb +0 -9
  228. data/lib/virtualbox/com/interface/host_usb_device.rb +0 -11
  229. data/lib/virtualbox/com/interface/host_usb_device_filter.rb +0 -11
  230. data/lib/virtualbox/com/interface/hw_virt_ex_property_type.rb +0 -9
  231. data/lib/virtualbox/com/interface/machine.rb +0 -103
  232. data/lib/virtualbox/com/interface/machine_state.rb +0 -12
  233. data/lib/virtualbox/com/interface/medium.rb +0 -48
  234. data/lib/virtualbox/com/interface/medium_attachment.rb +0 -16
  235. data/lib/virtualbox/com/interface/medium_format.rb +0 -16
  236. data/lib/virtualbox/com/interface/medium_state.rb +0 -9
  237. data/lib/virtualbox/com/interface/medium_type.rb +0 -9
  238. data/lib/virtualbox/com/interface/medium_variant.rb +0 -9
  239. data/lib/virtualbox/com/interface/network_adapter.rb +0 -28
  240. data/lib/virtualbox/com/interface/network_adapter_type.rb +0 -9
  241. data/lib/virtualbox/com/interface/network_attachment_type.rb +0 -9
  242. data/lib/virtualbox/com/interface/nsiexception.rb +0 -21
  243. data/lib/virtualbox/com/interface/nsisupports.rb +0 -13
  244. data/lib/virtualbox/com/interface/parallel_port.rb +0 -15
  245. data/lib/virtualbox/com/interface/port_mode.rb +0 -9
  246. data/lib/virtualbox/com/interface/progress.rb +0 -58
  247. data/lib/virtualbox/com/interface/serial_port.rb +0 -17
  248. data/lib/virtualbox/com/interface/session.rb +0 -16
  249. data/lib/virtualbox/com/interface/session_state.rb +0 -9
  250. data/lib/virtualbox/com/interface/session_type.rb +0 -9
  251. data/lib/virtualbox/com/interface/shared_folder.rb +0 -15
  252. data/lib/virtualbox/com/interface/snapshot.rb +0 -18
  253. data/lib/virtualbox/com/interface/storage_bus.rb +0 -9
  254. data/lib/virtualbox/com/interface/storage_controller.rb +0 -21
  255. data/lib/virtualbox/com/interface/storage_controller_type.rb +0 -9
  256. data/lib/virtualbox/com/interface/system_properties.rb +0 -35
  257. data/lib/virtualbox/com/interface/usb_controller.rb +0 -18
  258. data/lib/virtualbox/com/interface/usb_device.rb +0 -22
  259. data/lib/virtualbox/com/interface/usb_device_filter.rb +0 -21
  260. data/lib/virtualbox/com/interface/usb_device_filter_action.rb +0 -9
  261. data/lib/virtualbox/com/interface/usb_device_state.rb +0 -9
  262. data/lib/virtualbox/com/interface/virtual_box_error_info.rb +0 -15
  263. data/lib/virtualbox/com/interface/virtual_system_description.rb +0 -17
  264. data/lib/virtualbox/com/interface/virtual_system_description_type.rb +0 -12
  265. data/lib/virtualbox/com/interface/virtual_system_description_value_type.rb +0 -9
  266. data/lib/virtualbox/com/interface/virtualbox.rb +0 -54
  267. data/lib/virtualbox/com/interface/vrdp_auth_type.rb +0 -9
  268. data/lib/virtualbox/com/interface/vrdp_server.rb +0 -17
@@ -0,0 +1,165 @@
1
+ require File.join(File.dirname(__FILE__), '..', 'test_helper')
2
+
3
+ class DHCPServerTest < Test::Unit::TestCase
4
+ setup do
5
+ @interface = mock("interface")
6
+ @parent = mock("parent")
7
+
8
+ @klass = VirtualBox::DHCPServer
9
+ end
10
+
11
+ context "class methods" do
12
+ context "populating relationships" do
13
+ setup do
14
+ @instance = mock("instance")
15
+ @klass.stubs(:new).returns(@instance)
16
+ end
17
+
18
+ should "return a proxied collection" do
19
+ result = @klass.populate_relationship(nil, [])
20
+ assert result.is_a?(VirtualBox::Proxies::Collection)
21
+ end
22
+
23
+ should "call new for every interface" do
24
+ collection = []
25
+ 5.times { |i| collection << mock("a#{i}") }
26
+
27
+ expected_result = []
28
+ new_seq = sequence("new_seq")
29
+ collection.each do |item|
30
+ expected_value = "instance-#{item.inspect}"
31
+ @klass.expects(:new).with(item).in_sequence(new_seq).returns(expected_value)
32
+ expected_result << expected_value
33
+ end
34
+
35
+ assert_equal expected_result, @klass.populate_relationship(@parent, collection)
36
+ end
37
+ end
38
+
39
+ context "creating" do
40
+ setup do
41
+ @lib = mock("lib")
42
+ @virtualbox = mock("virtualbox")
43
+ @proxy = mock("proxy")
44
+
45
+ @lib.stubs(:virtualbox).returns(@virtualbox)
46
+ @parent.stubs(:lib).returns(@lib)
47
+ @proxy.stubs(:parent).returns(@parent)
48
+ end
49
+
50
+ should "create the dhcp server" do
51
+ name = :foo
52
+ interface = mock("interface")
53
+ result = mock("result")
54
+ @virtualbox.expects(:create_dhcp_server).with(name).once.returns(interface)
55
+ @klass.expects(:new).with(interface).returns(result)
56
+ assert_equal result, @klass.create(@proxy, name)
57
+ end
58
+ end
59
+ end
60
+
61
+ context "initializing" do
62
+ should "load attributes from the machine" do
63
+ @klass.any_instance.expects(:initialize_attributes).with(@interface).once
64
+ @klass.new(@interface)
65
+ end
66
+ end
67
+
68
+ context "initializing attributes" do
69
+ setup do
70
+ @klass.any_instance.stubs(:load_interface_attributes)
71
+ end
72
+
73
+ should "load interface attribtues" do
74
+ @klass.any_instance.expects(:load_interface_attributes).with(@interface).once
75
+ @klass.new(@interface)
76
+ end
77
+
78
+ should "be existing record" do
79
+ @instance = @klass.new(@interface)
80
+ assert !@instance.new_record?
81
+ end
82
+ end
83
+
84
+ context "instance methods" do
85
+ setup do
86
+ @klass.any_instance.stubs(:initialize_attributes)
87
+
88
+ @parent = mock("parent")
89
+ @interface = mock("interface")
90
+ @instance = @klass.new(@interface)
91
+ @instance.stubs(:interface).returns(@interface)
92
+ @collection = VirtualBox::Proxies::Collection.new(@parent)
93
+ @collection << @instance
94
+ end
95
+
96
+ context "saving" do
97
+ setup do
98
+ @instance.stubs(:save_changed_interface_attributes)
99
+ end
100
+
101
+ should "set configuration if something changed" do
102
+ @instance.ip_address = "7"
103
+ @interface.expects(:set_configuration).once
104
+ @instance.save
105
+ end
106
+
107
+ should "not set configuration if nothing changed" do
108
+ @interface.expects(:set_configuration).never
109
+ @instance.save
110
+ end
111
+
112
+ should "save the changed attributes" do
113
+ @instance.expects(:save_changed_interface_attributes).with(@instance.interface).once
114
+ @instance.save
115
+ end
116
+ end
117
+
118
+ context "destroying" do
119
+ setup do
120
+ @lib = mock("lib")
121
+ @virtualbox = mock("virtualbox")
122
+ @lib.stubs(:virtualbox).returns(@virtualbox)
123
+ @parent.stubs(:lib).returns(@lib)
124
+
125
+ @virtualbox.stubs(:remove_dhcp_server)
126
+ end
127
+
128
+ should "destroy the DHCP server" do
129
+ @virtualbox.expects(:remove_dhcp_server).with(@interface).once
130
+ @instance.destroy
131
+ end
132
+
133
+ should "remove from collection" do
134
+ assert @collection.include?(@instance)
135
+ @instance.destroy
136
+ assert !@collection.include?(@instance)
137
+ end
138
+ end
139
+
140
+ context "host network" do
141
+ setup do
142
+ @host = mock("host")
143
+ @network_interfaces = []
144
+ @parent.stubs(:host).returns(@host)
145
+ @host.stubs(:network_interfaces).returns(@network_interfaces)
146
+ end
147
+
148
+ should "do nothing if not a DHCP server for a host interface" do
149
+ @instance.stubs(:network_name).returns("foo")
150
+ assert_nil @instance.host_network
151
+ end
152
+
153
+ should "return the matching network interface" do
154
+ name = "foo"
155
+ ni = mock("net_interface")
156
+ ni.stubs(:interface_type).returns(:host_only)
157
+ ni.stubs(:name).returns(name)
158
+
159
+ @network_interfaces << ni
160
+ @instance.stubs(:network_name).returns("HostInterfaceNetworking-#{name}")
161
+ assert_equal ni, @instance.host_network
162
+ end
163
+ end
164
+ end
165
+ end
@@ -145,10 +145,11 @@ class ExtraDataTest < Test::Unit::TestCase
145
145
  end
146
146
 
147
147
  context "deleteting extra data" do
148
- should "call set its value to nil" do
148
+ should "remove it from the interface and the hash" do
149
149
  key = :foo
150
- @ed.expects(:[]=).with(key, nil).once
150
+ @interface.expects(:set_extra_data).with(key.to_s, nil).once
151
+ @ed.expects(:hash_delete).with(key.to_s)
151
152
  @ed.delete(key)
152
153
  end
153
154
  end
154
- end
155
+ end
@@ -14,11 +14,13 @@ class ForwardedPortTest < Test::Unit::TestCase
14
14
 
15
15
  context "validations" do
16
16
  setup do
17
+ @collection = VirtualBox::Proxies::Collection.new(@caller)
18
+
17
19
  @port = VirtualBox::ForwardedPort.new
18
20
  @port.name = "foo"
19
21
  @port.guestport = "22"
20
22
  @port.hostport = "2222"
21
- @port.added_to_relationship(@caller)
23
+ @port.added_to_relationship(@collection)
22
24
  end
23
25
 
24
26
  should "be valid with all fields" do
@@ -49,12 +51,16 @@ class ForwardedPortTest < Test::Unit::TestCase
49
51
  context "with an instance" do
50
52
  setup do
51
53
  @port = VirtualBox::ForwardedPort.new({
52
- :parent => @caller,
53
54
  :name => "foo",
54
55
  :guestport => "22",
55
56
  :hostport => "2222"
56
57
  })
57
58
 
59
+ @collection = VirtualBox::Proxies::Collection.new(@caller)
60
+ @collection << @port
61
+
62
+ @port.clear_dirty!
63
+
58
64
  @ed = mock("extradata")
59
65
  @ed.stubs(:[]=)
60
66
  @ed.stubs(:save)
@@ -65,7 +71,7 @@ class ForwardedPortTest < Test::Unit::TestCase
65
71
  context "device" do
66
72
  setup do
67
73
  @port.new_record!
68
- @port.added_to_relationship(@caller)
74
+ @port.added_to_relationship(@collection)
69
75
  end
70
76
 
71
77
  should "return the value set if it was set" do
@@ -190,6 +196,12 @@ class ForwardedPortTest < Test::Unit::TestCase
190
196
  @port.existing_record!
191
197
  end
192
198
 
199
+ should "remove itself from it's collection" do
200
+ assert @collection.include?(@port)
201
+ @port.destroy
202
+ assert !@collection.include?(@port)
203
+ end
204
+
193
205
  should "call delete on the extra data for each key" do
194
206
  @ed = mock("ed")
195
207
  @ed.expects(:delete).times(3)
@@ -246,6 +258,7 @@ class ForwardedPortTest < Test::Unit::TestCase
246
258
  assert_equal "22", object.guestport
247
259
  assert_equal "2222", object.hostport
248
260
  assert_equal "TCP", object.protocol
261
+ assert_equal @objects, object.parent_collection
249
262
  end
250
263
 
251
264
  should "be existing records" do
@@ -253,4 +266,4 @@ class ForwardedPortTest < Test::Unit::TestCase
253
266
  end
254
267
  end
255
268
  end
256
- end
269
+ end
@@ -68,25 +68,74 @@ class HardDriveTest < Test::Unit::TestCase
68
68
  @system_properties = mock("system_properties")
69
69
  @virtualbox = mock("virtualbox")
70
70
  @lib = mock("lib")
71
+ @new_medium = mock("new_medium")
71
72
 
73
+ @hard_disk_format = "VDI"
72
74
  @hard_disk_folder = "foobar"
73
75
 
74
76
  VirtualBox::Lib.stubs(:lib).returns(@lib)
75
77
  @lib.stubs(:virtualbox).returns(@virtualbox)
76
78
  @virtualbox.stubs(:system_properties).returns(@system_properties)
79
+ @system_properties.stubs(:default_hard_disk_format).returns(@hard_disk_format)
77
80
  @system_properties.stubs(:default_hard_disk_folder).returns(@hard_disk_folder)
78
81
  end
79
82
 
80
83
  should "clone the hard drive" do
81
- format = "VDI"
82
- new_medium = mock("new_medium")
83
84
  progress = mock("progress")
84
- @virtualbox.expects(:create_hard_disk).with(format, "/foo.vdi").returns(new_medium)
85
- @interface.expects(:clone_to).with(new_medium, :standard, nil).returns(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)
86
87
  progress.expects(:wait_for_completion).with(-1)
87
88
 
88
89
  @instance.clone("/foo.vdi")
89
90
  end
90
91
  end
91
92
  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.join(File.dirname(__FILE__), '..', 'test_helper')
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.join(File.dirname(__FILE__), '..', 'test_helper')
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