tnargav 1.2.2

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 (452) hide show
  1. data/.gitignore +31 -0
  2. data/.gitsetup.yml +5 -0
  3. data/.travis.yml +7 -0
  4. data/.yardopts +1 -0
  5. data/CHANGELOG.md +1067 -0
  6. data/Gemfile +3 -0
  7. data/LICENSE +21 -0
  8. data/README.md +89 -0
  9. data/Rakefile +18 -0
  10. data/bin/vagrant +106 -0
  11. data/config/default.rb +36 -0
  12. data/contrib/README.md +12 -0
  13. data/contrib/bash/completion.sh +3 -0
  14. data/contrib/emacs/vagrant.el +8 -0
  15. data/contrib/vim/vagrantfile.vim +9 -0
  16. data/keys/README.md +17 -0
  17. data/keys/vagrant +27 -0
  18. data/keys/vagrant.pub +1 -0
  19. data/lib/vagrant/action/builder.rb +174 -0
  20. data/lib/vagrant/action/builtin/box_add.rb +81 -0
  21. data/lib/vagrant/action/builtin/call.rb +67 -0
  22. data/lib/vagrant/action/builtin/config_validate.rb +30 -0
  23. data/lib/vagrant/action/builtin/confirm.rb +38 -0
  24. data/lib/vagrant/action/builtin/destroy_confirm.rb +21 -0
  25. data/lib/vagrant/action/builtin/env_set.rb +24 -0
  26. data/lib/vagrant/action/builtin/graceful_halt.rb +73 -0
  27. data/lib/vagrant/action/builtin/handle_box_url.rb +77 -0
  28. data/lib/vagrant/action/builtin/handle_forwarded_port_collisions.rb +134 -0
  29. data/lib/vagrant/action/builtin/lock.rb +57 -0
  30. data/lib/vagrant/action/builtin/nfs.rb +118 -0
  31. data/lib/vagrant/action/builtin/provision.rb +70 -0
  32. data/lib/vagrant/action/builtin/set_hostname.rb +27 -0
  33. data/lib/vagrant/action/builtin/ssh_exec.rb +42 -0
  34. data/lib/vagrant/action/builtin/ssh_run.rb +43 -0
  35. data/lib/vagrant/action/general/package.rb +103 -0
  36. data/lib/vagrant/action/hook.rb +107 -0
  37. data/lib/vagrant/action/runner.rb +69 -0
  38. data/lib/vagrant/action/warden.rb +103 -0
  39. data/lib/vagrant/action.rb +43 -0
  40. data/lib/vagrant/batch_action.rb +113 -0
  41. data/lib/vagrant/box.rb +97 -0
  42. data/lib/vagrant/box_collection.rb +375 -0
  43. data/lib/vagrant/cli.rb +82 -0
  44. data/lib/vagrant/config/loader.rb +222 -0
  45. data/lib/vagrant/config/v1/dummy_config.rb +13 -0
  46. data/lib/vagrant/config/v1/loader.rb +105 -0
  47. data/lib/vagrant/config/v1/root.rb +60 -0
  48. data/lib/vagrant/config/v1.rb +9 -0
  49. data/lib/vagrant/config/v2/dummy_config.rb +13 -0
  50. data/lib/vagrant/config/v2/loader.rb +141 -0
  51. data/lib/vagrant/config/v2/root.rb +105 -0
  52. data/lib/vagrant/config/v2/util.rb +21 -0
  53. data/lib/vagrant/config/v2.rb +9 -0
  54. data/lib/vagrant/config/version_base.rb +80 -0
  55. data/lib/vagrant/config.rb +61 -0
  56. data/lib/vagrant/environment.rb +843 -0
  57. data/lib/vagrant/errors.rb +570 -0
  58. data/lib/vagrant/guest.rb +163 -0
  59. data/lib/vagrant/hosts.rb +28 -0
  60. data/lib/vagrant/machine.rb +325 -0
  61. data/lib/vagrant/machine_state.rb +45 -0
  62. data/lib/vagrant/plugin/v1/command.rb +169 -0
  63. data/lib/vagrant/plugin/v1/communicator.rb +98 -0
  64. data/lib/vagrant/plugin/v1/config.rb +112 -0
  65. data/lib/vagrant/plugin/v1/errors.rb +15 -0
  66. data/lib/vagrant/plugin/v1/guest.rb +92 -0
  67. data/lib/vagrant/plugin/v1/host.rb +66 -0
  68. data/lib/vagrant/plugin/v1/manager.rb +131 -0
  69. data/lib/vagrant/plugin/v1/plugin.rb +229 -0
  70. data/lib/vagrant/plugin/v1/provider.rb +68 -0
  71. data/lib/vagrant/plugin/v1/provisioner.rb +50 -0
  72. data/lib/vagrant/plugin/v1.rb +19 -0
  73. data/lib/vagrant/plugin/v2/command.rb +234 -0
  74. data/lib/vagrant/plugin/v2/communicator.rb +98 -0
  75. data/lib/vagrant/plugin/v2/components.rb +47 -0
  76. data/lib/vagrant/plugin/v2/config.rb +136 -0
  77. data/lib/vagrant/plugin/v2/errors.rb +15 -0
  78. data/lib/vagrant/plugin/v2/guest.rb +78 -0
  79. data/lib/vagrant/plugin/v2/host.rb +66 -0
  80. data/lib/vagrant/plugin/v2/manager.rb +173 -0
  81. data/lib/vagrant/plugin/v2/plugin.rb +226 -0
  82. data/lib/vagrant/plugin/v2/provider.rb +69 -0
  83. data/lib/vagrant/plugin/v2/provisioner.rb +47 -0
  84. data/lib/vagrant/plugin/v2.rb +22 -0
  85. data/lib/vagrant/plugin.rb +6 -0
  86. data/lib/vagrant/registry.rb +78 -0
  87. data/lib/vagrant/ui.rb +215 -0
  88. data/lib/vagrant/util/ansi_escape_code_remover.rb +34 -0
  89. data/lib/vagrant/util/busy.rb +59 -0
  90. data/lib/vagrant/util/counter.rb +24 -0
  91. data/lib/vagrant/util/downloader.rb +146 -0
  92. data/lib/vagrant/util/file_checksum.rb +38 -0
  93. data/lib/vagrant/util/file_mode.rb +12 -0
  94. data/lib/vagrant/util/hash_with_indifferent_access.rb +63 -0
  95. data/lib/vagrant/util/is_port_open.rb +38 -0
  96. data/lib/vagrant/util/line_ending_helpers.rb +14 -0
  97. data/lib/vagrant/util/network_ip.rb +28 -0
  98. data/lib/vagrant/util/platform.rb +58 -0
  99. data/lib/vagrant/util/retryable.rb +31 -0
  100. data/lib/vagrant/util/safe_chdir.rb +33 -0
  101. data/lib/vagrant/util/safe_exec.rb +36 -0
  102. data/lib/vagrant/util/safe_puts.rb +31 -0
  103. data/lib/vagrant/util/scoped_hash_override.rb +45 -0
  104. data/lib/vagrant/util/ssh.rb +150 -0
  105. data/lib/vagrant/util/stacked_proc_runner.rb +35 -0
  106. data/lib/vagrant/util/string_block_editor.rb +77 -0
  107. data/lib/vagrant/util/subprocess.rb +273 -0
  108. data/lib/vagrant/util/template_renderer.rb +83 -0
  109. data/lib/vagrant/util/which.rb +43 -0
  110. data/lib/vagrant/util.rb +12 -0
  111. data/lib/vagrant/version.rb +6 -0
  112. data/lib/vagrant.rb +258 -0
  113. data/plugins/README.md +5 -0
  114. data/plugins/commands/box/command/add.rb +51 -0
  115. data/plugins/commands/box/command/list.rb +41 -0
  116. data/plugins/commands/box/command/remove.rb +37 -0
  117. data/plugins/commands/box/command/repackage.rb +43 -0
  118. data/plugins/commands/box/command/root.rb +75 -0
  119. data/plugins/commands/box/plugin.rb +15 -0
  120. data/plugins/commands/destroy/command.rb +31 -0
  121. data/plugins/commands/destroy/plugin.rb +18 -0
  122. data/plugins/commands/halt/command.rb +33 -0
  123. data/plugins/commands/halt/plugin.rb +18 -0
  124. data/plugins/commands/init/command.rb +40 -0
  125. data/plugins/commands/init/plugin.rb +18 -0
  126. data/plugins/commands/package/command.rb +83 -0
  127. data/plugins/commands/package/plugin.rb +18 -0
  128. data/plugins/commands/plugin/action/bundler_check.rb +25 -0
  129. data/plugins/commands/plugin/action/install_gem.rb +81 -0
  130. data/plugins/commands/plugin/action/license_plugin.rb +54 -0
  131. data/plugins/commands/plugin/action/list_plugins.rb +54 -0
  132. data/plugins/commands/plugin/action/prune_gems.rb +149 -0
  133. data/plugins/commands/plugin/action/uninstall_plugin.rb +23 -0
  134. data/plugins/commands/plugin/action.rb +52 -0
  135. data/plugins/commands/plugin/command/base.rb +22 -0
  136. data/plugins/commands/plugin/command/install.rb +58 -0
  137. data/plugins/commands/plugin/command/license.rb +31 -0
  138. data/plugins/commands/plugin/command/list.rb +28 -0
  139. data/plugins/commands/plugin/command/root.rb +75 -0
  140. data/plugins/commands/plugin/command/uninstall.rb +28 -0
  141. data/plugins/commands/plugin/gem_helper.rb +74 -0
  142. data/plugins/commands/plugin/plugin.rb +22 -0
  143. data/plugins/commands/plugin/state_file.rb +57 -0
  144. data/plugins/commands/provision/command.rb +34 -0
  145. data/plugins/commands/provision/plugin.rb +18 -0
  146. data/plugins/commands/reload/command.rb +37 -0
  147. data/plugins/commands/reload/plugin.rb +18 -0
  148. data/plugins/commands/resume/command.rb +25 -0
  149. data/plugins/commands/resume/plugin.rb +17 -0
  150. data/plugins/commands/ssh/command.rb +63 -0
  151. data/plugins/commands/ssh/plugin.rb +17 -0
  152. data/plugins/commands/ssh_config/command.rb +49 -0
  153. data/plugins/commands/ssh_config/plugin.rb +18 -0
  154. data/plugins/commands/status/command.rb +39 -0
  155. data/plugins/commands/status/plugin.rb +18 -0
  156. data/plugins/commands/suspend/command.rb +25 -0
  157. data/plugins/commands/suspend/plugin.rb +18 -0
  158. data/plugins/commands/up/command.rb +57 -0
  159. data/plugins/commands/up/plugin.rb +17 -0
  160. data/plugins/commands/up/start_mixins.rb +26 -0
  161. data/plugins/communicators/ssh/communicator.rb +342 -0
  162. data/plugins/communicators/ssh/plugin.rb +19 -0
  163. data/plugins/guests/arch/cap/change_host_name.rb +18 -0
  164. data/plugins/guests/arch/cap/configure_networks.rb +23 -0
  165. data/plugins/guests/arch/guest.rb +11 -0
  166. data/plugins/guests/arch/plugin.rb +25 -0
  167. data/plugins/guests/debian/cap/change_host_name.rb +18 -0
  168. data/plugins/guests/debian/cap/configure_networks.rb +61 -0
  169. data/plugins/guests/debian/guest.rb +9 -0
  170. data/plugins/guests/debian/plugin.rb +25 -0
  171. data/plugins/guests/fedora/cap/configure_networks.rb +59 -0
  172. data/plugins/guests/fedora/cap/network_scripts_dir.rb +15 -0
  173. data/plugins/guests/fedora/guest.rb +11 -0
  174. data/plugins/guests/fedora/plugin.rb +25 -0
  175. data/plugins/guests/freebsd/cap/change_host_name.rb +14 -0
  176. data/plugins/guests/freebsd/cap/configure_networks.rb +39 -0
  177. data/plugins/guests/freebsd/cap/halt.rb +16 -0
  178. data/plugins/guests/freebsd/cap/mount_nfs_folder.rb +14 -0
  179. data/plugins/guests/freebsd/guest.rb +14 -0
  180. data/plugins/guests/freebsd/plugin.rb +35 -0
  181. data/plugins/guests/gentoo/cap/change_host_name.rb +17 -0
  182. data/plugins/guests/gentoo/cap/configure_networks.rb +43 -0
  183. data/plugins/guests/gentoo/guest.rb +9 -0
  184. data/plugins/guests/gentoo/plugin.rb +25 -0
  185. data/plugins/guests/linux/cap/halt.rb +16 -0
  186. data/plugins/guests/linux/cap/mount_nfs.rb +30 -0
  187. data/plugins/guests/linux/cap/mount_virtualbox_shared_folder.rb +40 -0
  188. data/plugins/guests/linux/cap/read_ip_address.rb +17 -0
  189. data/plugins/guests/linux/cap/shell_expand_guest_path.rb +26 -0
  190. data/plugins/guests/linux/guest.rb +11 -0
  191. data/plugins/guests/linux/plugin.rb +40 -0
  192. data/plugins/guests/openbsd/cap/halt.rb +16 -0
  193. data/plugins/guests/openbsd/guest.rb +11 -0
  194. data/plugins/guests/openbsd/plugin.rb +20 -0
  195. data/plugins/guests/pld/cap/network_scripts_dir.rb +11 -0
  196. data/plugins/guests/pld/guest.rb +11 -0
  197. data/plugins/guests/pld/plugin.rb +20 -0
  198. data/plugins/guests/redhat/cap/change_host_name.rb +18 -0
  199. data/plugins/guests/redhat/cap/configure_networks.rb +60 -0
  200. data/plugins/guests/redhat/cap/network_scripts_dir.rb +11 -0
  201. data/plugins/guests/redhat/guest.rb +11 -0
  202. data/plugins/guests/redhat/plugin.rb +30 -0
  203. data/plugins/guests/solaris/cap/change_host_name.rb +17 -0
  204. data/plugins/guests/solaris/cap/configure_networks.rb +25 -0
  205. data/plugins/guests/solaris/cap/halt.rb +21 -0
  206. data/plugins/guests/solaris/cap/mount_virtualbox_shared_folder.rb +28 -0
  207. data/plugins/guests/solaris/config.rb +18 -0
  208. data/plugins/guests/solaris/guest.rb +14 -0
  209. data/plugins/guests/solaris/plugin.rb +40 -0
  210. data/plugins/guests/suse/cap/change_host_name.rb +18 -0
  211. data/plugins/guests/suse/cap/network_scripts_dir.rb +11 -0
  212. data/plugins/guests/suse/guest.rb +11 -0
  213. data/plugins/guests/suse/plugin.rb +25 -0
  214. data/plugins/guests/ubuntu/cap/change_host_name.rb +23 -0
  215. data/plugins/guests/ubuntu/guest.rb +32 -0
  216. data/plugins/guests/ubuntu/plugin.rb +20 -0
  217. data/plugins/hosts/arch/host.rb +68 -0
  218. data/plugins/hosts/arch/plugin.rb +15 -0
  219. data/plugins/hosts/bsd/host.rb +102 -0
  220. data/plugins/hosts/bsd/plugin.rb +15 -0
  221. data/plugins/hosts/fedora/host.rb +51 -0
  222. data/plugins/hosts/fedora/plugin.rb +15 -0
  223. data/plugins/hosts/freebsd/host.rb +43 -0
  224. data/plugins/hosts/freebsd/plugin.rb +15 -0
  225. data/plugins/hosts/gentoo/host.rb +24 -0
  226. data/plugins/hosts/gentoo/plugin.rb +15 -0
  227. data/plugins/hosts/linux/host.rb +95 -0
  228. data/plugins/hosts/linux/plugin.rb +15 -0
  229. data/plugins/hosts/opensuse/host.rb +34 -0
  230. data/plugins/hosts/opensuse/plugin.rb +15 -0
  231. data/plugins/hosts/windows/host.rb +17 -0
  232. data/plugins/hosts/windows/plugin.rb +15 -0
  233. data/plugins/kernel_v1/config/nfs.rb +20 -0
  234. data/plugins/kernel_v1/config/package.rb +17 -0
  235. data/plugins/kernel_v1/config/ssh.rb +46 -0
  236. data/plugins/kernel_v1/config/vagrant.rb +31 -0
  237. data/plugins/kernel_v1/config/vm.rb +184 -0
  238. data/plugins/kernel_v1/plugin.rb +44 -0
  239. data/plugins/kernel_v2/config/nfs.rb +14 -0
  240. data/plugins/kernel_v2/config/package.rb +13 -0
  241. data/plugins/kernel_v2/config/ssh.rb +76 -0
  242. data/plugins/kernel_v2/config/ssh_connect.rb +40 -0
  243. data/plugins/kernel_v2/config/vagrant.rb +13 -0
  244. data/plugins/kernel_v2/config/vm.rb +416 -0
  245. data/plugins/kernel_v2/config/vm_provisioner.rb +55 -0
  246. data/plugins/kernel_v2/config/vm_subvm.rb +30 -0
  247. data/plugins/kernel_v2/plugin.rb +44 -0
  248. data/plugins/providers/virtualbox/action/boot.rb +49 -0
  249. data/plugins/providers/virtualbox/action/check_accessible.rb +23 -0
  250. data/plugins/providers/virtualbox/action/check_created.rb +21 -0
  251. data/plugins/providers/virtualbox/action/check_guest_additions.rb +45 -0
  252. data/plugins/providers/virtualbox/action/check_running.rb +21 -0
  253. data/plugins/providers/virtualbox/action/check_virtualbox.rb +22 -0
  254. data/plugins/providers/virtualbox/action/clean_machine_folder.rb +43 -0
  255. data/plugins/providers/virtualbox/action/clear_forwarded_ports.rb +18 -0
  256. data/plugins/providers/virtualbox/action/clear_network_interfaces.rb +31 -0
  257. data/plugins/providers/virtualbox/action/clear_shared_folders.rb +17 -0
  258. data/plugins/providers/virtualbox/action/created.rb +20 -0
  259. data/plugins/providers/virtualbox/action/customize.rb +36 -0
  260. data/plugins/providers/virtualbox/action/destroy.rb +19 -0
  261. data/plugins/providers/virtualbox/action/destroy_unused_network_interfaces.rb +16 -0
  262. data/plugins/providers/virtualbox/action/discard_state.rb +20 -0
  263. data/plugins/providers/virtualbox/action/export.rb +57 -0
  264. data/plugins/providers/virtualbox/action/forced_halt.rb +25 -0
  265. data/plugins/providers/virtualbox/action/forward_ports.rb +87 -0
  266. data/plugins/providers/virtualbox/action/import.rb +51 -0
  267. data/plugins/providers/virtualbox/action/is_paused.rb +20 -0
  268. data/plugins/providers/virtualbox/action/is_running.rb +20 -0
  269. data/plugins/providers/virtualbox/action/is_saved.rb +20 -0
  270. data/plugins/providers/virtualbox/action/match_mac_address.rb +21 -0
  271. data/plugins/providers/virtualbox/action/message_already_running.rb +16 -0
  272. data/plugins/providers/virtualbox/action/message_not_created.rb +16 -0
  273. data/plugins/providers/virtualbox/action/message_not_running.rb +16 -0
  274. data/plugins/providers/virtualbox/action/message_will_not_destroy.rb +17 -0
  275. data/plugins/providers/virtualbox/action/network.rb +410 -0
  276. data/plugins/providers/virtualbox/action/package.rb +20 -0
  277. data/plugins/providers/virtualbox/action/package_vagrantfile.rb +33 -0
  278. data/plugins/providers/virtualbox/action/prepare_forwarded_port_collision_params.rb +35 -0
  279. data/plugins/providers/virtualbox/action/prepare_nfs_settings.rb +64 -0
  280. data/plugins/providers/virtualbox/action/prune_nfs_exports.rb +20 -0
  281. data/plugins/providers/virtualbox/action/resume.rb +25 -0
  282. data/plugins/providers/virtualbox/action/sane_defaults.rb +91 -0
  283. data/plugins/providers/virtualbox/action/set_name.rb +40 -0
  284. data/plugins/providers/virtualbox/action/setup_package_files.rb +51 -0
  285. data/plugins/providers/virtualbox/action/share_folders.rb +128 -0
  286. data/plugins/providers/virtualbox/action/suspend.rb +20 -0
  287. data/plugins/providers/virtualbox/action.rb +311 -0
  288. data/plugins/providers/virtualbox/config.rb +86 -0
  289. data/plugins/providers/virtualbox/driver/base.rb +360 -0
  290. data/plugins/providers/virtualbox/driver/meta.rb +142 -0
  291. data/plugins/providers/virtualbox/driver/version_4_0.rb +485 -0
  292. data/plugins/providers/virtualbox/driver/version_4_1.rb +485 -0
  293. data/plugins/providers/virtualbox/driver/version_4_2.rb +482 -0
  294. data/plugins/providers/virtualbox/model/forwarded_port.rb +58 -0
  295. data/plugins/providers/virtualbox/plugin.rb +42 -0
  296. data/plugins/providers/virtualbox/provider.rb +92 -0
  297. data/plugins/providers/virtualbox/util/compile_forwarded_ports.rb +31 -0
  298. data/plugins/provisioners/ansible/config.rb +72 -0
  299. data/plugins/provisioners/ansible/plugin.rb +23 -0
  300. data/plugins/provisioners/ansible/provisioner.rb +45 -0
  301. data/plugins/provisioners/cfengine/cap/debian/cfengine_install.rb +19 -0
  302. data/plugins/provisioners/cfengine/cap/linux/cfengine_installed.rb +14 -0
  303. data/plugins/provisioners/cfengine/cap/linux/cfengine_needs_bootstrap.rb +34 -0
  304. data/plugins/provisioners/cfengine/cap/redhat/cfengine_install.rb +24 -0
  305. data/plugins/provisioners/cfengine/config.rb +120 -0
  306. data/plugins/provisioners/cfengine/plugin.rb +42 -0
  307. data/plugins/provisioners/cfengine/provisioner.rb +136 -0
  308. data/plugins/provisioners/chef/config/base.rb +85 -0
  309. data/plugins/provisioners/chef/config/chef_client.rb +57 -0
  310. data/plugins/provisioners/chef/config/chef_solo.rb +87 -0
  311. data/plugins/provisioners/chef/plugin.rb +33 -0
  312. data/plugins/provisioners/chef/provisioner/base.rb +93 -0
  313. data/plugins/provisioners/chef/provisioner/chef_client.rb +107 -0
  314. data/plugins/provisioners/chef/provisioner/chef_solo.rb +192 -0
  315. data/plugins/provisioners/puppet/config/puppet.rb +70 -0
  316. data/plugins/provisioners/puppet/config/puppet_server.rb +16 -0
  317. data/plugins/provisioners/puppet/plugin.rb +33 -0
  318. data/plugins/provisioners/puppet/provisioner/puppet.rb +117 -0
  319. data/plugins/provisioners/puppet/provisioner/puppet_server.rb +67 -0
  320. data/plugins/provisioners/shell/config.rb +56 -0
  321. data/plugins/provisioners/shell/plugin.rb +23 -0
  322. data/plugins/provisioners/shell/provisioner.rb +86 -0
  323. data/tasks/acceptance.rake +113 -0
  324. data/tasks/bundler.rake +3 -0
  325. data/tasks/test.rake +20 -0
  326. data/templates/commands/init/Vagrantfile.erb +111 -0
  327. data/templates/commands/ssh_config/config.erb +16 -0
  328. data/templates/config/messages.erb +14 -0
  329. data/templates/config/validation_failed.erb +7 -0
  330. data/templates/guests/arch/network_dhcp.erb +4 -0
  331. data/templates/guests/arch/network_static.erb +6 -0
  332. data/templates/guests/debian/network_dhcp.erb +11 -0
  333. data/templates/guests/debian/network_static.erb +7 -0
  334. data/templates/guests/fedora/network_dhcp.erb +6 -0
  335. data/templates/guests/fedora/network_static.erb +13 -0
  336. data/templates/guests/freebsd/network_dhcp.erb +3 -0
  337. data/templates/guests/freebsd/network_static.erb +3 -0
  338. data/templates/guests/gentoo/network_dhcp.erb +4 -0
  339. data/templates/guests/gentoo/network_static.erb +4 -0
  340. data/templates/guests/redhat/network_dhcp.erb +6 -0
  341. data/templates/guests/redhat/network_static.erb +8 -0
  342. data/templates/locales/en.yml +1126 -0
  343. data/templates/nfs/exports.erb +5 -0
  344. data/templates/nfs/exports_freebsd.erb +5 -0
  345. data/templates/nfs/exports_linux.erb +5 -0
  346. data/templates/package_Vagrantfile.erb +11 -0
  347. data/templates/provisioners/chef_client/client.erb +32 -0
  348. data/templates/provisioners/chef_solo/solo.erb +25 -0
  349. data/templates/rgloader.rb +9 -0
  350. data/test/acceptance/base.rb +48 -0
  351. data/test/acceptance/box_test.rb +99 -0
  352. data/test/acceptance/destroy_test.rb +37 -0
  353. data/test/acceptance/halt_test.rb +72 -0
  354. data/test/acceptance/init_test.rb +33 -0
  355. data/test/acceptance/networking/host_only_test.rb +37 -0
  356. data/test/acceptance/networking/port_forward_test.rb +125 -0
  357. data/test/acceptance/package_test.rb +46 -0
  358. data/test/acceptance/provisioning/basic_test.rb +61 -0
  359. data/test/acceptance/provisioning/chef_solo_test.rb +37 -0
  360. data/test/acceptance/provisioning/shell_test.rb +53 -0
  361. data/test/acceptance/resume_test.rb +17 -0
  362. data/test/acceptance/shared_folders_test.rb +84 -0
  363. data/test/acceptance/skeletons/chef_solo_basic/README.md +3 -0
  364. data/test/acceptance/skeletons/chef_solo_basic/cookbooks/basic/recipes/default.rb +5 -0
  365. data/test/acceptance/skeletons/chef_solo_json/README.md +3 -0
  366. data/test/acceptance/skeletons/chef_solo_json/cookbooks/basic/recipes/default.rb +6 -0
  367. data/test/acceptance/skeletons/provisioner_multi/README.md +3 -0
  368. data/test/acceptance/skeletons/provisioner_multi/cookbooks/basic/recipes/default.rb +5 -0
  369. data/test/acceptance/ssh_test.rb +46 -0
  370. data/test/acceptance/support/config.rb +42 -0
  371. data/test/acceptance/support/isolated_environment.rb +118 -0
  372. data/test/acceptance/support/matchers/have_color.rb +9 -0
  373. data/test/acceptance/support/matchers/match_output.rb +14 -0
  374. data/test/acceptance/support/matchers/succeed.rb +14 -0
  375. data/test/acceptance/support/network_tests.rb +29 -0
  376. data/test/acceptance/support/output.rb +95 -0
  377. data/test/acceptance/support/shared/base_context.rb +72 -0
  378. data/test/acceptance/support/shared/command_examples.rb +33 -0
  379. data/test/acceptance/support/virtualbox.rb +36 -0
  380. data/test/acceptance/suspend_test.rb +56 -0
  381. data/test/acceptance/up_basic_test.rb +33 -0
  382. data/test/acceptance/up_with_box_url.rb +40 -0
  383. data/test/acceptance/vagrant_test.rb +47 -0
  384. data/test/acceptance/version_test.rb +15 -0
  385. data/test/config/acceptance_boxes.yml +7 -0
  386. data/test/support/isolated_environment.rb +46 -0
  387. data/test/support/tempdir.rb +43 -0
  388. data/test/unit/base.rb +27 -0
  389. data/test/unit/support/dummy_provider.rb +16 -0
  390. data/test/unit/support/isolated_environment.rb +179 -0
  391. data/test/unit/support/shared/base_context.rb +104 -0
  392. data/test/unit/vagrant/action/builder_test.rb +242 -0
  393. data/test/unit/vagrant/action/builtin/call_test.rb +145 -0
  394. data/test/unit/vagrant/action/builtin/confirm_test.rb +36 -0
  395. data/test/unit/vagrant/action/builtin/env_set_test.rb +20 -0
  396. data/test/unit/vagrant/action/builtin/graceful_halt_test.rb +61 -0
  397. data/test/unit/vagrant/action/builtin/lock_test.rb +98 -0
  398. data/test/unit/vagrant/action/builtin/ssh_exec_test.rb +57 -0
  399. data/test/unit/vagrant/action/hook_test.rb +120 -0
  400. data/test/unit/vagrant/action/runner_test.rb +71 -0
  401. data/test/unit/vagrant/action/warden_test.rb +92 -0
  402. data/test/unit/vagrant/batch_action_test.rb +36 -0
  403. data/test/unit/vagrant/box_collection_test.rb +237 -0
  404. data/test/unit/vagrant/box_test.rb +122 -0
  405. data/test/unit/vagrant/cli_test.rb +27 -0
  406. data/test/unit/vagrant/config/loader_test.rb +184 -0
  407. data/test/unit/vagrant/config/v1/dummy_config_test.rb +24 -0
  408. data/test/unit/vagrant/config/v1/loader_test.rb +145 -0
  409. data/test/unit/vagrant/config/v1/root_test.rb +40 -0
  410. data/test/unit/vagrant/config/v2/dummy_config_test.rb +24 -0
  411. data/test/unit/vagrant/config/v2/loader_test.rb +151 -0
  412. data/test/unit/vagrant/config/v2/root_test.rb +97 -0
  413. data/test/unit/vagrant/config/v2/util_test.rb +21 -0
  414. data/test/unit/vagrant/config_test.rb +66 -0
  415. data/test/unit/vagrant/environment_test.rb +721 -0
  416. data/test/unit/vagrant/guest_test.rb +166 -0
  417. data/test/unit/vagrant/hosts_test.rb +37 -0
  418. data/test/unit/vagrant/machine_state_test.rb +26 -0
  419. data/test/unit/vagrant/machine_test.rb +384 -0
  420. data/test/unit/vagrant/plugin/v1/command_test.rb +143 -0
  421. data/test/unit/vagrant/plugin/v1/communicator_test.rb +9 -0
  422. data/test/unit/vagrant/plugin/v1/config_test.rb +50 -0
  423. data/test/unit/vagrant/plugin/v1/host_test.rb +5 -0
  424. data/test/unit/vagrant/plugin/v1/manager_test.rb +114 -0
  425. data/test/unit/vagrant/plugin/v1/plugin_test.rb +267 -0
  426. data/test/unit/vagrant/plugin/v1/provider_test.rb +18 -0
  427. data/test/unit/vagrant/plugin/v2/command_test.rb +238 -0
  428. data/test/unit/vagrant/plugin/v2/communicator_test.rb +9 -0
  429. data/test/unit/vagrant/plugin/v2/components_test.rb +17 -0
  430. data/test/unit/vagrant/plugin/v2/config_test.rb +60 -0
  431. data/test/unit/vagrant/plugin/v2/host_test.rb +5 -0
  432. data/test/unit/vagrant/plugin/v2/manager_test.rb +174 -0
  433. data/test/unit/vagrant/plugin/v2/plugin_test.rb +305 -0
  434. data/test/unit/vagrant/plugin/v2/provider_test.rb +18 -0
  435. data/test/unit/vagrant/registry_test.rb +128 -0
  436. data/test/unit/vagrant/util/ansi_escape_code_remover_test.rb +16 -0
  437. data/test/unit/vagrant/util/downloader_test.rb +57 -0
  438. data/test/unit/vagrant/util/file_checksum_test.rb +23 -0
  439. data/test/unit/vagrant/util/hash_with_indifferent_access_test.rb +38 -0
  440. data/test/unit/vagrant/util/is_port_open_test.rb +53 -0
  441. data/test/unit/vagrant/util/line_endings_helper_test.rb +16 -0
  442. data/test/unit/vagrant/util/network_ip_test.rb +17 -0
  443. data/test/unit/vagrant/util/retryable_test.rb +106 -0
  444. data/test/unit/vagrant/util/safe_chdir_test.rb +43 -0
  445. data/test/unit/vagrant/util/scoped_hash_override_test.rb +48 -0
  446. data/test/unit/vagrant/util/ssh_test.rb +30 -0
  447. data/test/unit/vagrant/util/string_block_editor_test.rb +106 -0
  448. data/test/unit/vagrant/util/which_test.rb +43 -0
  449. data/test/unit/vagrant_test.rb +56 -0
  450. data/tnargav.gemspec +69 -0
  451. data/vagrant.gemspec +69 -0
  452. metadata +730 -0
@@ -0,0 +1,143 @@
1
+ require File.expand_path("../../../../base", __FILE__)
2
+ require 'optparse'
3
+
4
+ describe Vagrant::Plugin::V1::Command do
5
+ describe "parsing options" do
6
+ let(:klass) do
7
+ Class.new(described_class) do
8
+ # Make the method public since it is normally protected
9
+ public :parse_options
10
+ end
11
+ end
12
+
13
+ it "returns the remaining arguments" do
14
+ options = {}
15
+ opts = OptionParser.new do |opts|
16
+ opts.on("-f") do |f|
17
+ options[:f] = f
18
+ end
19
+ end
20
+
21
+ result = klass.new(["-f", "foo"], nil).parse_options(opts)
22
+
23
+ # Check the results
24
+ options[:f].should be
25
+ result.should == ["foo"]
26
+ end
27
+
28
+ it "creates an option parser if none is given" do
29
+ result = klass.new(["foo"], nil).parse_options(nil)
30
+ result.should == ["foo"]
31
+ end
32
+
33
+ ["-h", "--help"].each do |help_string|
34
+ it "returns nil and prints the help if '#{help_string}' is given" do
35
+ instance = klass.new([help_string], nil)
36
+ instance.should_receive(:safe_puts)
37
+ instance.parse_options(OptionParser.new).should be_nil
38
+ end
39
+ end
40
+
41
+ it "raises an error if invalid options are given" do
42
+ instance = klass.new(["-f"], nil)
43
+ expect { instance.parse_options(OptionParser.new) }.
44
+ to raise_error(Vagrant::Errors::CLIInvalidOptions)
45
+ end
46
+ end
47
+
48
+ describe "target VMs" do
49
+ let(:klass) do
50
+ Class.new(described_class) do
51
+ # Make the method public since it is normally protected
52
+ public :with_target_vms
53
+ end
54
+ end
55
+
56
+ let(:environment) do
57
+ env = double("environment")
58
+ env.stub(:root_path => "foo")
59
+ env
60
+ end
61
+
62
+ let(:instance) { klass.new([], environment) }
63
+
64
+ it "should raise an exception if a root_path is not available" do
65
+ environment.stub(:root_path => nil)
66
+
67
+ expect { instance.with_target_vms }.
68
+ to raise_error(Vagrant::Errors::NoEnvironmentError)
69
+ end
70
+
71
+ it "should yield every VM in order is no name is given" do
72
+ foo_vm = double("foo")
73
+ foo_vm.stub(:name).and_return("foo")
74
+
75
+ bar_vm = double("bar")
76
+ bar_vm.stub(:name).and_return("bar")
77
+
78
+ environment.stub(:multivm? => true,
79
+ :vms => { "foo" => foo_vm, "bar" => bar_vm },
80
+ :vms_ordered => [foo_vm, bar_vm])
81
+
82
+ vms = []
83
+ instance.with_target_vms do |vm|
84
+ vms << vm
85
+ end
86
+
87
+ vms.should == [foo_vm, bar_vm]
88
+ end
89
+
90
+ it "raises an exception if the named VM doesn't exist" do
91
+ environment.stub(:multivm? => true, :vms => {})
92
+
93
+ expect { instance.with_target_vms("foo") }.
94
+ to raise_error(Vagrant::Errors::VMNotFoundError)
95
+ end
96
+
97
+ it "yields the given VM if a name is given" do
98
+ foo_vm = double("foo")
99
+ foo_vm.stub(:name).and_return(:foo)
100
+
101
+ environment.stub(:multivm? => true,
102
+ :vms => { :foo => foo_vm, :bar => nil })
103
+
104
+ vms = []
105
+ instance.with_target_vms("foo") { |vm| vms << vm }
106
+ vms.should == [foo_vm]
107
+ end
108
+ end
109
+
110
+ describe "splitting the main and subcommand args" do
111
+ let(:instance) do
112
+ Class.new(described_class) do
113
+ # Make the method public since it is normally protected
114
+ public :split_main_and_subcommand
115
+ end.new(nil, nil)
116
+ end
117
+
118
+ it "should work when given all 3 parts" do
119
+ result = instance.split_main_and_subcommand(["-v", "status", "-h", "-v"])
120
+ result.should == [["-v"], "status", ["-h", "-v"]]
121
+ end
122
+
123
+ it "should work when given only a subcommand and args" do
124
+ result = instance.split_main_and_subcommand(["status", "-h"])
125
+ result.should == [[], "status", ["-h"]]
126
+ end
127
+
128
+ it "should work when given only main flags" do
129
+ result = instance.split_main_and_subcommand(["-v", "-h"])
130
+ result.should == [["-v", "-h"], nil, []]
131
+ end
132
+
133
+ it "should work when given only a subcommand" do
134
+ result = instance.split_main_and_subcommand(["status"])
135
+ result.should == [[], "status", []]
136
+ end
137
+
138
+ it "works when there are other non-flag args after the subcommand" do
139
+ result = instance.split_main_and_subcommand(["-v", "box", "add", "-h"])
140
+ result.should == [["-v"], "box", ["add", "-h"]]
141
+ end
142
+ end
143
+ end
@@ -0,0 +1,9 @@
1
+ require File.expand_path("../../../../base", __FILE__)
2
+
3
+ describe Vagrant::Plugin::V1::Communicator do
4
+ let(:machine) { Object.new }
5
+
6
+ it "should not match by default" do
7
+ described_class.match?(machine).should_not be
8
+ end
9
+ end
@@ -0,0 +1,50 @@
1
+ require File.expand_path("../../../../base", __FILE__)
2
+
3
+ describe Vagrant::Plugin::V1::Config do
4
+ include_context "unit"
5
+
6
+ let(:foo_class) do
7
+ Class.new(described_class) do
8
+ attr_accessor :one
9
+ attr_accessor :two
10
+ end
11
+ end
12
+
13
+ it "has an UNSET_VALUE constant" do
14
+ value = described_class.const_get("UNSET_VALUE")
15
+ value.should be_kind_of Object
16
+ value.should eql(described_class.const_get("UNSET_VALUE"))
17
+ end
18
+
19
+ describe "merging" do
20
+ it "should merge by default by simply copying each instance variable" do
21
+ one = foo_class.new
22
+ one.one = 2
23
+ one.two = 1
24
+
25
+ two = foo_class.new
26
+ two.two = 5
27
+
28
+ result = one.merge(two)
29
+ result.one.should == 2
30
+ result.two.should == 5
31
+ end
32
+
33
+ it "doesn't merge values that start with a double underscore" do
34
+ one = foo_class.new
35
+ one.one = 1
36
+ one.two = 1
37
+ one.instance_variable_set(:@__bar, "one")
38
+
39
+ two = foo_class.new
40
+ two.two = 2
41
+ two.instance_variable_set(:@__bar, "two")
42
+
43
+ # Merge and verify
44
+ result = one.merge(two)
45
+ result.one.should == 1
46
+ result.two.should == 2
47
+ result.instance_variable_get(:@__bar).should be_nil
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,5 @@
1
+ require File.expand_path("../../../../base", __FILE__)
2
+
3
+ describe Vagrant::Plugin::V1::Host do
4
+ # No tests.
5
+ end
@@ -0,0 +1,114 @@
1
+ require File.expand_path("../../../../base", __FILE__)
2
+
3
+ describe Vagrant::Plugin::V1::Manager do
4
+ include_context "unit"
5
+
6
+ let(:instance) { described_class.new }
7
+
8
+ def plugin
9
+ p = Class.new(Vagrant.plugin("1"))
10
+ yield p
11
+ p
12
+ end
13
+
14
+ it "should enumerate registered communicator classes" do
15
+ pA = plugin do |p|
16
+ p.communicator("foo") { "bar" }
17
+ end
18
+
19
+ pB = plugin do |p|
20
+ p.communicator("bar") { "baz" }
21
+ end
22
+
23
+ instance.register(pA)
24
+ instance.register(pB)
25
+
26
+ instance.communicators.length.should == 2
27
+ instance.communicators[:foo].should == "bar"
28
+ instance.communicators[:bar].should == "baz"
29
+ end
30
+
31
+ it "should enumerate registered configuration classes" do
32
+ pA = plugin do |p|
33
+ p.config("foo") { "bar" }
34
+ end
35
+
36
+ pB = plugin do |p|
37
+ p.config("bar") { "baz" }
38
+ end
39
+
40
+ instance.register(pA)
41
+ instance.register(pB)
42
+
43
+ instance.config.length.should == 2
44
+ instance.config[:foo].should == "bar"
45
+ instance.config[:bar].should == "baz"
46
+ end
47
+
48
+ it "should enumerate registered upgrade safe config classes" do
49
+ pA = plugin do |p|
50
+ p.config("foo", true) { "bar" }
51
+ end
52
+
53
+ pB = plugin do |p|
54
+ p.config("bar") { "baz" }
55
+ end
56
+
57
+ instance.register(pA)
58
+ instance.register(pB)
59
+
60
+ instance.config_upgrade_safe.length.should == 1
61
+ instance.config_upgrade_safe[:foo].should == "bar"
62
+ end
63
+
64
+ it "should enumerate registered guest classes" do
65
+ pA = plugin do |p|
66
+ p.guest("foo") { "bar" }
67
+ end
68
+
69
+ pB = plugin do |p|
70
+ p.guest("bar") { "baz" }
71
+ end
72
+
73
+ instance.register(pA)
74
+ instance.register(pB)
75
+
76
+ instance.guests.length.should == 2
77
+ instance.guests[:foo].should == "bar"
78
+ instance.guests[:bar].should == "baz"
79
+ end
80
+
81
+ it "should enumerate registered host classes" do
82
+ pA = plugin do |p|
83
+ p.host("foo") { "bar" }
84
+ end
85
+
86
+ pB = plugin do |p|
87
+ p.host("bar") { "baz" }
88
+ end
89
+
90
+ instance.register(pA)
91
+ instance.register(pB)
92
+
93
+ instance.hosts.length.should == 2
94
+ instance.hosts[:foo].should == "bar"
95
+ instance.hosts[:bar].should == "baz"
96
+ end
97
+
98
+ it "should enumerate registered provider classes" do
99
+ pA = plugin do |p|
100
+ p.provider("foo") { "bar" }
101
+ end
102
+
103
+ pB = plugin do |p|
104
+ p.provider("bar") { "baz" }
105
+ end
106
+
107
+ instance.register(pA)
108
+ instance.register(pB)
109
+
110
+ instance.providers.length.should == 2
111
+ instance.providers[:foo].should == "bar"
112
+ instance.providers[:bar].should == "baz"
113
+ end
114
+ end
@@ -0,0 +1,267 @@
1
+ require File.expand_path("../../../../base", __FILE__)
2
+
3
+ describe Vagrant::Plugin::V1::Plugin do
4
+ after(:each) do
5
+ # We want to make sure that the registered plugins remains empty
6
+ # after each test.
7
+ described_class.manager.reset!
8
+ end
9
+
10
+ it "should be able to set and get the name" do
11
+ plugin = Class.new(described_class) do
12
+ name "foo"
13
+ end
14
+
15
+ plugin.name.should == "foo"
16
+ end
17
+
18
+ it "should be able to set and get the description" do
19
+ plugin = Class.new(described_class) do
20
+ description "bar"
21
+ end
22
+
23
+ plugin.description.should == "bar"
24
+ end
25
+
26
+ describe "action hooks" do
27
+ it "should register action hooks" do
28
+ plugin = Class.new(described_class) do
29
+ action_hook("foo") { "bar" }
30
+ end
31
+
32
+ hooks = plugin.action_hook("foo")
33
+ hooks.length.should == 1
34
+ hooks[0].call.should == "bar"
35
+ end
36
+ end
37
+
38
+ describe "commands" do
39
+ it "should register command classes" do
40
+ plugin = Class.new(described_class) do
41
+ command("foo") { "bar" }
42
+ end
43
+
44
+ plugin.command[:foo].should == "bar"
45
+ end
46
+
47
+ ["spaces bad", "sym^bols"].each do |bad|
48
+ it "should not allow bad command name: #{bad}" do
49
+ plugin = Class.new(described_class)
50
+
51
+ expect { plugin.command(bad) {} }.
52
+ to raise_error(Vagrant::Plugin::V1::InvalidCommandName)
53
+ end
54
+ end
55
+
56
+ it "should lazily register command classes" do
57
+ # Below would raise an error if the value of the command class was
58
+ # evaluated immediately. By asserting that this does not raise an
59
+ # error, we verify that the value is actually lazily loaded
60
+ plugin = nil
61
+ expect {
62
+ plugin = Class.new(described_class) do
63
+ command("foo") { raise StandardError, "FAIL!" }
64
+ end
65
+ }.to_not raise_error
66
+
67
+ # Now verify when we actually get the command key that
68
+ # a proper error is raised.
69
+ expect {
70
+ plugin.command[:foo]
71
+ }.to raise_error(StandardError)
72
+ end
73
+ end
74
+
75
+ describe "communicators" do
76
+ it "should register communicator classes" do
77
+ plugin = Class.new(described_class) do
78
+ communicator("foo") { "bar" }
79
+ end
80
+
81
+ plugin.communicator[:foo].should == "bar"
82
+ end
83
+
84
+ it "should lazily register communicator classes" do
85
+ # Below would raise an error if the value of the class was
86
+ # evaluated immediately. By asserting that this does not raise an
87
+ # error, we verify that the value is actually lazily loaded
88
+ plugin = nil
89
+ expect {
90
+ plugin = Class.new(described_class) do
91
+ communicator("foo") { raise StandardError, "FAIL!" }
92
+ end
93
+ }.to_not raise_error
94
+
95
+ # Now verify when we actually get the configuration key that
96
+ # a proper error is raised.
97
+ expect {
98
+ plugin.communicator[:foo]
99
+ }.to raise_error(StandardError)
100
+ end
101
+ end
102
+
103
+ describe "configuration" do
104
+ it "should register configuration classes" do
105
+ plugin = Class.new(described_class) do
106
+ config("foo") { "bar" }
107
+ end
108
+
109
+ plugin.config[:foo].should == "bar"
110
+ end
111
+
112
+ it "should lazily register configuration classes" do
113
+ # Below would raise an error if the value of the config class was
114
+ # evaluated immediately. By asserting that this does not raise an
115
+ # error, we verify that the value is actually lazily loaded
116
+ plugin = nil
117
+ expect {
118
+ plugin = Class.new(described_class) do
119
+ config("foo") { raise StandardError, "FAIL!" }
120
+ end
121
+ }.to_not raise_error
122
+
123
+ # Now verify when we actually get the configuration key that
124
+ # a proper error is raised.
125
+ expect {
126
+ plugin.config[:foo]
127
+ }.to raise_error(StandardError)
128
+ end
129
+ end
130
+
131
+ describe "guests" do
132
+ it "should register guest classes" do
133
+ plugin = Class.new(described_class) do
134
+ guest("foo") { "bar" }
135
+ end
136
+
137
+ plugin.guest[:foo].should == "bar"
138
+ end
139
+
140
+ it "should lazily register guest classes" do
141
+ # Below would raise an error if the value of the guest class was
142
+ # evaluated immediately. By asserting that this does not raise an
143
+ # error, we verify that the value is actually lazily loaded
144
+ plugin = nil
145
+ expect {
146
+ plugin = Class.new(described_class) do
147
+ guest("foo") { raise StandardError, "FAIL!" }
148
+ end
149
+ }.to_not raise_error
150
+
151
+ # Now verify when we actually get the guest key that
152
+ # a proper error is raised.
153
+ expect {
154
+ plugin.guest[:foo]
155
+ }.to raise_error(StandardError)
156
+ end
157
+ end
158
+
159
+ describe "hosts" do
160
+ it "should register host classes" do
161
+ plugin = Class.new(described_class) do
162
+ host("foo") { "bar" }
163
+ end
164
+
165
+ plugin.host[:foo].should == "bar"
166
+ end
167
+
168
+ it "should lazily register host classes" do
169
+ # Below would raise an error if the value of the host class was
170
+ # evaluated immediately. By asserting that this does not raise an
171
+ # error, we verify that the value is actually lazily loaded
172
+ plugin = nil
173
+ expect {
174
+ plugin = Class.new(described_class) do
175
+ host("foo") { raise StandardError, "FAIL!" }
176
+ end
177
+ }.to_not raise_error
178
+
179
+ # Now verify when we actually get the host key that
180
+ # a proper error is raised.
181
+ expect {
182
+ plugin.host[:foo]
183
+ }.to raise_error(StandardError)
184
+ end
185
+ end
186
+
187
+ describe "providers" do
188
+ it "should register provider classes" do
189
+ plugin = Class.new(described_class) do
190
+ provider("foo") { "bar" }
191
+ end
192
+
193
+ plugin.provider[:foo].should == "bar"
194
+ end
195
+
196
+ it "should lazily register provider classes" do
197
+ # Below would raise an error if the value of the config class was
198
+ # evaluated immediately. By asserting that this does not raise an
199
+ # error, we verify that the value is actually lazily loaded
200
+ plugin = nil
201
+ expect {
202
+ plugin = Class.new(described_class) do
203
+ provider("foo") { raise StandardError, "FAIL!" }
204
+ end
205
+ }.to_not raise_error
206
+
207
+ # Now verify when we actually get the configuration key that
208
+ # a proper error is raised.
209
+ expect {
210
+ plugin.provider[:foo]
211
+ }.to raise_error(StandardError)
212
+ end
213
+ end
214
+
215
+ describe "provisioners" do
216
+ it "should register provisioner classes" do
217
+ plugin = Class.new(described_class) do
218
+ provisioner("foo") { "bar" }
219
+ end
220
+
221
+ plugin.provisioner[:foo].should == "bar"
222
+ end
223
+
224
+ it "should lazily register provisioner classes" do
225
+ # Below would raise an error if the value of the config class was
226
+ # evaluated immediately. By asserting that this does not raise an
227
+ # error, we verify that the value is actually lazily loaded
228
+ plugin = nil
229
+ expect {
230
+ plugin = Class.new(described_class) do
231
+ provisioner("foo") { raise StandardError, "FAIL!" }
232
+ end
233
+ }.to_not raise_error
234
+
235
+ # Now verify when we actually get the configuration key that
236
+ # a proper error is raised.
237
+ expect {
238
+ plugin.provisioner[:foo]
239
+ }.to raise_error(StandardError)
240
+ end
241
+ end
242
+
243
+ describe "plugin registration" do
244
+ let(:manager) { described_class.manager }
245
+
246
+ it "should have no registered plugins" do
247
+ manager.registered.should be_empty
248
+ end
249
+
250
+ it "should register a plugin when a name is set" do
251
+ plugin = Class.new(described_class) do
252
+ name "foo"
253
+ end
254
+
255
+ manager.registered.should == [plugin]
256
+ end
257
+
258
+ it "should register a plugin only once" do
259
+ plugin = Class.new(described_class) do
260
+ name "foo"
261
+ name "bar"
262
+ end
263
+
264
+ manager.registered.should == [plugin]
265
+ end
266
+ end
267
+ end
@@ -0,0 +1,18 @@
1
+ require File.expand_path("../../../../base", __FILE__)
2
+
3
+ describe Vagrant::Plugin::V1::Provider do
4
+ let(:machine) { Object.new }
5
+ let(:instance) { described_class.new(machine) }
6
+
7
+ it "should return nil by default for actions" do
8
+ instance.action(:whatever).should be_nil
9
+ end
10
+
11
+ it "should return nil by default for ssh info" do
12
+ instance.ssh_info.should be_nil
13
+ end
14
+
15
+ it "should return nil by default for state" do
16
+ instance.state.should be_nil
17
+ end
18
+ end