Files
vagrant-libvirt/spec/unit/action/set_boot_order_spec.rb
Darragh Bailey 606b86df67 Return early from set_boot_order if not needed (#1578)
Switch to calling the returning the next middleware in the chain as soon
as possible in the set boot order action. Makes the overall remaining
logic tidier.

Include basic tests to check existing behaviour.
2022-09-03 16:11:11 +01:00

68 lines
2.1 KiB
Ruby

# frozen_string_literal: true
require 'spec_helper'
require 'support/sharedcontext'
require 'support/libvirt_context'
require 'vagrant-libvirt/action/set_boot_order'
describe VagrantPlugins::ProviderLibvirt::Action::SetBootOrder do
subject { described_class.new(app, env) }
include_context 'unit'
include_context 'libvirt'
#before do
# allow(driver).to receive(:created?).and_return(true)
#end
describe '#call' do
it 'should return early' do
expect(connection).to_not receive(:client)
expect(subject.call(env)).to be_nil
end
context 'with boot_order defined' do
let(:domain_xml) { File.read(File.join(File.dirname(__FILE__), File.basename(__FILE__, '.rb'), test_file)) }
let(:updated_domain_xml) { File.read(File.join(File.dirname(__FILE__), File.basename(__FILE__, '.rb'), updated_test_file)) }
let(:test_file) { 'default.xml' }
let(:updated_test_file) { 'explicit_boot_order.xml' }
let(:vagrantfile_providerconfig) do
<<-EOF
libvirt.boot "hd"
libvirt.boot "cdrom"
libvirt.boot "network" => 'vagrant-libvirt'
EOF
end
before do
allow(connection).to receive(:client).and_return(libvirt_client)
allow(libvirt_client).to receive(:lookup_domain_by_uuid).and_return(libvirt_domain)
allow(libvirt_domain).to receive(:xml_desc).and_return(domain_xml)
allow(logger).to receive(:debug)
end
it 'should configure the boot order' do
expect(libvirt_client).to receive(:define_domain_xml).with(updated_domain_xml)
expect(subject.call(env)).to be_nil
end
context 'with multiple networks in bootorder' do
let(:vagrantfile_providerconfig) do
<<-EOF
libvirt.boot "hd"
libvirt.boot "cdrom"
libvirt.boot "network" => 'vagrant-libvirt'
libvirt.boot "network" => 'vagrant-libvirt'
EOF
end
it 'should raise an exception' do
expect { subject.call(env) }.to raise_error('Defined only for 1 network for boot')
end
end
end
end
end