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,242 @@
1
+ require File.expand_path("../../../base", __FILE__)
2
+
3
+ describe Vagrant::Action::Builder do
4
+ let(:data) { { :data => [] } }
5
+
6
+ # This returns a proc that can be used with the builder
7
+ # that simply appends data to an array in the env.
8
+ def appender_proc(data)
9
+ result = Proc.new { |env| env[:data] << data }
10
+
11
+ # Define a to_s on it for helpful output
12
+ result.define_singleton_method(:to_s) do
13
+ "<Appender: #{data}>"
14
+ end
15
+
16
+ result
17
+ end
18
+
19
+ context "copying" do
20
+ it "should copy the stack" do
21
+ copy = subject.dup
22
+ copy.stack.object_id.should_not == subject.stack.object_id
23
+ end
24
+ end
25
+
26
+ context "build" do
27
+ it "should provide build as a shortcut for basic sequences" do
28
+ data = {}
29
+ proc = Proc.new { |env| env[:data] = true }
30
+
31
+ subject = described_class.build(proc)
32
+ subject.call(data)
33
+
34
+ data[:data].should == true
35
+ end
36
+ end
37
+
38
+ context "basic `use`" do
39
+ it "should add items to the stack and make them callable" do
40
+ data = {}
41
+ proc = Proc.new { |env| env[:data] = true }
42
+
43
+ subject.use proc
44
+ subject.call(data)
45
+
46
+ data[:data].should == true
47
+ end
48
+
49
+ it "should be able to add multiple items" do
50
+ data = {}
51
+ proc1 = Proc.new { |env| env[:one] = true }
52
+ proc2 = Proc.new { |env| env[:two] = true }
53
+
54
+ subject.use proc1
55
+ subject.use proc2
56
+ subject.call(data)
57
+
58
+ data[:one].should == true
59
+ data[:two].should == true
60
+ end
61
+
62
+ it "should be able to add another builder" do
63
+ data = {}
64
+ proc1 = Proc.new { |env| env[:one] = true }
65
+
66
+ # Build the first builder
67
+ one = described_class.new
68
+ one.use proc1
69
+
70
+ # Add it to this builder
71
+ two = described_class.new
72
+ two.use one
73
+
74
+ # Call the 2nd and verify results
75
+ two.call(data)
76
+ data[:one].should == true
77
+ end
78
+ end
79
+
80
+ context "inserting" do
81
+ it "can insert at an index" do
82
+ subject.use appender_proc(1)
83
+ subject.insert(0, appender_proc(2))
84
+ subject.call(data)
85
+
86
+ data[:data].should == [2, 1]
87
+ end
88
+
89
+ it "can insert by name" do
90
+ # Create the proc then make sure it has a name
91
+ bar_proc = appender_proc(2)
92
+ def bar_proc.name; :bar; end
93
+
94
+ subject.use appender_proc(1)
95
+ subject.use bar_proc
96
+ subject.insert_before :bar, appender_proc(3)
97
+ subject.call(data)
98
+
99
+ data[:data].should == [1, 3, 2]
100
+ end
101
+
102
+ it "can insert next to a previous object" do
103
+ proc2 = appender_proc(2)
104
+ subject.use appender_proc(1)
105
+ subject.use proc2
106
+ subject.insert(proc2, appender_proc(3))
107
+ subject.call(data)
108
+
109
+ data[:data].should == [1, 3, 2]
110
+ end
111
+
112
+ it "can insert before" do
113
+ subject.use appender_proc(1)
114
+ subject.insert_before 0, appender_proc(2)
115
+ subject.call(data)
116
+
117
+ data[:data].should == [2, 1]
118
+ end
119
+
120
+ it "can insert after" do
121
+ subject.use appender_proc(1)
122
+ subject.use appender_proc(3)
123
+ subject.insert_after 0, appender_proc(2)
124
+ subject.call(data)
125
+
126
+ data[:data].should == [1, 2, 3]
127
+ end
128
+
129
+ it "merges middleware stacks of other builders" do
130
+ wrapper_class = Proc.new do |letter|
131
+ Class.new do
132
+ def initialize(app, env)
133
+ @app = app
134
+ end
135
+
136
+ define_method(:call) do |env|
137
+ env[:data] << "#{letter}1"
138
+ @app.call(env)
139
+ env[:data] << "#{letter}2"
140
+ end
141
+ end
142
+ end
143
+
144
+ proc2 = appender_proc(2)
145
+ subject.use appender_proc(1)
146
+ subject.use proc2
147
+
148
+ builder = described_class.new
149
+ builder.use wrapper_class.call("A")
150
+ builder.use wrapper_class.call("B")
151
+
152
+ subject.insert(proc2, builder)
153
+ subject.call(data)
154
+
155
+ data[:data].should == [1, "A1", "B1", 2, "B2", "A2"]
156
+ end
157
+
158
+ it "raises an exception if an invalid object given for insert" do
159
+ expect { subject.insert "object", appender_proc(1) }.
160
+ to raise_error(RuntimeError)
161
+ end
162
+
163
+ it "raises an exception if an invalid object given for insert_after" do
164
+ expect { subject.insert_after "object", appender_proc(1) }.
165
+ to raise_error(RuntimeError)
166
+ end
167
+ end
168
+
169
+ context "replace" do
170
+ it "can replace an object" do
171
+ proc1 = appender_proc(1)
172
+ proc2 = appender_proc(2)
173
+
174
+ subject.use proc1
175
+ subject.replace proc1, proc2
176
+ subject.call(data)
177
+
178
+ data[:data].should == [2]
179
+ end
180
+
181
+ it "can replace by index" do
182
+ proc1 = appender_proc(1)
183
+ proc2 = appender_proc(2)
184
+
185
+ subject.use proc1
186
+ subject.replace 0, proc2
187
+ subject.call(data)
188
+
189
+ data[:data].should == [2]
190
+ end
191
+ end
192
+
193
+ context "deleting" do
194
+ it "can delete by object" do
195
+ proc1 = appender_proc(1)
196
+
197
+ subject.use proc1
198
+ subject.use appender_proc(2)
199
+ subject.delete proc1
200
+ subject.call(data)
201
+
202
+ data[:data].should == [2]
203
+ end
204
+
205
+ it "can delete by index" do
206
+ proc1 = appender_proc(1)
207
+
208
+ subject.use proc1
209
+ subject.use appender_proc(2)
210
+ subject.delete 0
211
+ subject.call(data)
212
+
213
+ data[:data].should == [2]
214
+ end
215
+ end
216
+
217
+ describe "action hooks" do
218
+ it "applies them properly" do
219
+ hook = double("hook")
220
+ hook.stub(:apply) do |builder|
221
+ builder.use appender_proc(2)
222
+ end
223
+
224
+ data[:action_hooks] = [hook]
225
+
226
+ subject.use appender_proc(1)
227
+ subject.call(data)
228
+
229
+ data[:data].should == [1, 2]
230
+ data[:action_hooks_already_ran].should == true
231
+ end
232
+
233
+ it "applies without prepend/append if it has already" do
234
+ hook = double("hook")
235
+ hook.should_receive(:apply).with(anything, { :no_prepend_or_append => true }).once
236
+
237
+ data[:action_hooks] = [hook]
238
+ data[:action_hooks_already_ran] = true
239
+ subject.call(data)
240
+ end
241
+ end
242
+ end
@@ -0,0 +1,145 @@
1
+ require File.expand_path("../../../../base", __FILE__)
2
+
3
+ describe Vagrant::Action::Builtin::Call do
4
+ let(:app) { lambda { |env| } }
5
+ let(:env) { {} }
6
+
7
+ it "should yield the env to the block" do
8
+ received = nil
9
+
10
+ callable = lambda do |env|
11
+ env[:result] = "value"
12
+ end
13
+
14
+ described_class.new(app, env, callable) do |env, builder|
15
+ received = env[:result]
16
+ end.call({})
17
+
18
+ received.should == "value"
19
+ end
20
+
21
+ it "should update the original env with any changes" do
22
+ callable = lambda { |env| }
23
+ next_step = lambda { |env| env[:inner] = true }
24
+
25
+ described_class.new(app, env, callable) do |_env, builder|
26
+ builder.use next_step
27
+ end.call(env)
28
+
29
+ env[:inner].should == true
30
+ end
31
+
32
+ it "should call the callable with the original environment" do
33
+ received = nil
34
+ callable = lambda { |env| received = env[:foo] }
35
+
36
+ described_class.new(app, env, callable) do |_env, _builder|
37
+ # Nothing.
38
+ end.call({ :foo => :bar })
39
+
40
+ received.should == :bar
41
+ end
42
+
43
+ it "should call the next builder" do
44
+ received = nil
45
+ callable = lambda { |env| }
46
+ next_step = lambda { |env| received = "value" }
47
+
48
+ described_class.new(app, env, callable) do |_env, builder|
49
+ builder.use next_step
50
+ end.call({})
51
+
52
+ received.should == "value"
53
+ end
54
+
55
+ it "should call the next builder with the original environment" do
56
+ received = nil
57
+ callable = lambda { |env| }
58
+ next_step = lambda { |env| received = env[:foo] }
59
+
60
+ described_class.new(app, env, callable) do |_env, builder|
61
+ builder.use next_step
62
+ end.call({ :foo => :bar })
63
+
64
+ received.should == :bar
65
+ end
66
+
67
+ it "should instantiate the callable with the extra args" do
68
+ env = {}
69
+
70
+ callable = Class.new do
71
+ def initialize(app, env, arg)
72
+ env[:arg] = arg
73
+ end
74
+
75
+ def call(env); end
76
+ end
77
+
78
+ result = nil
79
+ instance = described_class.new(app, env, callable, :foo) do |inner_env, _builder|
80
+ result = inner_env[:arg]
81
+ end
82
+ instance.call(env)
83
+
84
+ result.should == :foo
85
+ end
86
+
87
+ it "should call the recover method for the sequence in an error" do
88
+ # Basic variables
89
+ callable = lambda { |env| }
90
+
91
+ # Build the steps for the test
92
+ basic_step = Class.new do
93
+ def initialize(app, env)
94
+ @app = app
95
+ @env = env
96
+ end
97
+
98
+ def call(env)
99
+ @app.call(env)
100
+ end
101
+ end
102
+
103
+ step_a = Class.new(basic_step) do
104
+ def call(env)
105
+ env[:steps] << :call_A
106
+ super
107
+ end
108
+
109
+ def recover(env)
110
+ env[:steps] << :recover_A
111
+ end
112
+ end
113
+
114
+ step_b = Class.new(basic_step) do
115
+ def call(env)
116
+ env[:steps] << :call_B
117
+ super
118
+ end
119
+
120
+ def recover(env)
121
+ env[:steps] << :recover_B
122
+ end
123
+ end
124
+
125
+ instance = described_class.new(app, env, callable) do |_env, builder|
126
+ builder.use step_a
127
+ builder.use step_b
128
+ end
129
+
130
+ env[:steps] = []
131
+ instance.call(env)
132
+ instance.recover(env)
133
+
134
+ env[:steps].should == [:call_A, :call_B, :recover_B, :recover_A]
135
+ end
136
+
137
+ it "should recover even if it failed in the callable" do
138
+ callable = lambda { |env| raise "error" }
139
+
140
+ instance = described_class.new(app, env, callable) { |_env, _builder| }
141
+ instance.call(env) rescue nil
142
+ expect { instance.recover(env) }.
143
+ to_not raise_error
144
+ end
145
+ end
@@ -0,0 +1,36 @@
1
+ require File.expand_path("../../../../base", __FILE__)
2
+
3
+ describe Vagrant::Action::Builtin::Confirm do
4
+ let(:app) { lambda { |env| } }
5
+ let(:env) { { :ui => double("ui") } }
6
+ let(:message) { "foo" }
7
+
8
+ ["y", "Y"].each do |valid|
9
+ it "should set the result to true if '#{valid}' is given" do
10
+ env[:ui].should_receive(:ask).with(message).and_return(valid)
11
+ described_class.new(app, env, message).call(env)
12
+ env[:result].should be
13
+ end
14
+ end
15
+
16
+ it "should set the result to true if force matches" do
17
+ force_key = :tubes
18
+ env[force_key] = true
19
+ described_class.new(app, env, message, force_key).call(env)
20
+ env[:result].should be
21
+ end
22
+
23
+ it "should ask if force is not true" do
24
+ force_key = :tubes
25
+ env[force_key] = false
26
+ env[:ui].should_receive(:ask).with(message).and_return("nope")
27
+ described_class.new(app, env, message).call(env)
28
+ env[:result].should_not be
29
+ end
30
+
31
+ it "should set result to false if anything else is given" do
32
+ env[:ui].should_receive(:ask).with(message).and_return("nope")
33
+ described_class.new(app, env, message).call(env)
34
+ env[:result].should_not be
35
+ end
36
+ end
@@ -0,0 +1,20 @@
1
+ require File.expand_path("../../../../base", __FILE__)
2
+
3
+ describe Vagrant::Action::Builtin::EnvSet do
4
+ let(:app) { lambda { |env| } }
5
+ let(:env) { {} }
6
+
7
+ it "should set the new environment" do
8
+ described_class.new(app, env, :foo => :bar).call(env)
9
+
10
+ env[:foo].should == :bar
11
+ end
12
+
13
+ it "should call the next middleware" do
14
+ callable = lambda { |env| env[:called] = env[:foo] }
15
+
16
+ env[:called].should be_nil
17
+ described_class.new(callable, env, :foo => :yep).call(env)
18
+ env[:called].should == :yep
19
+ end
20
+ end
@@ -0,0 +1,61 @@
1
+ require File.expand_path("../../../../base", __FILE__)
2
+
3
+ describe Vagrant::Action::Builtin::GracefulHalt do
4
+ let(:app) { lambda { |env| } }
5
+ let(:env) { { :machine => machine, :ui => ui } }
6
+ let(:machine) do
7
+ result = double("machine")
8
+ result.stub(:config).and_return(machine_config)
9
+ result.stub(:guest).and_return(machine_guest)
10
+ result.stub(:state).and_return(machine_state)
11
+ result
12
+ end
13
+ let(:machine_config) do
14
+ double("machine_config").tap do |top_config|
15
+ vm_config = double("machien_vm_config")
16
+ vm_config.stub(:graceful_halt_retry_count => 2)
17
+ vm_config.stub(:graceful_halt_retry_interval => 0)
18
+ top_config.stub(:vm => vm_config)
19
+ end
20
+ end
21
+ let(:machine_guest) { double("machine_guest") }
22
+ let(:machine_state) do
23
+ double("machine_state").tap do |result|
24
+ result.stub(:id).and_return(:unknown)
25
+ end
26
+ end
27
+ let(:target_state) { :target }
28
+ let(:ui) do
29
+ double("ui").tap do |result|
30
+ result.stub(:info)
31
+ end
32
+ end
33
+
34
+ it "should do nothing if force is specified" do
35
+ env[:force_halt] = true
36
+
37
+ machine_guest.should_not_receive(:capability)
38
+
39
+ described_class.new(app, env, target_state).call(env)
40
+
41
+ env[:result].should == false
42
+ end
43
+
44
+ it "should do nothing if there is an invalid source state" do
45
+ machine_state.stub(:id).and_return(:invalid_source)
46
+ machine_guest.should_not_receive(:capability)
47
+
48
+ described_class.new(app, env, target_state, :target_source).call(env)
49
+
50
+ env[:result].should == false
51
+ end
52
+
53
+ it "should gracefully halt and wait for the target state" do
54
+ machine_guest.should_receive(:capability).with(:halt).once
55
+ machine_state.stub(:id).and_return(target_state)
56
+
57
+ described_class.new(app, env, target_state).call(env)
58
+
59
+ env[:result].should == true
60
+ end
61
+ end
@@ -0,0 +1,98 @@
1
+ require File.expand_path("../../../../base", __FILE__)
2
+
3
+ describe Vagrant::Action::Builtin::Lock do
4
+ let(:app) { lambda { |env| } }
5
+ let(:env) { {} }
6
+ let(:lock_path) do
7
+ @__lock_path = Tempfile.new("vagrant-test-lock")
8
+ @__lock_path.path.to_s
9
+ end
10
+
11
+ let(:options) do
12
+ {
13
+ :exception => Class.new(StandardError),
14
+ :path => lock_path
15
+ }
16
+ end
17
+
18
+ it "should require a path" do
19
+ expect { described_class.new(app, env) }.
20
+ to raise_error(ArgumentError)
21
+
22
+ expect { described_class.new(app, env, :path => "foo") }.
23
+ to raise_error(ArgumentError)
24
+
25
+ expect { described_class.new(app, env, :exception => "foo") }.
26
+ to raise_error(ArgumentError)
27
+
28
+ expect { described_class.new(app, env, :path => "bar", :exception => "foo") }.
29
+ to_not raise_error
30
+ end
31
+
32
+ it "should allow the path to be a proc" do
33
+ inner_acquire = true
34
+ app = lambda do |env|
35
+ File.open(lock_path, "w+") do |f|
36
+ inner_acquire = f.flock(File::LOCK_EX | File::LOCK_NB)
37
+ end
38
+ end
39
+
40
+ options[:path] = lambda { |env| lock_path }
41
+
42
+ instance = described_class.new(app, env, options)
43
+ instance.call(env)
44
+
45
+ inner_acquire.should == false
46
+ end
47
+
48
+ it "should allow the exception to be a proc" do
49
+ exception = options[:exception]
50
+ options[:exception] = lambda { |env| exception }
51
+
52
+ File.open(lock_path, "w+") do |f|
53
+ # Acquire lock
54
+ f.flock(File::LOCK_EX | File::LOCK_NB).should == 0
55
+
56
+ # Test!
57
+ instance = described_class.new(app, env, options)
58
+ expect { instance.call(env) }.
59
+ to raise_error(exception)
60
+ end
61
+ end
62
+
63
+ it "should call the middleware with the lock held" do
64
+ inner_acquire = true
65
+ app = lambda do |env|
66
+ File.open(lock_path, "w+") do |f|
67
+ inner_acquire = f.flock(File::LOCK_EX | File::LOCK_NB)
68
+ end
69
+ end
70
+
71
+ instance = described_class.new(app, env, options)
72
+ instance.call(env)
73
+
74
+ inner_acquire.should == false
75
+ end
76
+
77
+ it "should raise an exception if the lock is already held" do
78
+ File.open(lock_path, "w+") do |f|
79
+ # Acquire lock
80
+ f.flock(File::LOCK_EX | File::LOCK_NB).should == 0
81
+
82
+ # Test!
83
+ instance = described_class.new(app, env, options)
84
+ expect { instance.call(env) }.
85
+ to raise_error(options[:exception])
86
+ end
87
+ end
88
+
89
+ it "should allow nesting locks within the same middleware sequence" do
90
+ called = false
91
+ app = lambda { |env| called = true }
92
+ inner = described_class.new(app, env, options)
93
+ outer = described_class.new(inner, env, options)
94
+ outer.call(env)
95
+
96
+ called.should == true
97
+ end
98
+ end
@@ -0,0 +1,57 @@
1
+ require File.expand_path("../../../../base", __FILE__)
2
+
3
+ require "vagrant/util/ssh"
4
+
5
+ describe Vagrant::Action::Builtin::SSHExec do
6
+ let(:app) { lambda { |env| } }
7
+ let(:env) { { :machine => machine } }
8
+ let(:machine) do
9
+ result = double("machine")
10
+ result.stub(:ssh_info).and_return(machine_ssh_info)
11
+ result
12
+ end
13
+ let(:machine_ssh_info) { {} }
14
+ let(:ssh_klass) { Vagrant::Util::SSH }
15
+
16
+ before(:each) do
17
+ # Stub the methods so that even if we test incorrectly, no side
18
+ # effects actually happen.
19
+ ssh_klass.stub(:check_key_permissions)
20
+ ssh_klass.stub(:exec)
21
+ end
22
+
23
+ it "should raise an exception if SSH is not ready" do
24
+ not_ready_machine = double("machine")
25
+ not_ready_machine.stub(:ssh_info).and_return(nil)
26
+
27
+ env[:machine] = not_ready_machine
28
+ expect { described_class.new(app, env).call(env) }.
29
+ to raise_error(Vagrant::Errors::SSHNotReady)
30
+ end
31
+
32
+ it "should check key permissions then exec" do
33
+ machine_ssh_info[:private_key_path] = "/foo"
34
+
35
+ ssh_klass.should_receive(:check_key_permissions).
36
+ with(Pathname.new(machine_ssh_info[:private_key_path])).
37
+ once.
38
+ ordered
39
+
40
+ ssh_klass.should_receive(:exec).
41
+ with(machine_ssh_info, nil).
42
+ once.
43
+ ordered
44
+
45
+ described_class.new(app, env).call(env)
46
+ end
47
+
48
+ it "should exec with the options given in `ssh_opts`" do
49
+ ssh_opts = { :foo => :bar }
50
+
51
+ ssh_klass.should_receive(:exec).
52
+ with(machine_ssh_info, ssh_opts)
53
+
54
+ env[:ssh_opts] = ssh_opts
55
+ described_class.new(app, env).call(env)
56
+ end
57
+ end