Chris Roberts 78e8e17869 Cast host value to string prior to empty? check.
Force string type prior to empty? check to prevent errors if
host ip value is nil. Add coverage for proper handling of nil
value.
2017-03-06 09:14:04 -08:00

145 lines
4.5 KiB
Ruby

require File.expand_path("../../../../base", __FILE__)
require Vagrant.source_root.join("plugins/communicators/winrm/helper")
describe VagrantPlugins::CommunicatorWinRM::Helper do
include_context "unit"
let(:iso_env) do
# We have to create a Vagrantfile so there is a root path
test_iso_env.vagrantfile("")
test_iso_env.create_vagrant_env
end
let(:test_iso_env) { isolated_environment }
let(:machine) { iso_env.machine(iso_env.machine_names[0], :dummy) }
subject { described_class }
describe ".winrm_address" do
before do
machine.config.winrm.host = nil
end
it "returns the configured host if set" do
machine.config.winrm.host = "foo"
expect(subject.winrm_address(machine)).to eq("foo")
end
it "returns the SSH info host if available" do
machine.stub(ssh_info: { host: "bar" })
expect(subject.winrm_address(machine)).to eq("bar")
end
it "raise an exception if it can't detect a host" do
machine.stub(ssh_info: nil)
expect { subject.winrm_address(machine) }.
to raise_error(VagrantPlugins::CommunicatorWinRM::Errors::WinRMNotReady)
end
it "raise an exception if it detects an empty host ip" do
machine.stub(ssh_info: { host: "" })
expect { subject.winrm_address(machine) }.
to raise_error(VagrantPlugins::CommunicatorWinRM::Errors::WinRMNotReady)
end
it "raise a WinRMNotReady exception if it detects an unset host ip" do
machine.stub(ssh_info: { host: nil })
expect { subject.winrm_address(machine) }.
to raise_error(VagrantPlugins::CommunicatorWinRM::Errors::WinRMNotReady)
end
end
describe ".winrm_info" do
before do
machine.provider.stub(:capability?).
with(:winrm_info).and_return(false)
subject.stub(winrm_address: nil)
subject.stub(winrm_port: nil)
end
it "returns default info if no capability" do
subject.stub(winrm_address: "bar")
subject.stub(winrm_port: 45)
result = subject.winrm_info(machine)
expect(result[:host]).to eq("bar")
expect(result[:port]).to eq(45)
end
it "raises an exception if capability returns nil" do
machine.provider.stub(:capability?).
with(:winrm_info).and_return(true)
machine.provider.stub(:capability).with(:winrm_info).and_return(nil)
expect { subject.winrm_info(machine) }.
to raise_error(VagrantPlugins::CommunicatorWinRM::Errors::WinRMNotReady)
end
it "returns the proper information if set" do
machine.provider.stub(:capability?).
with(:winrm_info).and_return(true)
machine.provider.stub(:capability).with(:winrm_info).and_return({
host: "foo",
port: 12,
})
result = subject.winrm_info(machine)
expect(result[:host]).to eq("foo")
expect(result[:port]).to eq(12)
end
it "defaults information if capability doesn't set it" do
machine.provider.stub(:capability?).
with(:winrm_info).and_return(true)
machine.provider.stub(:capability).with(:winrm_info).and_return({})
subject.stub(winrm_address: "bar")
subject.stub(winrm_port: 45)
result = subject.winrm_info(machine)
expect(result[:host]).to eq("bar")
expect(result[:port]).to eq(45)
end
end
describe ".winrm_port" do
it "returns the configured port if no guest port set" do
machine.config.winrm.port = 22
machine.config.winrm.guest_port = nil
expect(subject.winrm_port(machine)).to eq(22)
end
it "returns the configured guest port if non local" do
machine.config.winrm.port = 22
machine.config.winrm.guest_port = 2222
machine.config.vm.network "forwarded_port", host: 1234, guest: 2222
expect(subject.winrm_port(machine, false)).to eq(2222)
end
it "returns a forwarded port that matches the guest port" do
machine.config.winrm.port = 22
machine.config.winrm.guest_port = 2222
machine.config.vm.network "forwarded_port", host: 1234, guest: 2222
expect(subject.winrm_port(machine)).to eq(1234)
end
it "uses the provider capability if it exists" do
machine.config.winrm.port = 22
machine.config.winrm.guest_port = 2222
machine.config.vm.network "forwarded_port", host: 1234, guest: 2222
machine.provider.stub(:capability?).with(:forwarded_ports).and_return(true)
machine.provider.stub(:capability).with(:forwarded_ports).and_return({
1234 => 4567,
2456 => 2222,
})
expect(subject.winrm_port(machine)).to eq(2456)
end
end
end