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,120 @@
1
+ require File.expand_path("../../../base", __FILE__)
2
+
3
+ require "vagrant/action/builder"
4
+ require "vagrant/action/hook"
5
+
6
+ describe Vagrant::Action::Hook do
7
+ describe "defaults" do
8
+ its("after_hooks") { should be_empty }
9
+ its("before_hooks") { should be_empty }
10
+ its("append_hooks") { should be_empty }
11
+ its("prepend_hooks") { should be_empty }
12
+ end
13
+
14
+ describe "before hooks" do
15
+ let(:existing) { "foo" }
16
+
17
+ it "should append them" do
18
+ block = Proc.new {}
19
+
20
+ subject.before(existing, 1)
21
+ subject.before(existing, 2)
22
+ subject.before(existing, 3, :arg, &block)
23
+
24
+ subject.before_hooks[existing].should == [
25
+ [1, [], nil],
26
+ [2, [], nil],
27
+ [3, [:arg], block]
28
+ ]
29
+ end
30
+ end
31
+
32
+ describe "after hooks" do
33
+ let(:existing) { "foo" }
34
+
35
+ it "should append them" do
36
+ block = Proc.new {}
37
+
38
+ subject.after(existing, 1)
39
+ subject.after(existing, 2)
40
+ subject.after(existing, 3, :arg, &block)
41
+
42
+ subject.after_hooks[existing].should == [
43
+ [1, [], nil],
44
+ [2, [], nil],
45
+ [3, [:arg], block]
46
+ ]
47
+ end
48
+ end
49
+
50
+ describe "append" do
51
+ it "should make a list" do
52
+ block = Proc.new {}
53
+
54
+ subject.append(1)
55
+ subject.append(2)
56
+ subject.append(3, :arg, &block)
57
+
58
+ subject.append_hooks.should == [
59
+ [1, [], nil],
60
+ [2, [], nil],
61
+ [3, [:arg], block]
62
+ ]
63
+ end
64
+ end
65
+
66
+ describe "prepend" do
67
+ it "should make a list" do
68
+ block = Proc.new {}
69
+
70
+ subject.prepend(1)
71
+ subject.prepend(2)
72
+ subject.prepend(3, :arg, &block)
73
+
74
+ subject.prepend_hooks.should == [
75
+ [1, [], nil],
76
+ [2, [], nil],
77
+ [3, [:arg], block]
78
+ ]
79
+ end
80
+ end
81
+
82
+ describe "applying" do
83
+ let(:builder) { Vagrant::Action::Builder.new }
84
+
85
+ it "should build the proper stack" do
86
+ subject.prepend("1", 2)
87
+ subject.append("9")
88
+ subject.after("1", "2")
89
+ subject.before("9", "8")
90
+
91
+ subject.apply(builder)
92
+
93
+ builder.stack.should == [
94
+ ["1", [2], nil],
95
+ ["2", [], nil],
96
+ ["8", [], nil],
97
+ ["9", [], nil]
98
+ ]
99
+ end
100
+
101
+ it "should not prepend or append if disabled" do
102
+ builder.use("3")
103
+ builder.use("8")
104
+
105
+ subject.prepend("1", 2)
106
+ subject.append("9")
107
+ subject.after("3", "4")
108
+ subject.before("8", "7")
109
+
110
+ subject.apply(builder, no_prepend_or_append: true)
111
+
112
+ builder.stack.should == [
113
+ ["3", [], nil],
114
+ ["4", [], nil],
115
+ ["7", [], nil],
116
+ ["8", [], nil]
117
+ ]
118
+ end
119
+ end
120
+ end
@@ -0,0 +1,71 @@
1
+ require File.expand_path("../../../base", __FILE__)
2
+
3
+ describe Vagrant::Action::Runner do
4
+ let(:instance) { described_class.new }
5
+
6
+ it "should raise an error if an invalid callable is given" do
7
+ expect { instance.run(7) }.to raise_error(ArgumentError, /must be a callable/)
8
+ end
9
+
10
+ it "should be able to use a Proc as a callable" do
11
+ callable = Proc.new { raise Exception, "BOOM" }
12
+ expect { instance.run(callable) }.to raise_error(Exception, "BOOM")
13
+ end
14
+
15
+ it "should be able to use a Class as a callable" do
16
+ callable = Class.new do
17
+ def initialize(app, env)
18
+ end
19
+
20
+ def call(env)
21
+ raise Exception, "BOOM"
22
+ end
23
+ end
24
+
25
+ expect { instance.run(callable) }.to raise_error(Exception, "BOOM")
26
+ end
27
+
28
+ it "should return the resulting environment" do
29
+ callable = lambda do |env|
30
+ env[:data] = "value"
31
+
32
+ # Return nil so we can make sure it isn't using this return value
33
+ nil
34
+ end
35
+
36
+ result = instance.run(callable)
37
+ result[:data].should == "value"
38
+ end
39
+
40
+ it "should pass options into hash given to callable" do
41
+ result = nil
42
+ callable = lambda do |env|
43
+ result = env["data"]
44
+ end
45
+
46
+ instance.run(callable, "data" => "foo")
47
+ result.should == "foo"
48
+ end
49
+
50
+ it "should pass global options into the hash" do
51
+ result = nil
52
+ callable = lambda do |env|
53
+ result = env["data"]
54
+ end
55
+
56
+ instance = described_class.new("data" => "bar")
57
+ instance.run(callable)
58
+ result.should == "bar"
59
+ end
60
+
61
+ it "should yield the block passed to the init method to get lazy loaded globals" do
62
+ result = nil
63
+ callable = lambda do |env|
64
+ result = env["data"]
65
+ end
66
+
67
+ instance = described_class.new { { "data" => "bar" } }
68
+ instance.run(callable)
69
+ result.should == "bar"
70
+ end
71
+ end
@@ -0,0 +1,92 @@
1
+ require File.expand_path("../../../base", __FILE__)
2
+
3
+ describe Vagrant::Action::Warden do
4
+ let(:data) { { :data => [] } }
5
+ let(:instance) { described_class.new }
6
+
7
+ # This returns a proc that can be used with the builder
8
+ # that simply appends data to an array in the env.
9
+ def appender_proc(data)
10
+ Proc.new { |env| env[:data] << data }
11
+ end
12
+
13
+ it "calls the actions like normal" do
14
+ instance = described_class.new([appender_proc(1), appender_proc(2)], data)
15
+ instance.call(data)
16
+
17
+ data[:data].should == [1, 2]
18
+ end
19
+
20
+ it "starts a recovery sequence when an exception is raised" do
21
+ class Action
22
+ def initialize(app, env)
23
+ @app = app
24
+ end
25
+
26
+ def call(env)
27
+ @app.call(env)
28
+ end
29
+
30
+ def recover(env)
31
+ env[:recover] << 1
32
+ end
33
+ end
34
+
35
+ class ActionTwo
36
+ def initialize(app, env)
37
+ @app = app
38
+ end
39
+
40
+ def call(env)
41
+ @app.call(env)
42
+ end
43
+
44
+ def recover(env)
45
+ env[:recover] << 2
46
+ end
47
+ end
48
+
49
+ error_proc = Proc.new { raise "ERROR!" }
50
+
51
+ data = { :recover => [] }
52
+ instance = described_class.new([Action, ActionTwo, error_proc], data)
53
+
54
+ # The error should be raised back up
55
+ expect { instance.call(data) }.
56
+ to raise_error(RuntimeError)
57
+
58
+ # Verify the recovery process goes in reverse order
59
+ data[:recover].should == [2, 1]
60
+
61
+ # Verify that the error is available in the data
62
+ data["vagrant.error"].should be_kind_of(RuntimeError)
63
+ end
64
+
65
+ it "does not do a recovery sequence if SystemExit is raised" do
66
+ class Action
67
+ def initialize(app, env)
68
+ @app = app
69
+ end
70
+
71
+ def call(env)
72
+ @app.call(env)
73
+ end
74
+
75
+ def recover(env)
76
+ env[:recover] = true
77
+ end
78
+ end
79
+
80
+ # Make a proc that just calls "abort" which raises a
81
+ # SystemExit exception.
82
+ error_proc = Proc.new { abort }
83
+
84
+ instance = described_class.new([Action, error_proc], data)
85
+
86
+ # The SystemExit should come through
87
+ expect { instance.call(data) }.to raise_error(SystemExit)
88
+
89
+ # The recover should not have been called
90
+ data.has_key?(:recover).should_not be
91
+ end
92
+ end
@@ -0,0 +1,36 @@
1
+ require 'thread'
2
+
3
+ require File.expand_path("../../base", __FILE__)
4
+
5
+ describe Vagrant::BatchAction do
6
+ let(:called_actions) { [] }
7
+ let!(:lock) { Mutex.new }
8
+ let(:provider_name) { "test" }
9
+ let(:provider_options) { {} }
10
+
11
+ def new_machine(options)
12
+ double("machine").tap do |m|
13
+ m.stub(:provider_name => provider_name)
14
+ m.stub(:provider_options => options)
15
+ m.stub(:action) do |action, opts|
16
+ lock.synchronize do
17
+ called_actions << [m, action, opts]
18
+ end
19
+ end
20
+ end
21
+ end
22
+
23
+ describe "#run" do
24
+ let(:machine) { new_machine(provider_options) }
25
+ let(:machine2) { new_machine(provider_options) }
26
+
27
+ it "should run the actions on the machines in order" do
28
+ subject.action(machine, "up")
29
+ subject.action(machine2, "destroy")
30
+ subject.run
31
+
32
+ called_actions.include?([machine, "up", nil]).should be
33
+ called_actions.include?([machine2, "destroy", nil]).should be
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,237 @@
1
+ require File.expand_path("../../base", __FILE__)
2
+
3
+ require "pathname"
4
+ require 'tempfile'
5
+
6
+ describe Vagrant::BoxCollection do
7
+ include_context "unit"
8
+
9
+ let(:box_class) { Vagrant::Box }
10
+ let(:environment) { isolated_environment }
11
+ let(:instance) { described_class.new(environment.boxes_dir) }
12
+
13
+ it "should tell us the directory it is using" do
14
+ instance.directory.should == environment.boxes_dir
15
+ end
16
+
17
+ describe "adding" do
18
+ it "should add a valid box to the system" do
19
+ box_path = environment.box2_file(:virtualbox)
20
+
21
+ # Add the box
22
+ box = instance.add(box_path, "foo", :virtualbox)
23
+ box.should be_kind_of(box_class)
24
+ box.name.should == "foo"
25
+ box.provider.should == :virtualbox
26
+
27
+ # Verify we can find it as well
28
+ box = instance.find("foo", :virtualbox)
29
+ box.should_not be_nil
30
+ end
31
+
32
+ it "should add a box without specifying a provider" do
33
+ box_path = environment.box2_file(:vmware)
34
+
35
+ # Add the box
36
+ box = instance.add(box_path, "foo")
37
+ box.should be_kind_of(box_class)
38
+ box.name.should == "foo"
39
+ box.provider.should == :vmware
40
+ end
41
+
42
+ it "should add a V1 box" do
43
+ # Create a V1 box.
44
+ box_path = environment.box1_file
45
+
46
+ # Add the box
47
+ box = instance.add(box_path, "foo")
48
+ box.should be_kind_of(box_class)
49
+ box.name.should == "foo"
50
+ box.provider.should == :virtualbox
51
+ end
52
+
53
+ it "should raise an exception if the box already exists" do
54
+ prev_box_name = "foo"
55
+ prev_box_provider = :virtualbox
56
+
57
+ # Create the box we're adding
58
+ environment.box2(prev_box_name, prev_box_provider)
59
+
60
+ # Attempt to add the box with the same name
61
+ box_path = environment.box2_file(prev_box_provider)
62
+ expect { instance.add(box_path, prev_box_name, prev_box_provider) }.
63
+ to raise_error(Vagrant::Errors::BoxAlreadyExists)
64
+ end
65
+
66
+ it "should replace the box if force is specified" do
67
+ prev_box_name = "foo"
68
+ prev_box_provider = :vmware
69
+
70
+ # Setup the environment with the box pre-added
71
+ environment.box2(prev_box_name, prev_box_provider)
72
+
73
+ # Attempt to add the box with the same name
74
+ box_path = environment.box2_file(prev_box_provider, metadata: { "replaced" => "yes" })
75
+ box = instance.add(box_path, prev_box_name, nil, true)
76
+ box.metadata["replaced"].should == "yes"
77
+ end
78
+
79
+ it "should raise an exception if the box already exists and no provider is given" do
80
+ # Create some box file
81
+ box_name = "foo"
82
+ box_path = environment.box2_file(:vmware)
83
+
84
+ # Add it once, successfully
85
+ expect { instance.add(box_path, box_name) }.to_not raise_error
86
+
87
+ # Add it again, and fail!
88
+ expect { instance.add(box_path, box_name) }.
89
+ to raise_error(Vagrant::Errors::BoxAlreadyExists)
90
+ end
91
+
92
+ it "should raise an exception if you're attempting to add a box that exists as a V1 box" do
93
+ prev_box_name = "foo"
94
+
95
+ # Create the V1 box
96
+ environment.box1(prev_box_name)
97
+
98
+ # Attempt to add some V2 box with the same name
99
+ box_path = environment.box2_file(:vmware)
100
+ expect { instance.add(box_path, prev_box_name) }.
101
+ to raise_error(Vagrant::Errors::BoxUpgradeRequired)
102
+ end
103
+
104
+ it "should raise an exception and not add the box if the provider doesn't match" do
105
+ box_name = "foo"
106
+ good_provider = :virtualbox
107
+ bad_provider = :vmware
108
+
109
+ # Create a VirtualBox box file
110
+ box_path = environment.box2_file(good_provider)
111
+
112
+ # Add the box but with an invalid provider, verify we get the proper
113
+ # error.
114
+ expect { instance.add(box_path, box_name, bad_provider) }.
115
+ to raise_error(Vagrant::Errors::BoxProviderDoesntMatch)
116
+
117
+ # Verify the box doesn't exist
118
+ instance.find(box_name, bad_provider).should be_nil
119
+ end
120
+
121
+ it "should raise an exception if you add an invalid box file" do
122
+ # Tar Header information
123
+ CHECKSUM_OFFSET = 148
124
+ CHECKSUM_LENGTH = 8
125
+
126
+ Tempfile.new(['vagrant_testing', '.tar']) do |f|
127
+ # Corrupt the tar by writing over the checksum field
128
+ f.seek(CHECKSUM_OFFSET)
129
+ f.write("\0"*CHECKSUM_LENGTH)
130
+ f.close
131
+
132
+ expect { instance.add(path, "foo", :virtualbox) }.
133
+ to raise_error(Vagrant::Errors::BoxUnpackageFailure)
134
+ end
135
+ end
136
+ end
137
+
138
+ describe "listing all" do
139
+ it "should return an empty array when no boxes are there" do
140
+ instance.all.should == []
141
+ end
142
+
143
+ it "should return the boxes and their providers" do
144
+ # Create some boxes
145
+ environment.box2("foo", :virtualbox)
146
+ environment.box2("foo", :vmware)
147
+ environment.box2("bar", :ec2)
148
+
149
+ # Verify some output
150
+ results = instance.all
151
+ results.length.should == 3
152
+ results.include?(["foo", :virtualbox]).should be
153
+ results.include?(["foo", :vmware]).should be
154
+ results.include?(["bar", :ec2]).should be
155
+ end
156
+
157
+ it "should return V1 boxes as well" do
158
+ # Create some boxes, including a V1 box
159
+ environment.box1("bar")
160
+ environment.box2("foo", :vmware)
161
+
162
+ # Verify some output
163
+ results = instance.all.sort
164
+ results.should == [["bar", :virtualbox, :v1], ["foo", :vmware]]
165
+ end
166
+
167
+ it 'does not raise an exception when a file appears in the boxes dir' do
168
+ Tempfile.new('a_file', environment.boxes_dir)
169
+ expect { instance.all }.to_not raise_error
170
+ end
171
+ end
172
+
173
+ describe "finding" do
174
+ it "should return nil if the box does not exist" do
175
+ instance.find("foo", :i_dont_exist).should be_nil
176
+ end
177
+
178
+ it "should return a box if the box does exist" do
179
+ # Create the "box"
180
+ environment.box2("foo", :virtualbox)
181
+
182
+ # Actual test
183
+ result = instance.find("foo", :virtualbox)
184
+ result.should_not be_nil
185
+ result.should be_kind_of(box_class)
186
+ result.name.should == "foo"
187
+ end
188
+
189
+ it "should throw an exception if it is a v1 box" do
190
+ # Create a V1 box
191
+ environment.box1("foo")
192
+
193
+ # Test!
194
+ expect { instance.find("foo", :virtualbox) }.
195
+ to raise_error(Vagrant::Errors::BoxUpgradeRequired)
196
+ end
197
+
198
+ it "should return nil if there is a V1 box but we're looking for another provider" do
199
+ # Create a V1 box
200
+ environment.box1("foo")
201
+
202
+ # Test
203
+ instance.find("foo", :another_provider).should be_nil
204
+ end
205
+ end
206
+
207
+ describe "upgrading" do
208
+ it "should upgrade a V1 box to V2" do
209
+ # Create a V1 box
210
+ environment.box1("foo")
211
+
212
+ # Verify that only a V1 box exists
213
+ expect { instance.find("foo", :virtualbox) }.
214
+ to raise_error(Vagrant::Errors::BoxUpgradeRequired)
215
+
216
+ # Upgrade the box
217
+ instance.upgrade("foo").should be
218
+
219
+ # Verify the box exists
220
+ box = instance.find("foo", :virtualbox)
221
+ box.should_not be_nil
222
+ box.name.should == "foo"
223
+ end
224
+
225
+ it "should raise a BoxNotFound exception if a non-existent box is upgraded" do
226
+ expect { instance.upgrade("i-dont-exist") }.
227
+ to raise_error(Vagrant::Errors::BoxNotFound)
228
+ end
229
+
230
+ it "should return true if we try to upgrade a V2 box" do
231
+ # Create a V2 box
232
+ environment.box2("foo", :vmware)
233
+
234
+ instance.upgrade("foo").should be
235
+ end
236
+ end
237
+ end
@@ -0,0 +1,122 @@
1
+ require File.expand_path("../../base", __FILE__)
2
+
3
+ require "pathname"
4
+
5
+ describe Vagrant::Box do
6
+ include_context "unit"
7
+
8
+ let(:environment) { isolated_environment }
9
+
10
+ let(:box_collection) { Vagrant::BoxCollection.new(environment.boxes_dir) }
11
+
12
+ let(:name) { "foo" }
13
+ let(:provider) { :virtualbox }
14
+ let(:directory) { environment.box2("foo", :virtualbox) }
15
+ let(:instance) { described_class.new(name, provider, directory) }
16
+
17
+ subject { described_class.new(name, provider, directory) }
18
+
19
+ it "provides the name" do
20
+ instance.name.should == name
21
+ end
22
+
23
+ it "provides the provider" do
24
+ instance.provider.should == provider
25
+ end
26
+
27
+ it "provides the directory" do
28
+ instance.directory.should == directory
29
+ end
30
+
31
+ it "provides the metadata associated with a box" do
32
+ data = { "foo" => "bar" }
33
+
34
+ # Write the metadata
35
+ directory.join("metadata.json").open("w") do |f|
36
+ f.write(JSON.generate(data))
37
+ end
38
+
39
+ # Verify the metadata
40
+ instance.metadata.should == data
41
+ end
42
+
43
+ context "without a metadata file" do
44
+ before :each do
45
+ directory.join("metadata.json").delete
46
+ end
47
+
48
+ it "should raise an exception" do
49
+ expect { subject }.
50
+ to raise_error(Vagrant::Errors::BoxMetadataFileNotFound)
51
+ end
52
+ end
53
+
54
+ describe "destroying" do
55
+ it "should destroy an existing box" do
56
+ # Verify that our "box" exists
57
+ directory.exist?.should be
58
+
59
+ # Destroy it
60
+ instance.destroy!.should be
61
+
62
+ # Verify that it is "destroyed"
63
+ directory.exist?.should_not be
64
+ end
65
+
66
+ it "should not error destroying a non-existent box" do
67
+ # Get the instance so that it is instantiated
68
+ box = instance
69
+
70
+ # Delete the directory
71
+ directory.rmtree
72
+
73
+ # Destroy it
74
+ box.destroy!.should be
75
+ end
76
+ end
77
+
78
+ describe "repackaging" do
79
+ it "should repackage the box" do
80
+ test_file_contents = "hello, world!"
81
+
82
+ # Put a file in the box directory to verify it is packaged properly
83
+ # later.
84
+ directory.join("test_file").open("w") do |f|
85
+ f.write(test_file_contents)
86
+ end
87
+
88
+ # Repackage our box to some temporary directory
89
+ box_output_path = temporary_dir.join("package.box")
90
+ instance.repackage(box_output_path).should be
91
+
92
+ # Let's now add this box again under a different name, and then
93
+ # verify that we get the proper result back.
94
+ new_box = box_collection.add(box_output_path, "foo2")
95
+ new_box.directory.join("test_file").read.should == test_file_contents
96
+ end
97
+ end
98
+
99
+ describe "comparison and ordering" do
100
+ it "should be equal if the name and provider match" do
101
+ a = described_class.new("a", :foo, directory)
102
+ b = described_class.new("a", :foo, directory)
103
+
104
+ a.should == b
105
+ end
106
+
107
+ it "should not be equal if the name and provider do not match" do
108
+ a = described_class.new("a", :foo, directory)
109
+ b = described_class.new("b", :foo, directory)
110
+
111
+ a.should_not == b
112
+ end
113
+
114
+ it "should sort them in order of name then provider" do
115
+ a = described_class.new("a", :foo, directory)
116
+ b = described_class.new("b", :foo, directory)
117
+ c = described_class.new("c", :foo2, directory)
118
+
119
+ [c, a, b].sort.should == [a, b, c]
120
+ end
121
+ end
122
+ end
@@ -0,0 +1,27 @@
1
+ describe Vagrant::CLI do
2
+ describe "parsing options" do
3
+ let(:klass) do
4
+ Class.new(described_class)
5
+ end
6
+
7
+ let(:environment) do
8
+ ui = double("UI::Silent")
9
+ ui.stub(:info => "bar")
10
+ env = double("Vagrant::Environment")
11
+ env.stub(:ui => ui)
12
+ env.stub(:root_path => "foo")
13
+ env.stub(:machine_names => [])
14
+ env
15
+ end
16
+
17
+ it "returns a non-zero exit status if an invalid command is given" do
18
+ result = klass.new(["destroypp"], environment).execute
19
+ result.should_not == 0
20
+ end
21
+
22
+ it "returns an exit status of zero if a valid command is given" do
23
+ result = klass.new(["destroy"], environment).execute
24
+ result.should == 0
25
+ end
26
+ end
27
+ end