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,305 @@
1
+ require File.expand_path("../../../../base", __FILE__)
2
+
3
+ describe Vagrant::Plugin::V2::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 on all actions by default" do
28
+ plugin = Class.new(described_class) do
29
+ action_hook("foo") { "bar" }
30
+ end
31
+
32
+ hooks_registry = plugin.components.action_hooks
33
+ hooks = hooks_registry[described_class.const_get("ALL_ACTIONS")]
34
+ hooks.length.should == 1
35
+ hooks[0].call.should == "bar"
36
+ end
37
+
38
+ it "should register for a specific action by default" do
39
+ plugin = Class.new(described_class) do
40
+ action_hook("foo", :bar) { "bar" }
41
+ end
42
+
43
+ hooks_registry = plugin.components.action_hooks
44
+ hooks = hooks_registry[:bar]
45
+ hooks.length.should == 1
46
+ hooks[0].call.should == "bar"
47
+ end
48
+ end
49
+
50
+ describe "commands" do
51
+ it "should register command classes" do
52
+ plugin = Class.new(described_class) do
53
+ command("foo") { "bar" }
54
+ end
55
+
56
+ plugin.command[:foo].should == "bar"
57
+ end
58
+
59
+ ["spaces bad", "sym^bols"].each do |bad|
60
+ it "should not allow bad command name: #{bad}" do
61
+ plugin = Class.new(described_class)
62
+
63
+ expect { plugin.command(bad) {} }.
64
+ to raise_error(Vagrant::Plugin::V2::InvalidCommandName)
65
+ end
66
+ end
67
+
68
+ it "should lazily register command classes" do
69
+ # Below would raise an error if the value of the command class was
70
+ # evaluated immediately. By asserting that this does not raise an
71
+ # error, we verify that the value is actually lazily loaded
72
+ plugin = nil
73
+ expect {
74
+ plugin = Class.new(described_class) do
75
+ command("foo") { raise StandardError, "FAIL!" }
76
+ end
77
+ }.to_not raise_error
78
+
79
+ # Now verify when we actually get the command key that
80
+ # a proper error is raised.
81
+ expect {
82
+ plugin.command[:foo]
83
+ }.to raise_error(StandardError)
84
+ end
85
+ end
86
+
87
+ describe "communicators" do
88
+ it "should register communicator classes" do
89
+ plugin = Class.new(described_class) do
90
+ communicator("foo") { "bar" }
91
+ end
92
+
93
+ plugin.communicator[:foo].should == "bar"
94
+ end
95
+
96
+ it "should lazily register communicator classes" do
97
+ # Below would raise an error if the value of the class was
98
+ # evaluated immediately. By asserting that this does not raise an
99
+ # error, we verify that the value is actually lazily loaded
100
+ plugin = nil
101
+ expect {
102
+ plugin = Class.new(described_class) do
103
+ communicator("foo") { raise StandardError, "FAIL!" }
104
+ end
105
+ }.to_not raise_error
106
+
107
+ # Now verify when we actually get the configuration key that
108
+ # a proper error is raised.
109
+ expect {
110
+ plugin.communicator[:foo]
111
+ }.to raise_error(StandardError)
112
+ end
113
+ end
114
+
115
+ describe "configuration" do
116
+ it "should register configuration classes" do
117
+ plugin = Class.new(described_class) do
118
+ config("foo") { "bar" }
119
+ end
120
+
121
+ plugin.components.configs[:top][:foo].should == "bar"
122
+ end
123
+
124
+ it "should lazily register configuration classes" do
125
+ # Below would raise an error if the value of the config class was
126
+ # evaluated immediately. By asserting that this does not raise an
127
+ # error, we verify that the value is actually lazily loaded
128
+ plugin = nil
129
+ expect {
130
+ plugin = Class.new(described_class) do
131
+ config("foo") { raise StandardError, "FAIL!" }
132
+ end
133
+ }.to_not raise_error
134
+
135
+ # Now verify when we actually get the configuration key that
136
+ # a proper error is raised.
137
+ expect {
138
+ plugin.components.configs[:top][:foo]
139
+ }.to raise_error(StandardError)
140
+ end
141
+
142
+ it "should register configuration classes for providers" do
143
+ plugin = Class.new(described_class) do
144
+ config("foo", :provider) { "bar" }
145
+ end
146
+
147
+ plugin.components.configs[:provider][:foo].should == "bar"
148
+ end
149
+ end
150
+
151
+ describe "guests" do
152
+ it "should register guest classes" do
153
+ plugin = Class.new(described_class) do
154
+ guest("foo") { "bar" }
155
+ end
156
+
157
+ plugin.components.guests[:foo].should == ["bar", nil]
158
+ end
159
+
160
+ it "should lazily register guest classes" do
161
+ # Below would raise an error if the value of the guest class was
162
+ # evaluated immediately. By asserting that this does not raise an
163
+ # error, we verify that the value is actually lazily loaded
164
+ plugin = nil
165
+ expect {
166
+ plugin = Class.new(described_class) do
167
+ guest("foo") { raise StandardError, "FAIL!" }
168
+ end
169
+ }.to_not raise_error
170
+
171
+ # Now verify when we actually get the guest key that
172
+ # a proper error is raised.
173
+ expect {
174
+ plugin.guest[:foo]
175
+ }.to raise_error(StandardError)
176
+ end
177
+ end
178
+
179
+ describe "guest capabilities" do
180
+ it "should register guest capabilities" do
181
+ plugin = Class.new(described_class) do
182
+ guest_capability("foo", "bar") { "baz" }
183
+ end
184
+
185
+ plugin.components.guest_capabilities[:foo][:bar].should == "baz"
186
+ end
187
+ end
188
+
189
+ describe "hosts" do
190
+ it "should register host classes" do
191
+ plugin = Class.new(described_class) do
192
+ host("foo") { "bar" }
193
+ end
194
+
195
+ plugin.host[:foo].should == "bar"
196
+ end
197
+
198
+ it "should lazily register host classes" do
199
+ # Below would raise an error if the value of the host class was
200
+ # evaluated immediately. By asserting that this does not raise an
201
+ # error, we verify that the value is actually lazily loaded
202
+ plugin = nil
203
+ expect {
204
+ plugin = Class.new(described_class) do
205
+ host("foo") { raise StandardError, "FAIL!" }
206
+ end
207
+ }.to_not raise_error
208
+
209
+ # Now verify when we actually get the host key that
210
+ # a proper error is raised.
211
+ expect {
212
+ plugin.host[:foo]
213
+ }.to raise_error(StandardError)
214
+ end
215
+ end
216
+
217
+ describe "providers" do
218
+ it "should register provider classes" do
219
+ plugin = Class.new(described_class) do
220
+ provider("foo") { "bar" }
221
+ end
222
+
223
+ plugin.components.providers[:foo].should == ["bar", {}]
224
+ end
225
+
226
+ it "should register provider classes with options" do
227
+ plugin = Class.new(described_class) do
228
+ provider("foo", foo: "yep") { "bar" }
229
+ end
230
+
231
+ plugin.components.providers[:foo].should == ["bar", { foo: "yep" }]
232
+ end
233
+
234
+ it "should lazily register provider classes" do
235
+ # Below would raise an error if the value of the config class was
236
+ # evaluated immediately. By asserting that this does not raise an
237
+ # error, we verify that the value is actually lazily loaded
238
+ plugin = nil
239
+ expect {
240
+ plugin = Class.new(described_class) do
241
+ provider("foo") { raise StandardError, "FAIL!" }
242
+ end
243
+ }.to_not raise_error
244
+
245
+ # Now verify when we actually get the configuration key that
246
+ # a proper error is raised.
247
+ expect {
248
+ plugin.components.providers[:foo]
249
+ }.to raise_error(StandardError)
250
+ end
251
+ end
252
+
253
+ describe "provisioners" do
254
+ it "should register provisioner classes" do
255
+ plugin = Class.new(described_class) do
256
+ provisioner("foo") { "bar" }
257
+ end
258
+
259
+ plugin.provisioner[:foo].should == "bar"
260
+ end
261
+
262
+ it "should lazily register provisioner classes" do
263
+ # Below would raise an error if the value of the config class was
264
+ # evaluated immediately. By asserting that this does not raise an
265
+ # error, we verify that the value is actually lazily loaded
266
+ plugin = nil
267
+ expect {
268
+ plugin = Class.new(described_class) do
269
+ provisioner("foo") { raise StandardError, "FAIL!" }
270
+ end
271
+ }.to_not raise_error
272
+
273
+ # Now verify when we actually get the configuration key that
274
+ # a proper error is raised.
275
+ expect {
276
+ plugin.provisioner[:foo]
277
+ }.to raise_error(StandardError)
278
+ end
279
+ end
280
+
281
+ describe "plugin registration" do
282
+ let(:manager) { described_class.manager }
283
+
284
+ it "should have no registered plugins" do
285
+ manager.registered.should be_empty
286
+ end
287
+
288
+ it "should register a plugin when a name is set" do
289
+ plugin = Class.new(described_class) do
290
+ name "foo"
291
+ end
292
+
293
+ manager.registered.should == [plugin]
294
+ end
295
+
296
+ it "should register a plugin only once" do
297
+ plugin = Class.new(described_class) do
298
+ name "foo"
299
+ name "bar"
300
+ end
301
+
302
+ manager.registered.should == [plugin]
303
+ end
304
+ end
305
+ end
@@ -0,0 +1,18 @@
1
+ require File.expand_path("../../../../base", __FILE__)
2
+
3
+ describe Vagrant::Plugin::V2::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
@@ -0,0 +1,128 @@
1
+ require File.expand_path("../../base", __FILE__)
2
+
3
+ describe Vagrant::Registry do
4
+ let(:instance) { described_class.new }
5
+
6
+ it "should return nil for nonexistent items" do
7
+ instance.get("foo").should be_nil
8
+ end
9
+
10
+ it "should register a simple key/value" do
11
+ instance.register("foo") { "value" }
12
+ instance.get("foo").should == "value"
13
+ end
14
+
15
+ it "should register an item without calling the block yet" do
16
+ expect do
17
+ instance.register("foo") do
18
+ raise Exception, "BOOM!"
19
+ end
20
+ end.to_not raise_error
21
+ end
22
+
23
+ it "should raise an error if no block is given" do
24
+ expect { instance.register("foo") }.
25
+ to raise_error(ArgumentError)
26
+ end
27
+
28
+ it "should call and return the result of a block when asking for the item" do
29
+ object = Object.new
30
+ instance.register("foo") do
31
+ object
32
+ end
33
+
34
+ instance.get("foo").should eql(object)
35
+ end
36
+
37
+ it "should be able to get the item with []" do
38
+ object = Object.new
39
+ instance.register("foo") { object }
40
+
41
+ instance["foo"].should eql(object)
42
+ end
43
+
44
+ it "should cache the result of the item so they can be modified" do
45
+ # Make the proc generate a NEW array each time
46
+ instance.register("foo") { [] }
47
+
48
+ # Test that modifying the result modifies the actual cached
49
+ # value. This verifies we're caching.
50
+ instance.get("foo").should == []
51
+ instance.get("foo") << "value"
52
+ instance.get("foo").should == ["value"]
53
+ end
54
+
55
+ it "should be able to check if a key exists" do
56
+ instance.register("foo") { "bar" }
57
+ instance.should have_key("foo")
58
+ instance.should_not have_key("bar")
59
+ end
60
+
61
+ it "should be enumerable" do
62
+ instance.register("foo") { "foovalue" }
63
+ instance.register("bar") { "barvalue" }
64
+
65
+ keys = []
66
+ values = []
67
+ instance.each do |key, value|
68
+ keys << key
69
+ values << value
70
+ end
71
+
72
+ keys.sort.should == ["bar", "foo"]
73
+ values.sort.should == ["barvalue", "foovalue"]
74
+ end
75
+
76
+ it "should be able to convert to a hash" do
77
+ instance.register("foo") { "foovalue" }
78
+ instance.register("bar") { "barvalue" }
79
+
80
+ result = instance.to_hash
81
+ result.should be_a(Hash)
82
+ result["foo"].should == "foovalue"
83
+ result["bar"].should == "barvalue"
84
+ end
85
+
86
+ describe "merging" do
87
+ it "should merge in another registry" do
88
+ one = described_class.new
89
+ two = described_class.new
90
+
91
+ one.register("foo") { raise "BOOM!" }
92
+ two.register("bar") { raise "BAM!" }
93
+
94
+ three = one.merge(two)
95
+ expect { three["foo"] }.to raise_error("BOOM!")
96
+ expect { three["bar"] }.to raise_error("BAM!")
97
+ end
98
+
99
+ it "should NOT merge in the cache" do
100
+ one = described_class.new
101
+ two = described_class.new
102
+
103
+ one.register("foo") { [] }
104
+ one["foo"] << 1
105
+
106
+ two.register("bar") { [] }
107
+ two["bar"] << 2
108
+
109
+ three = one.merge(two)
110
+ three["foo"].should == []
111
+ three["bar"].should == []
112
+ end
113
+ end
114
+
115
+ describe "merge!" do
116
+ it "should merge into self" do
117
+ one = described_class.new
118
+ two = described_class.new
119
+
120
+ one.register("foo") { "foo" }
121
+ two.register("bar") { "bar" }
122
+
123
+ one.merge!(two)
124
+ one["foo"].should == "foo"
125
+ one["bar"].should == "bar"
126
+ end
127
+ end
128
+ end
@@ -0,0 +1,16 @@
1
+ require File.expand_path("../../../base", __FILE__)
2
+
3
+ require "vagrant/util/ansi_escape_code_remover"
4
+
5
+ describe Vagrant::Util::ANSIEscapeCodeRemover do
6
+ let(:klass) do
7
+ Class.new do
8
+ extend Vagrant::Util::ANSIEscapeCodeRemover
9
+ end
10
+ end
11
+
12
+ it "should remove ANSI escape codes" do
13
+ klass.remove_ansi_escape_codes("\e[Hyo").should == "yo"
14
+ end
15
+ end
16
+
@@ -0,0 +1,57 @@
1
+ require File.expand_path("../../../base", __FILE__)
2
+
3
+ require "vagrant/util/downloader"
4
+
5
+ describe Vagrant::Util::Downloader do
6
+ let(:source) { "foo" }
7
+ let(:destination) { "bar" }
8
+ let(:exit_code) { 0 }
9
+
10
+ let(:subprocess_result) do
11
+ double("subprocess_result").tap do |result|
12
+ result.stub(:exit_code => exit_code)
13
+ result.stub(:stderr => "")
14
+ end
15
+ end
16
+
17
+ subject { described_class.new(source, destination) }
18
+
19
+ before :each do
20
+ Vagrant::Util::Subprocess.stub(:execute).and_return(subprocess_result)
21
+ end
22
+
23
+ describe "#download!" do
24
+ context "with a good exit status" do
25
+ let(:exit_code) { 0 }
26
+
27
+ it "downloads the file and returns true" do
28
+ curl_options = ["--fail", "--location", "--max-redirs", "10", "--output", destination, source, {}]
29
+
30
+ Vagrant::Util::Subprocess.should_receive(:execute).
31
+ with("curl", *curl_options).
32
+ and_return(subprocess_result)
33
+
34
+ subject.download!.should be
35
+ end
36
+ end
37
+
38
+ context "with a bad exit status" do
39
+ let(:exit_code) { 1 }
40
+
41
+ it "raises an exception" do
42
+ curl_options = ["--fail", "--location", "--max-redirs", "10", "--output", destination, source, {}]
43
+
44
+ Vagrant::Util::Subprocess.should_receive(:execute).
45
+ with("curl", *curl_options).
46
+ and_return(subprocess_result)
47
+
48
+ expect { subject.download! }.
49
+ to raise_error(Vagrant::Errors::DownloaderError)
50
+ end
51
+ end
52
+
53
+ context "with a UI" do
54
+ pending "tests for a UI"
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,23 @@
1
+ require File.expand_path("../../../base", __FILE__)
2
+ require 'digest/md5'
3
+ require 'digest/sha1'
4
+
5
+ require 'vagrant/util/file_checksum'
6
+
7
+ describe FileChecksum do
8
+ include_context "unit"
9
+
10
+ let(:environment) { isolated_environment }
11
+
12
+ it "should return a valid checksum for a file" do
13
+ file = environment.workdir.join("file")
14
+ file.open("w+") { |f| f.write("HELLO!") }
15
+
16
+ # Check multiple digests
17
+ instance = described_class.new(file, Digest::MD5)
18
+ instance.checksum.should == "9ac96c64417b5976a58839eceaa77956"
19
+
20
+ instance = described_class.new(file, Digest::SHA1)
21
+ instance.checksum.should == "264b207c7913e461c43d0f63d2512f4017af4755"
22
+ end
23
+ end
@@ -0,0 +1,38 @@
1
+ require File.expand_path("../../../base", __FILE__)
2
+
3
+ require "vagrant/util/hash_with_indifferent_access"
4
+
5
+ describe Vagrant::Util::HashWithIndifferentAccess do
6
+ let(:instance) { described_class.new }
7
+
8
+ it "is a Hash" do
9
+ instance.should be_kind_of(Hash)
10
+ end
11
+
12
+ it "allows indifferent access when setting with a string" do
13
+ instance["foo"] = "bar"
14
+ instance[:foo].should == "bar"
15
+ end
16
+
17
+ it "allows indifferent access when setting with a symbol" do
18
+ instance[:foo] = "bar"
19
+ instance["foo"].should == "bar"
20
+ end
21
+
22
+ it "allows indifferent key lookup" do
23
+ instance["foo"] = "bar"
24
+ instance.key?(:foo).should be
25
+ instance.has_key?(:foo).should be
26
+ instance.include?(:foo).should be
27
+ instance.member?(:foo).should be
28
+ end
29
+
30
+ it "allows for defaults to be passed in via an initializer block" do
31
+ instance = described_class.new do |h,k|
32
+ h[k] = "foo"
33
+ end
34
+
35
+ instance[:foo].should == "foo"
36
+ instance["bar"].should == "foo"
37
+ end
38
+ end
@@ -0,0 +1,53 @@
1
+ require File.expand_path("../../../base", __FILE__)
2
+
3
+ require "socket"
4
+
5
+ require "vagrant/util/is_port_open"
6
+
7
+ describe Vagrant::Util::IsPortOpen do
8
+ let(:klass) do
9
+ Class.new do
10
+ extend Vagrant::Util::IsPortOpen
11
+ end
12
+ end
13
+
14
+ let(:open_port) { 52811 }
15
+ let(:closed_port) { 52811 }
16
+
17
+ it "should report open ports" do
18
+ # Start a thread which listens on a port
19
+ thr = Thread.new do
20
+ server = TCPServer.new(open_port)
21
+ Thread.current[:running] = true
22
+
23
+ # Wait until we're told to die
24
+ Thread.current[:die] = false
25
+ while !Thread.current[:die]
26
+ Thread.pass
27
+ end
28
+
29
+ # Die!
30
+ server.close
31
+ end
32
+
33
+ # Wait until the server is running
34
+ while !thr[:running]
35
+ Thread.pass
36
+ end
37
+
38
+ # Verify that we report the port is open
39
+ klass.is_port_open?("localhost", open_port).should be
40
+
41
+ # Kill the thread
42
+ thr[:die] = true
43
+ thr.join
44
+ end
45
+
46
+ it "should report closed ports" do
47
+ # This CAN fail, since port 52811 might actually be in use, but I'm
48
+ # not sure what to do except choose some random port and hope for the
49
+ # best, really.
50
+ klass.is_port_open?("localhost", closed_port).should_not be
51
+ end
52
+ end
53
+
@@ -0,0 +1,16 @@
1
+ require File.expand_path("../../../base", __FILE__)
2
+
3
+ require "vagrant/util/line_ending_helpers"
4
+
5
+ describe Vagrant::Util::LineEndingHelpers do
6
+ let(:klass) do
7
+ Class.new do
8
+ extend Vagrant::Util::LineEndingHelpers
9
+ end
10
+ end
11
+
12
+ it "should convert DOS to unix-style line endings" do
13
+ klass.dos_to_unix("foo\r\nbar\r\n").should == "foo\nbar\n"
14
+ end
15
+ end
16
+
@@ -0,0 +1,17 @@
1
+ require File.expand_path("../../../base", __FILE__)
2
+
3
+ require "vagrant/util/network_ip"
4
+
5
+ describe Vagrant::Util::NetworkIP do
6
+ let(:klass) do
7
+ Class.new do
8
+ extend Vagrant::Util::NetworkIP
9
+ end
10
+ end
11
+
12
+ describe "network address" do
13
+ it "calculates it properly" do
14
+ klass.network_address("192.168.2.234", "255.255.255.0").should == "192.168.2.0"
15
+ end
16
+ end
17
+ end