Adds a new mechanism to load providers from any gem or file path. (#263)

* Adds ability to load only providers used in config file
This commit is contained in:
Corey Osman 2018-07-24 16:35:18 -07:00 committed by mattkirby
parent 0a769b8901
commit 2daa5244b8
13 changed files with 316 additions and 15 deletions

View file

@ -46,6 +46,30 @@ EOT
end
end
describe '#load_used_providers' do
let(:config) { YAML.load(<<-EOT
---
:config:
:providers:
:mock:
:pools:
- name: '#{pool}'
size: 1
provider: 'spoof'
EOT
)
}
it do
files = ["#{project_root_dir}/lib/vmpooler/providers/vsphere.rb",
"#{project_root_dir}/lib/vmpooler/providers/dummy.rb"]
expect(subject.load_used_providers).to eq(files)
end
end
it '#default_providers' do
expect(subject.default_providers).to eq(['vsphere', 'dummy'])
end
describe '#check_pending_vm' do
before do
expect(subject).not_to be_nil

View file

@ -1,4 +1,5 @@
require 'spec_helper'
require 'vmpooler/providers/base'
# This spec does not really exercise code paths but is merely used
# to enforce that certain methods are defined in the base classes

View file

@ -1,4 +1,5 @@
require 'spec_helper'
require 'vmpooler/providers/dummy'
describe 'Vmpooler::PoolManager::Provider::Dummy' do
let(:logger) { MockLogger.new }

View file

@ -1,5 +1,6 @@
require 'spec_helper'
require 'mock_redis'
require 'vmpooler/providers/vsphere'
RSpec::Matchers.define :relocation_spec_with_host do |value|
match { |actual| actual[:spec].host == value }

View file

@ -0,0 +1,51 @@
require 'spec_helper'
require 'vmpooler/providers'
describe 'providers' do
let(:providers) do
Vmpooler::Providers.new
end
it '#correct class' do
expect(providers).to be_a Vmpooler::Providers
end
it '#load_all_providers' do
p = [
File.join(project_root_dir, 'lib', 'vmpooler', 'providers', 'base.rb'),
File.join(project_root_dir, 'lib', 'vmpooler', 'providers', 'dummy.rb'),
File.join(project_root_dir, 'lib', 'vmpooler', 'providers', 'vsphere.rb')
]
expect(Vmpooler::Providers.load_all_providers).to eq(p)
end
it '#installed_providers' do
expect(Vmpooler::Providers.installed_providers).to eq(['vmpooler'])
end
it '#vmpooler_provider_gem_list' do
expect(providers.vmpooler_provider_gem_list).to be_a Array
expect(providers.vmpooler_provider_gem_list.first).to be_a Gem::Specification
end
it '#load_by_name' do
expect(Vmpooler::Providers.load_by_name('vsphere')).to eq([File.join(project_root_dir, 'lib', 'vmpooler', 'providers', 'vsphere.rb')])
end
it '#load only vpshere' do
expect(providers.load_from_gems('vsphere')).to eq([File.join(project_root_dir, 'lib', 'vmpooler', 'providers', 'vsphere.rb')])
end
it '#load all providers from gems' do
p = [
File.join(project_root_dir, 'lib', 'vmpooler', 'providers', 'base.rb'),
File.join(project_root_dir, 'lib', 'vmpooler', 'providers', 'dummy.rb'),
File.join(project_root_dir, 'lib', 'vmpooler', 'providers', 'vsphere.rb')
]
expect(providers.load_from_gems).to eq(p)
end
end