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,40 @@
1
+ require "test_helper"
2
+
3
+ class MatchMACAddressVMActionTest < Test::Unit::TestCase
4
+ setup do
5
+ @klass = Vagrant::Action::VM::MatchMACAddress
6
+ @app, @env = action_env
7
+
8
+ @vm = mock("vm")
9
+ @env["vm"] = @vm
10
+
11
+ @internal_vm = mock("internal")
12
+ @vm.stubs(:vm).returns(@internal_vm)
13
+
14
+ @instance = @klass.new(@app, @env)
15
+ end
16
+
17
+ should "match the mac addresses" do
18
+ nic = mock("nic")
19
+ nic.expects(:mac_address=).once
20
+
21
+ update_seq = sequence("update_seq")
22
+ @internal_vm.expects(:network_adapters).returns([nic]).once.in_sequence(update_seq)
23
+ @app.expects(:call).with(@env).once.in_sequence(update_seq)
24
+
25
+ @env["vm.modify"].expects(:call).with() do |proc|
26
+ proc.call(@internal_vm)
27
+ true
28
+ end
29
+
30
+ @instance.call(@env)
31
+ end
32
+
33
+ should "raise an exception if no base MAC address is specified" do
34
+ @env.env.config.vm.base_mac = nil
35
+
36
+ assert_raises(Vagrant::Errors::VMBaseMacNotSpecified) {
37
+ @instance.call(@env)
38
+ }
39
+ end
40
+ end
@@ -0,0 +1,38 @@
1
+ require "test_helper"
2
+
3
+ class ModifyVMActionTest < Test::Unit::TestCase
4
+ setup do
5
+ @klass = Vagrant::Action::VM::Modify
6
+ @app, @env = action_env
7
+
8
+ @vm = mock("vm")
9
+ @vm.stubs(:ssh).returns(mock("ssh"))
10
+ @env["vm"] = @vm
11
+
12
+ @internal_vm = mock("internal")
13
+ @vm.stubs(:vm).returns(@internal_vm)
14
+
15
+ @instance = @klass.new(@app, @env)
16
+ end
17
+
18
+ context "initialization" do
19
+ should "have the vm.modify function setup in the environment" do
20
+ assert @env.has_key?("vm.modify")
21
+ end
22
+ end
23
+
24
+ context "calling" do
25
+ should "run the procs with the VM as an argument and save the VM" do
26
+ seq = sequence("procseq")
27
+
28
+ proc = Proc.new { |vm| }
29
+ @env["vm.modify"].call(proc)
30
+
31
+ proc.expects(:call).with(@internal_vm).once.in_sequence(seq)
32
+ @internal_vm.expects(:save).once.in_sequence(seq)
33
+ @vm.expects(:reload!).once.in_sequence(seq)
34
+
35
+ @instance.call(@env)
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,286 @@
1
+ require "test_helper"
2
+
3
+ class NetworkVMActionTest < Test::Unit::TestCase
4
+ setup do
5
+ @klass = Vagrant::Action::VM::Network
6
+ @app, @env = action_env
7
+
8
+ @vm = mock("vm")
9
+ @vm.stubs(:name).returns("foo")
10
+ @vm.stubs(:ssh).returns(mock("ssh"))
11
+ @vm.stubs(:system).returns(mock("system"))
12
+ @env["vm"] = @vm
13
+
14
+ @internal_vm = mock("internal")
15
+ @vm.stubs(:vm).returns(@internal_vm)
16
+ end
17
+
18
+ context "initializing" do
19
+ should "raise an error if on windows x64 and networking is enabled" do
20
+ Vagrant::Util::Platform.stubs(:windows?).returns(true)
21
+ Vagrant::Util::Platform.stubs(:bit64?).returns(true)
22
+ @env.env.config.vm.network("foo")
23
+
24
+ assert_raises(Vagrant::Errors::NetworkNotImplemented) {
25
+ @klass.new(@app, @env)
26
+ }
27
+ end
28
+
29
+ should "not raise an error if not on windows and networking is enabled" do
30
+ Vagrant::Util::Platform.stubs(:windows?).returns(false)
31
+ @env.env.config.vm.network("foo")
32
+
33
+ assert_nothing_raised {
34
+ @klass.new(@app, @env)
35
+ }
36
+ end
37
+
38
+ should "verify no bridge collisions for each network enabled" do
39
+ @env.env.config.vm.network("foo")
40
+ @klass.any_instance.expects(:verify_no_bridge_collision).returns(true).once.with() do |options|
41
+ assert_equal "foo", options[:ip]
42
+ true
43
+ end
44
+
45
+ @klass.new(@app, @env)
46
+ end
47
+ end
48
+
49
+ context "with an instance" do
50
+ setup do
51
+ @klass.any_instance.stubs(:verify_no_bridge_collision)
52
+ @instance = @klass.new(@app, @env)
53
+
54
+ @interfaces = []
55
+ VirtualBox::Global.global.host.stubs(:network_interfaces).returns(@interfaces)
56
+ end
57
+
58
+ def mock_interface(options=nil)
59
+ options = {
60
+ :interface_type => :host_only,
61
+ :name => "foo"
62
+ }.merge(options || {})
63
+
64
+ interface = mock("interface")
65
+ options.each do |k,v|
66
+ interface.stubs(k).returns(v)
67
+ end
68
+
69
+ @interfaces << interface
70
+ interface
71
+ end
72
+
73
+ context "calling" do
74
+ setup do
75
+ @env.env.config.vm.network("foo")
76
+ @instance.stubs(:enable_network?).returns(false)
77
+ end
78
+
79
+ should "do nothing if network should not be enabled" do
80
+ @instance.expects(:assign_network).never
81
+ @app.expects(:call).with(@env).once
82
+ @vm.system.expects(:prepare_host_only_network).never
83
+ @vm.system.expects(:enable_host_only_network).never
84
+
85
+ @instance.call(@env)
86
+ end
87
+
88
+ should "assign and enable the network if networking enabled" do
89
+ @instance.stubs(:enable_network?).returns(true)
90
+
91
+ run_seq = sequence("run")
92
+ @instance.expects(:assign_network).once.in_sequence(run_seq)
93
+ @app.expects(:call).with(@env).once.in_sequence(run_seq)
94
+ @vm.system.expects(:prepare_host_only_network).once.in_sequence(run_seq)
95
+ @vm.system.expects(:enable_host_only_network).once.in_sequence(run_seq)
96
+
97
+ @instance.call(@env)
98
+ end
99
+ end
100
+
101
+ context "checking if network is enabled" do
102
+ should "return true if the network options are set" do
103
+ @env.env.config.vm.network("foo")
104
+ assert @instance.enable_network?
105
+ end
106
+
107
+ should "return false if the network was not set" do
108
+ assert !@instance.enable_network?
109
+ end
110
+ end
111
+
112
+ context "assigning the network" do
113
+ setup do
114
+ @network_name = "foo"
115
+ @instance.stubs(:network_name).returns(@network_name)
116
+
117
+ @network_adapters = []
118
+ @internal_vm.stubs(:network_adapters).returns(@network_adapters)
119
+ end
120
+
121
+ def expect_adapter_setup(options=nil)
122
+ options = {
123
+ :ip => "foo",
124
+ :adapter => 7
125
+ }.merge(options || {})
126
+
127
+ @env["config"].vm.network(options[:ip], options)
128
+
129
+ @env["vm"].vm.network_adapters.clear
130
+ @env["vm"].vm.network_adapters[options[:adapter]] = adapter = mock("adapter")
131
+
132
+ adapter.expects(:enabled=).with(true)
133
+ adapter.expects(:attachment_type=).with(:host_only).once
134
+ adapter.expects(:host_only_interface=).with(@network_name).once
135
+
136
+ if options[:mac]
137
+ adapter.expects(:mac_address=).with(options[:mac].gsub(':', '')).once
138
+ else
139
+ adapter.expects(:mac_address=).never
140
+ end
141
+
142
+ adapter.expects(:save).once
143
+ end
144
+
145
+ should "setup the specified network adapter" do
146
+ expect_adapter_setup
147
+ @instance.assign_network
148
+ end
149
+
150
+ should "setup the specified network adapter's mac address if specified" do
151
+ expect_adapter_setup(:mac => "foo")
152
+ @instance.assign_network
153
+ end
154
+
155
+ should "properly remove : from mac address" do
156
+ expect_adapter_setup(:mac => "foo:bar")
157
+ @instance.assign_network
158
+ end
159
+ end
160
+
161
+ context "network name" do
162
+ setup do
163
+ @instance.stubs(:matching_network?).returns(false)
164
+
165
+ @options = { :ip => :foo, :netmask => :bar, :name => nil }
166
+ end
167
+
168
+ should "return the network which matches" do
169
+ result = mock("result")
170
+ interface = mock_interface(:name => result)
171
+
172
+ @instance.expects(:matching_network?).with(interface, @options).returns(true)
173
+ assert_equal result, @instance.network_name(@options)
174
+ end
175
+
176
+ should "ignore non-host only interfaces" do
177
+ @options[:name] = "foo"
178
+ mock_interface(:name => @options[:name],
179
+ :interface_type => :bridged)
180
+
181
+ assert_raises(Vagrant::Errors::NetworkNotFound) {
182
+ @instance.network_name(@options)
183
+ }
184
+ end
185
+
186
+ should "return the network which matches the name if given" do
187
+ @options[:name] = "foo"
188
+
189
+ interface = mock_interface(:name => @options[:name])
190
+ assert_equal @options[:name], @instance.network_name(@options)
191
+ end
192
+
193
+ should "error and exit if the given network name is not found" do
194
+ @options[:name] = "foo"
195
+
196
+ @interfaces.expects(:create).never
197
+ assert_raises(Vagrant::Errors::NetworkNotFound) {
198
+ @instance.network_name(@options)
199
+ }
200
+ end
201
+
202
+ should "create a network for the IP and netmask" do
203
+ result = mock("result")
204
+ network_ip = :foo
205
+
206
+ interface = mock_interface(:name => result)
207
+ interface.expects(:enable_static).with(network_ip, @options[:netmask])
208
+ @interfaces.expects(:create).returns(interface)
209
+ @instance.expects(:network_ip).with(@options[:ip], @options[:netmask]).once.returns(network_ip)
210
+
211
+ assert_equal result, @instance.network_name(@options)
212
+ end
213
+ end
214
+
215
+ context "checking for a matching network" do
216
+ setup do
217
+ @interface = mock("interface")
218
+ @interface.stubs(:network_mask).returns("foo")
219
+ @interface.stubs(:ip_address).returns("192.168.0.1")
220
+
221
+ @options = {
222
+ :netmask => "foo",
223
+ :ip => "baz"
224
+ }
225
+ end
226
+
227
+ should "return false if the netmasks don't match" do
228
+ @options[:netmask] = "bar"
229
+ assert @interface.network_mask != @options[:netmask] # sanity
230
+ assert !@instance.matching_network?(@interface, @options)
231
+ end
232
+
233
+ should "return true if the netmasks yield the same IP" do
234
+ tests = [["255.255.255.0", "192.168.0.1", "192.168.0.45"],
235
+ ["255.255.0.0", "192.168.45.1", "192.168.28.7"]]
236
+
237
+ tests.each do |netmask, interface_ip, guest_ip|
238
+ @options[:netmask] = netmask
239
+ @options[:ip] = guest_ip
240
+ @interface.stubs(:network_mask).returns(netmask)
241
+ @interface.stubs(:ip_address).returns(interface_ip)
242
+
243
+ assert @instance.matching_network?(@interface, @options)
244
+ end
245
+ end
246
+ end
247
+
248
+ context "applying the netmask" do
249
+ should "return the proper result" do
250
+ tests = {
251
+ ["192.168.0.1","255.255.255.0"] => [192,168,0,0],
252
+ ["192.168.45.10","255.255.255.0"] => [192,168,45,0]
253
+ }
254
+
255
+ tests.each do |k,v|
256
+ assert_equal v, @instance.apply_netmask(*k)
257
+ end
258
+ end
259
+ end
260
+
261
+ context "splitting an IP" do
262
+ should "return the proper result" do
263
+ tests = {
264
+ "192.168.0.1" => [192,168,0,1]
265
+ }
266
+
267
+ tests.each do |k,v|
268
+ assert_equal v, @instance.split_ip(k)
269
+ end
270
+ end
271
+ end
272
+
273
+ context "network IP" do
274
+ should "return the proper result" do
275
+ tests = {
276
+ ["192.168.0.45", "255.255.255.0"] => "192.168.0.1"
277
+ }
278
+
279
+ tests.each do |args, result|
280
+ assert_equal result, @instance.network_ip(*args)
281
+ end
282
+ end
283
+ end
284
+
285
+ end
286
+ end
@@ -0,0 +1,26 @@
1
+ require "test_helper"
2
+
3
+ class NFSHelpersVMActionTest < Test::Unit::TestCase
4
+ setup do
5
+ @klass = Class.new do
6
+ include Vagrant::Action::VM::NFSHelpers
7
+ end
8
+
9
+ @app, @env = action_env
10
+
11
+ @instance = @klass.new
12
+ end
13
+
14
+ should "clear NFS exports for the environment if the host exists" do
15
+ @host = mock("host")
16
+ @env.env.stubs(:host).returns(@host)
17
+ @host.expects(:nfs_cleanup).once
18
+
19
+ @instance.clear_nfs_exports(@env)
20
+ end
21
+
22
+ should "not do anything if host is nil" do
23
+ @env.env.stubs(:host).returns(nil)
24
+ assert_nothing_raised { @instance.clear_nfs_exports(@env) }
25
+ end
26
+ end
@@ -0,0 +1,260 @@
1
+ require "test_helper"
2
+
3
+ class NFSVMActionTest < Test::Unit::TestCase
4
+ setup do
5
+ @klass = Vagrant::Action::VM::NFS
6
+ @app, @env = action_env
7
+
8
+ @vm = mock("vm")
9
+ @vm.stubs(:system).returns(mock("system"))
10
+ @env.env.stubs(:host).returns(Vagrant::Hosts::Base.new(@env))
11
+ @env.env.config.vm.network("192.168.55.1")
12
+ @env["vm"] = @vm
13
+
14
+ @internal_vm = mock("internal")
15
+ @vm.stubs(:vm).returns(@internal_vm)
16
+ end
17
+
18
+ context "initializing" do
19
+ should "not call verify settings if NFS is not enabled" do
20
+ @klass.any_instance.expects(:verify_settings).never
21
+ @klass.new(@app, @env)
22
+ end
23
+
24
+ should "call verify settings if NFS is enabled" do
25
+ @env.env.config.vm.share_folder("v-root", "/vagrant", ".", :nfs => true)
26
+ @klass.any_instance.expects(:verify_settings).once
27
+ @klass.new(@app, @env)
28
+ end
29
+ end
30
+
31
+ context "with an instance" do
32
+ setup do
33
+ @instance = @klass.new(@app, @env)
34
+ end
35
+
36
+ context "calling" do
37
+ setup do
38
+ @instance.stubs(:folders).returns([:a])
39
+
40
+ [:clear_nfs_exports, :extract_folders, :prepare_folders, :export_folders, :mount_folders].each do |meth|
41
+ @instance.stubs(meth)
42
+ end
43
+ end
44
+
45
+ should "call the proper sequence and succeed" do
46
+ seq = sequence('seq')
47
+ @instance.expects(:extract_folders).in_sequence(seq)
48
+ @instance.expects(:prepare_folders).in_sequence(seq)
49
+ @instance.expects(:clear_nfs_exports).with(@env).in_sequence(seq)
50
+ @instance.expects(:export_folders).in_sequence(seq)
51
+ @app.expects(:call).with(@env).in_sequence(seq)
52
+ @instance.expects(:mount_folders).in_sequence(seq)
53
+ @instance.call(@env)
54
+ end
55
+
56
+ should "not export folders if folders is empty" do
57
+ @instance.stubs(:folders).returns([])
58
+
59
+ seq = sequence('seq')
60
+ @instance.expects(:extract_folders).in_sequence(seq)
61
+ @instance.expects(:prepare_folders).never
62
+ @instance.expects(:export_folders).never
63
+ @instance.expects(:clear_nfs_exports).never
64
+ @app.expects(:call).with(@env).in_sequence(seq)
65
+ @instance.expects(:mount_folders).never
66
+ @instance.call(@env)
67
+ end
68
+ end
69
+
70
+ context "recovery" do
71
+ setup do
72
+ @vm.stubs(:created?).returns(true)
73
+ end
74
+
75
+ should "clear NFS exports" do
76
+ @instance.expects(:clear_nfs_exports).with(@env).once
77
+ @instance.recover(@env)
78
+ end
79
+
80
+ should "do nothing if VM is not created" do
81
+ @vm.stubs(:created?).returns(false)
82
+ @instance.expects(:clear_nfs_exports).never
83
+ @instance.recover(@env)
84
+ end
85
+ end
86
+
87
+ context "extracting folders" do
88
+ setup do
89
+ @env.env.config.vm.shared_folders.clear
90
+ @env.env.config.vm.share_folder("v-foo", "/foo", ".", :nfs => true)
91
+ @env.env.config.vm.share_folder("v-bar", "/bar", ".", :nfs => true)
92
+ end
93
+
94
+ should "extract the NFS enabled folders" do
95
+ @instance.extract_folders
96
+ assert_equal 2, @instance.folders.length
97
+ end
98
+
99
+ should "mark the folders disabled from the original config" do
100
+ @instance.extract_folders
101
+ %W[v-foo v-bar].each do |key|
102
+ assert @env["config"].vm.shared_folders[key][:disabled]
103
+ end
104
+ end
105
+
106
+ should "expand the hostpath relative to the env root" do
107
+ @instance.extract_folders
108
+ %W[v-foo v-bar].each do |key|
109
+ opts = @env["config"].vm.shared_folders[key]
110
+ assert_equal File.expand_path(opts[:hostpath], @env.env.root_path), @instance.folders[key][:hostpath]
111
+ end
112
+ end
113
+ end
114
+
115
+ context "preparing UID/GID" do
116
+ setup do
117
+ @stat = mock("stat")
118
+ File.stubs(:stat).returns(@stat)
119
+ end
120
+
121
+ should "return nil if the perm is not set" do
122
+ @env.env.config.nfs.map_uid = nil
123
+ assert_nil @instance.prepare_permission(:uid, {:gid => 7})
124
+ end
125
+
126
+ should "return nil if the perm explicitly says nil" do
127
+ assert_nil @instance.prepare_permission(:uid, {:map_uid => nil})
128
+ end
129
+
130
+ should "return the set value if it is set" do
131
+ assert_equal 7, @instance.prepare_permission(:gid, {:map_gid => 7})
132
+ end
133
+
134
+ should "return the global config value if set and not explicitly set on folder" do
135
+ @env.env.config.nfs.map_gid = 12
136
+ assert_equal 12, @instance.prepare_permission(:gid, {})
137
+ end
138
+
139
+ should "return the stat result of the hostpath if :auto" do
140
+ opts = { :hostpath => "foo", :map_uid => :auto }
141
+ File.expects(:stat).with(opts[:hostpath]).returns(@stat)
142
+ @stat.stubs(:uid).returns(24)
143
+
144
+ assert_equal 24, @instance.prepare_permission(:uid, opts)
145
+ end
146
+ end
147
+
148
+ context "exporting folders" do
149
+ setup do
150
+ @instance.stubs(:folders).returns({})
151
+ @instance.stubs(:guest_ip).returns("192.168.33.10")
152
+ end
153
+
154
+ should "call nfs_export on the host" do
155
+ @env["host"].expects(:nfs_export).with(@instance.guest_ip, @instance.folders)
156
+ @instance.export_folders
157
+ end
158
+ end
159
+
160
+ context "mounting folders" do
161
+ setup do
162
+ @instance.stubs(:host_ip).returns("foo")
163
+ @instance.stubs(:folders).returns({ "v-data" => {:guestpath => "foo"}})
164
+ end
165
+
166
+ should "mount the folders on the system" do
167
+ @vm.system.expects(:mount_nfs).with(@instance.host_ip, @instance.folders)
168
+ @instance.mount_folders
169
+ end
170
+
171
+ should "not mount folders which have no guest path" do
172
+ @instance.stubs(:folders).returns({ "v-data" => {}})
173
+ @vm.system.expects(:mount_nfs).with(@instance.host_ip, {})
174
+ @instance.mount_folders
175
+ end
176
+ end
177
+
178
+ context "getting the host IP" do
179
+ setup do
180
+ @network_adapters = []
181
+ @internal_vm.stubs(:network_adapters).returns(@network_adapters)
182
+ end
183
+
184
+ def stub_interface(ip)
185
+ interface = mock("interface")
186
+ adapter = mock("adapter")
187
+ adapter.stubs(:host_interface_object).returns(interface)
188
+ interface.stubs(:ip_address).returns(ip)
189
+
190
+ @network_adapters << adapter
191
+ interface
192
+ end
193
+
194
+ should "return the IP of the first interface" do
195
+ ip = "192.168.1.1"
196
+ stub_interface(ip)
197
+
198
+ assert_equal ip, @instance.host_ip
199
+ end
200
+
201
+ should "return nil if no IP is found" do
202
+ assert_nil @instance.host_ip
203
+ end
204
+ end
205
+
206
+ context "getting the guest IP" do
207
+ should "return the first networked IP" do
208
+ ip = "192.168.33.10"
209
+ @env.env.config.vm.network(ip, :adapter => 1)
210
+ @env.env.config.vm.network("192.168.66.10", :adapter => 2)
211
+ assert_equal ip, @instance.guest_ip
212
+ end
213
+ end
214
+
215
+ context "nfs enabled" do
216
+ should "return false if no folders are marked for NFS" do
217
+ assert !@instance.nfs_enabled?
218
+ end
219
+
220
+ should "return true if a shared folder is marked for NFS" do
221
+ @env.env.config.vm.share_folder("v-foo", "/foo", "/bar", :nfs => true)
222
+ assert @instance.nfs_enabled?
223
+ end
224
+ end
225
+
226
+ context "verifying settings" do
227
+ setup do
228
+ @env.env.host.stubs(:nfs?).returns(true)
229
+ end
230
+
231
+ should "error environment if host is nil" do
232
+ @env.env.stubs(:host).returns(nil)
233
+ assert_raises(Vagrant::Errors::NFSHostRequired) {
234
+ @instance.verify_settings
235
+ }
236
+ end
237
+
238
+ should "error environment if host does not support NFS" do
239
+ @env.env.host.stubs(:nfs?).returns(false)
240
+ assert_raises(Vagrant::Errors::NFSNotSupported) {
241
+ @instance.verify_settings
242
+ }
243
+ end
244
+
245
+ should "error environment if host only networking is not enabled" do
246
+ @env.env.config.vm.network_options.clear
247
+ assert_raises(Vagrant::Errors::NFSNoHostNetwork) {
248
+ @instance.verify_settings
249
+ }
250
+ end
251
+
252
+ should "be fine if everything passes" do
253
+ @env.env.host.stubs(:nfs?).returns(true)
254
+ assert_nothing_raised {
255
+ @instance.verify_settings
256
+ }
257
+ end
258
+ end
259
+ end
260
+ end