vagrant/test/unit/plugins/provisioners/ansible/config/host_test.rb

101 lines
3.4 KiB
Ruby

require_relative "../../../../base"
require_relative "../../support/shared/config"
require_relative "shared"
require Vagrant.source_root.join("plugins/provisioners/ansible/config/host")
describe VagrantPlugins::Ansible::Config::Host, :skip_windows => true do
include_context "unit"
subject { described_class.new }
let(:machine) { double("machine", env: Vagrant::Environment.new) }
let(:existing_file) { File.expand_path(__FILE__) }
it "supports a list of options" do
supported_options = %w( ask_sudo_pass
ask_vault_pass
config_file
extra_vars
force_remote_user
galaxy_command
galaxy_role_file
galaxy_roles_path
groups
host_key_checking
host_vars
inventory_path
limit
playbook
playbook_command
raw_arguments
raw_ssh_args
skip_tags
start_at_task
sudo
sudo_user
tags
vault_password_file
verbose )
expect(get_provisioner_option_names(described_class)).to eql(supported_options)
end
describe "default options handling" do
it_behaves_like "options shared by both Ansible provisioners"
it "assigns default values to unset host-specific options" do
subject.finalize!
expect(subject.ask_sudo_pass).to be(false)
expect(subject.ask_vault_pass).to be(false)
expect(subject.force_remote_user).to be(true)
expect(subject.host_key_checking).to be(false)
expect(subject.raw_ssh_args).to be_nil
end
end
describe "force_remote_user option" do
it_behaves_like "any VagrantConfigProvisioner strict boolean attribute", :force_remote_user, true
end
describe "host_key_checking option" do
it_behaves_like "any VagrantConfigProvisioner strict boolean attribute", :host_key_checking, false
end
describe "ask_sudo_pass option" do
it_behaves_like "any VagrantConfigProvisioner strict boolean attribute", :ask_sudo_pass, false
end
describe "ask_vault_pass option" do
it_behaves_like "any VagrantConfigProvisioner strict boolean attribute", :ask_vault_pass, false
end
describe "#validate" do
before do
subject.playbook = existing_file
end
it_behaves_like "an Ansible provisioner", "", "remote"
it "returns an error if the raw_ssh_args is of the wrong data type" do
subject.raw_ssh_args = { arg1: 1, arg2: "foo" }
subject.finalize!
result = subject.validate(machine)
expect(result["ansible remote provisioner"]).to eql([
I18n.t("vagrant.provisioners.ansible.errors.raw_ssh_args_invalid",
type: subject.raw_ssh_args.class.to_s,
value: subject.raw_ssh_args.to_s)
])
end
it "converts a raw_ssh_args option defined as a String into an Array" do
subject.raw_arguments = "-o ControlMaster=no"
subject.finalize!
result = subject.validate(machine)
expect(subject.raw_arguments).to eql(["-o ControlMaster=no"])
end
end
end