127 lines
3.6 KiB
Ruby
127 lines
3.6 KiB
Ruby
require_relative "../../../../base"
|
|
|
|
require Vagrant.source_root.join("plugins/providers/hyperv/action/configure")
|
|
|
|
describe VagrantPlugins::HyperV::Action::Configure do
|
|
let(:app){ double("app") }
|
|
let(:env){ {ui: ui, machine: machine} }
|
|
let(:ui){ double("ui") }
|
|
let(:provider){ double("provider", driver: driver) }
|
|
let(:driver){ double("driver") }
|
|
let(:machine){ double("machine", provider: provider, config: config, provider_config: provider_config, data_dir: data_dir, id: "machineID") }
|
|
let(:data_dir){ double("data_dir") }
|
|
let(:config){ double("config", vm: vm) }
|
|
let(:vm){ double("vm", networks: networks) }
|
|
let(:networks){ [] }
|
|
let(:switches){ [
|
|
{"Name" => "Switch1", "Id" => "ID1"},
|
|
{"Name" => "Switch2", "Id" => "ID2"}
|
|
]}
|
|
let(:sentinel){ double("sentinel") }
|
|
let(:provider_config){
|
|
double("provider_config",
|
|
memory: "1024",
|
|
maxmemory: "1024",
|
|
cpus: 1,
|
|
auto_start_action: "Nothing",
|
|
auto_stop_action: "Save",
|
|
enable_checkpoints: false,
|
|
enable_automatic_checkpoints: true,
|
|
enable_virtualization_extensions: false,
|
|
vm_integration_services: vm_integration_services
|
|
)
|
|
}
|
|
let(:vm_integration_services){ {} }
|
|
|
|
let(:subject){ described_class.new(app, env) }
|
|
|
|
before do
|
|
allow(driver).to receive(:execute)
|
|
allow(app).to receive(:call)
|
|
expect(driver).to receive(:execute).with(:get_switches).and_return(switches)
|
|
allow(ui).to receive(:detail)
|
|
allow(ui).to receive(:output)
|
|
allow(ui).to receive(:ask).and_return("1")
|
|
allow(data_dir).to receive(:join).and_return(sentinel)
|
|
allow(sentinel).to receive(:file?).and_return(false)
|
|
allow(sentinel).to receive(:open)
|
|
end
|
|
|
|
it "should call the app on success" do
|
|
expect(app).to receive(:call)
|
|
subject.call(env)
|
|
end
|
|
|
|
context "with missing switch sentinel file" do
|
|
it "should prompt for switch to use" do
|
|
expect(ui).to receive(:ask)
|
|
subject.call(env)
|
|
end
|
|
|
|
it "should write sentinel file" do
|
|
expect(sentinel).to receive(:open)
|
|
subject.call(env)
|
|
end
|
|
end
|
|
|
|
context "with existing switch sentinel file" do
|
|
before{ allow(sentinel).to receive(:file?).twice.and_return(true) }
|
|
|
|
it "should not prompt for switch to use" do
|
|
expect(ui).not_to receive(:ask)
|
|
subject.call(env)
|
|
end
|
|
|
|
it "should not write sentinel file" do
|
|
expect(sentinel).not_to receive(:open)
|
|
subject.call(env)
|
|
end
|
|
end
|
|
|
|
context "with bridge defined in networks" do
|
|
context "with valid bridge switch name" do
|
|
let(:networks){ [[:public_network, {bridge: "Switch1"}]] }
|
|
|
|
it "should not prompt for switch" do
|
|
expect(ui).not_to receive(:ask)
|
|
subject.call(env)
|
|
end
|
|
end
|
|
|
|
context "with valid bridge switch ID" do
|
|
let(:networks){ [[:public_network, {bridge: "ID1"}]] }
|
|
|
|
it "should not prompt for switch" do
|
|
expect(ui).not_to receive(:ask)
|
|
subject.call(env)
|
|
end
|
|
end
|
|
|
|
context "with invalid bridge switch name" do
|
|
let(:networks){ [[:public_network, {bridge: "UNKNOWN"}]] }
|
|
|
|
it "should prompt for switch" do
|
|
expect(ui).to receive(:ask)
|
|
subject.call(env)
|
|
end
|
|
end
|
|
end
|
|
|
|
context "with integration services enabled" do
|
|
let(:vm_integration_services){ {service: true} }
|
|
|
|
it "should call the driver to set the services" do
|
|
expect(driver).to receive(:set_vm_integration_services)
|
|
subject.call(env)
|
|
end
|
|
end
|
|
|
|
context "without available switches" do
|
|
let(:switches){ [] }
|
|
|
|
it "should raise an error" do
|
|
expect{ subject.call(env) }.to raise_error(VagrantPlugins::HyperV::Errors::NoSwitches)
|
|
end
|
|
end
|
|
end
|