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.
- data/.gitignore +31 -0
- data/.gitsetup.yml +5 -0
- data/.travis.yml +7 -0
- data/.yardopts +1 -0
- data/CHANGELOG.md +1067 -0
- data/Gemfile +3 -0
- data/LICENSE +21 -0
- data/README.md +89 -0
- data/Rakefile +18 -0
- data/bin/vagrant +106 -0
- data/config/default.rb +36 -0
- data/contrib/README.md +12 -0
- data/contrib/bash/completion.sh +3 -0
- data/contrib/emacs/vagrant.el +8 -0
- data/contrib/vim/vagrantfile.vim +9 -0
- data/keys/README.md +17 -0
- data/keys/vagrant +27 -0
- data/keys/vagrant.pub +1 -0
- data/lib/vagrant/action/builder.rb +174 -0
- data/lib/vagrant/action/builtin/box_add.rb +81 -0
- data/lib/vagrant/action/builtin/call.rb +67 -0
- data/lib/vagrant/action/builtin/config_validate.rb +30 -0
- data/lib/vagrant/action/builtin/confirm.rb +38 -0
- data/lib/vagrant/action/builtin/destroy_confirm.rb +21 -0
- data/lib/vagrant/action/builtin/env_set.rb +24 -0
- data/lib/vagrant/action/builtin/graceful_halt.rb +73 -0
- data/lib/vagrant/action/builtin/handle_box_url.rb +77 -0
- data/lib/vagrant/action/builtin/handle_forwarded_port_collisions.rb +134 -0
- data/lib/vagrant/action/builtin/lock.rb +57 -0
- data/lib/vagrant/action/builtin/nfs.rb +118 -0
- data/lib/vagrant/action/builtin/provision.rb +70 -0
- data/lib/vagrant/action/builtin/set_hostname.rb +27 -0
- data/lib/vagrant/action/builtin/ssh_exec.rb +42 -0
- data/lib/vagrant/action/builtin/ssh_run.rb +43 -0
- data/lib/vagrant/action/general/package.rb +103 -0
- data/lib/vagrant/action/hook.rb +107 -0
- data/lib/vagrant/action/runner.rb +69 -0
- data/lib/vagrant/action/warden.rb +103 -0
- data/lib/vagrant/action.rb +43 -0
- data/lib/vagrant/batch_action.rb +113 -0
- data/lib/vagrant/box.rb +97 -0
- data/lib/vagrant/box_collection.rb +375 -0
- data/lib/vagrant/cli.rb +82 -0
- data/lib/vagrant/config/loader.rb +222 -0
- data/lib/vagrant/config/v1/dummy_config.rb +13 -0
- data/lib/vagrant/config/v1/loader.rb +105 -0
- data/lib/vagrant/config/v1/root.rb +60 -0
- data/lib/vagrant/config/v1.rb +9 -0
- data/lib/vagrant/config/v2/dummy_config.rb +13 -0
- data/lib/vagrant/config/v2/loader.rb +141 -0
- data/lib/vagrant/config/v2/root.rb +105 -0
- data/lib/vagrant/config/v2/util.rb +21 -0
- data/lib/vagrant/config/v2.rb +9 -0
- data/lib/vagrant/config/version_base.rb +80 -0
- data/lib/vagrant/config.rb +61 -0
- data/lib/vagrant/environment.rb +843 -0
- data/lib/vagrant/errors.rb +570 -0
- data/lib/vagrant/guest.rb +163 -0
- data/lib/vagrant/hosts.rb +28 -0
- data/lib/vagrant/machine.rb +325 -0
- data/lib/vagrant/machine_state.rb +45 -0
- data/lib/vagrant/plugin/v1/command.rb +169 -0
- data/lib/vagrant/plugin/v1/communicator.rb +98 -0
- data/lib/vagrant/plugin/v1/config.rb +112 -0
- data/lib/vagrant/plugin/v1/errors.rb +15 -0
- data/lib/vagrant/plugin/v1/guest.rb +92 -0
- data/lib/vagrant/plugin/v1/host.rb +66 -0
- data/lib/vagrant/plugin/v1/manager.rb +131 -0
- data/lib/vagrant/plugin/v1/plugin.rb +229 -0
- data/lib/vagrant/plugin/v1/provider.rb +68 -0
- data/lib/vagrant/plugin/v1/provisioner.rb +50 -0
- data/lib/vagrant/plugin/v1.rb +19 -0
- data/lib/vagrant/plugin/v2/command.rb +234 -0
- data/lib/vagrant/plugin/v2/communicator.rb +98 -0
- data/lib/vagrant/plugin/v2/components.rb +47 -0
- data/lib/vagrant/plugin/v2/config.rb +136 -0
- data/lib/vagrant/plugin/v2/errors.rb +15 -0
- data/lib/vagrant/plugin/v2/guest.rb +78 -0
- data/lib/vagrant/plugin/v2/host.rb +66 -0
- data/lib/vagrant/plugin/v2/manager.rb +173 -0
- data/lib/vagrant/plugin/v2/plugin.rb +226 -0
- data/lib/vagrant/plugin/v2/provider.rb +69 -0
- data/lib/vagrant/plugin/v2/provisioner.rb +47 -0
- data/lib/vagrant/plugin/v2.rb +22 -0
- data/lib/vagrant/plugin.rb +6 -0
- data/lib/vagrant/registry.rb +78 -0
- data/lib/vagrant/ui.rb +215 -0
- data/lib/vagrant/util/ansi_escape_code_remover.rb +34 -0
- data/lib/vagrant/util/busy.rb +59 -0
- data/lib/vagrant/util/counter.rb +24 -0
- data/lib/vagrant/util/downloader.rb +146 -0
- data/lib/vagrant/util/file_checksum.rb +38 -0
- data/lib/vagrant/util/file_mode.rb +12 -0
- data/lib/vagrant/util/hash_with_indifferent_access.rb +63 -0
- data/lib/vagrant/util/is_port_open.rb +38 -0
- data/lib/vagrant/util/line_ending_helpers.rb +14 -0
- data/lib/vagrant/util/network_ip.rb +28 -0
- data/lib/vagrant/util/platform.rb +58 -0
- data/lib/vagrant/util/retryable.rb +31 -0
- data/lib/vagrant/util/safe_chdir.rb +33 -0
- data/lib/vagrant/util/safe_exec.rb +36 -0
- data/lib/vagrant/util/safe_puts.rb +31 -0
- data/lib/vagrant/util/scoped_hash_override.rb +45 -0
- data/lib/vagrant/util/ssh.rb +150 -0
- data/lib/vagrant/util/stacked_proc_runner.rb +35 -0
- data/lib/vagrant/util/string_block_editor.rb +77 -0
- data/lib/vagrant/util/subprocess.rb +273 -0
- data/lib/vagrant/util/template_renderer.rb +83 -0
- data/lib/vagrant/util/which.rb +43 -0
- data/lib/vagrant/util.rb +12 -0
- data/lib/vagrant/version.rb +6 -0
- data/lib/vagrant.rb +258 -0
- data/plugins/README.md +5 -0
- data/plugins/commands/box/command/add.rb +51 -0
- data/plugins/commands/box/command/list.rb +41 -0
- data/plugins/commands/box/command/remove.rb +37 -0
- data/plugins/commands/box/command/repackage.rb +43 -0
- data/plugins/commands/box/command/root.rb +75 -0
- data/plugins/commands/box/plugin.rb +15 -0
- data/plugins/commands/destroy/command.rb +31 -0
- data/plugins/commands/destroy/plugin.rb +18 -0
- data/plugins/commands/halt/command.rb +33 -0
- data/plugins/commands/halt/plugin.rb +18 -0
- data/plugins/commands/init/command.rb +40 -0
- data/plugins/commands/init/plugin.rb +18 -0
- data/plugins/commands/package/command.rb +83 -0
- data/plugins/commands/package/plugin.rb +18 -0
- data/plugins/commands/plugin/action/bundler_check.rb +25 -0
- data/plugins/commands/plugin/action/install_gem.rb +81 -0
- data/plugins/commands/plugin/action/license_plugin.rb +54 -0
- data/plugins/commands/plugin/action/list_plugins.rb +54 -0
- data/plugins/commands/plugin/action/prune_gems.rb +149 -0
- data/plugins/commands/plugin/action/uninstall_plugin.rb +23 -0
- data/plugins/commands/plugin/action.rb +52 -0
- data/plugins/commands/plugin/command/base.rb +22 -0
- data/plugins/commands/plugin/command/install.rb +58 -0
- data/plugins/commands/plugin/command/license.rb +31 -0
- data/plugins/commands/plugin/command/list.rb +28 -0
- data/plugins/commands/plugin/command/root.rb +75 -0
- data/plugins/commands/plugin/command/uninstall.rb +28 -0
- data/plugins/commands/plugin/gem_helper.rb +74 -0
- data/plugins/commands/plugin/plugin.rb +22 -0
- data/plugins/commands/plugin/state_file.rb +57 -0
- data/plugins/commands/provision/command.rb +34 -0
- data/plugins/commands/provision/plugin.rb +18 -0
- data/plugins/commands/reload/command.rb +37 -0
- data/plugins/commands/reload/plugin.rb +18 -0
- data/plugins/commands/resume/command.rb +25 -0
- data/plugins/commands/resume/plugin.rb +17 -0
- data/plugins/commands/ssh/command.rb +63 -0
- data/plugins/commands/ssh/plugin.rb +17 -0
- data/plugins/commands/ssh_config/command.rb +49 -0
- data/plugins/commands/ssh_config/plugin.rb +18 -0
- data/plugins/commands/status/command.rb +39 -0
- data/plugins/commands/status/plugin.rb +18 -0
- data/plugins/commands/suspend/command.rb +25 -0
- data/plugins/commands/suspend/plugin.rb +18 -0
- data/plugins/commands/up/command.rb +57 -0
- data/plugins/commands/up/plugin.rb +17 -0
- data/plugins/commands/up/start_mixins.rb +26 -0
- data/plugins/communicators/ssh/communicator.rb +342 -0
- data/plugins/communicators/ssh/plugin.rb +19 -0
- data/plugins/guests/arch/cap/change_host_name.rb +18 -0
- data/plugins/guests/arch/cap/configure_networks.rb +23 -0
- data/plugins/guests/arch/guest.rb +11 -0
- data/plugins/guests/arch/plugin.rb +25 -0
- data/plugins/guests/debian/cap/change_host_name.rb +18 -0
- data/plugins/guests/debian/cap/configure_networks.rb +61 -0
- data/plugins/guests/debian/guest.rb +9 -0
- data/plugins/guests/debian/plugin.rb +25 -0
- data/plugins/guests/fedora/cap/configure_networks.rb +59 -0
- data/plugins/guests/fedora/cap/network_scripts_dir.rb +15 -0
- data/plugins/guests/fedora/guest.rb +11 -0
- data/plugins/guests/fedora/plugin.rb +25 -0
- data/plugins/guests/freebsd/cap/change_host_name.rb +14 -0
- data/plugins/guests/freebsd/cap/configure_networks.rb +39 -0
- data/plugins/guests/freebsd/cap/halt.rb +16 -0
- data/plugins/guests/freebsd/cap/mount_nfs_folder.rb +14 -0
- data/plugins/guests/freebsd/guest.rb +14 -0
- data/plugins/guests/freebsd/plugin.rb +35 -0
- data/plugins/guests/gentoo/cap/change_host_name.rb +17 -0
- data/plugins/guests/gentoo/cap/configure_networks.rb +43 -0
- data/plugins/guests/gentoo/guest.rb +9 -0
- data/plugins/guests/gentoo/plugin.rb +25 -0
- data/plugins/guests/linux/cap/halt.rb +16 -0
- data/plugins/guests/linux/cap/mount_nfs.rb +30 -0
- data/plugins/guests/linux/cap/mount_virtualbox_shared_folder.rb +40 -0
- data/plugins/guests/linux/cap/read_ip_address.rb +17 -0
- data/plugins/guests/linux/cap/shell_expand_guest_path.rb +26 -0
- data/plugins/guests/linux/guest.rb +11 -0
- data/plugins/guests/linux/plugin.rb +40 -0
- data/plugins/guests/openbsd/cap/halt.rb +16 -0
- data/plugins/guests/openbsd/guest.rb +11 -0
- data/plugins/guests/openbsd/plugin.rb +20 -0
- data/plugins/guests/pld/cap/network_scripts_dir.rb +11 -0
- data/plugins/guests/pld/guest.rb +11 -0
- data/plugins/guests/pld/plugin.rb +20 -0
- data/plugins/guests/redhat/cap/change_host_name.rb +18 -0
- data/plugins/guests/redhat/cap/configure_networks.rb +60 -0
- data/plugins/guests/redhat/cap/network_scripts_dir.rb +11 -0
- data/plugins/guests/redhat/guest.rb +11 -0
- data/plugins/guests/redhat/plugin.rb +30 -0
- data/plugins/guests/solaris/cap/change_host_name.rb +17 -0
- data/plugins/guests/solaris/cap/configure_networks.rb +25 -0
- data/plugins/guests/solaris/cap/halt.rb +21 -0
- data/plugins/guests/solaris/cap/mount_virtualbox_shared_folder.rb +28 -0
- data/plugins/guests/solaris/config.rb +18 -0
- data/plugins/guests/solaris/guest.rb +14 -0
- data/plugins/guests/solaris/plugin.rb +40 -0
- data/plugins/guests/suse/cap/change_host_name.rb +18 -0
- data/plugins/guests/suse/cap/network_scripts_dir.rb +11 -0
- data/plugins/guests/suse/guest.rb +11 -0
- data/plugins/guests/suse/plugin.rb +25 -0
- data/plugins/guests/ubuntu/cap/change_host_name.rb +23 -0
- data/plugins/guests/ubuntu/guest.rb +32 -0
- data/plugins/guests/ubuntu/plugin.rb +20 -0
- data/plugins/hosts/arch/host.rb +68 -0
- data/plugins/hosts/arch/plugin.rb +15 -0
- data/plugins/hosts/bsd/host.rb +102 -0
- data/plugins/hosts/bsd/plugin.rb +15 -0
- data/plugins/hosts/fedora/host.rb +51 -0
- data/plugins/hosts/fedora/plugin.rb +15 -0
- data/plugins/hosts/freebsd/host.rb +43 -0
- data/plugins/hosts/freebsd/plugin.rb +15 -0
- data/plugins/hosts/gentoo/host.rb +24 -0
- data/plugins/hosts/gentoo/plugin.rb +15 -0
- data/plugins/hosts/linux/host.rb +95 -0
- data/plugins/hosts/linux/plugin.rb +15 -0
- data/plugins/hosts/opensuse/host.rb +34 -0
- data/plugins/hosts/opensuse/plugin.rb +15 -0
- data/plugins/hosts/windows/host.rb +17 -0
- data/plugins/hosts/windows/plugin.rb +15 -0
- data/plugins/kernel_v1/config/nfs.rb +20 -0
- data/plugins/kernel_v1/config/package.rb +17 -0
- data/plugins/kernel_v1/config/ssh.rb +46 -0
- data/plugins/kernel_v1/config/vagrant.rb +31 -0
- data/plugins/kernel_v1/config/vm.rb +184 -0
- data/plugins/kernel_v1/plugin.rb +44 -0
- data/plugins/kernel_v2/config/nfs.rb +14 -0
- data/plugins/kernel_v2/config/package.rb +13 -0
- data/plugins/kernel_v2/config/ssh.rb +76 -0
- data/plugins/kernel_v2/config/ssh_connect.rb +40 -0
- data/plugins/kernel_v2/config/vagrant.rb +13 -0
- data/plugins/kernel_v2/config/vm.rb +416 -0
- data/plugins/kernel_v2/config/vm_provisioner.rb +55 -0
- data/plugins/kernel_v2/config/vm_subvm.rb +30 -0
- data/plugins/kernel_v2/plugin.rb +44 -0
- data/plugins/providers/virtualbox/action/boot.rb +49 -0
- data/plugins/providers/virtualbox/action/check_accessible.rb +23 -0
- data/plugins/providers/virtualbox/action/check_created.rb +21 -0
- data/plugins/providers/virtualbox/action/check_guest_additions.rb +45 -0
- data/plugins/providers/virtualbox/action/check_running.rb +21 -0
- data/plugins/providers/virtualbox/action/check_virtualbox.rb +22 -0
- data/plugins/providers/virtualbox/action/clean_machine_folder.rb +43 -0
- data/plugins/providers/virtualbox/action/clear_forwarded_ports.rb +18 -0
- data/plugins/providers/virtualbox/action/clear_network_interfaces.rb +31 -0
- data/plugins/providers/virtualbox/action/clear_shared_folders.rb +17 -0
- data/plugins/providers/virtualbox/action/created.rb +20 -0
- data/plugins/providers/virtualbox/action/customize.rb +36 -0
- data/plugins/providers/virtualbox/action/destroy.rb +19 -0
- data/plugins/providers/virtualbox/action/destroy_unused_network_interfaces.rb +16 -0
- data/plugins/providers/virtualbox/action/discard_state.rb +20 -0
- data/plugins/providers/virtualbox/action/export.rb +57 -0
- data/plugins/providers/virtualbox/action/forced_halt.rb +25 -0
- data/plugins/providers/virtualbox/action/forward_ports.rb +87 -0
- data/plugins/providers/virtualbox/action/import.rb +51 -0
- data/plugins/providers/virtualbox/action/is_paused.rb +20 -0
- data/plugins/providers/virtualbox/action/is_running.rb +20 -0
- data/plugins/providers/virtualbox/action/is_saved.rb +20 -0
- data/plugins/providers/virtualbox/action/match_mac_address.rb +21 -0
- data/plugins/providers/virtualbox/action/message_already_running.rb +16 -0
- data/plugins/providers/virtualbox/action/message_not_created.rb +16 -0
- data/plugins/providers/virtualbox/action/message_not_running.rb +16 -0
- data/plugins/providers/virtualbox/action/message_will_not_destroy.rb +17 -0
- data/plugins/providers/virtualbox/action/network.rb +410 -0
- data/plugins/providers/virtualbox/action/package.rb +20 -0
- data/plugins/providers/virtualbox/action/package_vagrantfile.rb +33 -0
- data/plugins/providers/virtualbox/action/prepare_forwarded_port_collision_params.rb +35 -0
- data/plugins/providers/virtualbox/action/prepare_nfs_settings.rb +64 -0
- data/plugins/providers/virtualbox/action/prune_nfs_exports.rb +20 -0
- data/plugins/providers/virtualbox/action/resume.rb +25 -0
- data/plugins/providers/virtualbox/action/sane_defaults.rb +91 -0
- data/plugins/providers/virtualbox/action/set_name.rb +40 -0
- data/plugins/providers/virtualbox/action/setup_package_files.rb +51 -0
- data/plugins/providers/virtualbox/action/share_folders.rb +128 -0
- data/plugins/providers/virtualbox/action/suspend.rb +20 -0
- data/plugins/providers/virtualbox/action.rb +311 -0
- data/plugins/providers/virtualbox/config.rb +86 -0
- data/plugins/providers/virtualbox/driver/base.rb +360 -0
- data/plugins/providers/virtualbox/driver/meta.rb +142 -0
- data/plugins/providers/virtualbox/driver/version_4_0.rb +485 -0
- data/plugins/providers/virtualbox/driver/version_4_1.rb +485 -0
- data/plugins/providers/virtualbox/driver/version_4_2.rb +482 -0
- data/plugins/providers/virtualbox/model/forwarded_port.rb +58 -0
- data/plugins/providers/virtualbox/plugin.rb +42 -0
- data/plugins/providers/virtualbox/provider.rb +92 -0
- data/plugins/providers/virtualbox/util/compile_forwarded_ports.rb +31 -0
- data/plugins/provisioners/ansible/config.rb +72 -0
- data/plugins/provisioners/ansible/plugin.rb +23 -0
- data/plugins/provisioners/ansible/provisioner.rb +45 -0
- data/plugins/provisioners/cfengine/cap/debian/cfengine_install.rb +19 -0
- data/plugins/provisioners/cfengine/cap/linux/cfengine_installed.rb +14 -0
- data/plugins/provisioners/cfengine/cap/linux/cfengine_needs_bootstrap.rb +34 -0
- data/plugins/provisioners/cfengine/cap/redhat/cfengine_install.rb +24 -0
- data/plugins/provisioners/cfengine/config.rb +120 -0
- data/plugins/provisioners/cfengine/plugin.rb +42 -0
- data/plugins/provisioners/cfengine/provisioner.rb +136 -0
- data/plugins/provisioners/chef/config/base.rb +85 -0
- data/plugins/provisioners/chef/config/chef_client.rb +57 -0
- data/plugins/provisioners/chef/config/chef_solo.rb +87 -0
- data/plugins/provisioners/chef/plugin.rb +33 -0
- data/plugins/provisioners/chef/provisioner/base.rb +93 -0
- data/plugins/provisioners/chef/provisioner/chef_client.rb +107 -0
- data/plugins/provisioners/chef/provisioner/chef_solo.rb +192 -0
- data/plugins/provisioners/puppet/config/puppet.rb +70 -0
- data/plugins/provisioners/puppet/config/puppet_server.rb +16 -0
- data/plugins/provisioners/puppet/plugin.rb +33 -0
- data/plugins/provisioners/puppet/provisioner/puppet.rb +117 -0
- data/plugins/provisioners/puppet/provisioner/puppet_server.rb +67 -0
- data/plugins/provisioners/shell/config.rb +56 -0
- data/plugins/provisioners/shell/plugin.rb +23 -0
- data/plugins/provisioners/shell/provisioner.rb +86 -0
- data/tasks/acceptance.rake +113 -0
- data/tasks/bundler.rake +3 -0
- data/tasks/test.rake +20 -0
- data/templates/commands/init/Vagrantfile.erb +111 -0
- data/templates/commands/ssh_config/config.erb +16 -0
- data/templates/config/messages.erb +14 -0
- data/templates/config/validation_failed.erb +7 -0
- data/templates/guests/arch/network_dhcp.erb +4 -0
- data/templates/guests/arch/network_static.erb +6 -0
- data/templates/guests/debian/network_dhcp.erb +11 -0
- data/templates/guests/debian/network_static.erb +7 -0
- data/templates/guests/fedora/network_dhcp.erb +6 -0
- data/templates/guests/fedora/network_static.erb +13 -0
- data/templates/guests/freebsd/network_dhcp.erb +3 -0
- data/templates/guests/freebsd/network_static.erb +3 -0
- data/templates/guests/gentoo/network_dhcp.erb +4 -0
- data/templates/guests/gentoo/network_static.erb +4 -0
- data/templates/guests/redhat/network_dhcp.erb +6 -0
- data/templates/guests/redhat/network_static.erb +8 -0
- data/templates/locales/en.yml +1126 -0
- data/templates/nfs/exports.erb +5 -0
- data/templates/nfs/exports_freebsd.erb +5 -0
- data/templates/nfs/exports_linux.erb +5 -0
- data/templates/package_Vagrantfile.erb +11 -0
- data/templates/provisioners/chef_client/client.erb +32 -0
- data/templates/provisioners/chef_solo/solo.erb +25 -0
- data/templates/rgloader.rb +9 -0
- data/test/acceptance/base.rb +48 -0
- data/test/acceptance/box_test.rb +99 -0
- data/test/acceptance/destroy_test.rb +37 -0
- data/test/acceptance/halt_test.rb +72 -0
- data/test/acceptance/init_test.rb +33 -0
- data/test/acceptance/networking/host_only_test.rb +37 -0
- data/test/acceptance/networking/port_forward_test.rb +125 -0
- data/test/acceptance/package_test.rb +46 -0
- data/test/acceptance/provisioning/basic_test.rb +61 -0
- data/test/acceptance/provisioning/chef_solo_test.rb +37 -0
- data/test/acceptance/provisioning/shell_test.rb +53 -0
- data/test/acceptance/resume_test.rb +17 -0
- data/test/acceptance/shared_folders_test.rb +84 -0
- data/test/acceptance/skeletons/chef_solo_basic/README.md +3 -0
- data/test/acceptance/skeletons/chef_solo_basic/cookbooks/basic/recipes/default.rb +5 -0
- data/test/acceptance/skeletons/chef_solo_json/README.md +3 -0
- data/test/acceptance/skeletons/chef_solo_json/cookbooks/basic/recipes/default.rb +6 -0
- data/test/acceptance/skeletons/provisioner_multi/README.md +3 -0
- data/test/acceptance/skeletons/provisioner_multi/cookbooks/basic/recipes/default.rb +5 -0
- data/test/acceptance/ssh_test.rb +46 -0
- data/test/acceptance/support/config.rb +42 -0
- data/test/acceptance/support/isolated_environment.rb +118 -0
- data/test/acceptance/support/matchers/have_color.rb +9 -0
- data/test/acceptance/support/matchers/match_output.rb +14 -0
- data/test/acceptance/support/matchers/succeed.rb +14 -0
- data/test/acceptance/support/network_tests.rb +29 -0
- data/test/acceptance/support/output.rb +95 -0
- data/test/acceptance/support/shared/base_context.rb +72 -0
- data/test/acceptance/support/shared/command_examples.rb +33 -0
- data/test/acceptance/support/virtualbox.rb +36 -0
- data/test/acceptance/suspend_test.rb +56 -0
- data/test/acceptance/up_basic_test.rb +33 -0
- data/test/acceptance/up_with_box_url.rb +40 -0
- data/test/acceptance/vagrant_test.rb +47 -0
- data/test/acceptance/version_test.rb +15 -0
- data/test/config/acceptance_boxes.yml +7 -0
- data/test/support/isolated_environment.rb +46 -0
- data/test/support/tempdir.rb +43 -0
- data/test/unit/base.rb +27 -0
- data/test/unit/support/dummy_provider.rb +16 -0
- data/test/unit/support/isolated_environment.rb +179 -0
- data/test/unit/support/shared/base_context.rb +104 -0
- data/test/unit/vagrant/action/builder_test.rb +242 -0
- data/test/unit/vagrant/action/builtin/call_test.rb +145 -0
- data/test/unit/vagrant/action/builtin/confirm_test.rb +36 -0
- data/test/unit/vagrant/action/builtin/env_set_test.rb +20 -0
- data/test/unit/vagrant/action/builtin/graceful_halt_test.rb +61 -0
- data/test/unit/vagrant/action/builtin/lock_test.rb +98 -0
- data/test/unit/vagrant/action/builtin/ssh_exec_test.rb +57 -0
- data/test/unit/vagrant/action/hook_test.rb +120 -0
- data/test/unit/vagrant/action/runner_test.rb +71 -0
- data/test/unit/vagrant/action/warden_test.rb +92 -0
- data/test/unit/vagrant/batch_action_test.rb +36 -0
- data/test/unit/vagrant/box_collection_test.rb +237 -0
- data/test/unit/vagrant/box_test.rb +122 -0
- data/test/unit/vagrant/cli_test.rb +27 -0
- data/test/unit/vagrant/config/loader_test.rb +184 -0
- data/test/unit/vagrant/config/v1/dummy_config_test.rb +24 -0
- data/test/unit/vagrant/config/v1/loader_test.rb +145 -0
- data/test/unit/vagrant/config/v1/root_test.rb +40 -0
- data/test/unit/vagrant/config/v2/dummy_config_test.rb +24 -0
- data/test/unit/vagrant/config/v2/loader_test.rb +151 -0
- data/test/unit/vagrant/config/v2/root_test.rb +97 -0
- data/test/unit/vagrant/config/v2/util_test.rb +21 -0
- data/test/unit/vagrant/config_test.rb +66 -0
- data/test/unit/vagrant/environment_test.rb +721 -0
- data/test/unit/vagrant/guest_test.rb +166 -0
- data/test/unit/vagrant/hosts_test.rb +37 -0
- data/test/unit/vagrant/machine_state_test.rb +26 -0
- data/test/unit/vagrant/machine_test.rb +384 -0
- data/test/unit/vagrant/plugin/v1/command_test.rb +143 -0
- data/test/unit/vagrant/plugin/v1/communicator_test.rb +9 -0
- data/test/unit/vagrant/plugin/v1/config_test.rb +50 -0
- data/test/unit/vagrant/plugin/v1/host_test.rb +5 -0
- data/test/unit/vagrant/plugin/v1/manager_test.rb +114 -0
- data/test/unit/vagrant/plugin/v1/plugin_test.rb +267 -0
- data/test/unit/vagrant/plugin/v1/provider_test.rb +18 -0
- data/test/unit/vagrant/plugin/v2/command_test.rb +238 -0
- data/test/unit/vagrant/plugin/v2/communicator_test.rb +9 -0
- data/test/unit/vagrant/plugin/v2/components_test.rb +17 -0
- data/test/unit/vagrant/plugin/v2/config_test.rb +60 -0
- data/test/unit/vagrant/plugin/v2/host_test.rb +5 -0
- data/test/unit/vagrant/plugin/v2/manager_test.rb +174 -0
- data/test/unit/vagrant/plugin/v2/plugin_test.rb +305 -0
- data/test/unit/vagrant/plugin/v2/provider_test.rb +18 -0
- data/test/unit/vagrant/registry_test.rb +128 -0
- data/test/unit/vagrant/util/ansi_escape_code_remover_test.rb +16 -0
- data/test/unit/vagrant/util/downloader_test.rb +57 -0
- data/test/unit/vagrant/util/file_checksum_test.rb +23 -0
- data/test/unit/vagrant/util/hash_with_indifferent_access_test.rb +38 -0
- data/test/unit/vagrant/util/is_port_open_test.rb +53 -0
- data/test/unit/vagrant/util/line_endings_helper_test.rb +16 -0
- data/test/unit/vagrant/util/network_ip_test.rb +17 -0
- data/test/unit/vagrant/util/retryable_test.rb +106 -0
- data/test/unit/vagrant/util/safe_chdir_test.rb +43 -0
- data/test/unit/vagrant/util/scoped_hash_override_test.rb +48 -0
- data/test/unit/vagrant/util/ssh_test.rb +30 -0
- data/test/unit/vagrant/util/string_block_editor_test.rb +106 -0
- data/test/unit/vagrant/util/which_test.rb +43 -0
- data/test/unit/vagrant_test.rb +56 -0
- data/tnargav.gemspec +69 -0
- data/vagrant.gemspec +69 -0
- metadata +730 -0
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
require File.expand_path("../../../base", __FILE__)
|
|
2
|
+
|
|
3
|
+
require "vagrant/action/builder"
|
|
4
|
+
require "vagrant/action/hook"
|
|
5
|
+
|
|
6
|
+
describe Vagrant::Action::Hook do
|
|
7
|
+
describe "defaults" do
|
|
8
|
+
its("after_hooks") { should be_empty }
|
|
9
|
+
its("before_hooks") { should be_empty }
|
|
10
|
+
its("append_hooks") { should be_empty }
|
|
11
|
+
its("prepend_hooks") { should be_empty }
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
describe "before hooks" do
|
|
15
|
+
let(:existing) { "foo" }
|
|
16
|
+
|
|
17
|
+
it "should append them" do
|
|
18
|
+
block = Proc.new {}
|
|
19
|
+
|
|
20
|
+
subject.before(existing, 1)
|
|
21
|
+
subject.before(existing, 2)
|
|
22
|
+
subject.before(existing, 3, :arg, &block)
|
|
23
|
+
|
|
24
|
+
subject.before_hooks[existing].should == [
|
|
25
|
+
[1, [], nil],
|
|
26
|
+
[2, [], nil],
|
|
27
|
+
[3, [:arg], block]
|
|
28
|
+
]
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
describe "after hooks" do
|
|
33
|
+
let(:existing) { "foo" }
|
|
34
|
+
|
|
35
|
+
it "should append them" do
|
|
36
|
+
block = Proc.new {}
|
|
37
|
+
|
|
38
|
+
subject.after(existing, 1)
|
|
39
|
+
subject.after(existing, 2)
|
|
40
|
+
subject.after(existing, 3, :arg, &block)
|
|
41
|
+
|
|
42
|
+
subject.after_hooks[existing].should == [
|
|
43
|
+
[1, [], nil],
|
|
44
|
+
[2, [], nil],
|
|
45
|
+
[3, [:arg], block]
|
|
46
|
+
]
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
describe "append" do
|
|
51
|
+
it "should make a list" do
|
|
52
|
+
block = Proc.new {}
|
|
53
|
+
|
|
54
|
+
subject.append(1)
|
|
55
|
+
subject.append(2)
|
|
56
|
+
subject.append(3, :arg, &block)
|
|
57
|
+
|
|
58
|
+
subject.append_hooks.should == [
|
|
59
|
+
[1, [], nil],
|
|
60
|
+
[2, [], nil],
|
|
61
|
+
[3, [:arg], block]
|
|
62
|
+
]
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
describe "prepend" do
|
|
67
|
+
it "should make a list" do
|
|
68
|
+
block = Proc.new {}
|
|
69
|
+
|
|
70
|
+
subject.prepend(1)
|
|
71
|
+
subject.prepend(2)
|
|
72
|
+
subject.prepend(3, :arg, &block)
|
|
73
|
+
|
|
74
|
+
subject.prepend_hooks.should == [
|
|
75
|
+
[1, [], nil],
|
|
76
|
+
[2, [], nil],
|
|
77
|
+
[3, [:arg], block]
|
|
78
|
+
]
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
describe "applying" do
|
|
83
|
+
let(:builder) { Vagrant::Action::Builder.new }
|
|
84
|
+
|
|
85
|
+
it "should build the proper stack" do
|
|
86
|
+
subject.prepend("1", 2)
|
|
87
|
+
subject.append("9")
|
|
88
|
+
subject.after("1", "2")
|
|
89
|
+
subject.before("9", "8")
|
|
90
|
+
|
|
91
|
+
subject.apply(builder)
|
|
92
|
+
|
|
93
|
+
builder.stack.should == [
|
|
94
|
+
["1", [2], nil],
|
|
95
|
+
["2", [], nil],
|
|
96
|
+
["8", [], nil],
|
|
97
|
+
["9", [], nil]
|
|
98
|
+
]
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
it "should not prepend or append if disabled" do
|
|
102
|
+
builder.use("3")
|
|
103
|
+
builder.use("8")
|
|
104
|
+
|
|
105
|
+
subject.prepend("1", 2)
|
|
106
|
+
subject.append("9")
|
|
107
|
+
subject.after("3", "4")
|
|
108
|
+
subject.before("8", "7")
|
|
109
|
+
|
|
110
|
+
subject.apply(builder, no_prepend_or_append: true)
|
|
111
|
+
|
|
112
|
+
builder.stack.should == [
|
|
113
|
+
["3", [], nil],
|
|
114
|
+
["4", [], nil],
|
|
115
|
+
["7", [], nil],
|
|
116
|
+
["8", [], nil]
|
|
117
|
+
]
|
|
118
|
+
end
|
|
119
|
+
end
|
|
120
|
+
end
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
require File.expand_path("../../../base", __FILE__)
|
|
2
|
+
|
|
3
|
+
describe Vagrant::Action::Runner do
|
|
4
|
+
let(:instance) { described_class.new }
|
|
5
|
+
|
|
6
|
+
it "should raise an error if an invalid callable is given" do
|
|
7
|
+
expect { instance.run(7) }.to raise_error(ArgumentError, /must be a callable/)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
it "should be able to use a Proc as a callable" do
|
|
11
|
+
callable = Proc.new { raise Exception, "BOOM" }
|
|
12
|
+
expect { instance.run(callable) }.to raise_error(Exception, "BOOM")
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
it "should be able to use a Class as a callable" do
|
|
16
|
+
callable = Class.new do
|
|
17
|
+
def initialize(app, env)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def call(env)
|
|
21
|
+
raise Exception, "BOOM"
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
expect { instance.run(callable) }.to raise_error(Exception, "BOOM")
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
it "should return the resulting environment" do
|
|
29
|
+
callable = lambda do |env|
|
|
30
|
+
env[:data] = "value"
|
|
31
|
+
|
|
32
|
+
# Return nil so we can make sure it isn't using this return value
|
|
33
|
+
nil
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
result = instance.run(callable)
|
|
37
|
+
result[:data].should == "value"
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
it "should pass options into hash given to callable" do
|
|
41
|
+
result = nil
|
|
42
|
+
callable = lambda do |env|
|
|
43
|
+
result = env["data"]
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
instance.run(callable, "data" => "foo")
|
|
47
|
+
result.should == "foo"
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
it "should pass global options into the hash" do
|
|
51
|
+
result = nil
|
|
52
|
+
callable = lambda do |env|
|
|
53
|
+
result = env["data"]
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
instance = described_class.new("data" => "bar")
|
|
57
|
+
instance.run(callable)
|
|
58
|
+
result.should == "bar"
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
it "should yield the block passed to the init method to get lazy loaded globals" do
|
|
62
|
+
result = nil
|
|
63
|
+
callable = lambda do |env|
|
|
64
|
+
result = env["data"]
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
instance = described_class.new { { "data" => "bar" } }
|
|
68
|
+
instance.run(callable)
|
|
69
|
+
result.should == "bar"
|
|
70
|
+
end
|
|
71
|
+
end
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
require File.expand_path("../../../base", __FILE__)
|
|
2
|
+
|
|
3
|
+
describe Vagrant::Action::Warden do
|
|
4
|
+
let(:data) { { :data => [] } }
|
|
5
|
+
let(:instance) { described_class.new }
|
|
6
|
+
|
|
7
|
+
# This returns a proc that can be used with the builder
|
|
8
|
+
# that simply appends data to an array in the env.
|
|
9
|
+
def appender_proc(data)
|
|
10
|
+
Proc.new { |env| env[:data] << data }
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
it "calls the actions like normal" do
|
|
14
|
+
instance = described_class.new([appender_proc(1), appender_proc(2)], data)
|
|
15
|
+
instance.call(data)
|
|
16
|
+
|
|
17
|
+
data[:data].should == [1, 2]
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
it "starts a recovery sequence when an exception is raised" do
|
|
21
|
+
class Action
|
|
22
|
+
def initialize(app, env)
|
|
23
|
+
@app = app
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def call(env)
|
|
27
|
+
@app.call(env)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def recover(env)
|
|
31
|
+
env[:recover] << 1
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
class ActionTwo
|
|
36
|
+
def initialize(app, env)
|
|
37
|
+
@app = app
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def call(env)
|
|
41
|
+
@app.call(env)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def recover(env)
|
|
45
|
+
env[:recover] << 2
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
error_proc = Proc.new { raise "ERROR!" }
|
|
50
|
+
|
|
51
|
+
data = { :recover => [] }
|
|
52
|
+
instance = described_class.new([Action, ActionTwo, error_proc], data)
|
|
53
|
+
|
|
54
|
+
# The error should be raised back up
|
|
55
|
+
expect { instance.call(data) }.
|
|
56
|
+
to raise_error(RuntimeError)
|
|
57
|
+
|
|
58
|
+
# Verify the recovery process goes in reverse order
|
|
59
|
+
data[:recover].should == [2, 1]
|
|
60
|
+
|
|
61
|
+
# Verify that the error is available in the data
|
|
62
|
+
data["vagrant.error"].should be_kind_of(RuntimeError)
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
it "does not do a recovery sequence if SystemExit is raised" do
|
|
66
|
+
class Action
|
|
67
|
+
def initialize(app, env)
|
|
68
|
+
@app = app
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def call(env)
|
|
72
|
+
@app.call(env)
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def recover(env)
|
|
76
|
+
env[:recover] = true
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
# Make a proc that just calls "abort" which raises a
|
|
81
|
+
# SystemExit exception.
|
|
82
|
+
error_proc = Proc.new { abort }
|
|
83
|
+
|
|
84
|
+
instance = described_class.new([Action, error_proc], data)
|
|
85
|
+
|
|
86
|
+
# The SystemExit should come through
|
|
87
|
+
expect { instance.call(data) }.to raise_error(SystemExit)
|
|
88
|
+
|
|
89
|
+
# The recover should not have been called
|
|
90
|
+
data.has_key?(:recover).should_not be
|
|
91
|
+
end
|
|
92
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
require 'thread'
|
|
2
|
+
|
|
3
|
+
require File.expand_path("../../base", __FILE__)
|
|
4
|
+
|
|
5
|
+
describe Vagrant::BatchAction do
|
|
6
|
+
let(:called_actions) { [] }
|
|
7
|
+
let!(:lock) { Mutex.new }
|
|
8
|
+
let(:provider_name) { "test" }
|
|
9
|
+
let(:provider_options) { {} }
|
|
10
|
+
|
|
11
|
+
def new_machine(options)
|
|
12
|
+
double("machine").tap do |m|
|
|
13
|
+
m.stub(:provider_name => provider_name)
|
|
14
|
+
m.stub(:provider_options => options)
|
|
15
|
+
m.stub(:action) do |action, opts|
|
|
16
|
+
lock.synchronize do
|
|
17
|
+
called_actions << [m, action, opts]
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
describe "#run" do
|
|
24
|
+
let(:machine) { new_machine(provider_options) }
|
|
25
|
+
let(:machine2) { new_machine(provider_options) }
|
|
26
|
+
|
|
27
|
+
it "should run the actions on the machines in order" do
|
|
28
|
+
subject.action(machine, "up")
|
|
29
|
+
subject.action(machine2, "destroy")
|
|
30
|
+
subject.run
|
|
31
|
+
|
|
32
|
+
called_actions.include?([machine, "up", nil]).should be
|
|
33
|
+
called_actions.include?([machine2, "destroy", nil]).should be
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
require File.expand_path("../../base", __FILE__)
|
|
2
|
+
|
|
3
|
+
require "pathname"
|
|
4
|
+
require 'tempfile'
|
|
5
|
+
|
|
6
|
+
describe Vagrant::BoxCollection do
|
|
7
|
+
include_context "unit"
|
|
8
|
+
|
|
9
|
+
let(:box_class) { Vagrant::Box }
|
|
10
|
+
let(:environment) { isolated_environment }
|
|
11
|
+
let(:instance) { described_class.new(environment.boxes_dir) }
|
|
12
|
+
|
|
13
|
+
it "should tell us the directory it is using" do
|
|
14
|
+
instance.directory.should == environment.boxes_dir
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
describe "adding" do
|
|
18
|
+
it "should add a valid box to the system" do
|
|
19
|
+
box_path = environment.box2_file(:virtualbox)
|
|
20
|
+
|
|
21
|
+
# Add the box
|
|
22
|
+
box = instance.add(box_path, "foo", :virtualbox)
|
|
23
|
+
box.should be_kind_of(box_class)
|
|
24
|
+
box.name.should == "foo"
|
|
25
|
+
box.provider.should == :virtualbox
|
|
26
|
+
|
|
27
|
+
# Verify we can find it as well
|
|
28
|
+
box = instance.find("foo", :virtualbox)
|
|
29
|
+
box.should_not be_nil
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
it "should add a box without specifying a provider" do
|
|
33
|
+
box_path = environment.box2_file(:vmware)
|
|
34
|
+
|
|
35
|
+
# Add the box
|
|
36
|
+
box = instance.add(box_path, "foo")
|
|
37
|
+
box.should be_kind_of(box_class)
|
|
38
|
+
box.name.should == "foo"
|
|
39
|
+
box.provider.should == :vmware
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
it "should add a V1 box" do
|
|
43
|
+
# Create a V1 box.
|
|
44
|
+
box_path = environment.box1_file
|
|
45
|
+
|
|
46
|
+
# Add the box
|
|
47
|
+
box = instance.add(box_path, "foo")
|
|
48
|
+
box.should be_kind_of(box_class)
|
|
49
|
+
box.name.should == "foo"
|
|
50
|
+
box.provider.should == :virtualbox
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
it "should raise an exception if the box already exists" do
|
|
54
|
+
prev_box_name = "foo"
|
|
55
|
+
prev_box_provider = :virtualbox
|
|
56
|
+
|
|
57
|
+
# Create the box we're adding
|
|
58
|
+
environment.box2(prev_box_name, prev_box_provider)
|
|
59
|
+
|
|
60
|
+
# Attempt to add the box with the same name
|
|
61
|
+
box_path = environment.box2_file(prev_box_provider)
|
|
62
|
+
expect { instance.add(box_path, prev_box_name, prev_box_provider) }.
|
|
63
|
+
to raise_error(Vagrant::Errors::BoxAlreadyExists)
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
it "should replace the box if force is specified" do
|
|
67
|
+
prev_box_name = "foo"
|
|
68
|
+
prev_box_provider = :vmware
|
|
69
|
+
|
|
70
|
+
# Setup the environment with the box pre-added
|
|
71
|
+
environment.box2(prev_box_name, prev_box_provider)
|
|
72
|
+
|
|
73
|
+
# Attempt to add the box with the same name
|
|
74
|
+
box_path = environment.box2_file(prev_box_provider, metadata: { "replaced" => "yes" })
|
|
75
|
+
box = instance.add(box_path, prev_box_name, nil, true)
|
|
76
|
+
box.metadata["replaced"].should == "yes"
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
it "should raise an exception if the box already exists and no provider is given" do
|
|
80
|
+
# Create some box file
|
|
81
|
+
box_name = "foo"
|
|
82
|
+
box_path = environment.box2_file(:vmware)
|
|
83
|
+
|
|
84
|
+
# Add it once, successfully
|
|
85
|
+
expect { instance.add(box_path, box_name) }.to_not raise_error
|
|
86
|
+
|
|
87
|
+
# Add it again, and fail!
|
|
88
|
+
expect { instance.add(box_path, box_name) }.
|
|
89
|
+
to raise_error(Vagrant::Errors::BoxAlreadyExists)
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
it "should raise an exception if you're attempting to add a box that exists as a V1 box" do
|
|
93
|
+
prev_box_name = "foo"
|
|
94
|
+
|
|
95
|
+
# Create the V1 box
|
|
96
|
+
environment.box1(prev_box_name)
|
|
97
|
+
|
|
98
|
+
# Attempt to add some V2 box with the same name
|
|
99
|
+
box_path = environment.box2_file(:vmware)
|
|
100
|
+
expect { instance.add(box_path, prev_box_name) }.
|
|
101
|
+
to raise_error(Vagrant::Errors::BoxUpgradeRequired)
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
it "should raise an exception and not add the box if the provider doesn't match" do
|
|
105
|
+
box_name = "foo"
|
|
106
|
+
good_provider = :virtualbox
|
|
107
|
+
bad_provider = :vmware
|
|
108
|
+
|
|
109
|
+
# Create a VirtualBox box file
|
|
110
|
+
box_path = environment.box2_file(good_provider)
|
|
111
|
+
|
|
112
|
+
# Add the box but with an invalid provider, verify we get the proper
|
|
113
|
+
# error.
|
|
114
|
+
expect { instance.add(box_path, box_name, bad_provider) }.
|
|
115
|
+
to raise_error(Vagrant::Errors::BoxProviderDoesntMatch)
|
|
116
|
+
|
|
117
|
+
# Verify the box doesn't exist
|
|
118
|
+
instance.find(box_name, bad_provider).should be_nil
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
it "should raise an exception if you add an invalid box file" do
|
|
122
|
+
# Tar Header information
|
|
123
|
+
CHECKSUM_OFFSET = 148
|
|
124
|
+
CHECKSUM_LENGTH = 8
|
|
125
|
+
|
|
126
|
+
Tempfile.new(['vagrant_testing', '.tar']) do |f|
|
|
127
|
+
# Corrupt the tar by writing over the checksum field
|
|
128
|
+
f.seek(CHECKSUM_OFFSET)
|
|
129
|
+
f.write("\0"*CHECKSUM_LENGTH)
|
|
130
|
+
f.close
|
|
131
|
+
|
|
132
|
+
expect { instance.add(path, "foo", :virtualbox) }.
|
|
133
|
+
to raise_error(Vagrant::Errors::BoxUnpackageFailure)
|
|
134
|
+
end
|
|
135
|
+
end
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
describe "listing all" do
|
|
139
|
+
it "should return an empty array when no boxes are there" do
|
|
140
|
+
instance.all.should == []
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
it "should return the boxes and their providers" do
|
|
144
|
+
# Create some boxes
|
|
145
|
+
environment.box2("foo", :virtualbox)
|
|
146
|
+
environment.box2("foo", :vmware)
|
|
147
|
+
environment.box2("bar", :ec2)
|
|
148
|
+
|
|
149
|
+
# Verify some output
|
|
150
|
+
results = instance.all
|
|
151
|
+
results.length.should == 3
|
|
152
|
+
results.include?(["foo", :virtualbox]).should be
|
|
153
|
+
results.include?(["foo", :vmware]).should be
|
|
154
|
+
results.include?(["bar", :ec2]).should be
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
it "should return V1 boxes as well" do
|
|
158
|
+
# Create some boxes, including a V1 box
|
|
159
|
+
environment.box1("bar")
|
|
160
|
+
environment.box2("foo", :vmware)
|
|
161
|
+
|
|
162
|
+
# Verify some output
|
|
163
|
+
results = instance.all.sort
|
|
164
|
+
results.should == [["bar", :virtualbox, :v1], ["foo", :vmware]]
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
it 'does not raise an exception when a file appears in the boxes dir' do
|
|
168
|
+
Tempfile.new('a_file', environment.boxes_dir)
|
|
169
|
+
expect { instance.all }.to_not raise_error
|
|
170
|
+
end
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
describe "finding" do
|
|
174
|
+
it "should return nil if the box does not exist" do
|
|
175
|
+
instance.find("foo", :i_dont_exist).should be_nil
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
it "should return a box if the box does exist" do
|
|
179
|
+
# Create the "box"
|
|
180
|
+
environment.box2("foo", :virtualbox)
|
|
181
|
+
|
|
182
|
+
# Actual test
|
|
183
|
+
result = instance.find("foo", :virtualbox)
|
|
184
|
+
result.should_not be_nil
|
|
185
|
+
result.should be_kind_of(box_class)
|
|
186
|
+
result.name.should == "foo"
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
it "should throw an exception if it is a v1 box" do
|
|
190
|
+
# Create a V1 box
|
|
191
|
+
environment.box1("foo")
|
|
192
|
+
|
|
193
|
+
# Test!
|
|
194
|
+
expect { instance.find("foo", :virtualbox) }.
|
|
195
|
+
to raise_error(Vagrant::Errors::BoxUpgradeRequired)
|
|
196
|
+
end
|
|
197
|
+
|
|
198
|
+
it "should return nil if there is a V1 box but we're looking for another provider" do
|
|
199
|
+
# Create a V1 box
|
|
200
|
+
environment.box1("foo")
|
|
201
|
+
|
|
202
|
+
# Test
|
|
203
|
+
instance.find("foo", :another_provider).should be_nil
|
|
204
|
+
end
|
|
205
|
+
end
|
|
206
|
+
|
|
207
|
+
describe "upgrading" do
|
|
208
|
+
it "should upgrade a V1 box to V2" do
|
|
209
|
+
# Create a V1 box
|
|
210
|
+
environment.box1("foo")
|
|
211
|
+
|
|
212
|
+
# Verify that only a V1 box exists
|
|
213
|
+
expect { instance.find("foo", :virtualbox) }.
|
|
214
|
+
to raise_error(Vagrant::Errors::BoxUpgradeRequired)
|
|
215
|
+
|
|
216
|
+
# Upgrade the box
|
|
217
|
+
instance.upgrade("foo").should be
|
|
218
|
+
|
|
219
|
+
# Verify the box exists
|
|
220
|
+
box = instance.find("foo", :virtualbox)
|
|
221
|
+
box.should_not be_nil
|
|
222
|
+
box.name.should == "foo"
|
|
223
|
+
end
|
|
224
|
+
|
|
225
|
+
it "should raise a BoxNotFound exception if a non-existent box is upgraded" do
|
|
226
|
+
expect { instance.upgrade("i-dont-exist") }.
|
|
227
|
+
to raise_error(Vagrant::Errors::BoxNotFound)
|
|
228
|
+
end
|
|
229
|
+
|
|
230
|
+
it "should return true if we try to upgrade a V2 box" do
|
|
231
|
+
# Create a V2 box
|
|
232
|
+
environment.box2("foo", :vmware)
|
|
233
|
+
|
|
234
|
+
instance.upgrade("foo").should be
|
|
235
|
+
end
|
|
236
|
+
end
|
|
237
|
+
end
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
require File.expand_path("../../base", __FILE__)
|
|
2
|
+
|
|
3
|
+
require "pathname"
|
|
4
|
+
|
|
5
|
+
describe Vagrant::Box do
|
|
6
|
+
include_context "unit"
|
|
7
|
+
|
|
8
|
+
let(:environment) { isolated_environment }
|
|
9
|
+
|
|
10
|
+
let(:box_collection) { Vagrant::BoxCollection.new(environment.boxes_dir) }
|
|
11
|
+
|
|
12
|
+
let(:name) { "foo" }
|
|
13
|
+
let(:provider) { :virtualbox }
|
|
14
|
+
let(:directory) { environment.box2("foo", :virtualbox) }
|
|
15
|
+
let(:instance) { described_class.new(name, provider, directory) }
|
|
16
|
+
|
|
17
|
+
subject { described_class.new(name, provider, directory) }
|
|
18
|
+
|
|
19
|
+
it "provides the name" do
|
|
20
|
+
instance.name.should == name
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it "provides the provider" do
|
|
24
|
+
instance.provider.should == provider
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
it "provides the directory" do
|
|
28
|
+
instance.directory.should == directory
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
it "provides the metadata associated with a box" do
|
|
32
|
+
data = { "foo" => "bar" }
|
|
33
|
+
|
|
34
|
+
# Write the metadata
|
|
35
|
+
directory.join("metadata.json").open("w") do |f|
|
|
36
|
+
f.write(JSON.generate(data))
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# Verify the metadata
|
|
40
|
+
instance.metadata.should == data
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
context "without a metadata file" do
|
|
44
|
+
before :each do
|
|
45
|
+
directory.join("metadata.json").delete
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
it "should raise an exception" do
|
|
49
|
+
expect { subject }.
|
|
50
|
+
to raise_error(Vagrant::Errors::BoxMetadataFileNotFound)
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
describe "destroying" do
|
|
55
|
+
it "should destroy an existing box" do
|
|
56
|
+
# Verify that our "box" exists
|
|
57
|
+
directory.exist?.should be
|
|
58
|
+
|
|
59
|
+
# Destroy it
|
|
60
|
+
instance.destroy!.should be
|
|
61
|
+
|
|
62
|
+
# Verify that it is "destroyed"
|
|
63
|
+
directory.exist?.should_not be
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
it "should not error destroying a non-existent box" do
|
|
67
|
+
# Get the instance so that it is instantiated
|
|
68
|
+
box = instance
|
|
69
|
+
|
|
70
|
+
# Delete the directory
|
|
71
|
+
directory.rmtree
|
|
72
|
+
|
|
73
|
+
# Destroy it
|
|
74
|
+
box.destroy!.should be
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
describe "repackaging" do
|
|
79
|
+
it "should repackage the box" do
|
|
80
|
+
test_file_contents = "hello, world!"
|
|
81
|
+
|
|
82
|
+
# Put a file in the box directory to verify it is packaged properly
|
|
83
|
+
# later.
|
|
84
|
+
directory.join("test_file").open("w") do |f|
|
|
85
|
+
f.write(test_file_contents)
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
# Repackage our box to some temporary directory
|
|
89
|
+
box_output_path = temporary_dir.join("package.box")
|
|
90
|
+
instance.repackage(box_output_path).should be
|
|
91
|
+
|
|
92
|
+
# Let's now add this box again under a different name, and then
|
|
93
|
+
# verify that we get the proper result back.
|
|
94
|
+
new_box = box_collection.add(box_output_path, "foo2")
|
|
95
|
+
new_box.directory.join("test_file").read.should == test_file_contents
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
describe "comparison and ordering" do
|
|
100
|
+
it "should be equal if the name and provider match" do
|
|
101
|
+
a = described_class.new("a", :foo, directory)
|
|
102
|
+
b = described_class.new("a", :foo, directory)
|
|
103
|
+
|
|
104
|
+
a.should == b
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
it "should not be equal if the name and provider do not match" do
|
|
108
|
+
a = described_class.new("a", :foo, directory)
|
|
109
|
+
b = described_class.new("b", :foo, directory)
|
|
110
|
+
|
|
111
|
+
a.should_not == b
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
it "should sort them in order of name then provider" do
|
|
115
|
+
a = described_class.new("a", :foo, directory)
|
|
116
|
+
b = described_class.new("b", :foo, directory)
|
|
117
|
+
c = described_class.new("c", :foo2, directory)
|
|
118
|
+
|
|
119
|
+
[c, a, b].sort.should == [a, b, c]
|
|
120
|
+
end
|
|
121
|
+
end
|
|
122
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
describe Vagrant::CLI do
|
|
2
|
+
describe "parsing options" do
|
|
3
|
+
let(:klass) do
|
|
4
|
+
Class.new(described_class)
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
let(:environment) do
|
|
8
|
+
ui = double("UI::Silent")
|
|
9
|
+
ui.stub(:info => "bar")
|
|
10
|
+
env = double("Vagrant::Environment")
|
|
11
|
+
env.stub(:ui => ui)
|
|
12
|
+
env.stub(:root_path => "foo")
|
|
13
|
+
env.stub(:machine_names => [])
|
|
14
|
+
env
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
it "returns a non-zero exit status if an invalid command is given" do
|
|
18
|
+
result = klass.new(["destroypp"], environment).execute
|
|
19
|
+
result.should_not == 0
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
it "returns an exit status of zero if a valid command is given" do
|
|
23
|
+
result = klass.new(["destroy"], environment).execute
|
|
24
|
+
result.should == 0
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|