vagrant-fixed-ssh 1.0.7

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 (413) hide show
  1. data/.gitignore +46 -0
  2. data/.yardopts +1 -0
  3. data/CHANGELOG.md +723 -0
  4. data/Gemfile +3 -0
  5. data/LICENSE +22 -0
  6. data/README.md +121 -0
  7. data/Rakefile +18 -0
  8. data/bin/vagrant +60 -0
  9. data/config/default.rb +30 -0
  10. data/contrib/README.md +12 -0
  11. data/contrib/emacs/vagrant.el +8 -0
  12. data/contrib/vim/vagrantfile.vim +9 -0
  13. data/keys/README.md +17 -0
  14. data/keys/vagrant +27 -0
  15. data/keys/vagrant.pub +1 -0
  16. data/lib/vagrant.rb +197 -0
  17. data/lib/vagrant/action.rb +63 -0
  18. data/lib/vagrant/action/box/destroy.rb +25 -0
  19. data/lib/vagrant/action/box/download.rb +84 -0
  20. data/lib/vagrant/action/box/package.rb +19 -0
  21. data/lib/vagrant/action/box/unpackage.rb +61 -0
  22. data/lib/vagrant/action/box/verify.rb +23 -0
  23. data/lib/vagrant/action/builder.rb +128 -0
  24. data/lib/vagrant/action/builtin.rb +171 -0
  25. data/lib/vagrant/action/env/set.rb +21 -0
  26. data/lib/vagrant/action/environment.rb +12 -0
  27. data/lib/vagrant/action/general/check_virtualbox.rb +28 -0
  28. data/lib/vagrant/action/general/package.rb +101 -0
  29. data/lib/vagrant/action/general/validate.rb +18 -0
  30. data/lib/vagrant/action/runner.rb +53 -0
  31. data/lib/vagrant/action/vm/boot.rb +53 -0
  32. data/lib/vagrant/action/vm/check_accessible.rb +23 -0
  33. data/lib/vagrant/action/vm/check_box.rb +33 -0
  34. data/lib/vagrant/action/vm/check_guest_additions.rb +38 -0
  35. data/lib/vagrant/action/vm/check_port_collisions.rb +89 -0
  36. data/lib/vagrant/action/vm/clean_machine_folder.rb +43 -0
  37. data/lib/vagrant/action/vm/clear_forwarded_ports.rb +18 -0
  38. data/lib/vagrant/action/vm/clear_network_interfaces.rb +31 -0
  39. data/lib/vagrant/action/vm/clear_shared_folders.rb +18 -0
  40. data/lib/vagrant/action/vm/customize.rb +36 -0
  41. data/lib/vagrant/action/vm/default_name.rb +22 -0
  42. data/lib/vagrant/action/vm/destroy.rb +19 -0
  43. data/lib/vagrant/action/vm/destroy_unused_network_interfaces.rb +20 -0
  44. data/lib/vagrant/action/vm/discard_state.rb +22 -0
  45. data/lib/vagrant/action/vm/export.rb +57 -0
  46. data/lib/vagrant/action/vm/forward_ports.rb +92 -0
  47. data/lib/vagrant/action/vm/halt.rb +32 -0
  48. data/lib/vagrant/action/vm/host_name.rb +21 -0
  49. data/lib/vagrant/action/vm/import.rb +48 -0
  50. data/lib/vagrant/action/vm/match_mac_address.rb +21 -0
  51. data/lib/vagrant/action/vm/network.rb +403 -0
  52. data/lib/vagrant/action/vm/nfs.rb +196 -0
  53. data/lib/vagrant/action/vm/package.rb +23 -0
  54. data/lib/vagrant/action/vm/package_vagrantfile.rb +36 -0
  55. data/lib/vagrant/action/vm/provision.rb +61 -0
  56. data/lib/vagrant/action/vm/provisioner_cleanup.rb +26 -0
  57. data/lib/vagrant/action/vm/prune_nfs_exports.rb +20 -0
  58. data/lib/vagrant/action/vm/resume.rb +20 -0
  59. data/lib/vagrant/action/vm/sane_defaults.rb +78 -0
  60. data/lib/vagrant/action/vm/setup_package_files.rb +54 -0
  61. data/lib/vagrant/action/vm/share_folders.rb +114 -0
  62. data/lib/vagrant/action/vm/suspend.rb +20 -0
  63. data/lib/vagrant/action/warden.rb +92 -0
  64. data/lib/vagrant/box.rb +44 -0
  65. data/lib/vagrant/box_collection.rb +58 -0
  66. data/lib/vagrant/cli.rb +76 -0
  67. data/lib/vagrant/command.rb +24 -0
  68. data/lib/vagrant/command/base.rb +167 -0
  69. data/lib/vagrant/command/box.rb +58 -0
  70. data/lib/vagrant/command/box_add.rb +37 -0
  71. data/lib/vagrant/command/box_list.rb +28 -0
  72. data/lib/vagrant/command/box_remove.rb +27 -0
  73. data/lib/vagrant/command/box_repackage.rb +27 -0
  74. data/lib/vagrant/command/destroy.rb +64 -0
  75. data/lib/vagrant/command/gem.rb +39 -0
  76. data/lib/vagrant/command/halt.rb +39 -0
  77. data/lib/vagrant/command/init.rb +40 -0
  78. data/lib/vagrant/command/package.rb +75 -0
  79. data/lib/vagrant/command/provision.rb +40 -0
  80. data/lib/vagrant/command/reload.rb +39 -0
  81. data/lib/vagrant/command/resume.rb +33 -0
  82. data/lib/vagrant/command/ssh.rb +90 -0
  83. data/lib/vagrant/command/ssh_config.rb +51 -0
  84. data/lib/vagrant/command/start_mixins.rb +26 -0
  85. data/lib/vagrant/command/status.rb +36 -0
  86. data/lib/vagrant/command/suspend.rb +33 -0
  87. data/lib/vagrant/command/up.rb +40 -0
  88. data/lib/vagrant/communication.rb +7 -0
  89. data/lib/vagrant/communication/base.rb +56 -0
  90. data/lib/vagrant/communication/ssh.rb +230 -0
  91. data/lib/vagrant/config.rb +49 -0
  92. data/lib/vagrant/config/base.rb +82 -0
  93. data/lib/vagrant/config/container.rb +37 -0
  94. data/lib/vagrant/config/error_recorder.rb +19 -0
  95. data/lib/vagrant/config/loader.rb +127 -0
  96. data/lib/vagrant/config/nfs.rb +8 -0
  97. data/lib/vagrant/config/package.rb +7 -0
  98. data/lib/vagrant/config/ssh.rb +27 -0
  99. data/lib/vagrant/config/top.rb +72 -0
  100. data/lib/vagrant/config/vagrant.rb +14 -0
  101. data/lib/vagrant/config/vm.rb +168 -0
  102. data/lib/vagrant/config/vm/provisioner.rb +52 -0
  103. data/lib/vagrant/config/vm/sub_vm.rb +17 -0
  104. data/lib/vagrant/data_store.rb +92 -0
  105. data/lib/vagrant/downloaders.rb +7 -0
  106. data/lib/vagrant/downloaders/base.rb +25 -0
  107. data/lib/vagrant/downloaders/file.rb +22 -0
  108. data/lib/vagrant/downloaders/http.rb +97 -0
  109. data/lib/vagrant/driver.rb +8 -0
  110. data/lib/vagrant/driver/virtualbox.rb +134 -0
  111. data/lib/vagrant/driver/virtualbox_4_0.rb +459 -0
  112. data/lib/vagrant/driver/virtualbox_4_1.rb +459 -0
  113. data/lib/vagrant/driver/virtualbox_4_2.rb +606 -0
  114. data/lib/vagrant/driver/virtualbox_base.rb +326 -0
  115. data/lib/vagrant/environment.rb +522 -0
  116. data/lib/vagrant/errors.rb +445 -0
  117. data/lib/vagrant/guest.rb +18 -0
  118. data/lib/vagrant/guest/arch.rb +56 -0
  119. data/lib/vagrant/guest/base.rb +99 -0
  120. data/lib/vagrant/guest/debian.rb +64 -0
  121. data/lib/vagrant/guest/fedora.rb +66 -0
  122. data/lib/vagrant/guest/freebsd.rb +86 -0
  123. data/lib/vagrant/guest/gentoo.rb +46 -0
  124. data/lib/vagrant/guest/linux.rb +118 -0
  125. data/lib/vagrant/guest/linux/config.rb +19 -0
  126. data/lib/vagrant/guest/linux/error.rb +9 -0
  127. data/lib/vagrant/guest/openbsd.rb +20 -0
  128. data/lib/vagrant/guest/redhat.rb +67 -0
  129. data/lib/vagrant/guest/solaris.rb +118 -0
  130. data/lib/vagrant/guest/suse.rb +17 -0
  131. data/lib/vagrant/guest/ubuntu.rb +23 -0
  132. data/lib/vagrant/hosts.rb +37 -0
  133. data/lib/vagrant/hosts/arch.rb +55 -0
  134. data/lib/vagrant/hosts/base.rb +66 -0
  135. data/lib/vagrant/hosts/bsd.rb +97 -0
  136. data/lib/vagrant/hosts/fedora.rb +47 -0
  137. data/lib/vagrant/hosts/freebsd.rb +41 -0
  138. data/lib/vagrant/hosts/gentoo.rb +20 -0
  139. data/lib/vagrant/hosts/linux.rb +94 -0
  140. data/lib/vagrant/hosts/opensuse.rb +30 -0
  141. data/lib/vagrant/hosts/windows.rb +16 -0
  142. data/lib/vagrant/plugin.rb +81 -0
  143. data/lib/vagrant/provisioners.rb +12 -0
  144. data/lib/vagrant/provisioners/base.rb +44 -0
  145. data/lib/vagrant/provisioners/chef.rb +168 -0
  146. data/lib/vagrant/provisioners/chef_client.rb +132 -0
  147. data/lib/vagrant/provisioners/chef_solo.rb +234 -0
  148. data/lib/vagrant/provisioners/puppet.rb +176 -0
  149. data/lib/vagrant/provisioners/puppet_server.rb +78 -0
  150. data/lib/vagrant/provisioners/shell.rb +103 -0
  151. data/lib/vagrant/registry.rb +52 -0
  152. data/lib/vagrant/ssh.rb +126 -0
  153. data/lib/vagrant/test_helpers.rb +154 -0
  154. data/lib/vagrant/ui.rb +168 -0
  155. data/lib/vagrant/util.rb +12 -0
  156. data/lib/vagrant/util/ansi_escape_code_remover.rb +34 -0
  157. data/lib/vagrant/util/busy.rb +59 -0
  158. data/lib/vagrant/util/counter.rb +24 -0
  159. data/lib/vagrant/util/file_checksum.rb +38 -0
  160. data/lib/vagrant/util/file_mode.rb +12 -0
  161. data/lib/vagrant/util/hash_with_indifferent_access.rb +63 -0
  162. data/lib/vagrant/util/is_port_open.rb +38 -0
  163. data/lib/vagrant/util/line_ending_helpers.rb +14 -0
  164. data/lib/vagrant/util/network_ip.rb +28 -0
  165. data/lib/vagrant/util/platform.rb +68 -0
  166. data/lib/vagrant/util/retryable.rb +25 -0
  167. data/lib/vagrant/util/safe_exec.rb +36 -0
  168. data/lib/vagrant/util/safe_puts.rb +31 -0
  169. data/lib/vagrant/util/stacked_proc_runner.rb +35 -0
  170. data/lib/vagrant/util/subprocess.rb +247 -0
  171. data/lib/vagrant/util/template_renderer.rb +83 -0
  172. data/lib/vagrant/version.rb +6 -0
  173. data/lib/vagrant/vm.rb +195 -0
  174. data/tasks/acceptance.rake +113 -0
  175. data/tasks/bundler.rake +3 -0
  176. data/tasks/test.rake +20 -0
  177. data/templates/commands/init/Vagrantfile.erb +99 -0
  178. data/templates/commands/ssh_config/config.erb +15 -0
  179. data/templates/config/validation_failed.erb +7 -0
  180. data/templates/guests/arch/network_dhcp.erb +7 -0
  181. data/templates/guests/arch/network_static.erb +7 -0
  182. data/templates/guests/debian/network_dhcp.erb +6 -0
  183. data/templates/guests/debian/network_static.erb +7 -0
  184. data/templates/guests/fedora/network_dhcp.erb +6 -0
  185. data/templates/guests/fedora/network_static.erb +13 -0
  186. data/templates/guests/freebsd/network_dhcp.erb +3 -0
  187. data/templates/guests/freebsd/network_static.erb +3 -0
  188. data/templates/guests/gentoo/network_dhcp.erb +4 -0
  189. data/templates/guests/gentoo/network_static.erb +4 -0
  190. data/templates/guests/redhat/network_dhcp.erb +6 -0
  191. data/templates/guests/redhat/network_static.erb +7 -0
  192. data/templates/locales/en.yml +759 -0
  193. data/templates/nfs/exports.erb +5 -0
  194. data/templates/nfs/exports_freebsd.erb +5 -0
  195. data/templates/nfs/exports_linux.erb +5 -0
  196. data/templates/package_Vagrantfile.erb +11 -0
  197. data/templates/provisioners/chef_client/client.erb +32 -0
  198. data/templates/provisioners/chef_solo/solo.erb +25 -0
  199. data/test/acceptance/base.rb +48 -0
  200. data/test/acceptance/box_test.rb +99 -0
  201. data/test/acceptance/destroy_test.rb +37 -0
  202. data/test/acceptance/halt_test.rb +72 -0
  203. data/test/acceptance/init_test.rb +33 -0
  204. data/test/acceptance/networking/host_only_test.rb +37 -0
  205. data/test/acceptance/networking/port_forward_test.rb +125 -0
  206. data/test/acceptance/package_test.rb +46 -0
  207. data/test/acceptance/provisioning/basic_test.rb +61 -0
  208. data/test/acceptance/provisioning/chef_solo_test.rb +37 -0
  209. data/test/acceptance/provisioning/shell_test.rb +53 -0
  210. data/test/acceptance/resume_test.rb +17 -0
  211. data/test/acceptance/shared_folders_test.rb +84 -0
  212. data/test/acceptance/skeletons/chef_solo_basic/README.md +3 -0
  213. data/test/acceptance/skeletons/chef_solo_basic/cookbooks/basic/recipes/default.rb +5 -0
  214. data/test/acceptance/skeletons/chef_solo_json/README.md +3 -0
  215. data/test/acceptance/skeletons/chef_solo_json/cookbooks/basic/recipes/default.rb +6 -0
  216. data/test/acceptance/skeletons/provisioner_multi/README.md +3 -0
  217. data/test/acceptance/skeletons/provisioner_multi/cookbooks/basic/recipes/default.rb +5 -0
  218. data/test/acceptance/ssh_test.rb +46 -0
  219. data/test/acceptance/support/config.rb +42 -0
  220. data/test/acceptance/support/isolated_environment.rb +117 -0
  221. data/test/acceptance/support/matchers/have_color.rb +9 -0
  222. data/test/acceptance/support/matchers/match_output.rb +14 -0
  223. data/test/acceptance/support/matchers/succeed.rb +14 -0
  224. data/test/acceptance/support/network_tests.rb +29 -0
  225. data/test/acceptance/support/output.rb +95 -0
  226. data/test/acceptance/support/shared/base_context.rb +72 -0
  227. data/test/acceptance/support/shared/command_examples.rb +33 -0
  228. data/test/acceptance/support/virtualbox.rb +36 -0
  229. data/test/acceptance/suspend_test.rb +56 -0
  230. data/test/acceptance/up_basic_test.rb +33 -0
  231. data/test/acceptance/up_with_box_url.rb +40 -0
  232. data/test/acceptance/vagrant_test.rb +47 -0
  233. data/test/acceptance/version_test.rb +15 -0
  234. data/test/buildbot/README.md +72 -0
  235. data/test/buildbot/buildbot_config/__init__.py +0 -0
  236. data/test/buildbot/buildbot_config/config/__init__.py +0 -0
  237. data/test/buildbot/buildbot_config/config/loader.py +24 -0
  238. data/test/buildbot/buildbot_config/config/master.py +24 -0
  239. data/test/buildbot/buildbot_config/config/slave.py +22 -0
  240. data/test/buildbot/buildbot_config/master/__init__.py +6 -0
  241. data/test/buildbot/buildbot_config/master/builders.py +78 -0
  242. data/test/buildbot/buildbot_config/master/buildsteps.py +100 -0
  243. data/test/buildbot/buildbot_config/master/change_sources.py +8 -0
  244. data/test/buildbot/buildbot_config/master/schedulers.py +32 -0
  245. data/test/buildbot/buildbot_config/master/slaves.py +60 -0
  246. data/test/buildbot/buildbot_config/master/status.py +52 -0
  247. data/test/buildbot/master/Makefile.sample +28 -0
  248. data/test/buildbot/master/buildbot.tac +36 -0
  249. data/test/buildbot/master/master.cfg +67 -0
  250. data/test/buildbot/master/public_html/bg_gradient.jpg +0 -0
  251. data/test/buildbot/master/public_html/default.css +545 -0
  252. data/test/buildbot/master/public_html/favicon.ico +0 -0
  253. data/test/buildbot/master/public_html/robots.txt +10 -0
  254. data/test/buildbot/master/public_html/static/css/bootstrap-1.4.0.min.css +356 -0
  255. data/test/buildbot/master/public_html/static/css/prettify.css +97 -0
  256. data/test/buildbot/master/public_html/static/css/syntax.css +60 -0
  257. data/test/buildbot/master/public_html/static/css/vagrant.base.css +205 -0
  258. data/test/buildbot/master/public_html/static/images/base_box_mac.jpg +0 -0
  259. data/test/buildbot/master/public_html/static/images/getting-started/success.jpg +0 -0
  260. data/test/buildbot/master/public_html/static/images/icons/error.png +0 -0
  261. data/test/buildbot/master/public_html/static/images/vagrant_chilling.png +0 -0
  262. data/test/buildbot/master/public_html/static/images/vagrant_holding.png +0 -0
  263. data/test/buildbot/master/public_html/static/images/vagrant_looking.png +0 -0
  264. data/test/buildbot/master/public_html/static/images/windows/alter_path.jpg +0 -0
  265. data/test/buildbot/master/public_html/static/images/windows/edit_path.jpg +0 -0
  266. data/test/buildbot/master/public_html/static/images/windows/environment_variables_button.jpg +0 -0
  267. data/test/buildbot/master/public_html/static/images/windows/port_and_ppk_path.jpg +0 -0
  268. data/test/buildbot/master/public_html/static/images/windows/ppk_selection.jpg +0 -0
  269. data/test/buildbot/master/public_html/static/images/windows/putty_first_screen.jpg +0 -0
  270. data/test/buildbot/master/public_html/static/images/windows/save_result.jpg +0 -0
  271. data/test/buildbot/master/public_html/static/images/windows/vbox_manage_default_location.jpg +0 -0
  272. data/test/buildbot/master/public_html/static/js/bootstrap-tabs.js +80 -0
  273. data/test/buildbot/master/public_html/static/js/jquery-1.7.min.js +4 -0
  274. data/test/buildbot/master/templates/authfail.html +9 -0
  275. data/test/buildbot/master/templates/build.html +205 -0
  276. data/test/buildbot/master/templates/builder.html +118 -0
  277. data/test/buildbot/master/templates/builders.html +33 -0
  278. data/test/buildbot/master/templates/buildslave.html +72 -0
  279. data/test/buildbot/master/templates/buildslaves.html +70 -0
  280. data/test/buildbot/master/templates/change.html +15 -0
  281. data/test/buildbot/master/templates/layouts/base.html +58 -0
  282. data/test/buildbot/master/templates/macros/box.html +37 -0
  283. data/test/buildbot/master/templates/macros/build_line.html +50 -0
  284. data/test/buildbot/master/templates/macros/change.html +81 -0
  285. data/test/buildbot/master/templates/macros/forms.html +300 -0
  286. data/test/buildbot/master/templates/root.html +42 -0
  287. data/test/buildbot/master/templates/waterfall.html +53 -0
  288. data/test/buildbot/requirements.txt +4 -0
  289. data/test/buildbot/scripts/deploy.sh +38 -0
  290. data/test/buildbot/scripts/setup.sh +107 -0
  291. data/test/buildbot/slave/buildbot.tac +43 -0
  292. data/test/buildbot/slave/info/admin +1 -0
  293. data/test/buildbot/slave/info/host +1 -0
  294. data/test/buildbot/tests/__init__.py +0 -0
  295. data/test/buildbot/tests/master/__init__.py +0 -0
  296. data/test/buildbot/tests/master/test_slaves.py +41 -0
  297. data/test/buildbot/vendor/choices-0.4.0.tar.gz +0 -0
  298. data/test/config/acceptance_boxes.yml +7 -0
  299. data/test/support/isolated_environment.rb +46 -0
  300. data/test/support/tempdir.rb +34 -0
  301. data/test/unit/base.rb +21 -0
  302. data/test/unit/support/isolated_environment.rb +47 -0
  303. data/test/unit/support/shared/base_context.rb +30 -0
  304. data/test/unit/vagrant/action/builder_test.rb +156 -0
  305. data/test/unit/vagrant/action/environment_test.rb +16 -0
  306. data/test/unit/vagrant/action/runner_test.rb +65 -0
  307. data/test/unit/vagrant/action/warden_test.rb +92 -0
  308. data/test/unit/vagrant/box_collection_test.rb +56 -0
  309. data/test/unit/vagrant/box_test.rb +34 -0
  310. data/test/unit/vagrant/command/base_test.rb +150 -0
  311. data/test/unit/vagrant/config/base_test.rb +48 -0
  312. data/test/unit/vagrant/config/loader_test.rb +79 -0
  313. data/test/unit/vagrant/config/ssh_test.rb +17 -0
  314. data/test/unit/vagrant/config/top_test.rb +69 -0
  315. data/test/unit/vagrant/config/vm_test.rb +71 -0
  316. data/test/unit/vagrant/config_test.rb +27 -0
  317. data/test/unit/vagrant/data_store_test.rb +79 -0
  318. data/test/unit/vagrant/downloaders/base_test.rb +18 -0
  319. data/test/unit/vagrant/downloaders/file_test.rb +75 -0
  320. data/test/unit/vagrant/downloaders/http_test.rb +19 -0
  321. data/test/unit/vagrant/environment_test.rb +220 -0
  322. data/test/unit/vagrant/hosts_test.rb +36 -0
  323. data/test/unit/vagrant/registry_test.rb +74 -0
  324. data/test/unit/vagrant/util/ansi_escape_code_remover_test.rb +16 -0
  325. data/test/unit/vagrant/util/file_checksum_test.rb +23 -0
  326. data/test/unit/vagrant/util/hash_with_indifferent_access_test.rb +38 -0
  327. data/test/unit/vagrant/util/is_port_open_test.rb +53 -0
  328. data/test/unit/vagrant/util/line_endings_helper_test.rb +16 -0
  329. data/test/unit/vagrant/util/network_ip_test.rb +17 -0
  330. data/test/unit/vagrant/util/retryable_test.rb +106 -0
  331. data/test/unit/vagrant_test.rb +27 -0
  332. data/test/unit_legacy/locales/en.yml +8 -0
  333. data/test/unit_legacy/test_helper.rb +32 -0
  334. data/test/unit_legacy/vagrant/action/box/destroy_test.rb +18 -0
  335. data/test/unit_legacy/vagrant/action/box/download_test.rb +125 -0
  336. data/test/unit_legacy/vagrant/action/box/package_test.rb +25 -0
  337. data/test/unit_legacy/vagrant/action/box/unpackage_test.rb +84 -0
  338. data/test/unit_legacy/vagrant/action/box/verify_test.rb +30 -0
  339. data/test/unit_legacy/vagrant/action/env/set_test.rb +24 -0
  340. data/test/unit_legacy/vagrant/action/general/package_test.rb +268 -0
  341. data/test/unit_legacy/vagrant/action/general/validate_test.rb +31 -0
  342. data/test/unit_legacy/vagrant/action/vm/boot_test.rb +66 -0
  343. data/test/unit_legacy/vagrant/action/vm/check_accessible_test.rb +61 -0
  344. data/test/unit_legacy/vagrant/action/vm/check_box_test.rb +61 -0
  345. data/test/unit_legacy/vagrant/action/vm/check_guest_additions_test.rb +9 -0
  346. data/test/unit_legacy/vagrant/action/vm/clean_machine_folder_test.rb +84 -0
  347. data/test/unit_legacy/vagrant/action/vm/clear_forwarded_ports_test.rb +52 -0
  348. data/test/unit_legacy/vagrant/action/vm/clear_nfs_exports_test.rb +22 -0
  349. data/test/unit_legacy/vagrant/action/vm/clear_shared_folders_test.rb +40 -0
  350. data/test/unit_legacy/vagrant/action/vm/customize_test.rb +37 -0
  351. data/test/unit_legacy/vagrant/action/vm/destroy_test.rb +25 -0
  352. data/test/unit_legacy/vagrant/action/vm/destroy_unused_network_interfaces_test.rb +49 -0
  353. data/test/unit_legacy/vagrant/action/vm/discard_state_test.rb +45 -0
  354. data/test/unit_legacy/vagrant/action/vm/export_test.rb +107 -0
  355. data/test/unit_legacy/vagrant/action/vm/forward_ports_helpers_test.rb +77 -0
  356. data/test/unit_legacy/vagrant/action/vm/forward_ports_test.rb +197 -0
  357. data/test/unit_legacy/vagrant/action/vm/halt_test.rb +79 -0
  358. data/test/unit_legacy/vagrant/action/vm/host_name_test.rb +36 -0
  359. data/test/unit_legacy/vagrant/action/vm/import_test.rb +66 -0
  360. data/test/unit_legacy/vagrant/action/vm/match_mac_address_test.rb +40 -0
  361. data/test/unit_legacy/vagrant/action/vm/modify_test.rb +38 -0
  362. data/test/unit_legacy/vagrant/action/vm/network_test.rb +286 -0
  363. data/test/unit_legacy/vagrant/action/vm/nfs_helpers_test.rb +26 -0
  364. data/test/unit_legacy/vagrant/action/vm/nfs_test.rb +260 -0
  365. data/test/unit_legacy/vagrant/action/vm/package_test.rb +25 -0
  366. data/test/unit_legacy/vagrant/action/vm/package_vagrantfile_test.rb +46 -0
  367. data/test/unit_legacy/vagrant/action/vm/provision_test.rb +65 -0
  368. data/test/unit_legacy/vagrant/action/vm/provisioner_cleanup_test.rb +56 -0
  369. data/test/unit_legacy/vagrant/action/vm/resume_test.rb +35 -0
  370. data/test/unit_legacy/vagrant/action/vm/share_folders_test.rb +144 -0
  371. data/test/unit_legacy/vagrant/action/vm/suspend_test.rb +35 -0
  372. data/test/unit_legacy/vagrant/action_test.rb +89 -0
  373. data/test/unit_legacy/vagrant/box_collection_test.rb +45 -0
  374. data/test/unit_legacy/vagrant/box_test.rb +74 -0
  375. data/test/unit_legacy/vagrant/cli_test.rb +35 -0
  376. data/test/unit_legacy/vagrant/command/base_test.rb +23 -0
  377. data/test/unit_legacy/vagrant/command/group_base_test.rb +15 -0
  378. data/test/unit_legacy/vagrant/command/helpers_test.rb +88 -0
  379. data/test/unit_legacy/vagrant/command/init_test.rb +10 -0
  380. data/test/unit_legacy/vagrant/command/package_test.rb +27 -0
  381. data/test/unit_legacy/vagrant/config/base_test.rb +52 -0
  382. data/test/unit_legacy/vagrant/config/error_recorder_test.rb +18 -0
  383. data/test/unit_legacy/vagrant/config/ssh_test.rb +12 -0
  384. data/test/unit_legacy/vagrant/config/vagrant_test.rb +35 -0
  385. data/test/unit_legacy/vagrant/config/vm/provisioner_test.rb +92 -0
  386. data/test/unit_legacy/vagrant/config/vm_test.rb +47 -0
  387. data/test/unit_legacy/vagrant/config_test.rb +148 -0
  388. data/test/unit_legacy/vagrant/downloaders/http_test.rb +93 -0
  389. data/test/unit_legacy/vagrant/environment_test.rb +539 -0
  390. data/test/unit_legacy/vagrant/errors_test.rb +42 -0
  391. data/test/unit_legacy/vagrant/hosts/base_test.rb +46 -0
  392. data/test/unit_legacy/vagrant/hosts/bsd_test.rb +53 -0
  393. data/test/unit_legacy/vagrant/hosts/linux_test.rb +54 -0
  394. data/test/unit_legacy/vagrant/plugin_test.rb +9 -0
  395. data/test/unit_legacy/vagrant/provisioners/base_test.rb +63 -0
  396. data/test/unit_legacy/vagrant/provisioners/chef_client_test.rb +190 -0
  397. data/test/unit_legacy/vagrant/provisioners/chef_solo_test.rb +115 -0
  398. data/test/unit_legacy/vagrant/provisioners/chef_test.rb +209 -0
  399. data/test/unit_legacy/vagrant/provisioners/puppet_server_test.rb +68 -0
  400. data/test/unit_legacy/vagrant/provisioners/puppet_test.rb +182 -0
  401. data/test/unit_legacy/vagrant/provisioners/shell_test.rb +79 -0
  402. data/test/unit_legacy/vagrant/ssh/session_test.rb +40 -0
  403. data/test/unit_legacy/vagrant/ssh_test.rb +304 -0
  404. data/test/unit_legacy/vagrant/systems/base_test.rb +18 -0
  405. data/test/unit_legacy/vagrant/systems/linux_test.rb +104 -0
  406. data/test/unit_legacy/vagrant/util/busy_test.rb +106 -0
  407. data/test/unit_legacy/vagrant/util/counter_test.rb +29 -0
  408. data/test/unit_legacy/vagrant/util/platform_test.rb +18 -0
  409. data/test/unit_legacy/vagrant/util/stacked_proc_runner_test.rb +43 -0
  410. data/test/unit_legacy/vagrant/util/template_renderer_test.rb +145 -0
  411. data/test/unit_legacy/vagrant/vm_test.rb +300 -0
  412. data/vagrant-fixed-ssh.gemspec +70 -0
  413. metadata +712 -0
@@ -0,0 +1,9 @@
1
+ RSpec::Matchers.define :have_color do
2
+ match do |actual|
3
+ actual.index("\e[31m")
4
+ end
5
+
6
+ failure_message_for_should do |actual|
7
+ "expected output to contain color, but didn't"
8
+ end
9
+ end
@@ -0,0 +1,14 @@
1
+ require "acceptance/support/output"
2
+
3
+ # This creates a matcher that is used to match against certain
4
+ # Vagrant output. Vagrant output is not what is being tested,
5
+ # so all that state is hidden away in Acceptance::Output.
6
+ RSpec::Matchers.define :match_output do |expected, *args|
7
+ match do |actual|
8
+ Acceptance::Output.new(actual).send(expected, *args)
9
+ end
10
+
11
+ failure_message_for_should do |actual|
12
+ "expected output to match: #{expected} #{args.inspect}"
13
+ end
14
+ end
@@ -0,0 +1,14 @@
1
+ # Matcher that verifies that a process succeeds.
2
+ RSpec::Matchers.define :succeed do
3
+ match do |thing|
4
+ thing.exit_code.should == 0
5
+ end
6
+
7
+ failure_message_for_should do |actual|
8
+ "expected process to succeed. exit code: #{actual.exit_code}"
9
+ end
10
+
11
+ failure_message_for_should_not do |actual|
12
+ "expected process to fail. exit code: #{actual.exit_code}"
13
+ end
14
+ end
@@ -0,0 +1,29 @@
1
+ require "vagrant/util/retryable"
2
+
3
+ module Acceptance
4
+ module NetworkTests
5
+ include Vagrant::Util::Retryable
6
+
7
+ # Tests that the host can access the VM through the network.
8
+ #
9
+ # @param [String] url URL to request from the host.
10
+ # @param [Integer] guest_port Port to run a web server on the guest.
11
+ def assert_host_to_vm_network(url, guest_port)
12
+ # Start up a web server in another thread by SSHing into the VM.
13
+ thr = Thread.new do
14
+ assert_execute("vagrant", "ssh", "-c", "python -m SimpleHTTPServer #{guest_port}")
15
+ end
16
+
17
+ # Verify that port forwarding works by making a simple HTTP request
18
+ # to the port. We should get a 200 response. We retry this a few times
19
+ # as we wait for the HTTP server to come online.
20
+ retryable(:tries => 5, :sleep => 2) do
21
+ result = Net::HTTP.get_response(URI.parse(url))
22
+ result.code.should == "200"
23
+ end
24
+ ensure
25
+ # The server needs to die. This is how.
26
+ thr.kill if thr
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,95 @@
1
+ module Acceptance
2
+ # This class helps with matching against output so that every
3
+ # test isn't inherently tied to the output format of Vagrant.
4
+ class Output
5
+ DEFAULT_VM = "default"
6
+
7
+ def initialize(text)
8
+ @text = text
9
+ end
10
+
11
+ def box_already_exists(name)
12
+ @text =~ /^A box already exists under the name of '#{name}'/
13
+ end
14
+
15
+ # Checks that an error message was outputted about the box
16
+ # being added being invalid.
17
+ def box_invalid
18
+ @text =~ /^The box file you're attempting to add is invalid./
19
+ end
20
+
21
+ # Checks that an error message was outputted about the path
22
+ # not existing to the box.
23
+ def box_path_doesnt_exist
24
+ @text =~ /^The specified path to a file doesn't exist.$/
25
+ end
26
+
27
+ # Tests that the box with given name is installed.
28
+ def box_installed(name)
29
+ @text =~ /^#{name}$/
30
+ end
31
+
32
+ # Tests that the output says there are no installed boxes.
33
+ def no_boxes
34
+ @text =~ /There are no installed boxes!/
35
+ end
36
+
37
+ # Tests that the output says there is no Vagrantfile, and as such
38
+ # can't do whatever we requested Vagrant to do.
39
+ def no_vagrantfile
40
+ @text =~ /^A Vagrant environment is required/
41
+ end
42
+
43
+ # Tests that the output contains a specific Vagrant version.
44
+ def version(version)
45
+ @text =~ /^Vagrant version #{version}$/
46
+ end
47
+
48
+ def resume_port_collision
49
+ @text =~ /^This VM cannot be resumed, because the forwarded ports/
50
+ end
51
+
52
+ # This checks that the VM with the given `vm_name` has the
53
+ # status of `status`.
54
+ def status(vm_name, status)
55
+ @text =~ /^#{vm_name}\s+#{status}$/
56
+ end
57
+
58
+ # This checks that an error message that the VM must be created
59
+ # is shown.
60
+ def error_vm_must_be_created
61
+ @text =~ /^VM must be created/
62
+ end
63
+
64
+ # This checks that the warning that the VM is not created is emitted.
65
+ def vm_not_created_warning
66
+ @text =~ /VM not created. Moving on...$/
67
+ end
68
+
69
+ # This checks that the VM is destroyed.
70
+ def vm_destroyed
71
+ @text =~ /Destroying VM and associated drives...$/
72
+ end
73
+
74
+ # This checks that the "up" output properly contains text showing that
75
+ # it is downloading the box during the up process.
76
+ def up_fetching_box(name, vm=DEFAULT_VM)
77
+ @text =~ /^\[#{vm}\] Box #{name} was not found. Fetching box from specified URL...$/
78
+ end
79
+
80
+ # Check that the output shows that the VM was shut down gracefully
81
+ def vm_halt_graceful
82
+ @text =~ /Attempting graceful shutdown of/
83
+ end
84
+
85
+ # Output shows a forceful VM shutdown.
86
+ def vm_halt_force
87
+ @text =~ /Forcing shutdown of VM...$/
88
+ end
89
+
90
+ # Output shows the VM is in the process of suspending
91
+ def vm_suspending
92
+ @text =~ /Saving VM state and suspending execution...$/
93
+ end
94
+ end
95
+ end
@@ -0,0 +1,72 @@
1
+ require "acceptance/support/isolated_environment"
2
+ require "acceptance/support/output"
3
+ require "acceptance/support/virtualbox"
4
+
5
+ shared_context "acceptance" do
6
+ # Setup variables for the loggers of this test. These can be used to
7
+ # create more verbose logs for tests which can be useful in the case
8
+ # that a test fails.
9
+ let(:logger_name) { "logger" }
10
+ let(:logger) { Log4r::Logger.new("test::acceptance::#{logger_name}") }
11
+
12
+ # This is the global configuration given by the acceptance test
13
+ # configurations.
14
+ let(:config) { $acceptance_options }
15
+
16
+ # Setup the environment so that we have an isolated area
17
+ # to run Vagrant. We do some configuration here as well in order
18
+ # to replace "vagrant" with the proper path to Vagrant as well
19
+ # as tell the isolated environment about custom environmental
20
+ # variables to pass in.
21
+ let!(:environment) { new_environment }
22
+
23
+ before(:each) do
24
+ # Wait for VBoxSVC to disappear, since each test requires its
25
+ # own isolated VirtualBox process.
26
+ Acceptance::VirtualBox.wait_for_vboxsvc
27
+ end
28
+
29
+ after(:each) do
30
+ environment.close
31
+ end
32
+
33
+ # Creates a new isolated environment instance each time it is called.
34
+ #
35
+ # @return [Acceptance::IsolatedEnvironment]
36
+ def new_environment(env=nil)
37
+ apps = { "vagrant" => config.vagrant_path }
38
+ env = config.env.merge(env || {})
39
+
40
+ Acceptance::IsolatedEnvironment.new(apps, env)
41
+ end
42
+
43
+ # Executes the given command in the context of the isolated environment.
44
+ #
45
+ # @return [Object]
46
+ def execute(*args, &block)
47
+ environment.execute(*args, &block)
48
+ end
49
+
50
+ # This method is an assertion helper for asserting that a process
51
+ # succeeds. It is a wrapper around `execute` that asserts that the
52
+ # exit status was successful.
53
+ def assert_execute(*args, &block)
54
+ result = execute(*args, &block)
55
+ assert(result.exit_code == 0, "expected '#{args.join(" ")}' to succeed")
56
+ result
57
+ end
58
+
59
+ # This can be added to the beginning of a test to verify that the
60
+ # box with the given name is available to a test. This will raise
61
+ # an exception if the box is not found.
62
+ def require_box(name)
63
+ if !File.exist?(box_path(name))
64
+ raise ArgumentError, "The tests should have a '#{name}' box."
65
+ end
66
+ end
67
+
68
+ # This is used to get the path to a box of a specific name.
69
+ def box_path(name)
70
+ File.join(config.box_directory, "#{name}.box")
71
+ end
72
+ end
@@ -0,0 +1,33 @@
1
+ # This is a shared example that tests that a command requires a
2
+ # Vagrant environment to run properly. The exact command to run
3
+ # should be given as a parameter to the shared examples.
4
+ shared_examples "a command that requires a Vagrantfile" do |*args|
5
+ let(:command) do
6
+ raise ArgumentError, "A command must be set for the shared example." if args.empty?
7
+ args[0]
8
+ end
9
+
10
+ it "fails if no Vagrantfile is found" do
11
+ result = execute(*command)
12
+ result.should_not succeed
13
+ result.stderr.should match_output(:no_vagrantfile)
14
+ end
15
+ end
16
+
17
+ # This is a shared example that tests that the command requires a
18
+ # virtual machine to be created, and additionally to be in one of
19
+ # many states.
20
+ shared_examples "a command that requires a virtual machine" do |*args|
21
+ let(:command) do
22
+ raise ArgumentError, "A command must be set for the shared example." if args.empty?
23
+ args[0]
24
+ end
25
+
26
+ it "fails if the virtual machine is not created" do
27
+ assert_execute("vagrant", "init")
28
+
29
+ result = execute(*command)
30
+ result.should_not succeed
31
+ result.stderr.should match_output(:error_vm_must_be_created)
32
+ end
33
+ end
@@ -0,0 +1,36 @@
1
+ require 'sys/proctable'
2
+
3
+ module Acceptance
4
+ module VirtualBox
5
+ extend self
6
+
7
+ # This method will wait for the "VBoxSVC" process to end. This will
8
+ # block during that time period. The reason for this is because only
9
+ # one "VBoxSVC" can run per user and manages all state within VirtualBox.
10
+ # Before you can run VirtualBox with a custom home directory, you must
11
+ # wait for this VBoxSVC process to die.
12
+ def wait_for_vboxsvc
13
+ time_passed = 0
14
+ while find_vboxsvc
15
+ if time_passed > 5
16
+ raise Exception, "VBoxSVC process is not going away."
17
+ end
18
+
19
+ sleep 1
20
+ time_passed += 1
21
+ end
22
+ end
23
+
24
+ # This method finds the VBoxSVC process and returns information about it.
25
+ # This will return "nil" if VBoxSVC is not found.
26
+ def find_vboxsvc
27
+ Sys::ProcTable.ps do |process|
28
+ if process.comm == "VBoxSVC"
29
+ return process
30
+ end
31
+ end
32
+
33
+ nil
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,56 @@
1
+ require File.expand_path("../base", __FILE__)
2
+ require "acceptance/support/shared/command_examples"
3
+
4
+ describe "vagrant suspend" do
5
+ include_context "acceptance"
6
+ it_behaves_like "a command that requires a Vagrantfile", ["vagrant", "suspend"]
7
+
8
+ it "succeeds and ignores if the VM is not created" do
9
+ require_box("default")
10
+
11
+ assert_execute("vagrant", "box", "add", "base", box_path("default"))
12
+ assert_execute("vagrant", "init")
13
+
14
+ result = assert_execute("vagrant", "suspend")
15
+ result.stdout.should match_output(:vm_not_created_warning)
16
+ end
17
+
18
+ it "is able to suspend a running virtual machine" do
19
+ require_box("default")
20
+
21
+ assert_execute("vagrant", "box", "add", "base", box_path("default"))
22
+ assert_execute("vagrant", "init")
23
+ assert_execute("vagrant", "up")
24
+
25
+ # Suspend the VM and assert that it worked properly (seemingly)
26
+ result = assert_execute("vagrant", "suspend")
27
+ result.stdout.should match_output(:vm_suspending)
28
+
29
+ # Assert that the VM is no longer running
30
+ result = assert_execute("vagrant", "status")
31
+ result.stdout.should match_output(:status, "default", "saved")
32
+ end
33
+
34
+ # These tests are parameterized since both "vagrant resume" and
35
+ # "vagrant up" should achieve the same result.
36
+ ["resume", "up"].each do |command|
37
+ it "is able to resume after the machine has been suspended using #{command}" do
38
+ require_box("default")
39
+
40
+ assert_execute("vagrant", "box", "add", "base", box_path("default"))
41
+ assert_execute("vagrant", "init")
42
+ assert_execute("vagrant", "up")
43
+ assert_execute("vagrant", "suspend")
44
+
45
+ # Assert that the VM is no longer running
46
+ result = assert_execute("vagrant", "status")
47
+ result.stdout.should match_output(:status, "default", "saved")
48
+
49
+ assert_execute("vagrant", command)
50
+
51
+ # Assert that the VM is once again running
52
+ result = assert_execute("vagrant", "status")
53
+ result.stdout.should match_output(:status, "default", "running")
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,33 @@
1
+ require File.expand_path("../base", __FILE__)
2
+ require "acceptance/support/shared/command_examples"
3
+
4
+ describe "vagrant up", "basics" do
5
+ include_context "acceptance"
6
+ it_behaves_like "a command that requires a Vagrantfile", ["vagrant", "up"]
7
+
8
+ # This creates an initial environment that is ready for a "vagrant up"
9
+ def initialize_valid_environment
10
+ require_box("default")
11
+
12
+ assert_execute("vagrant", "box", "add", "base", box_path("default"))
13
+ assert_execute("vagrant", "init")
14
+ end
15
+
16
+ it "brings up a running virtual machine" do
17
+ initialize_valid_environment
18
+
19
+ assert_execute("vagrant", "up")
20
+ result = assert_execute("vagrant", "status")
21
+ result.stdout.should match_output(:status, "default", "running")
22
+ end
23
+
24
+ it "is able to run if Vagrantfile is in a parent directory" do
25
+ initialize_valid_environment
26
+
27
+ # Create a subdirectory in the working directory and use
28
+ # that as the CWD for `vagrant up` and verify it still works
29
+ foodir = environment.workdir.join("foo")
30
+ foodir.mkdir
31
+ assert_execute("vagrant", "up", :chdir => foodir.to_s)
32
+ end
33
+ end
@@ -0,0 +1,40 @@
1
+ require File.expand_path("../base", __FILE__)
2
+ require "acceptance/support/shared/command_examples"
3
+
4
+ describe "vagrant up", "with a box URL set" do
5
+ include_context "acceptance"
6
+
7
+ it "downloads and brings up the VM if the box doesn't exist" do
8
+ require_box("default")
9
+
10
+ assert_execute("vagrant", "init", "base", box_path("default"))
11
+ result = assert_execute("vagrant", "up")
12
+ result.stdout.should match_output(:up_fetching_box, "base")
13
+ end
14
+
15
+ it "downloads the file only once and works if shared by multiple VMs", :issue => "GH-564" do
16
+ require_box("default")
17
+
18
+ environment.workdir.join("Vagrantfile").open("w+") do |f|
19
+ f.puts(<<-VFILE)
20
+ Vagrant::Config.run do |config|
21
+ config.vm.define :machine1 do |vm_config|
22
+ vm_config.vm.box = "base"
23
+ vm_config.vm.box_url = "#{box_path("default")}"
24
+ end
25
+
26
+ config.vm.define :machine2 do |vm_config|
27
+ vm_config.vm.box = "base"
28
+ vm_config.vm.box_url = "#{box_path("default")}"
29
+ end
30
+ end
31
+ VFILE
32
+ end
33
+
34
+ # Bring up the environment, which should work. `machine1` should download
35
+ # the box while `machine2` doesn't.
36
+ result = assert_execute("vagrant", "up")
37
+ result.stdout.should match_output(:up_fetching_box, "base", "machine1")
38
+ result.stdout.should_not match_output(:up_fetching_box, "base", "machine2")
39
+ end
40
+ end
@@ -0,0 +1,47 @@
1
+ require File.expand_path("../base", __FILE__)
2
+ require "acceptance/support/matchers/have_color"
3
+
4
+ describe "vagrant and color output" do
5
+ include_context "acceptance"
6
+
7
+ # This is a check to see if the `expect` program is installed on this
8
+ # computer. Some tests require this and if this doesn't exist then the
9
+ # test itself will be skipped.
10
+ def self.has_expect?
11
+ `which expect`
12
+ $?.success?
13
+ end
14
+
15
+ it "outputs color if there is a TTY", :if => has_expect? do
16
+ environment.workdir.join("color.exp").open("w+") do |f|
17
+ f.puts(<<-SCRIPT)
18
+ spawn #{environment.replace_command("vagrant")} status
19
+ expect default {}
20
+ SCRIPT
21
+ end
22
+
23
+ result = execute("expect", "color.exp")
24
+ result.stdout.should have_color
25
+ end
26
+
27
+ it "doesn't output color if there is a TTY but --no-color is present", :if => has_expect? do
28
+ environment.workdir.join("color.exp").open("w+") do |f|
29
+ f.puts(<<-SCRIPT)
30
+ spawn #{environment.replace_command("vagrant")} status --no-color
31
+ expect default {}
32
+ SCRIPT
33
+ end
34
+
35
+ result = execute("expect", "color.exp")
36
+ result.stdout.should_not have_color
37
+ end
38
+
39
+ it "doesn't output color in the absense of a TTY" do
40
+ # This should always output an error, which on a TTY would
41
+ # output color. We check that this doesn't output color.
42
+ # If `vagrant status` itself is broken, another acceptance test
43
+ # should catch that. We just assume it works here.
44
+ result = execute("vagrant", "status")
45
+ result.stdout.should_not have_color
46
+ end
47
+ end