96 lines
2.8 KiB
Ruby
96 lines
2.8 KiB
Ruby
require File.expand_path("../../../../base", __FILE__)
|
|
|
|
require Vagrant.source_root.join("plugins/commands/winrm/command")
|
|
|
|
describe VagrantPlugins::CommandWinRM::Command do
|
|
include_context "unit"
|
|
include_context "virtualbox"
|
|
|
|
let(:iso_env) do
|
|
# We have to create a Vagrantfile so there is a root path
|
|
env = isolated_environment
|
|
env.vagrantfile("")
|
|
env.create_vagrant_env
|
|
end
|
|
|
|
let(:guest) { double("guest") }
|
|
let(:host) { double("host") }
|
|
let(:machine) { iso_env.machine(iso_env.machine_names[0], :dummy) }
|
|
let(:communicator) { double("communicator") }
|
|
|
|
let(:argv) { [] }
|
|
let(:config) {
|
|
double("config",
|
|
vm: double("vm-config", communicator: communicator_name))
|
|
}
|
|
let(:communicator_name) { :winrm }
|
|
|
|
subject { described_class.new(argv, iso_env) }
|
|
|
|
before do
|
|
allow(machine).to receive(:communicate).and_return(communicator)
|
|
allow(machine).to receive(:config).and_return(config)
|
|
allow(subject).to receive(:with_target_vms) { |&block| block.call machine }
|
|
allow(communicator).to receive(:execute)
|
|
end
|
|
|
|
it "should exit successfully when no command is provided" do
|
|
expect(subject.execute).to eq(0)
|
|
end
|
|
|
|
context "with command provided" do
|
|
let(:argv){ ["-c", "dir"] }
|
|
|
|
it "should execute the command via the communicator" do
|
|
expect(communicator).to receive(:execute).with("dir", any_args)
|
|
subject.execute
|
|
end
|
|
|
|
it "should execute with default shell" do
|
|
expect(communicator).to receive(:execute).with(anything, hash_including(shell: :powershell))
|
|
subject.execute
|
|
end
|
|
|
|
it "should execute without elevated privileges" do
|
|
expect(communicator).to receive(:execute).with(anything, hash_including(elevated: false))
|
|
subject.execute
|
|
end
|
|
|
|
context "with elevated option set" do
|
|
let(:argv) { ["-c", "dir", "-e"] }
|
|
|
|
it "should execute with elevated privileges" do
|
|
expect(communicator).to receive(:execute).with(anything, hash_including(elevated: true))
|
|
subject.execute
|
|
end
|
|
end
|
|
|
|
context "with shell option set" do
|
|
let(:argv) { ["-c", "dir", "-s", "cmd"] }
|
|
|
|
it "should execute with custom shell" do
|
|
expect(communicator).to receive(:execute).with(anything, hash_including(shell: :cmd))
|
|
subject.execute
|
|
end
|
|
end
|
|
end
|
|
|
|
context "with multiple command provided" do
|
|
let(:argv) { ["-c", "dir", "-c", "dir2"] }
|
|
|
|
it "should execute multiple commands via the communicator" do
|
|
expect(communicator).to receive(:execute).with("dir", any_args)
|
|
expect(communicator).to receive(:execute).with("dir2", any_args)
|
|
subject.execute
|
|
end
|
|
end
|
|
|
|
context "with invalid communicator configured" do
|
|
let(:communicator_name) { :ssh }
|
|
|
|
it "should raise an error" do
|
|
expect { subject.execute }.to raise_error(Vagrant::Errors::WinRMInvalidCommunicator)
|
|
end
|
|
end
|
|
end
|