Files
vagrant-libvirt/spec/unit/util/resolvers_spec.rb
Darragh Bailey 91401a6559 Restore handling of disk_device domain setting (#1365)
Re-enable handling of the disk_device domain volume setting to ensure it
can be overridden from the default of vda to a value chosen.

Provide a disk resolver to resolve devices after the box has been downloaded
so that initial devices can be correctly allocated and avoid conflicts with
additional disks added that would otherwise get assigned the same device.

Removes hack for destroy domain when more than one disk, as now devices
in the config are only present if provided by the configuration.

Fixes: #1353
2021-11-22 10:02:18 +00:00

117 lines
3.8 KiB
Ruby

# frozen_string_literal: true
require 'spec_helper'
require 'vagrant-libvirt/util/resolvers'
describe VagrantPlugins::ProviderLibvirt::Util::DiskDeviceResolver do
subject { described_class.new }
def deep_clone_disks(disk_array)
new_array = []
disk_array.each do |disk|
new_array.push disk.dup
end
new_array
end
describe '#resolve!' do
context 'when using default prefix' do
[
[
[{:name => 'single-disk'}],
[{:name => 'single-disk', :device => 'vda'}],
],
[
[{:name => 'disk1'}, {:name => 'disk2'}],
[{:name => 'disk1', :device => 'vda'}, {:name => 'disk2', :device => 'vdb'}],
],
[
[{:name => 'disk1'}, {:name => 'disk2', :device => 'vdc'}],
[{:name => 'disk1', :device => 'vda'}, {:name => 'disk2', :device => 'vdc'}],
],
[
[{:name => 'disk1', :device => 'sda'}, {:name => 'disk2'}],
[{:name => 'disk1', :device => 'sda'}, {:name => 'disk2', :device => 'vda'}],
],
].each do |input_disks, output_disks, options={}|
opts = {}.merge!(options)
it "should handle inputs: #{input_disks}" do
disks = deep_clone_disks(input_disks)
expect(subject.resolve!(disks)).to eq(output_disks)
expect(disks).to_not eq(input_disks)
end
end
end
context 'when using different default prefix' do
let(:subject) { described_class.new('sd') }
[
[
[{:name => 'single-disk'}],
[{:name => 'single-disk', :device => 'sda'}],
],
[
[{:name => 'disk1'}, {:name => 'disk2'}],
[{:name => 'disk1', :device => 'sda'}, {:name => 'disk2', :device => 'sdb'}],
],
[
[{:name => 'disk1'}, {:name => 'disk2', :device => 'vdc'}],
[{:name => 'disk1', :device => 'sda'}, {:name => 'disk2', :device => 'vdc'}],
],
[
[{:name => 'disk1', :device => 'sda'}, {:name => 'disk2'}],
[{:name => 'disk1', :device => 'sda'}, {:name => 'disk2', :device => 'sdb'}],
],
[
[{:name => 'disk1'}, {:name => 'disk2', :device => 'sda'}],
[{:name => 'disk1', :device => 'sdb'}, {:name => 'disk2', :device => 'sda'}],
],
].each do |input_disks, output_disks, options={}|
opts = {}.merge!(options)
it "should handle inputs: #{input_disks}" do
disks = deep_clone_disks(input_disks)
expect(subject.resolve!(disks)).to eq(output_disks)
end
end
end
context 'when using custom prefix' do
[
[
[{:name => 'existing-disk', :device => 'vda'}],
[{:name => 'single-disk'}],
[{:name => 'single-disk', :device => 'sda'}],
{:prefix => 'sd'},
],
[
[{:name => 'existing-disk', :device => 'vda'}],
[{:name => 'disk1', :device => 'sda'}, {:name => 'disk2'}],
[{:name => 'disk1', :device => 'sda'}, {:name => 'disk2', :device => 'sdb'}],
{:prefix => 'sd'},
],
].each do |existing, input_disks, output_disks, options={}|
opts = {}.merge!(options)
it "should handle inputs: #{input_disks} with opts: #{opts}" do
disks = deep_clone_disks(input_disks)
subject.resolve(existing)
expect(subject.resolve!(disks, opts)).to eq(output_disks)
end
end
end
end
describe '#resolve' do
let(:input_disks) { [{:name => 'single-disk'}] }
let(:output_disks) { [{:name => 'single-disk', :device => 'vda'}] }
it "should resolve without modifying" do
disks = deep_clone_disks(input_disks)
expect(subject.resolve(disks)).to eq(output_disks)
expect(disks).to_not eq(output_disks)
expect(disks).to eq(input_disks)
end
end
end