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,166 @@
1
+ require "pathname"
2
+
3
+ require File.expand_path("../../base", __FILE__)
4
+
5
+ describe Vagrant::Guest do
6
+ include_context "unit"
7
+
8
+ let(:capabilities) { {} }
9
+ let(:guests) { {} }
10
+ let(:machine) do
11
+ double("machine").tap do |m|
12
+ m.stub(:inspect => "machine")
13
+ end
14
+ end
15
+
16
+ subject { described_class.new(machine, guests, capabilities) }
17
+
18
+ # This registers a capability with a specific guest
19
+ def register_capability(guest, capability, options=nil)
20
+ options ||= {}
21
+
22
+ cap = Class.new do
23
+ if !options[:corrupt]
24
+ define_method(capability) do |*args|
25
+ raise "cap: #{capability} #{args.inspect}"
26
+ end
27
+ end
28
+ end
29
+
30
+ capabilities[guest] ||= {}
31
+ capabilities[guest][capability] = cap.new
32
+ end
33
+
34
+ # This registers a guest with the class.
35
+ #
36
+ # @param [Symbol] name Name of the guest
37
+ # @param [Symbol] parent Name of the parent
38
+ # @param [Boolean] detect Whether or not to detect properly
39
+ def register_guest(name, parent, detect)
40
+ guest = Class.new(Vagrant.plugin("2", "guest")) do
41
+ define_method(:name) do
42
+ name
43
+ end
44
+
45
+ define_method(:detect?) do |m|
46
+ detect
47
+ end
48
+ end
49
+
50
+ guests[name] = [guest, parent]
51
+ end
52
+
53
+ describe "#capability" do
54
+ before :each do
55
+ register_guest(:foo, nil, true)
56
+ register_guest(:bar, :foo, true)
57
+
58
+ subject.detect!
59
+ end
60
+
61
+ it "executes the capability" do
62
+ register_capability(:bar, :test)
63
+
64
+ expect { subject.capability(:test) }.
65
+ to raise_error(RuntimeError, "cap: test [machine]")
66
+ end
67
+
68
+ it "executes the capability with arguments" do
69
+ register_capability(:bar, :test)
70
+
71
+ expect { subject.capability(:test, 1) }.
72
+ to raise_error(RuntimeError, "cap: test [machine, 1]")
73
+ end
74
+
75
+ it "raises an exception if the capability doesn't exist" do
76
+ expect { subject.capability(:what_is_this_i_dont_even) }.
77
+ to raise_error(Vagrant::Errors::GuestCapabilityNotFound)
78
+ end
79
+
80
+ it "raises an exception if the method doesn't exist on the module" do
81
+ register_capability(:bar, :test_is_corrupt, corrupt: true)
82
+
83
+ expect { subject.capability(:test_is_corrupt) }.
84
+ to raise_error(Vagrant::Errors::GuestCapabilityInvalid)
85
+ end
86
+ end
87
+
88
+ describe "#capability?" do
89
+ before :each do
90
+ register_guest(:foo, nil, true)
91
+ register_guest(:bar, :foo, true)
92
+
93
+ subject.detect!
94
+ end
95
+
96
+ it "doesn't have unknown capabilities" do
97
+ subject.capability?(:what_is_this_i_dont_even).should_not be
98
+ end
99
+
100
+ it "doesn't have capabilities registered to other guests" do
101
+ register_capability(:baz, :test)
102
+
103
+ subject.capability?(:test).should_not be
104
+ end
105
+
106
+ it "has capability of detected guest" do
107
+ register_capability(:bar, :test)
108
+
109
+ subject.capability?(:test).should be
110
+ end
111
+
112
+ it "has capability of parent guests" do
113
+ register_capability(:foo, :test)
114
+
115
+ subject.capability?(:test).should be
116
+ end
117
+ end
118
+
119
+ describe "#detect!" do
120
+ it "detects the first match" do
121
+ register_guest(:foo, nil, false)
122
+ register_guest(:bar, nil, true)
123
+ register_guest(:baz, nil, false)
124
+
125
+ subject.detect!
126
+ subject.name.should == :bar
127
+ subject.chain.length.should == 1
128
+ subject.chain[0][0].should == :bar
129
+ subject.chain[0][1].name.should == :bar
130
+ end
131
+
132
+ it "detects those with the most parents first" do
133
+ register_guest(:foo, nil, true)
134
+ register_guest(:bar, :foo, true)
135
+ register_guest(:baz, :bar, true)
136
+ register_guest(:foo2, nil, true)
137
+ register_guest(:bar2, :foo2, true)
138
+
139
+ subject.detect!
140
+ subject.name.should == :baz
141
+ subject.chain.length.should == 3
142
+ subject.chain.map(&:first).should == [:baz, :bar, :foo]
143
+ subject.chain.map { |x| x[1] }.map(&:name).should == [:baz, :bar, :foo]
144
+ end
145
+
146
+ it "raises an exception if no guest can be detected" do
147
+ expect { subject.detect! }.
148
+ to raise_error(Vagrant::Errors::GuestNotDetected)
149
+ end
150
+ end
151
+
152
+ describe "#ready?" do
153
+ before(:each) do
154
+ register_guest(:foo, nil, true)
155
+ end
156
+
157
+ it "should not be ready by default" do
158
+ subject.ready?.should_not be
159
+ end
160
+
161
+ it "should be ready after detecting" do
162
+ subject.detect!
163
+ subject.ready?.should be
164
+ end
165
+ end
166
+ end
@@ -0,0 +1,37 @@
1
+ require File.expand_path("../../base", __FILE__)
2
+
3
+ describe Vagrant::Hosts do
4
+ let(:registry) { Hash.new }
5
+ let(:base_class) { Vagrant::Plugin::V1::Host }
6
+
7
+ it "detects the host that matches true" do
8
+ foo_klass = Class.new(base_class) do
9
+ def self.match?; false; end
10
+ end
11
+
12
+ bar_klass = Class.new(base_class) do
13
+ def self.match?; true; end
14
+ end
15
+
16
+ registry[:foo] = foo_klass
17
+ registry[:bar] = bar_klass
18
+
19
+ described_class.detect(registry).should == bar_klass
20
+ end
21
+
22
+ it "detects the host that matches true with the highest precedence first" do
23
+ foo_klass = Class.new(base_class) do
24
+ def self.match?; true; end
25
+ end
26
+
27
+ bar_klass = Class.new(base_class) do
28
+ def self.match?; true; end
29
+ def self.precedence; 9; end
30
+ end
31
+
32
+ registry[:foo] = foo_klass
33
+ registry[:bar] = bar_klass
34
+
35
+ described_class.detect(registry).should == bar_klass
36
+ end
37
+ end
@@ -0,0 +1,26 @@
1
+ require "pathname"
2
+
3
+ require File.expand_path("../../base", __FILE__)
4
+
5
+ describe Vagrant::MachineState do
6
+ include_context "unit"
7
+
8
+ let(:id) { :some_state }
9
+ let(:short) { "foo" }
10
+ let(:long) { "I am a longer foo" }
11
+
12
+ it "should give access to the id" do
13
+ instance = described_class.new(id, short, long)
14
+ instance.id.should == id
15
+ end
16
+
17
+ it "should give access to the short description" do
18
+ instance = described_class.new(id, short, long)
19
+ instance.short_description.should == short
20
+ end
21
+
22
+ it "should give access to the long description" do
23
+ instance = described_class.new(id, short, long)
24
+ instance.long_description.should == long
25
+ end
26
+ end
@@ -0,0 +1,384 @@
1
+ require "pathname"
2
+
3
+ require File.expand_path("../../base", __FILE__)
4
+
5
+ describe Vagrant::Machine do
6
+ include_context "unit"
7
+
8
+ let(:name) { "foo" }
9
+ let(:provider) { double("provider") }
10
+ let(:provider_cls) do
11
+ obj = double("provider_cls")
12
+ obj.stub(:new => provider)
13
+ obj
14
+ end
15
+ let(:provider_config) { Object.new }
16
+ let(:provider_name) { :test }
17
+ let(:provider_options) { {} }
18
+ let(:box) { Object.new }
19
+ let(:config) { env.config_global }
20
+ let(:data_dir) { Pathname.new(Tempdir.new.path) }
21
+ let(:env) do
22
+ # We need to create a Vagrantfile so that this test environment
23
+ # has a proper root path
24
+ test_env.vagrantfile("")
25
+
26
+ # Create the Vagrant::Environment instance
27
+ test_env.create_vagrant_env
28
+ end
29
+
30
+ let(:test_env) { isolated_environment }
31
+
32
+ let(:instance) { new_instance }
33
+
34
+ subject { instance }
35
+
36
+ # Returns a new instance with the test data
37
+ def new_instance
38
+ described_class.new(name, provider_name, provider_cls, provider_config,
39
+ provider_options, config, data_dir, box, env)
40
+ end
41
+
42
+ describe "initialization" do
43
+ describe "provider initialization" do
44
+ # This is a helper that generates a test for provider intialization.
45
+ # This is a separate helper method because it takes a block that can
46
+ # be used to have additional tests on the received machine.
47
+ #
48
+ # @yield [machine] Yields the machine that the provider initialization
49
+ # method received so you can run additional tests on it.
50
+ def provider_init_test
51
+ received_machine = nil
52
+
53
+ provider_cls = double("provider_cls")
54
+ provider_cls.should_receive(:new) do |machine|
55
+ # Store this for later so we can verify that it is the
56
+ # one we expected to receive.
57
+ received_machine = machine
58
+
59
+ # Sanity check
60
+ machine.should be
61
+
62
+ # Yield our machine if we want to do additional tests
63
+ yield machine if block_given?
64
+ end
65
+
66
+ # Initialize a new machine and verify that we properly receive
67
+ # the machine we expect.
68
+ instance = described_class.new(name, provider_name, provider_cls, provider_config,
69
+ provider_options, config, data_dir, box, env)
70
+ received_machine.should eql(instance)
71
+ end
72
+
73
+ it "should initialize with the machine object" do
74
+ # Just run the blank test
75
+ provider_init_test
76
+ end
77
+
78
+ it "should have the machine name setup" do
79
+ provider_init_test do |machine|
80
+ machine.name.should == name
81
+ end
82
+ end
83
+
84
+ it "should have the machine configuration" do
85
+ provider_init_test do |machine|
86
+ machine.config.should eql(config)
87
+ end
88
+ end
89
+
90
+ it "should have the box" do
91
+ provider_init_test do |machine|
92
+ machine.box.should eql(box)
93
+ end
94
+ end
95
+
96
+ it "should have the environment" do
97
+ provider_init_test do |machine|
98
+ machine.env.should eql(env)
99
+ end
100
+ end
101
+
102
+ it "should have access to the ID" do
103
+ # Stub this because #id= calls it.
104
+ provider.stub(:machine_id_changed)
105
+
106
+ # Set the ID on the previous instance so that it is persisted
107
+ instance.id = "foo"
108
+
109
+ provider_init_test do |machine|
110
+ machine.id.should == "foo"
111
+ end
112
+ end
113
+
114
+ it "should NOT have access to the provider" do
115
+ provider_init_test do |machine|
116
+ machine.provider.should be_nil
117
+ end
118
+ end
119
+ end
120
+ end
121
+
122
+ describe "attributes" do
123
+ its(:name) { should eq(name) }
124
+ its(:config) { should eql(config) }
125
+ its(:box) { should eql(box) }
126
+ its(:env) { should eql(env) }
127
+ its(:provider) { should eql(provider) }
128
+ its(:provider_config) { should eql(provider_config) }
129
+ its(:provider_options) { should eq(provider_options) }
130
+ end
131
+
132
+ describe "actions" do
133
+ it "should be able to run an action that exists" do
134
+ action_name = :up
135
+ called = false
136
+ callable = lambda { |_env| called = true }
137
+
138
+ provider.should_receive(:action).with(action_name).and_return(callable)
139
+ instance.action(:up)
140
+ called.should be
141
+ end
142
+
143
+ it "should provide the machine in the environment" do
144
+ action_name = :up
145
+ machine = nil
146
+ callable = lambda { |env| machine = env[:machine] }
147
+
148
+ provider.stub(:action).with(action_name).and_return(callable)
149
+ instance.action(:up)
150
+
151
+ machine.should eql(instance)
152
+ end
153
+
154
+ it "should pass any extra options to the environment" do
155
+ action_name = :up
156
+ foo = nil
157
+ callable = lambda { |env| foo = env[:foo] }
158
+
159
+ provider.stub(:action).with(action_name).and_return(callable)
160
+ instance.action(:up, :foo => :bar)
161
+
162
+ foo.should == :bar
163
+ end
164
+
165
+ it "should return the environment as a result" do
166
+ action_name = :up
167
+ callable = lambda { |env| env[:result] = "FOO" }
168
+
169
+ provider.stub(:action).with(action_name).and_return(callable)
170
+ result = instance.action(action_name)
171
+
172
+ result[:result].should == "FOO"
173
+ end
174
+
175
+ it "should raise an exception if the action is not implemented" do
176
+ action_name = :up
177
+
178
+ provider.stub(:action).with(action_name).and_return(nil)
179
+
180
+ expect { instance.action(action_name) }.
181
+ to raise_error(Vagrant::Errors::UnimplementedProviderAction)
182
+ end
183
+ end
184
+
185
+ describe "communicator" do
186
+ it "should always return the SSH communicator" do
187
+ instance.communicate.should be_kind_of(VagrantPlugins::CommunicatorSSH::Communicator)
188
+ end
189
+
190
+ it "should memoize the result" do
191
+ obj = instance.communicate
192
+ instance.communicate.should eql(obj)
193
+ end
194
+ end
195
+
196
+ describe "guest implementation" do
197
+ let(:communicator) do
198
+ result = double("communicator")
199
+ result.stub(:ready?).and_return(true)
200
+ result.stub(:test).and_return(false)
201
+ result
202
+ end
203
+
204
+ before(:each) do
205
+ test_guest = Class.new(Vagrant.plugin("2", :guest)) do
206
+ def detect?(machine)
207
+ true
208
+ end
209
+ end
210
+
211
+ register_plugin do |p|
212
+ p.guest(:test) { test_guest }
213
+ end
214
+
215
+ instance.stub(:communicate).and_return(communicator)
216
+ end
217
+
218
+ it "should raise an exception if communication is not ready" do
219
+ communicator.should_receive(:ready?).and_return(false)
220
+
221
+ expect { instance.guest }.
222
+ to raise_error(Vagrant::Errors::MachineGuestNotReady)
223
+ end
224
+
225
+ it "should return the configured guest" do
226
+ result = instance.guest
227
+ result.should be_kind_of(Vagrant::Guest)
228
+ result.ready?.should be
229
+ result.chain[0][0].should == :test
230
+ end
231
+ end
232
+
233
+ describe "setting the ID" do
234
+ before(:each) do
235
+ provider.stub(:machine_id_changed)
236
+ end
237
+
238
+ it "should not have an ID by default" do
239
+ instance.id.should be_nil
240
+ end
241
+
242
+ it "should set an ID" do
243
+ instance.id = "bar"
244
+ instance.id.should == "bar"
245
+ end
246
+
247
+ it "should notify the machine that the ID changed" do
248
+ provider.should_receive(:machine_id_changed).once
249
+
250
+ instance.id = "bar"
251
+ end
252
+
253
+ it "should persist the ID" do
254
+ instance.id = "foo"
255
+ new_instance.id.should == "foo"
256
+ end
257
+
258
+ it "should delete the ID" do
259
+ instance.id = "foo"
260
+
261
+ second = new_instance
262
+ second.id.should == "foo"
263
+ second.id = nil
264
+
265
+ third = new_instance
266
+ third.id.should be_nil
267
+ end
268
+ end
269
+
270
+ describe "ssh info" do
271
+ describe "with the provider returning nil" do
272
+ it "should return nil if the provider returns nil" do
273
+ provider.should_receive(:ssh_info).and_return(nil)
274
+ instance.ssh_info.should be_nil
275
+ end
276
+ end
277
+
278
+ describe "with the provider returning data" do
279
+ let(:provider_ssh_info) { {} }
280
+
281
+ before(:each) do
282
+ provider.should_receive(:ssh_info).and_return(provider_ssh_info)
283
+ end
284
+
285
+ [:host, :port, :username].each do |type|
286
+ it "should return the provider data if not configured in Vagrantfile" do
287
+ provider_ssh_info[type] = "foo"
288
+ instance.config.ssh.send("#{type}=", nil)
289
+
290
+ instance.ssh_info[type].should == "foo"
291
+ end
292
+
293
+ it "should return the Vagrantfile value if provider data not given" do
294
+ provider_ssh_info[type] = nil
295
+ instance.config.ssh.send("#{type}=", "bar")
296
+
297
+ instance.ssh_info[type].should == "bar"
298
+ end
299
+
300
+ it "should use the default if no override and no provider" do
301
+ provider_ssh_info[type] = nil
302
+ instance.config.ssh.send("#{type}=", nil)
303
+ instance.config.ssh.default.send("#{type}=", "foo")
304
+
305
+ instance.ssh_info[type].should == "foo"
306
+ end
307
+
308
+ it "should use the override if set even with a provider" do
309
+ provider_ssh_info[type] = "baz"
310
+ instance.config.ssh.send("#{type}=", "bar")
311
+ instance.config.ssh.default.send("#{type}=", "foo")
312
+
313
+ instance.ssh_info[type].should == "bar"
314
+ end
315
+ end
316
+
317
+ it "should set the configured forward agent settings" do
318
+ provider_ssh_info[:forward_agent] = true
319
+ instance.config.ssh.forward_agent = false
320
+
321
+ instance.ssh_info[:forward_agent].should == false
322
+ end
323
+
324
+ it "should set the configured forward X11 settings" do
325
+ provider_ssh_info[:forward_x11] = true
326
+ instance.config.ssh.forward_x11 = false
327
+
328
+ instance.ssh_info[:forward_x11].should == false
329
+ end
330
+
331
+ it "should return the provider private key if given" do
332
+ provider_ssh_info[:private_key_path] = "/foo"
333
+
334
+ instance.ssh_info[:private_key_path].should == "/foo"
335
+ end
336
+
337
+ it "should return the configured SSH key path if set" do
338
+ provider_ssh_info[:private_key_path] = nil
339
+ instance.config.ssh.private_key_path = "/bar"
340
+
341
+ instance.ssh_info[:private_key_path].should == "/bar"
342
+ end
343
+
344
+ context "expanding path relative to the root path" do
345
+ it "should with the provider key path" do
346
+ provider_ssh_info[:private_key_path] = "~/foo"
347
+
348
+ instance.ssh_info[:private_key_path].should ==
349
+ File.expand_path("~/foo", env.root_path)
350
+ end
351
+
352
+ it "should with the config private key path" do
353
+ provider_ssh_info[:private_key_path] = nil
354
+ instance.config.ssh.private_key_path = "~/bar"
355
+
356
+ instance.ssh_info[:private_key_path].should ==
357
+ File.expand_path("~/bar", env.root_path)
358
+ end
359
+ end
360
+
361
+ it "should return the default private key path if provider and config doesn't have one" do
362
+ provider_ssh_info[:private_key_path] = nil
363
+ instance.config.ssh.private_key_path = nil
364
+
365
+ instance.ssh_info[:private_key_path].should == instance.env.default_private_key_path.to_s
366
+ end
367
+ end
368
+ end
369
+
370
+ describe "state" do
371
+ it "should query state from the provider" do
372
+ state = Vagrant::MachineState.new(:id, "short", "long")
373
+
374
+ provider.should_receive(:state).and_return(state)
375
+ instance.state.id.should == :id
376
+ end
377
+
378
+ it "should raise an exception if a MachineState is not returned" do
379
+ provider.should_receive(:state).and_return(:old_school)
380
+ expect { instance.state }.
381
+ to raise_error(Vagrant::Errors::MachineStateInvalid)
382
+ end
383
+ end
384
+ end