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,184 @@
1
+ require File.expand_path("../../../base", __FILE__)
2
+
3
+ require "vagrant/registry"
4
+
5
+ describe Vagrant::Config::Loader do
6
+ include_context "unit"
7
+
8
+ # This is the current version of configuration for the tests.
9
+ let(:current_version) { version_order.last }
10
+
11
+ # This is just a dummy implementation of a configuraiton loader which
12
+ # simply acts on hashes.
13
+ let(:test_loader) do
14
+ Class.new(Vagrant::Config::VersionBase) do
15
+ def self.init
16
+ {}
17
+ end
18
+
19
+ def self.load(proc)
20
+ init.tap do |obj|
21
+ proc.call(obj)
22
+ end
23
+ end
24
+
25
+ def self.merge(old, new)
26
+ old.merge(new)
27
+ end
28
+ end
29
+ end
30
+
31
+ let(:versions) do
32
+ Vagrant::Registry.new.tap do |r|
33
+ r.register("1") { test_loader }
34
+ end
35
+ end
36
+
37
+ let(:version_order) { ["1"] }
38
+
39
+ let(:instance) { described_class.new(versions, version_order) }
40
+
41
+ describe "basic loading" do
42
+ it "should ignore non-existent load order keys" do
43
+ instance.load([:foo])
44
+ end
45
+
46
+ it "should load and return the configuration" do
47
+ proc = Proc.new do |config|
48
+ config[:foo] = "yep"
49
+ end
50
+
51
+ instance.set(:proc, [[current_version, proc]])
52
+ config, warnings, errors = instance.load([:proc])
53
+
54
+ config[:foo].should == "yep"
55
+ warnings.should == []
56
+ errors.should == []
57
+ end
58
+ end
59
+
60
+ describe "finalization" do
61
+ it "should finalize the configuration" do
62
+ # Create the finalize method on our loader
63
+ def test_loader.finalize(obj)
64
+ obj[:finalized] = true
65
+ obj
66
+ end
67
+
68
+ # Basic configuration proc
69
+ proc = lambda do |config|
70
+ config[:foo] = "yep"
71
+ end
72
+
73
+ # Run the actual configuration and assert that we get the proper result
74
+ instance.set(:proc, [[current_version, proc]])
75
+ config, _ = instance.load([:proc])
76
+ config[:foo].should == "yep"
77
+ config[:finalized].should == true
78
+ end
79
+ end
80
+
81
+ describe "upgrading" do
82
+ it "should do an upgrade to the latest version" do
83
+ test_loader_v2 = Class.new(test_loader) do
84
+ def self.upgrade(old)
85
+ new = old.dup
86
+ new[:v2] = true
87
+
88
+ [new, [], []]
89
+ end
90
+ end
91
+
92
+ versions.register("2") { test_loader_v2 }
93
+ version_order << "2"
94
+
95
+ # Load a version 1 proc, and verify it is upgraded to version 2
96
+ proc = lambda { |config| config[:foo] = "yep" }
97
+ instance.set(:proc, [["1", proc]])
98
+ config, _ = instance.load([:proc])
99
+ config[:foo].should == "yep"
100
+ config[:v2].should == true
101
+ end
102
+
103
+ it "should keep track of warnings and errors" do
104
+ test_loader_v2 = Class.new(test_loader) do
105
+ def self.upgrade(old)
106
+ new = old.dup
107
+ new[:v2] = true
108
+
109
+ [new, ["foo!"], ["bar!"]]
110
+ end
111
+ end
112
+
113
+ versions.register("2") { test_loader_v2 }
114
+ version_order << "2"
115
+
116
+ # Load a version 1 proc, and verify it is upgraded to version 2
117
+ proc = lambda { |config| config[:foo] = "yep" }
118
+ instance.set(:proc, [["1", proc]])
119
+ config, warnings, errors = instance.load([:proc])
120
+ config[:foo].should == "yep"
121
+ config[:v2].should == true
122
+ warnings.should == ["foo!"]
123
+ errors.should == ["bar!"]
124
+ end
125
+ end
126
+
127
+ describe "loading edge cases" do
128
+ it "should only run the same proc once" do
129
+ count = 0
130
+ proc = Proc.new do |config|
131
+ config[:foo] = "yep"
132
+ count += 1
133
+ end
134
+
135
+ instance.set(:proc, [[current_version, proc]])
136
+
137
+ 5.times do
138
+ result, _ = instance.load([:proc])
139
+
140
+ # Verify the config result
141
+ result[:foo].should == "yep"
142
+
143
+ # Verify the count is only one
144
+ count.should == 1
145
+ end
146
+ end
147
+
148
+ it "should only load configuration files once" do
149
+ $_config_data = 0
150
+
151
+ # We test both setting a file multiple times as well as multiple
152
+ # loads, since both should not cache the data.
153
+ file = temporary_file("$_config_data += 1")
154
+ 5.times { instance.set(:file, file) }
155
+ 5.times { instance.load([:file]) }
156
+
157
+ $_config_data.should == 1
158
+ end
159
+
160
+ it "should not clear the cache if setting to the same value multiple times" do
161
+ $_config_data = 0
162
+
163
+ file = temporary_file("$_config_data += 1")
164
+
165
+ instance.set(:proc, file)
166
+ 5.times { instance.load([:proc]) }
167
+
168
+ instance.set(:proc, file)
169
+ 5.times { instance.load([:proc]) }
170
+
171
+ $_config_data.should == 1
172
+ end
173
+
174
+ it "should raise proper error if there is a syntax error in a Vagrantfile" do
175
+ expect { instance.set(:file, temporary_file("Vagrant:^Config")) }.
176
+ to raise_exception(Vagrant::Errors::VagrantfileSyntaxError)
177
+ end
178
+
179
+ it "should raise a proper error if there is a problem with the Vagrantfile" do
180
+ expect { instance.set(:file, temporary_file("foo")) }.
181
+ to raise_exception(Vagrant::Errors::VagrantfileLoadError)
182
+ end
183
+ end
184
+ end
@@ -0,0 +1,24 @@
1
+ require File.expand_path("../../../../base", __FILE__)
2
+
3
+ describe Vagrant::Config::V1::DummyConfig do
4
+ it "should allow attribute setting" do
5
+ expect { subject.foo = :bar }.
6
+ to_not raise_error
7
+ end
8
+
9
+ it "should allow method calls that return more DummyConfigs" do
10
+ subject.foo.should be_kind_of(described_class)
11
+ end
12
+
13
+ it "should allow hash access" do
14
+ expect { subject[:foo] }.
15
+ to_not raise_error
16
+
17
+ subject[:foo].should be_kind_of(described_class)
18
+ end
19
+
20
+ it "should allow setting hash values" do
21
+ expect { subject[:foo] = :bar }.
22
+ to_not raise_error
23
+ end
24
+ end
@@ -0,0 +1,145 @@
1
+ require "ostruct"
2
+
3
+ require File.expand_path("../../../../base", __FILE__)
4
+
5
+ describe Vagrant::Config::V1::Loader do
6
+ include_context "unit"
7
+
8
+ before(:each) do
9
+ # Force the V1 loader to believe that we are in V1
10
+ stub_const("Vagrant::Config::CURRENT_VERSION", "1")
11
+ end
12
+
13
+ describe "empty" do
14
+ it "returns an empty configuration object" do
15
+ result = described_class.init
16
+ result.should be_kind_of(Vagrant::Config::V1::Root)
17
+ end
18
+
19
+ it "returns an object with all configuration keys loaded if V1" do
20
+ # Make sure we're version 1
21
+ stub_const("Vagrant::Config::CURRENT_VERSION", "1")
22
+
23
+ # Register some config classes.
24
+ register_plugin("1") do |p|
25
+ p.config("foo") { OpenStruct }
26
+ p.config("bar", true) { OpenStruct }
27
+ end
28
+
29
+ # Test that we have all keys
30
+ result = described_class.init
31
+ result.foo.should be_kind_of(OpenStruct)
32
+ result.bar.should be_kind_of(OpenStruct)
33
+ end
34
+
35
+ it "returns only upgradable config objects if not V1" do
36
+ # Make sure we're NOT version 1
37
+ stub_const("Vagrant::Config::CURRENT_VERSION", "2")
38
+
39
+ # Register some config classes.
40
+ register_plugin("1") do |p|
41
+ p.config("foo") { OpenStruct }
42
+ p.config("bar", true) { OpenStruct }
43
+ end
44
+
45
+ # Test that we have all keys
46
+ result = described_class.init
47
+ result.bar.should be_kind_of(OpenStruct)
48
+ end
49
+ end
50
+
51
+ describe "finalizing" do
52
+ it "should call `#finalize` on the configuration object" do
53
+ # Register a plugin for our test
54
+ register_plugin("1") do |plugin|
55
+ plugin.config "foo" do
56
+ Class.new do
57
+ attr_accessor :bar
58
+
59
+ def finalize!
60
+ @bar = "finalized"
61
+ end
62
+ end
63
+ end
64
+ end
65
+
66
+ # Create the proc we're testing
67
+ config_proc = Proc.new do |config|
68
+ config.foo.bar = "value"
69
+ end
70
+
71
+ # Test that it works properly
72
+ config = described_class.load(config_proc)
73
+ config.foo.bar.should == "value"
74
+
75
+ # Finalize it
76
+ described_class.finalize(config)
77
+ config.foo.bar.should == "finalized"
78
+ end
79
+ end
80
+
81
+ describe "loading" do
82
+ it "should configure with all plugin config keys loaded" do
83
+ # Register a plugin for our test
84
+ register_plugin("1") do |plugin|
85
+ plugin.config("foo") { OpenStruct }
86
+ end
87
+
88
+ # Create the proc we're testing
89
+ config_proc = Proc.new do |config|
90
+ config.foo.bar = "value"
91
+ end
92
+
93
+ # Test that it works properly
94
+ config = described_class.load(config_proc)
95
+ config.foo.bar.should == "value"
96
+ end
97
+ end
98
+
99
+ describe "merging" do
100
+ it "should merge available configuration keys" do
101
+ old = Vagrant::Config::V1::Root.new({ :foo => Object })
102
+ new = Vagrant::Config::V1::Root.new({ :bar => Object })
103
+ result = described_class.merge(old, new)
104
+ result.foo.should be_kind_of(Object)
105
+ result.bar.should be_kind_of(Object)
106
+ end
107
+
108
+ it "should merge instantiated objects" do
109
+ config_class = Class.new do
110
+ attr_accessor :value
111
+ end
112
+
113
+ old = Vagrant::Config::V1::Root.new({ :foo => config_class })
114
+ old.foo.value = "old"
115
+
116
+ new = Vagrant::Config::V1::Root.new({ :bar => config_class })
117
+ new.bar.value = "new"
118
+
119
+ result = described_class.merge(old, new)
120
+ result.foo.value.should == "old"
121
+ result.bar.value.should == "new"
122
+ end
123
+
124
+ it "should merge conflicting classes by calling `merge`" do
125
+ config_class = Class.new do
126
+ attr_accessor :value
127
+
128
+ def merge(new)
129
+ result = self.class.new
130
+ result.value = @value + new.value
131
+ result
132
+ end
133
+ end
134
+
135
+ old = Vagrant::Config::V1::Root.new({ :foo => config_class })
136
+ old.foo.value = 10
137
+
138
+ new = Vagrant::Config::V1::Root.new({ :foo => config_class })
139
+ new.foo.value = 15
140
+
141
+ result = described_class.merge(old, new)
142
+ result.foo.value.should == 25
143
+ end
144
+ end
145
+ end
@@ -0,0 +1,40 @@
1
+ require File.expand_path("../../../../base", __FILE__)
2
+
3
+ describe Vagrant::Config::V1::Root do
4
+ include_context "unit"
5
+
6
+ it "should provide access to config objects" do
7
+ foo_class = Class.new
8
+ map = { :foo => foo_class }
9
+
10
+ instance = described_class.new(map)
11
+ foo = instance.foo
12
+ foo.should be_kind_of(foo_class)
13
+ instance.foo.should eql(foo)
14
+ end
15
+
16
+ it "can be created with initial state" do
17
+ instance = described_class.new({}, { :foo => "bar" })
18
+ instance.foo.should == "bar"
19
+ end
20
+
21
+ it "should return internal state" do
22
+ map = { "foo" => Object, "bar" => Object }
23
+ instance = described_class.new(map)
24
+ instance.__internal_state.should == {
25
+ "config_map" => map,
26
+ "keys" => {},
27
+ "missing_key_calls" => Set.new
28
+ }
29
+ end
30
+
31
+ it "should record missing key calls" do
32
+ instance = described_class.new({})
33
+ instance.foo.bar = false
34
+
35
+ keys = instance.__internal_state["missing_key_calls"]
36
+ keys.should be_kind_of(Set)
37
+ keys.length.should == 1
38
+ keys.include?("foo").should be
39
+ end
40
+ end
@@ -0,0 +1,24 @@
1
+ require File.expand_path("../../../../base", __FILE__)
2
+
3
+ describe Vagrant::Config::V2::DummyConfig do
4
+ it "should allow attribute setting" do
5
+ expect { subject.foo = :bar }.
6
+ to_not raise_error
7
+ end
8
+
9
+ it "should allow method calls that return more DummyConfigs" do
10
+ subject.foo.should be_kind_of(described_class)
11
+ end
12
+
13
+ it "should allow hash access" do
14
+ expect { subject[:foo] }.
15
+ to_not raise_error
16
+
17
+ subject[:foo].should be_kind_of(described_class)
18
+ end
19
+
20
+ it "should allow setting hash values" do
21
+ expect { subject[:foo] = :bar }.
22
+ to_not raise_error
23
+ end
24
+ end
@@ -0,0 +1,151 @@
1
+ require "ostruct"
2
+
3
+ require File.expand_path("../../../../base", __FILE__)
4
+
5
+ describe Vagrant::Config::V2::Loader do
6
+ include_context "unit"
7
+
8
+ before(:each) do
9
+ # Force the V2 loader to believe that we are in V2
10
+ stub_const("Vagrant::Config::CURRENT_VERSION", "2")
11
+ end
12
+
13
+ describe "empty" do
14
+ it "returns an empty configuration object" do
15
+ result = described_class.init
16
+ result.should be_kind_of(Vagrant::Config::V2::Root)
17
+ end
18
+ end
19
+
20
+ describe "finalizing" do
21
+ it "should call `#finalize` on the configuration object" do
22
+ # Register a plugin for our test
23
+ register_plugin("2") do |plugin|
24
+ plugin.config "foo" do
25
+ Class.new do
26
+ attr_accessor :bar
27
+
28
+ def finalize!
29
+ @bar = "finalized"
30
+ end
31
+ end
32
+ end
33
+ end
34
+
35
+ # Create the proc we're testing
36
+ config_proc = Proc.new do |config|
37
+ config.foo.bar = "value"
38
+ end
39
+
40
+ # Test that it works properly
41
+ config = described_class.load(config_proc)
42
+ config.foo.bar.should == "value"
43
+
44
+ # Finalize it
45
+ described_class.finalize(config)
46
+ config.foo.bar.should == "finalized"
47
+ end
48
+ end
49
+
50
+ describe "loading" do
51
+ it "should configure with all plugin config keys loaded" do
52
+ # Register a plugin for our test
53
+ register_plugin("2") do |plugin|
54
+ plugin.config("foo") { OpenStruct }
55
+ end
56
+
57
+ # Create the proc we're testing
58
+ config_proc = Proc.new do |config|
59
+ config.foo.bar = "value"
60
+ end
61
+
62
+ # Test that it works properly
63
+ config = described_class.load(config_proc)
64
+ config.foo.bar.should == "value"
65
+ end
66
+ end
67
+
68
+ describe "merging" do
69
+ it "should merge available configuration keys" do
70
+ old = Vagrant::Config::V2::Root.new({ :foo => Object })
71
+ new = Vagrant::Config::V2::Root.new({ :bar => Object })
72
+ result = described_class.merge(old, new)
73
+ result.foo.should be_kind_of(Object)
74
+ result.bar.should be_kind_of(Object)
75
+ end
76
+
77
+ it "should merge instantiated objects" do
78
+ config_class = Class.new do
79
+ attr_accessor :value
80
+ end
81
+
82
+ old = Vagrant::Config::V2::Root.new({ :foo => config_class })
83
+ old.foo.value = "old"
84
+
85
+ new = Vagrant::Config::V2::Root.new({ :bar => config_class })
86
+ new.bar.value = "new"
87
+
88
+ result = described_class.merge(old, new)
89
+ result.foo.value.should == "old"
90
+ result.bar.value.should == "new"
91
+ end
92
+
93
+ it "should merge conflicting classes by calling `merge`" do
94
+ config_class = Class.new do
95
+ attr_accessor :value
96
+
97
+ def merge(new)
98
+ result = self.class.new
99
+ result.value = @value + new.value
100
+ result
101
+ end
102
+ end
103
+
104
+ old = Vagrant::Config::V2::Root.new({ :foo => config_class })
105
+ old.foo.value = 10
106
+
107
+ new = Vagrant::Config::V2::Root.new({ :foo => config_class })
108
+ new.foo.value = 15
109
+
110
+ result = described_class.merge(old, new)
111
+ result.foo.value.should == 25
112
+ end
113
+ end
114
+
115
+ describe "upgrading" do
116
+ it "should continue fine if the key doesn't implement upgrade" do
117
+ # Make an old V1 root object
118
+ old = Vagrant::Config::V1::Root.new({ :foo => Class.new })
119
+
120
+ # It should work fine
121
+ expect { result = described_class.upgrade(old) }.to_not raise_error
122
+ end
123
+
124
+ it "should upgrade the config if it implements the upgrade method" do
125
+ # Create the old V1 class that will be upgraded
126
+ config_class = Class.new do
127
+ attr_accessor :value
128
+
129
+ def upgrade(new)
130
+ new.foo.value = value * 2
131
+
132
+ [["foo"], ["bar"]]
133
+ end
134
+ end
135
+
136
+ # Create the new V2 plugin it is writing to
137
+ register_plugin("2") do |p|
138
+ p.config("foo") { OpenStruct }
139
+ end
140
+
141
+ # Test it out!
142
+ old = Vagrant::Config::V1::Root.new({ :foo => config_class })
143
+ old.foo.value = 5
144
+
145
+ data = described_class.upgrade(old)
146
+ data[0].foo.value.should == 10
147
+ data[1].should == ["foo"]
148
+ data[2].should == ["bar"]
149
+ end
150
+ end
151
+ end
@@ -0,0 +1,97 @@
1
+ require "set"
2
+
3
+ require File.expand_path("../../../../base", __FILE__)
4
+
5
+ describe Vagrant::Config::V2::Root do
6
+ include_context "unit"
7
+
8
+ it "should provide access to config objects" do
9
+ foo_class = Class.new
10
+ map = { :foo => foo_class }
11
+
12
+ instance = described_class.new(map)
13
+ foo = instance.foo
14
+ foo.should be_kind_of(foo_class)
15
+ instance.foo.should eql(foo)
16
+ end
17
+
18
+ it "record a missing key call if invalid key used" do
19
+ instance = described_class.new({})
20
+ expect { instance.foo }.to_not raise_error
21
+ instance.__internal_state["missing_key_calls"].include?("foo").should be
22
+ end
23
+
24
+ it "returns a dummy config for a missing key" do
25
+ instance = described_class.new({})
26
+ expect { instance.foo.foo = "bar" }.to_not raise_error
27
+ end
28
+
29
+ it "can be created with initial state" do
30
+ instance = described_class.new({}, { :foo => "bar" })
31
+ instance.foo.should == "bar"
32
+ end
33
+
34
+ it "should return internal state" do
35
+ map = { "foo" => Object, "bar" => Object }
36
+ instance = described_class.new(map)
37
+ instance.__internal_state.should == {
38
+ "config_map" => map,
39
+ "keys" => {},
40
+ "missing_key_calls" => Set.new
41
+ }
42
+ end
43
+
44
+ describe "validation" do
45
+ let(:instance) do
46
+ map = { :foo => Object, :bar => Object }
47
+ described_class.new(map)
48
+ end
49
+
50
+ it "should return nil if valid" do
51
+ instance.validate({}).should == {}
52
+ end
53
+
54
+ it "should return errors if invalid" do
55
+ errors = { "foo" => ["errors!"] }
56
+ env = { "errors" => errors }
57
+ foo = instance.foo
58
+ def foo.validate(env)
59
+ env["errors"]
60
+ end
61
+
62
+ instance.validate(env).should == errors
63
+ end
64
+
65
+ it "should merge errors via array concat if matching keys" do
66
+ errors = { "foo" => ["errors!"] }
67
+ env = { "errors" => errors }
68
+ foo = instance.foo
69
+ bar = instance.bar
70
+ def foo.validate(env)
71
+ env["errors"]
72
+ end
73
+
74
+ def bar.validate(env)
75
+ env["errors"].merge({ "bar" => ["bar"] })
76
+ end
77
+
78
+ expected_errors = {
79
+ "foo" => ["errors!", "errors!"],
80
+ "bar" => ["bar"]
81
+ }
82
+
83
+ instance.validate(env).should == expected_errors
84
+ end
85
+
86
+ it "shouldn't count empty keys" do
87
+ errors = { "foo" => [] }
88
+ env = { "errors" => errors }
89
+ foo = instance.foo
90
+ def foo.validate(env)
91
+ env["errors"]
92
+ end
93
+
94
+ instance.validate(env).should == {}
95
+ end
96
+ end
97
+ end
@@ -0,0 +1,21 @@
1
+ require File.expand_path("../../../../base", __FILE__)
2
+
3
+ require "vagrant/config/v2/util"
4
+
5
+ describe Vagrant::Config::V2::Util do
6
+ describe "merging errors" do
7
+ it "should merge matching keys and leave the rest alone" do
8
+ first = { "one" => ["foo"], "two" => ["two"] }
9
+ second = { "one" => ["bar"], "three" => ["three"] }
10
+
11
+ expected = {
12
+ "one" => ["foo", "bar"],
13
+ "two" => ["two"],
14
+ "three" => ["three"]
15
+ }
16
+
17
+ result = described_class.merge_errors(first, second)
18
+ result.should == expected
19
+ end
20
+ end
21
+ end