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,102 @@
1
+ require File.expand_path("../../../test_helper", __FILE__)
2
+
3
+ class CollectionTest < Test::Unit::TestCase
4
+ setup do
5
+ @parent = mock("parent")
6
+ @item_klass = mock("item_klass")
7
+ @klass = VirtualBox::Proxies::Collection
8
+ @collection = @klass.new(@parent, @item_klass)
9
+ end
10
+
11
+ should "be a subclass of Array" do
12
+ assert @collection.is_a?(Array)
13
+ end
14
+
15
+ context "creating" do
16
+ should "call create on the item klass and put it in the array" do
17
+ result = mock("result")
18
+ @item_klass.expects(:create).with(@collection).returns(result)
19
+ @collection.create
20
+ assert @collection.include?(result)
21
+ end
22
+
23
+ should "pass in any additional arguments if given" do
24
+ blah = mock("some blah")
25
+ @collection = @klass.new(@parent, @item_klass, blah)
26
+ @item_klass.expects(:create).with(@collection, blah).returns(nil)
27
+ @collection.create
28
+ end
29
+
30
+ should "pass in additional arguments from the call" do
31
+ result = mock("result")
32
+ @item_klass.expects(:create).with(@collection, :foo).returns(result)
33
+ assert_equal result, @collection.create(:foo)
34
+ end
35
+
36
+ should "do nothing if klass doesn't respond to create" do
37
+ previous_length = @collection.length
38
+ assert_nothing_raised { assert_nil @collection.create }
39
+ assert_equal previous_length, @collection.length
40
+ end
41
+ end
42
+
43
+ context "errors" do
44
+ should "return the errors of all the elements" do
45
+ errors = []
46
+ 3.times do |i|
47
+ error = "error#{i}"
48
+ item = mock("item")
49
+ item.stubs(:errors).returns(error)
50
+ errors << error
51
+ @collection << item
52
+ end
53
+
54
+ assert_equal errors, @collection.errors
55
+ end
56
+ end
57
+
58
+ context "element callbacks" do
59
+ setup do
60
+ @item = mock("item")
61
+ end
62
+
63
+ context "<<" do
64
+ should "not call added_to_relationship if it doesn't exist" do
65
+ assert_nothing_raised { @collection << @item }
66
+ end
67
+
68
+ should "call added_to_relationship on the item when its added to a collection" do
69
+ @item.expects(:added_to_relationship).with(@collection).once
70
+ @collection << @item
71
+ end
72
+ end
73
+
74
+ context "delete" do
75
+ should "not call removed_from_relationship if it doesn't exist" do
76
+ @collection << @item
77
+ assert_nothing_raised { @collection.delete(@item) }
78
+ end
79
+
80
+ should "call removed_from_relationship on the item when its deleted" do
81
+ @collection << @item
82
+ @item.expects(:removed_from_relationship).with(@collection).once
83
+ @collection.delete(@item)
84
+ end
85
+
86
+ should "not call removed_from_relationship if no_callback is set" do
87
+ @collection << @item
88
+ @item.expects(:removed_from_relationship).never
89
+ @collection.delete(@item, true)
90
+ end
91
+ end
92
+
93
+ context "clearing" do
94
+ should "call removed_from_relationship if clear is called" do
95
+ @collection << @item
96
+ @item.expects(:removed_from_relationship).with(@collection).once
97
+ @collection.clear
98
+ assert @collection.empty?
99
+ end
100
+ end
101
+ end
102
+ end
@@ -0,0 +1,219 @@
1
+ require File.expand_path("../../test_helper", __FILE__)
2
+
3
+ class SharedFolderTest < Test::Unit::TestCase
4
+ setup do
5
+ @klass = VirtualBox::SharedFolder
6
+ @interface = mock("interface")
7
+ @parent = mock("parent")
8
+ end
9
+
10
+ context "initializing" do
11
+ should "load attributes from the machine" do
12
+ @klass.any_instance.expects(:initialize_attributes).with(@interface).once
13
+ @klass.new(@interface)
14
+ end
15
+
16
+ should "not load attributes if new record" do
17
+ @klass.any_instance.expects(:initialize_attributes).never
18
+ @klass.new
19
+ end
20
+ end
21
+
22
+ context "initializing attributes" do
23
+ setup do
24
+ @klass.any_instance.stubs(:load_interface_attributes)
25
+ @klass.any_instance.stubs(:populate_relationships)
26
+ end
27
+
28
+ should "load interface attribtues" do
29
+ @klass.any_instance.expects(:load_interface_attributes).with(@interface).once
30
+ @klass.new(@interface)
31
+ end
32
+
33
+ should "not be dirty" do
34
+ @instance = @klass.new(@interface)
35
+ assert !@instance.changed?
36
+ end
37
+
38
+ should "be existing record" do
39
+ @instance = @klass.new(@interface)
40
+ assert !@instance.new_record?
41
+ end
42
+ end
43
+
44
+ context "class methods" do
45
+ context "populating relationship" do
46
+ setup do
47
+ @instance = mock("instance")
48
+
49
+ @klass.stubs(:new).returns(@instance)
50
+
51
+ @collection = []
52
+ @interface.stubs(:shared_folders).returns(@collection)
53
+ end
54
+
55
+ should "return a proxied collection" do
56
+ result = @klass.populate_relationship(nil, @interface)
57
+ assert result.is_a?(VirtualBox::Proxies::Collection)
58
+ end
59
+
60
+ should "call new for every shared folder" do
61
+ 5.times { |i| @collection << mock("#{i}") }
62
+
63
+ expected_result = []
64
+ new_seq = sequence("new_seq")
65
+ @collection.each do |item|
66
+ expected_value = "instance-#{item.inspect}"
67
+ @klass.expects(:new).with(item).in_sequence(new_seq).returns(expected_value)
68
+ expected_result << expected_value
69
+ end
70
+
71
+ assert_equal expected_result, @klass.populate_relationship(nil, @interface)
72
+ end
73
+ end
74
+
75
+ context "saving relationship" do
76
+ should "call save on each item" do
77
+ items = (1..5).to_a.collect do |i|
78
+ item = mock("item-#{i}")
79
+ item.expects(:save).once
80
+ item
81
+ end
82
+
83
+ @klass.save_relationship(nil, items)
84
+ end
85
+ end
86
+ end
87
+
88
+ context "instance methods" do
89
+ setup do
90
+ @klass.any_instance.stubs(:load_interface_attributes)
91
+ @instance = @klass.new(@interface)
92
+ @instance.stubs(:parent_machine).returns(@parent)
93
+ @collection = VirtualBox::Proxies::Collection.new(@parent)
94
+ @collection << @instance
95
+
96
+ @parent_interface = mock("interface")
97
+ @parent.stubs(:interface).returns(@parent_interface)
98
+
99
+ @name = "foo"
100
+ @machine = mock("machine")
101
+ @machine.stubs(:remove_shared_folder).with(@name)
102
+
103
+ @session = mock("session")
104
+ @session.stubs(:machine).returns(@machine)
105
+
106
+ @parent.stubs(:with_open_session).yields(@session)
107
+ end
108
+
109
+ context "saving" do
110
+ setup do
111
+ @instance.stubs(:valid?).returns(true)
112
+ end
113
+
114
+ should "do nothing if its not a new record and its not changed" do
115
+ assert !@instance.new_record?
116
+ assert !@instance.changed?
117
+ assert @instance.save
118
+ end
119
+
120
+ should "raise an exception if invalid" do
121
+ @instance.name = "foo_bar" # To set the changed flag
122
+ @instance.expects(:valid?).returns(false)
123
+
124
+ assert_raises(VirtualBox::Exceptions::ValidationFailedException) {
125
+ @instance.save
126
+ }
127
+ end
128
+
129
+ should "destroy then create" do
130
+ @instance.name = "foo_bar"
131
+ assert !@instance.new_record? # sanity
132
+
133
+ save_seq = sequence("save_seq")
134
+ @instance.expects(:destroy).with(false).once.in_sequence(save_seq)
135
+ @instance.expects(:create).once.in_sequence(save_seq)
136
+
137
+ @instance.save
138
+ end
139
+
140
+ should "just create (not destroy) if its a new record" do
141
+ @instance.new_record!
142
+
143
+ @instance.expects(:destroy).never
144
+ @instance.expects(:create).once
145
+
146
+ @instance.save
147
+ end
148
+ end
149
+
150
+ context "creating" do
151
+ setup do
152
+ @instance.new_record!
153
+
154
+ @instance.name = "foo"
155
+ @instance.host_path = "/bar"
156
+ @instance.writable = true
157
+
158
+ @machine.stubs(:create_shared_folder)
159
+ end
160
+
161
+ should "do nothing if its an existing record" do
162
+ @instance.existing_record!
163
+ @machine.expects(:create_shared_folder).never
164
+ @instance.create
165
+ end
166
+
167
+ should "create the shared folder" do
168
+ create_seq = sequence("create_seq")
169
+ @machine.expects(:create_shared_folder).with(@instance.name, @instance.host_path, @instance.writable).once.in_sequence(create_seq)
170
+ @instance.create
171
+ end
172
+
173
+ should "not be a new record after saving" do
174
+ assert @instance.new_record?
175
+ @instance.create
176
+ assert !@instance.new_record?
177
+ end
178
+
179
+ should "not be dirty after saving" do
180
+ assert @instance.changed?
181
+ @instance.create
182
+ assert !@instance.changed?
183
+ end
184
+ end
185
+
186
+ context "destroying" do
187
+ setup do
188
+ @name = "foo"
189
+ @instance.stubs(:name).returns(@name)
190
+ @machine.stubs(:remove_shared_folder).with(@name)
191
+ end
192
+
193
+ should "remove itself from it's collection" do
194
+ assert @collection.include?(@instance)
195
+ @instance.destroy
196
+ assert !@collection.include?(@instance)
197
+ end
198
+
199
+ should "not remove itself from it's collection if specified" do
200
+ assert @collection.include?(@instance)
201
+ @instance.destroy(false)
202
+ assert @collection.include?(@instance)
203
+ end
204
+
205
+ should "destroy the shared folder on the parent" do
206
+ destroy_seq = sequence("destroy_seq")
207
+ @machine.expects(:remove_shared_folder).with(@name).in_sequence(destroy_seq)
208
+
209
+ @instance.destroy
210
+ end
211
+
212
+ should "mark as a new record" do
213
+ assert !@instance.new_record?
214
+ @instance.destroy
215
+ assert @instance.new_record?
216
+ end
217
+ end
218
+ end
219
+ end
@@ -0,0 +1,231 @@
1
+ require File.expand_path("../../test_helper", __FILE__)
2
+
3
+ class SnapshotTest < Test::Unit::TestCase
4
+ setup do
5
+ @klass = VirtualBox::Snapshot
6
+ @interface = mock("isnapshot")
7
+ end
8
+
9
+ context "class methods" do
10
+ context "populating relationships" do
11
+ setup do
12
+ @caller = mock("caller")
13
+ end
14
+
15
+ should "call populate_machine_relationship for VMs" do
16
+ vm = mock("vm")
17
+ vm.stubs(:is_a?).with(VirtualBox::COM::Util.versioned_interface(:Machine)).returns(true)
18
+ @klass.expects(:populate_machine_relationship).with(@caller, vm).once
19
+ @klass.populate_relationship(@caller, vm)
20
+ end
21
+
22
+ should "call populate_children_relationship for an array" do
23
+ @klass.expects(:populate_children_relationship).with(@caller, [1,2,3]).once
24
+ @klass.populate_relationship(@caller, [1,2,3])
25
+ end
26
+
27
+ should "call populate_parent_relationship for a snapshot" do
28
+ ss = mock("snapshot")
29
+ ss.stubs(:is_a?).returns(false)
30
+ ss.stubs(:is_a?).with(VirtualBox::COM::Util.versioned_interface(:Snapshot)).returns(true)
31
+ @klass.expects(:populate_parent_relationship).with(@caller, ss).once
32
+ @klass.populate_relationship(@caller, ss)
33
+ end
34
+
35
+ should "call populate_parent_relationship for nil" do
36
+ @klass.expects(:populate_parent_relationship).with(@caller, nil).once
37
+ @klass.populate_relationship(@caller, nil)
38
+ end
39
+ end
40
+
41
+ context "populating machine relationship" do
42
+ setup do
43
+ @caller = mock("caller")
44
+ @machine = mock("imachine")
45
+ @snapshot = mock("snapshot")
46
+ @machine.stubs(:current_snapshot).returns(@snapshot)
47
+ end
48
+
49
+ should "just initialize with machine" do
50
+ result = mock("result")
51
+ @klass.expects(:new).with(@snapshot).once.returns(result)
52
+ assert_equal result, @klass.populate_machine_relationship(@caller, @machine)
53
+ end
54
+
55
+ should "return nil if there is no current snapshot" do
56
+ @machine.expects(:current_snapshot).returns(nil)
57
+ assert_nil @klass.populate_machine_relationship(@caller, @machine)
58
+ end
59
+ end
60
+
61
+ context "populating parent relationship" do
62
+ setup do
63
+ @caller = mock("caller")
64
+ @parent = mock("parent")
65
+ end
66
+
67
+ should "just initialize with data" do
68
+ result = mock("result")
69
+ @klass.expects(:new).with(@parent).once.returns(result)
70
+ assert_equal result, @klass.populate_parent_relationship(@caller, @parent)
71
+ end
72
+
73
+ should "return nil if there is no parent" do
74
+ assert_nil @klass.populate_parent_relationship(@caller, nil)
75
+ end
76
+ end
77
+
78
+ context "populating children relationship" do
79
+ setup do
80
+ @instance = mock("instance")
81
+
82
+ @klass.stubs(:new).returns(@instance)
83
+ end
84
+
85
+ should "return a proxied collection" do
86
+ result = @klass.populate_children_relationship(nil, [])
87
+ assert result.is_a?(VirtualBox::Proxies::Collection)
88
+ end
89
+
90
+ should "call new for every machine" do
91
+ snapshots = []
92
+ 5.times { |i| snapshots << mock("s#{i}") }
93
+
94
+ expected_result = []
95
+ new_seq = sequence("new_seq")
96
+ snapshots.each do |snapshot|
97
+ expected_value = "instance-#{snapshot.inspect}"
98
+ @klass.expects(:new).with(snapshot).in_sequence(new_seq).returns(expected_value)
99
+ expected_result << expected_value
100
+ end
101
+
102
+ assert_equal expected_result, @klass.populate_children_relationship(nil, snapshots)
103
+ end
104
+ end
105
+ end
106
+
107
+ context "initializing" do
108
+ should "load attributes from the snapshot" do
109
+ @klass.any_instance.expects(:initialize_attributes).with(@interface).once
110
+ @klass.new(@interface)
111
+ end
112
+
113
+ should "set the interface as the interface attribute" do
114
+ @klass.any_instance.stubs(:initialize_attributes)
115
+ instance = @klass.new(@interface)
116
+ assert_equal @interface, instance.interface
117
+ end
118
+ end
119
+
120
+ context "initializing attributes" do
121
+ setup do
122
+ @interface.stubs(:refresh_state)
123
+ @klass.any_instance.stubs(:load_interface_attributes)
124
+ end
125
+
126
+ should "load interface attribtues" do
127
+ @klass.any_instance.expects(:load_interface_attributes).with(@interface).once
128
+ @klass.new(@interface)
129
+ end
130
+
131
+ should "not be dirty" do
132
+ @instance = @klass.new(@interface)
133
+ assert !@instance.changed?
134
+ end
135
+
136
+ should "be existing record" do
137
+ @instance = @klass.new(@interface)
138
+ assert !@instance.new_record?
139
+ end
140
+ end
141
+
142
+ context "with an instance" do
143
+ setup do
144
+ @klass.any_instance.stubs(:initialize_attributes)
145
+ @instance = @klass.new(@interface)
146
+ end
147
+
148
+ context "timestamp" do
149
+ setup do
150
+ @time = Time.at(Time.now.to_i, 0)
151
+ @timestamp = @time.to_i * 1000
152
+ @instance.stubs(:read_attribute).with(:time_stamp).returns(@timestamp)
153
+ end
154
+
155
+ should "convert to a Time object" do
156
+ assert @instance.time_stamp.is_a?(Time)
157
+ end
158
+
159
+ should "convert to a proper Time object" do
160
+ value = @instance.time_stamp
161
+ assert @time.eql?(value), "#{@time} != #{value}"
162
+ end
163
+ end
164
+
165
+ context "destroying" do
166
+ setup do
167
+ @machine = mock("machine")
168
+ @session = mock("session")
169
+ @console = mock("console")
170
+ @progress = mock("progress")
171
+ @uuid = "UUID!"
172
+
173
+ @instance.stubs(:uuid).returns(@uuid)
174
+ @instance.stubs(:machine).returns(@machine)
175
+ @machine.stubs(:with_open_session).yields(@session)
176
+ @session.stubs(:console).returns(@console)
177
+ @console.stubs(:delete_snapshot).returns(@progress)
178
+ @progress.stubs(:wait)
179
+ end
180
+
181
+ should "delete the proper snapshot" do
182
+ @console.expects(:delete_snapshot).with(@instance.uuid).once.returns(@progress)
183
+ @progress.expects(:wait)
184
+
185
+ @instance.destroy
186
+ end
187
+
188
+ should "pass in block to the wait method" do
189
+ foo = mock("foo")
190
+ @progress.expects(:wait).yields(foo)
191
+ foo.expects(:called).once
192
+
193
+ @instance.destroy do |obj|
194
+ obj.called
195
+ end
196
+ end
197
+ end
198
+
199
+ context "restoring" do
200
+ setup do
201
+ @machine = mock("machine")
202
+ @session = mock("session")
203
+ @console = mock("console")
204
+ @progress = mock("progress")
205
+
206
+ @instance.stubs(:machine).returns(@machine)
207
+ @machine.stubs(:with_open_session).yields(@session)
208
+ @session.stubs(:console).returns(@console)
209
+ @console.stubs(:restore_snapshot).returns(@progress)
210
+ @progress.stubs(:wait)
211
+ end
212
+
213
+ should "restore the proper snapshot" do
214
+ @console.expects(:restore_snapshot).with(@instance.interface).once.returns(@progress)
215
+ @progress.expects(:wait)
216
+
217
+ @instance.restore
218
+ end
219
+
220
+ should "pass in block to the wait method" do
221
+ foo = mock("foo")
222
+ @progress.expects(:wait).yields(foo)
223
+ foo.expects(:called).once
224
+
225
+ @instance.restore do |obj|
226
+ obj.called
227
+ end
228
+ end
229
+ end
230
+ end
231
+ end