velir_virtualbox 0.8.4

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 (350) 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 +37 -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 +63 -0
  56. data/lib/virtualbox/com/ffi/util.rb +121 -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 +381 -0
  61. data/lib/virtualbox/com/implementer/mscom.rb +189 -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/interface/4.0.x/access_mode.rb +11 -0
  190. data/lib/virtualbox/com/interface/4.0.x/appliance.rb +23 -0
  191. data/lib/virtualbox/com/interface/4.0.x/audio_adapter.rb +15 -0
  192. data/lib/virtualbox/com/interface/4.0.x/audio_controller_type.rb +11 -0
  193. data/lib/virtualbox/com/interface/4.0.x/audio_driver_type.rb +11 -0
  194. data/lib/virtualbox/com/interface/4.0.x/auth_type.rb +11 -0
  195. data/lib/virtualbox/com/interface/4.0.x/bios_boot_menu_mode.rb +11 -0
  196. data/lib/virtualbox/com/interface/4.0.x/bios_settings.rb +21 -0
  197. data/lib/virtualbox/com/interface/4.0.x/cleanup_mode.rb +12 -0
  198. data/lib/virtualbox/com/interface/4.0.x/clipboard_mode.rb +11 -0
  199. data/lib/virtualbox/com/interface/4.0.x/console.rb +50 -0
  200. data/lib/virtualbox/com/interface/4.0.x/cpu_property_type.rb +11 -0
  201. data/lib/virtualbox/com/interface/4.0.x/device_type.rb +11 -0
  202. data/lib/virtualbox/com/interface/4.0.x/dhcp_server.rb +22 -0
  203. data/lib/virtualbox/com/interface/4.0.x/event_source.rb +13 -0
  204. data/lib/virtualbox/com/interface/4.0.x/fault_tolerance_state.rb +11 -0
  205. data/lib/virtualbox/com/interface/4.0.x/firmware_type.rb +11 -0
  206. data/lib/virtualbox/com/interface/4.0.x/guest.rb +13 -0
  207. data/lib/virtualbox/com/interface/4.0.x/guest_os_type.rb +33 -0
  208. data/lib/virtualbox/com/interface/4.0.x/host.rb +43 -0
  209. data/lib/virtualbox/com/interface/4.0.x/host_network_interface.rb +30 -0
  210. data/lib/virtualbox/com/interface/4.0.x/host_network_interface_medium_type.rb +11 -0
  211. data/lib/virtualbox/com/interface/4.0.x/host_network_interface_status.rb +11 -0
  212. data/lib/virtualbox/com/interface/4.0.x/host_network_interface_type.rb +11 -0
  213. data/lib/virtualbox/com/interface/4.0.x/host_usb_device.rb +13 -0
  214. data/lib/virtualbox/com/interface/4.0.x/host_usb_device_filter.rb +13 -0
  215. data/lib/virtualbox/com/interface/4.0.x/hw_virt_ex_property_type.rb +12 -0
  216. data/lib/virtualbox/com/interface/4.0.x/keyboard_hid_type.rb +11 -0
  217. data/lib/virtualbox/com/interface/4.0.x/lock_type.rb +11 -0
  218. data/lib/virtualbox/com/interface/4.0.x/machine.rb +132 -0
  219. data/lib/virtualbox/com/interface/4.0.x/machine_state.rb +14 -0
  220. data/lib/virtualbox/com/interface/4.0.x/medium.rb +53 -0
  221. data/lib/virtualbox/com/interface/4.0.x/medium_attachment.rb +18 -0
  222. data/lib/virtualbox/com/interface/4.0.x/medium_format.rb +18 -0
  223. data/lib/virtualbox/com/interface/4.0.x/medium_state.rb +11 -0
  224. data/lib/virtualbox/com/interface/4.0.x/medium_type.rb +11 -0
  225. data/lib/virtualbox/com/interface/4.0.x/medium_variant.rb +11 -0
  226. data/lib/virtualbox/com/interface/4.0.x/nat_alias_mode.rb +11 -0
  227. data/lib/virtualbox/com/interface/4.0.x/nat_engine.rb +27 -0
  228. data/lib/virtualbox/com/interface/4.0.x/nat_protocol.rb +11 -0
  229. data/lib/virtualbox/com/interface/4.0.x/network_adapter.rb +35 -0
  230. data/lib/virtualbox/com/interface/4.0.x/network_adapter_type.rb +11 -0
  231. data/lib/virtualbox/com/interface/4.0.x/network_attachment_type.rb +11 -0
  232. data/lib/virtualbox/com/interface/4.0.x/nsiexception.rb +23 -0
  233. data/lib/virtualbox/com/interface/4.0.x/nsisupports.rb +15 -0
  234. data/lib/virtualbox/com/interface/4.0.x/parallel_port.rb +17 -0
  235. data/lib/virtualbox/com/interface/4.0.x/pointing_hid_type.rb +11 -0
  236. data/lib/virtualbox/com/interface/4.0.x/port_mode.rb +11 -0
  237. data/lib/virtualbox/com/interface/4.0.x/progress.rb +64 -0
  238. data/lib/virtualbox/com/interface/4.0.x/serial_port.rb +19 -0
  239. data/lib/virtualbox/com/interface/4.0.x/session.rb +18 -0
  240. data/lib/virtualbox/com/interface/4.0.x/session_state.rb +11 -0
  241. data/lib/virtualbox/com/interface/4.0.x/session_type.rb +11 -0
  242. data/lib/virtualbox/com/interface/4.0.x/shared_folder.rb +17 -0
  243. data/lib/virtualbox/com/interface/4.0.x/snapshot.rb +20 -0
  244. data/lib/virtualbox/com/interface/4.0.x/storage_bus.rb +11 -0
  245. data/lib/virtualbox/com/interface/4.0.x/storage_controller.rb +24 -0
  246. data/lib/virtualbox/com/interface/4.0.x/storage_controller_type.rb +11 -0
  247. data/lib/virtualbox/com/interface/4.0.x/system_properties.rb +42 -0
  248. data/lib/virtualbox/com/interface/4.0.x/usb_controller.rb +21 -0
  249. data/lib/virtualbox/com/interface/4.0.x/usb_device.rb +24 -0
  250. data/lib/virtualbox/com/interface/4.0.x/usb_device_filter.rb +23 -0
  251. data/lib/virtualbox/com/interface/4.0.x/usb_device_filter_action.rb +11 -0
  252. data/lib/virtualbox/com/interface/4.0.x/usb_device_state.rb +11 -0
  253. data/lib/virtualbox/com/interface/4.0.x/virtual_box_error_info.rb +17 -0
  254. data/lib/virtualbox/com/interface/4.0.x/virtual_system_description.rb +19 -0
  255. data/lib/virtualbox/com/interface/4.0.x/virtual_system_description_type.rb +14 -0
  256. data/lib/virtualbox/com/interface/4.0.x/virtual_system_description_value_type.rb +11 -0
  257. data/lib/virtualbox/com/interface/4.0.x/virtualbox.rb +50 -0
  258. data/lib/virtualbox/com/interface/4.0.x/vrde_server.rb +23 -0
  259. data/lib/virtualbox/com/mscom_interface.rb +44 -0
  260. data/lib/virtualbox/com/nil_interface.rb +7 -0
  261. data/lib/virtualbox/com/util.rb +32 -0
  262. data/lib/virtualbox/cpu.rb +61 -0
  263. data/lib/virtualbox/dhcp_server.rb +89 -0
  264. data/lib/virtualbox/dvd.rb +27 -0
  265. data/lib/virtualbox/exceptions.rb +39 -0
  266. data/lib/virtualbox/ext/byte_normalizer.rb +17 -0
  267. data/lib/virtualbox/ext/glob_loader.rb +35 -0
  268. data/lib/virtualbox/ext/logger.rb +38 -0
  269. data/lib/virtualbox/ext/platform.rb +31 -0
  270. data/lib/virtualbox/ext/subclass_listing.rb +24 -0
  271. data/lib/virtualbox/extra_data.rb +127 -0
  272. data/lib/virtualbox/forwarded_port.rb +222 -0
  273. data/lib/virtualbox/global.rb +96 -0
  274. data/lib/virtualbox/hard_drive.rb +246 -0
  275. data/lib/virtualbox/host.rb +71 -0
  276. data/lib/virtualbox/host_network_interface.rb +137 -0
  277. data/lib/virtualbox/hw_virtualization.rb +64 -0
  278. data/lib/virtualbox/lib.rb +84 -0
  279. data/lib/virtualbox/media.rb +20 -0
  280. data/lib/virtualbox/medium.rb +145 -0
  281. data/lib/virtualbox/medium_attachment.rb +61 -0
  282. data/lib/virtualbox/nat_engine.rb +71 -0
  283. data/lib/virtualbox/nat_forwarded_port.rb +171 -0
  284. data/lib/virtualbox/network_adapter.rb +166 -0
  285. data/lib/virtualbox/proxies/collection.rb +57 -0
  286. data/lib/virtualbox/shared_folder.rb +220 -0
  287. data/lib/virtualbox/snapshot.rb +185 -0
  288. data/lib/virtualbox/storage_controller.rb +160 -0
  289. data/lib/virtualbox/system_properties.rb +73 -0
  290. data/lib/virtualbox/usb_controller.rb +59 -0
  291. data/lib/virtualbox/usb_device_filter.rb +74 -0
  292. data/lib/virtualbox/version.rb +36 -0
  293. data/lib/virtualbox/virtual_system_description.rb +47 -0
  294. data/lib/virtualbox/vm.rb +649 -0
  295. data/lib/virtualbox/vrde_server.rb +57 -0
  296. data/test/test_helper.rb +18 -0
  297. data/test/virtualbox/abstract_model/attributable_test.rb +269 -0
  298. data/test/virtualbox/abstract_model/dirty_test.rb +83 -0
  299. data/test/virtualbox/abstract_model/interface_attributes_test.rb +194 -0
  300. data/test/virtualbox/abstract_model/relatable_test.rb +348 -0
  301. data/test/virtualbox/abstract_model/validatable_test.rb +308 -0
  302. data/test/virtualbox/abstract_model/version_matcher_test.rb +41 -0
  303. data/test/virtualbox/abstract_model_test.rb +462 -0
  304. data/test/virtualbox/appliance_test.rb +159 -0
  305. data/test/virtualbox/audio_adapter_test.rb +83 -0
  306. data/test/virtualbox/bios_test.rb +83 -0
  307. data/test/virtualbox/com/abstract_enum_test.rb +49 -0
  308. data/test/virtualbox/com/abstract_implementer_test.rb +40 -0
  309. data/test/virtualbox/com/abstract_interface_test.rb +140 -0
  310. data/test/virtualbox/com/ffi/interface_test.rb +249 -0
  311. data/test/virtualbox/com/ffi/util_test.rb +108 -0
  312. data/test/virtualbox/com/ffi_interface_test.rb +42 -0
  313. data/test/virtualbox/com/implementer/base_test.rb +38 -0
  314. data/test/virtualbox/com/implementer/ffi_test.rb +527 -0
  315. data/test/virtualbox/com/implementer/mscom_test.rb +247 -0
  316. data/test/virtualbox/com/mscom_interface_test.rb +17 -0
  317. data/test/virtualbox/com/util_test.rb +17 -0
  318. data/test/virtualbox/cpu_test.rb +103 -0
  319. data/test/virtualbox/dhcp_server_test.rb +165 -0
  320. data/test/virtualbox/dvd_test.rb +28 -0
  321. data/test/virtualbox/ext/byte_normalizer_test.rb +34 -0
  322. data/test/virtualbox/ext/platform_test.rb +50 -0
  323. data/test/virtualbox/ext/subclass_listing_test.rb +25 -0
  324. data/test/virtualbox/extra_data_test.rb +155 -0
  325. data/test/virtualbox/forwarded_port_test.rb +286 -0
  326. data/test/virtualbox/global_test.rb +46 -0
  327. data/test/virtualbox/hard_drive_test.rb +141 -0
  328. data/test/virtualbox/host_network_interface_test.rb +255 -0
  329. data/test/virtualbox/host_test.rb +94 -0
  330. data/test/virtualbox/hw_virtualization_test.rb +103 -0
  331. data/test/virtualbox/lib_test.rb +93 -0
  332. data/test/virtualbox/medium_attachment_test.rb +147 -0
  333. data/test/virtualbox/medium_test.rb +192 -0
  334. data/test/virtualbox/nat_engine_test.rb +106 -0
  335. data/test/virtualbox/nat_forwarded_port_test.rb +222 -0
  336. data/test/virtualbox/network_adapter_test.rb +191 -0
  337. data/test/virtualbox/proxies/collection_test.rb +102 -0
  338. data/test/virtualbox/shared_folder_test.rb +219 -0
  339. data/test/virtualbox/snapshot_test.rb +231 -0
  340. data/test/virtualbox/storage_controller_test.rb +197 -0
  341. data/test/virtualbox/system_properties_test.rb +87 -0
  342. data/test/virtualbox/usb_controller_test.rb +112 -0
  343. data/test/virtualbox/usb_device_filter_test.rb +93 -0
  344. data/test/virtualbox/version_test.rb +59 -0
  345. data/test/virtualbox/virtual_system_description_test.rb +61 -0
  346. data/test/virtualbox/vm_test.rb +633 -0
  347. data/test/virtualbox/vrde_server_test.rb +83 -0
  348. data/test/virtualbox_test.rb +11 -0
  349. data/virtualbox.gemspec +24 -0
  350. metadata +464 -0
@@ -0,0 +1,59 @@
1
+ require File.expand_path("../../test_helper", __FILE__)
2
+
3
+ class VersionTest < Test::Unit::TestCase
4
+ module VersionTestMod
5
+ extend VirtualBox::Version
6
+ end
7
+
8
+ setup do
9
+ @lib = mock("lib")
10
+ @vbox = mock("vbox")
11
+
12
+ VirtualBox::Lib.stubs(:lib).returns(@lib)
13
+ @lib.stubs(:virtualbox).returns(@vbox)
14
+
15
+ @module = VersionTestMod
16
+ end
17
+
18
+ context "checking if supported version of VirtualBox" do
19
+ should "return true if version is not nil" do
20
+ @module.stubs(:version).returns(:foo)
21
+ assert @module.supported?
22
+ end
23
+
24
+ should "return false if version is nil" do
25
+ @module.stubs(:version).returns(nil)
26
+ assert !@module.supported?
27
+ end
28
+ end
29
+
30
+ should "return the version" do
31
+ version = mock("version")
32
+ @vbox.expects(:version).returns(version)
33
+ assert_equal version, @module.version(true)
34
+ end
35
+
36
+ should "cache the version" do
37
+ @vbox.expects(:version).once.returns("v")
38
+ assert_equal "v", @module.version(true)
39
+ assert_equal "v", @module.version
40
+ assert_equal "v", @module.version
41
+ end
42
+
43
+ should "return nil if an error occurs" do
44
+ @vbox.expects(:version).raises(LoadError)
45
+ assert @module.version(true).nil?
46
+ end
47
+
48
+ should "return the revision" do
49
+ @vbox.expects(:revision).returns(7)
50
+ assert_equal "7", @module.revision(true)
51
+ end
52
+
53
+ should "cache the revision" do
54
+ @vbox.expects(:revision).once.returns(7)
55
+ assert_equal "7", @module.revision(true)
56
+ assert_equal "7", @module.revision
57
+ assert_equal "7", @module.revision
58
+ end
59
+ end
@@ -0,0 +1,61 @@
1
+ require File.expand_path("../../test_helper", __FILE__)
2
+
3
+ class VirtualSystemDescriptionTest < Test::Unit::TestCase
4
+ setup do
5
+ @klass = VirtualBox::VirtualSystemDescription
6
+ @interface = mock("interface")
7
+ end
8
+
9
+ context "class methods" do
10
+ context "populating relationship" do
11
+ setup do
12
+ @instance = mock("instance")
13
+
14
+ @klass.stubs(:new).returns(@instance)
15
+ end
16
+
17
+ should "return a proxied collection" do
18
+ result = @klass.populate_relationship(nil, [])
19
+ assert result.is_a?(VirtualBox::Proxies::Collection)
20
+ end
21
+
22
+ should "call new for every description" do
23
+ interfaces = []
24
+ 5.times { |i| interfaces << mock("i#{i}") }
25
+
26
+ expected_result = []
27
+ new_seq = sequence("new_seq")
28
+ interfaces.each do |interface|
29
+ expected_value = "instance-#{interface.inspect}"
30
+ @klass.expects(:new).with(interface).in_sequence(new_seq).returns(expected_value)
31
+ expected_result << expected_value
32
+ end
33
+
34
+ assert_equal expected_result, @klass.populate_relationship(nil, interfaces)
35
+ end
36
+ end
37
+ end
38
+
39
+ context "initializing" do
40
+ should "load attributes from the machine" do
41
+ @klass.any_instance.expects(:initialize_attributes).with(@interface).once
42
+ @klass.new(@interface)
43
+ end
44
+ end
45
+
46
+ context "initializing attributes" do
47
+ setup do
48
+ @interface.stubs(:get_values_by_type).returns(nil)
49
+ end
50
+
51
+ should "not be dirty" do
52
+ @instance = @klass.new(@interface)
53
+ assert !@instance.changed?
54
+ end
55
+
56
+ should "be existing record" do
57
+ @instance = @klass.new(@interface)
58
+ assert !@instance.new_record?
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,633 @@
1
+ require File.expand_path("../../test_helper", __FILE__)
2
+
3
+ class VMTest < Test::Unit::TestCase
4
+ setup do
5
+ @klass = VirtualBox::VM
6
+ @interface = mock("interface")
7
+ @parent = mock("parent")
8
+ end
9
+
10
+ context "class methods" do
11
+ context "retrieving all machines" do
12
+ should "return an array of VM objects" do
13
+ vms = mock("vms")
14
+ global = mock("global")
15
+ global.expects(:vms).returns(vms)
16
+ VirtualBox::Global.expects(:global).returns(global)
17
+ assert_equal vms, VirtualBox::VM.all
18
+ end
19
+ end
20
+
21
+ context "finding a VM" do
22
+ setup do
23
+ @all = []
24
+ @klass.stubs(:all).returns(@all)
25
+ end
26
+
27
+ def mock_vm(uuid, name=nil)
28
+ vm = mock("vm-#{uuid}")
29
+ vm.stubs(:uuid).returns(uuid)
30
+ vm.stubs(:name).returns(name)
31
+ vm
32
+ end
33
+
34
+ should "return nil if it doesn't exist" do
35
+ @all << mock_vm("foo")
36
+ assert_nil @klass.find("bar")
37
+ end
38
+
39
+ should "return the matching vm if it is found" do
40
+ vm = mock_vm("foo")
41
+ @all << mock_vm("bar")
42
+ @all << vm
43
+ assert_equal vm, @klass.find("foo")
44
+ end
45
+
46
+ should "return if matching name is found" do
47
+ vm = mock_vm(nil, "foo")
48
+ @all << vm
49
+ assert_equal vm, @klass.find("foo")
50
+ end
51
+ end
52
+
53
+ context "importing" do
54
+ setup do
55
+ @path = "foo.rb"
56
+ @appliance = mock("appliance")
57
+ @virtual_system = mock("virtual_system")
58
+ @appliance.stubs(:virtual_systems).returns([@virtual_system])
59
+
60
+ @name = :foo
61
+ @virtual_system.stubs(:descriptions).returns({
62
+ :name => { :auto => @name }
63
+ })
64
+ end
65
+
66
+ should "create a new appliance with path, import, and return VM" do
67
+ result = mock("result")
68
+ proc = mock("proc")
69
+ VirtualBox::Appliance.expects(:new).with(@path).returns(@appliance)
70
+ @appliance.expects(:import).yields(proc)
71
+ @klass.expects(:find).with(@name).returns(result)
72
+ proc.expects(:call)
73
+
74
+ value = @klass.import(@path) do |proc|
75
+ proc.call
76
+ end
77
+
78
+ assert_equal result, value
79
+ end
80
+ end
81
+
82
+ context "populating relationships" do
83
+ setup do
84
+ @caller = mock("caller")
85
+ end
86
+
87
+ should "call populate_array_relationship for arrays" do
88
+ @klass.expects(:populate_array_relationship).with(@caller, []).once
89
+ @klass.populate_relationship(@caller, [])
90
+ end
91
+
92
+ should "call populate_single_relationship for non-arrays" do
93
+ @klass.expects(:populate_single_relationship).with(@caller, nil).once
94
+ @klass.populate_relationship(@caller, nil)
95
+ end
96
+ end
97
+
98
+ context "populating single relationships" do
99
+ setup do
100
+ @machine = mock("interface")
101
+ end
102
+
103
+ should "return a new machine" do
104
+ result = mock("result")
105
+ @klass.expects(:new).with(@machine).returns(result)
106
+ assert_equal result, @klass.populate_single_relationship(nil, @machine)
107
+ end
108
+ end
109
+
110
+ context "populating array relationship" do
111
+ setup do
112
+ @instance = mock("instance")
113
+
114
+ @klass.stubs(:new).returns(@instance)
115
+ end
116
+
117
+ should "return a proxied collection" do
118
+ result = @klass.populate_array_relationship(nil, [])
119
+ assert result.is_a?(VirtualBox::Proxies::Collection)
120
+ end
121
+
122
+ should "call new for every machine" do
123
+ machines = []
124
+ 5.times { |i| machines << mock("m#{i}") }
125
+
126
+ expected_result = []
127
+ new_seq = sequence("new_seq")
128
+ machines.each do |machine|
129
+ expected_value = "instance-#{machine.inspect}"
130
+ @klass.expects(:new).with(machine).in_sequence(new_seq).returns(expected_value)
131
+ expected_result << expected_value
132
+ end
133
+
134
+ assert_equal expected_result, @klass.populate_array_relationship(nil, machines)
135
+ end
136
+ end
137
+ end
138
+
139
+ context "initializing" do
140
+ should "load attributes from the machine" do
141
+ @klass.any_instance.expects(:initialize_attributes).with(@interface).once
142
+ @klass.new(@interface)
143
+ end
144
+ end
145
+
146
+ context "initializing attributes" do
147
+ setup do
148
+ @klass.any_instance.stubs(:load_interface_attributes)
149
+ @klass.any_instance.stubs(:populate_relationships)
150
+ end
151
+
152
+ should "load interface attribtues" do
153
+ @klass.any_instance.expects(:load_interface_attributes).with(@interface).once
154
+ @klass.new(@interface)
155
+ end
156
+
157
+ should "populate relationships" do
158
+ @klass.any_instance.expects(:populate_relationships).with(@interface).once
159
+ @klass.new(@interface)
160
+ end
161
+
162
+ should "not be dirty" do
163
+ @instance = @klass.new(@interface)
164
+ assert !@instance.changed?
165
+ end
166
+
167
+ should "be existing record" do
168
+ @instance = @klass.new(@interface)
169
+ assert !@instance.new_record?
170
+ end
171
+ end
172
+
173
+ context "instance methods" do
174
+ setup do
175
+ @klass.any_instance.stubs(:initialize_attributes)
176
+ @instance = @klass.new(@interface)
177
+ end
178
+
179
+ def setup_session_mocks
180
+ @parent = mock("parent")
181
+ @session = mock("session")
182
+ @lib = mock("lib")
183
+ @progress = mock("progress")
184
+
185
+ @session.stubs(:close)
186
+ @progress.stubs(:wait_for_completion)
187
+ @lib.stubs(:session).returns(@session)
188
+ @uuid = :foo
189
+
190
+ VirtualBox::Lib.stubs(:lib).returns(@lib)
191
+ @interface.stubs(:parent).returns(@parent)
192
+ @instance.stubs(:imachine).returns(@interface)
193
+ @instance.stubs(:uuid).returns(@uuid)
194
+ @instance.stubs(:running).returns(false)
195
+ end
196
+
197
+ context "reloading" do
198
+ setup do
199
+ @instance.stubs(:initialize_attributes)
200
+ end
201
+
202
+ should "just reload the attributes" do
203
+ @instance.expects(:initialize_attributes).with(@interface).once
204
+ @instance.reload
205
+ end
206
+
207
+ should "return itself" do
208
+ assert @instance.equal?(@instance.reload)
209
+ end
210
+ end
211
+
212
+ context "destroying" do
213
+ setup do
214
+ @instance.stubs(:uuid).returns(:foo)
215
+
216
+ @interface_parent = mock("interface_parent")
217
+ @interface.stubs(:parent).returns(@interface_parent)
218
+ end
219
+
220
+ should "do a full destroy and destroy the media" do
221
+ destroy_seq = sequence("destroy_seq")
222
+ media = [1,2,3]
223
+ progress = mock("progress")
224
+ @interface.expects(:unregister).with(:full).once.returns(media).in_sequence(destroy_seq)
225
+ @interface.expects(:delete).with(media).once.returns(progress).in_sequence(destroy_seq)
226
+
227
+ @instance.destroy
228
+ end
229
+
230
+ should "not destroy media if there aren't any" do
231
+ @interface.expects(:unregister).with(:full).once.returns([])
232
+ @interface.expects(:delete).never
233
+
234
+ @instance.destroy
235
+ end
236
+ end
237
+
238
+ context "state" do
239
+ setup do
240
+ @state = mock("state")
241
+ @interface = mock("interface")
242
+ @instance.stubs(:read_attribute).with(:state).returns(@state)
243
+ @instance.stubs(:interface).returns(@interface)
244
+ end
245
+
246
+ should "reload and return the state" do
247
+ @instance.expects(:load_interface_attribute).with(:state, @instance.interface).once
248
+ assert_equal @state, @instance.state
249
+ end
250
+
251
+ should "not reload the state if suppress is given" do
252
+ @instance.expects(:load_interface_attribute).never
253
+ assert_equal @state, @instance.state(true)
254
+ end
255
+ end
256
+
257
+ context "starting" do
258
+ setup do
259
+ setup_session_mocks
260
+
261
+ @instance.stubs(:running?).returns(false)
262
+ @session.stubs(:state).returns(:open)
263
+ end
264
+
265
+ should "launch the VM with the given mode" do
266
+ start_seq = sequence('start_seq')
267
+ mode = "foo"
268
+ @interface.expects(:launch_vm_process).with(@session, mode, "").once.returns(@progress).in_sequence(start_seq)
269
+ @progress.expects(:wait).in_sequence(start_seq)
270
+ @session.expects(:unlock_machine).in_sequence(start_seq)
271
+ assert @instance.start(mode)
272
+ end
273
+
274
+ should "return false if state is running" do
275
+ @instance.expects(:running?).returns(true)
276
+ assert !@instance.start(nil)
277
+ end
278
+ end
279
+
280
+ context "controlling" do
281
+ setup do
282
+ setup_session_mocks
283
+
284
+ @console = mock("console")
285
+ @console.stubs(:send)
286
+ @session.stubs(:console).returns(@console)
287
+ @session.stubs(:state).returns(:open)
288
+
289
+ @instance.stubs(:with_open_session).yields(@session)
290
+
291
+ @method = :foo
292
+ end
293
+
294
+ should "get an existing, session, send the command, and close" do
295
+ method = :foo
296
+ control_seq = sequence("control_seq")
297
+ @instance.expects(:with_open_session).with(:shared).yields(@session).in_sequence(control_seq)
298
+ @console.expects(:send).with(@method).once.in_sequence(control_seq)
299
+
300
+ @instance.control(@method)
301
+ end
302
+
303
+ should "wait for completion if an IProgress is returned" do
304
+ progress = mock("IProgress")
305
+ progress.stubs(:is_a?).with(VirtualBox::COM::Util.versioned_interface(:Progress)).returns(true)
306
+ progress.expects(:wait).once
307
+ @console.expects(:send).with(@method).returns(progress)
308
+ @instance.control(@method)
309
+ end
310
+
311
+ should "forward other args" do
312
+ @console.expects(:send).with(@method, 1, 2, 3).once
313
+ @instance.control(@method, 1, 2, 3)
314
+ end
315
+ end
316
+
317
+ context "control helpers" do
318
+ should "call the proper control method" do
319
+ methods = {
320
+ :shutdown => :power_button,
321
+ :stop => :power_down,
322
+ :pause => :pause,
323
+ :resume => :resume,
324
+ :save_state => :save_state,
325
+ :discard_state => [:discard_saved_state, true]
326
+ }
327
+
328
+ methods.each do |method, control|
329
+ control = [control] unless control.is_a?(Array)
330
+ @instance.expects(:control).with(*control).once
331
+ @instance.send(method)
332
+ end
333
+ end
334
+ end
335
+
336
+ context "saving" do
337
+ setup do
338
+ @session = mock("session")
339
+ @session.stubs(:machine).returns(@parent)
340
+
341
+ @locked_interface = mock("locked_interface")
342
+
343
+ @instance.stubs(:saved?).returns(false)
344
+ @instance.stubs(:valid?).returns(true)
345
+ @instance.stubs(:with_open_session)
346
+ end
347
+
348
+ should "open the session, save, and close" do
349
+ save_seq = sequence("save_seq")
350
+ @instance.expects(:with_open_session).once.yields(@session).in_sequence(save_seq)
351
+ @session.expects(:machine).returns(@locked_interface).in_sequence(save_seq)
352
+ @instance.expects(:save_interface_attribute).with(:boot_order, @locked_interface).in_sequence(save_seq)
353
+ @instance.expects(:save_changed_interface_attributes).with(@locked_interface).in_sequence(save_seq)
354
+ @instance.expects(:save_relationships).in_sequence(save_seq)
355
+
356
+ @instance.save
357
+ end
358
+
359
+ should "raise an exception if saved" do
360
+ @instance.stubs(:saved?).returns(true)
361
+
362
+ assert_raises(VirtualBox::Exceptions::ReadonlyVMStateException) {
363
+ @instance.save
364
+ }
365
+ end
366
+
367
+ should "return false if not valid" do
368
+ @instance.stubs(:valid?).returns(false)
369
+ assert !@instance.save
370
+ end
371
+
372
+ should "return true if save succeeds" do
373
+ assert @instance.save
374
+ end
375
+ end
376
+
377
+ context "opening a session [direct]" do
378
+ setup do
379
+ setup_session_mocks
380
+
381
+ @locked_interface = mock("locked_interface")
382
+ @locked_interface.stubs(:state).returns(:powered_off)
383
+ @session.stubs(:machine).returns(@locked_interface)
384
+ @session.stubs(:state).returns(:closed)
385
+ @interface.stubs(:lock_machine)
386
+ end
387
+
388
+ should "close the session if an exception is raised" do
389
+ @locked_interface.expects(:save_settings).raises(Exception)
390
+ @session.expects(:unlock_machine).once
391
+
392
+ assert_raises(Exception) do
393
+ @instance.with_open_session do
394
+ # After this point, state should be open
395
+ @session.stubs(:state).returns(:open)
396
+ end
397
+ end
398
+ end
399
+
400
+ should "open the session, save, and close" do
401
+ save_seq = sequence("save_seq")
402
+ @proc = Proc.new {}
403
+
404
+ @interface.expects(:lock_machine).with(@session, :write).in_sequence(save_seq)
405
+ @proc.expects(:call).with(@session).once.in_sequence(save_seq)
406
+ @locked_interface.expects(:save_settings).once.in_sequence(save_seq)
407
+ @session.expects(:unlock_machine).in_sequence(save_seq)
408
+
409
+ @instance.with_open_session do |session|
410
+ @proc.call(session)
411
+ end
412
+ end
413
+
414
+ should "open the session with the shared type and NOT save settings" do
415
+ @interface.expects(:lock_machine).with(@session, :shared)
416
+ @session.expects(:unlock_machine)
417
+ @locked_interface.expects(:save_settings).never
418
+
419
+ @instance.with_open_session(:shared)
420
+ end
421
+
422
+ should "not save settings when the state is saved" do
423
+ @locked_interface.stubs(:state).returns(:saved)
424
+
425
+ save_seq = sequence("save_seq")
426
+ @interface.expects(:lock_machine).with(@session, :write).in_sequence(save_seq)
427
+ @locked_interface.expects(:save_settings).never
428
+ @session.expects(:unlock_machine).in_sequence(save_seq)
429
+
430
+ @instance.with_open_session { |session| }
431
+ end
432
+
433
+ should "only open the session and close once" do
434
+ open_seq = sequence("open_seq")
435
+
436
+ @interface.expects(:lock_machine).with(@session, :write).in_sequence(open_seq)
437
+ @locked_interface.expects(:save_settings).once.in_sequence(open_seq)
438
+ @session.expects(:unlock_machine).once.in_sequence(open_seq)
439
+
440
+ @instance.with_open_session do |session|
441
+ session.stubs(:state).returns(:open)
442
+
443
+ @instance.with_open_session do |subsession|
444
+ assert_equal session, subsession
445
+ end
446
+ end
447
+ end
448
+ end
449
+
450
+ context "state methods" do
451
+ should "check the proper results" do
452
+ methods = {
453
+ :starting? => :starting,
454
+ :running? => :running,
455
+ :powered_off? => :powered_off,
456
+ :paused? => :paused,
457
+ :saved? => :saved,
458
+ :aborted? => :aborted
459
+ }
460
+
461
+ methods.each do |method, value|
462
+ @instance.stubs(:state).returns(value)
463
+ assert @instance.send(method)
464
+
465
+ @instance.stubs(:state).returns(:nope)
466
+ assert !@instance.send(method)
467
+ end
468
+ end
469
+ end
470
+
471
+ context "exporting" do
472
+ setup do
473
+ @path = "foo.rb"
474
+ @appliance = mock("appliance")
475
+ @appliance.stubs(:path=)
476
+ @appliance.stubs(:add_machine)
477
+
478
+ VirtualBox::Appliance.stubs(:new).returns(@appliance)
479
+ end
480
+
481
+ should "create a new appliance with path and export" do
482
+ result = mock("result")
483
+ options = mock("options")
484
+ VirtualBox::Appliance.expects(:new).returns(@appliance)
485
+ @appliance.expects(:path=).with(@path)
486
+ @appliance.expects(:add_machine).with(@instance, options)
487
+ @appliance.expects(:export)
488
+
489
+ @instance.export(@path, options)
490
+ end
491
+
492
+ should "forward any block to the appliance export method" do
493
+ proc = mock("proc")
494
+ @appliance.expects(:export).yields(proc)
495
+ proc.expects(:call)
496
+
497
+ @instance.export(@path) do |yielded_proc|
498
+ yielded_proc.call
499
+ end
500
+ end
501
+ end
502
+
503
+ context "taking a snapshot" do
504
+ setup do
505
+ setup_session_mocks
506
+
507
+ @progress = mock("progress")
508
+ @progress.stubs(:wait)
509
+
510
+ @console = mock("console")
511
+ @console.stubs(:take_snapshot).returns(@progress)
512
+ @session.stubs(:console).returns(@console)
513
+
514
+ @instance.stubs(:with_open_session).yields(@session)
515
+ end
516
+
517
+ should "take a snapshot on the console and wait" do
518
+ name = "foo"
519
+ description = "baz"
520
+ @console.expects(:take_snapshot).with(name, description).returns(@progress)
521
+ @instance.take_snapshot(name, description)
522
+ end
523
+
524
+ should "wait and pass in the given block, if given" do
525
+ foo = mock("foo")
526
+ @progress.expects(:wait).yields(foo)
527
+ foo.expects(:called).once
528
+
529
+ @instance.take_snapshot(nil, nil) do |obj|
530
+ obj.called
531
+ end
532
+ end
533
+ end
534
+
535
+ context "root snapshot" do
536
+ should "return nil if the current snapshot is nil" do
537
+ @instance.stubs(:current_snapshot).returns(nil)
538
+ assert_nil @instance.root_snapshot
539
+ end
540
+
541
+ should "return the proper root snapshot" do
542
+ root = mock("root_snapshot")
543
+ root.stubs(:parent).returns(nil)
544
+
545
+ parent = mock("parent")
546
+ parent.stubs(:parent).returns(root)
547
+
548
+ snapshot = mock("snapshot")
549
+ snapshot.stubs(:parent).returns(parent)
550
+
551
+ @instance.stubs(:current_snapshot).returns(snapshot)
552
+ assert_equal root, @instance.root_snapshot
553
+ end
554
+ end
555
+
556
+ context "finding a snapshot" do
557
+ should "return nil if there is no root snapshot" do
558
+ @instance.stubs(:current_snapshot).returns(nil)
559
+ assert_nil @instance.find_snapshot("foo")
560
+ end
561
+
562
+ should "return nil if the snapshot is not found" do
563
+ snapshot = mock("snapshot")
564
+ snapshot.stubs(:name).returns("wrong")
565
+ snapshot.stubs(:uuid).returns(nil)
566
+ snapshot.stubs(:children).returns([])
567
+ @instance.stubs(:root_snapshot).returns(snapshot)
568
+
569
+ assert_nil @instance.find_snapshot("bar")
570
+ end
571
+
572
+ # TODO: Testing traversing the snapshot tree. Too many mocks :S
573
+ end
574
+
575
+ context "getting the boot order" do
576
+ setup do
577
+ @max = 4
578
+ @global = mock("global")
579
+ @sys_props = mock("system_properties")
580
+
581
+ @sys_props.stubs(:max_boot_position).returns(@max)
582
+ @global.stubs(:system_properties).returns(@sys_props)
583
+ VirtualBox::Global.stubs(:global).returns(@global)
584
+ end
585
+
586
+ should "get the boot order for each up to max" do
587
+ expected = (1..@max).inject([]) do |acc, pos|
588
+ result = mock("p#{pos}")
589
+ @interface.expects(:get_boot_order).with(pos).returns(result)
590
+ acc << result
591
+ acc
592
+ end
593
+
594
+ assert_equal expected, @instance.get_boot_order(@interface, nil)
595
+ end
596
+ end
597
+
598
+ context "setting the boot order" do
599
+ setup do
600
+ @max = 4
601
+ @global = mock("global")
602
+ @sys_props = mock("system_properties")
603
+
604
+ @sys_props.stubs(:max_boot_position).returns(@max)
605
+ @global.stubs(:system_properties).returns(@sys_props)
606
+ VirtualBox::Global.stubs(:global).returns(@global)
607
+ end
608
+
609
+ should "set the boot order for each up to max" do
610
+ expected = (1..@max).inject([]) do |acc, pos|
611
+ result = mock("p#{pos}")
612
+ @interface.expects(:set_boot_order).with(pos, result)
613
+ acc << result
614
+ acc
615
+ end
616
+
617
+ @instance.set_boot_order(@interface, nil, expected)
618
+ end
619
+
620
+ should "set the boot order for max items even if value has less than the proper amount" do
621
+ items = [1, 2]
622
+ items.concat(Array.new(@max - items.size))
623
+ items.each_with_index do |item, i|
624
+ @interface.expects(:set_boot_order).with(i + 1, item).once
625
+ end
626
+
627
+ assert_equal @max, items.size # sanity
628
+
629
+ @instance.set_boot_order(@interface, nil, items)
630
+ end
631
+ end
632
+ end
633
+ end