From e01b96c6d0c6e17b5b1d0830d092c5fc374a37b1 Mon Sep 17 00:00:00 2001 From: Glenn Sarti Date: Mon, 3 Apr 2017 15:33:10 -0700 Subject: [PATCH] (POOLER-70) Add get_provider_for_pool for VM Provider This commit adds a helper method which retrieves the associated Provider object for a pool by name --- lib/vmpooler/pool_manager.rb | 11 +++++ spec/unit/pool_manager_spec.rb | 87 ++++++++++++++++++++++++++++++++++ 2 files changed, 98 insertions(+) diff --git a/lib/vmpooler/pool_manager.rb b/lib/vmpooler/pool_manager.rb index a190d2d..a1b9e3c 100644 --- a/lib/vmpooler/pool_manager.rb +++ b/lib/vmpooler/pool_manager.rb @@ -353,6 +353,17 @@ module Vmpooler $redis.hget('vmpooler__vm__' + vm_name, 'template') end + def get_provider_for_pool(pool_name) + provider_name = nil + $config[:pools].each do |pool| + next unless pool['name'] == pool_name + provider_name = pool['provider'] + end + return nil if provider_name.nil? + + $providers[provider_name] + end + def check_disk_queue(maxloop = 0, loop_delay = 5) $logger.log('d', "[*] [disk_manager] starting worker thread") diff --git a/spec/unit/pool_manager_spec.rb b/spec/unit/pool_manager_spec.rb index df0780b..fc328e4 100644 --- a/spec/unit/pool_manager_spec.rb +++ b/spec/unit/pool_manager_spec.rb @@ -1018,6 +1018,93 @@ EOT end end + describe '#get_provider_for_pool' do + let(:provider_name) { 'mock_provider' } + + before do + expect(subject).not_to be_nil + # Inject mock provider into global variable - Note this is a code smell + $providers = { provider_name => provider } + end + + after(:each) do + # Reset the global variable - Note this is a code smell + $providers = nil + end + + context 'Given a pool name which does not exist' do + let(:config) { YAML.load(<<-EOT +--- +:config: +:providers: + :mock: +:pools: + - name: '#{pool}' + size: 1 +EOT + )} + + it 'should return nil' do + expect(subject.get_provider_for_pool('pool_does_not_exist')).to be_nil + end + end + + context 'Given a pool which does not have a provider' do + let(:config) { YAML.load(<<-EOT +--- +:config: +:providers: + :mock: +:pools: + - name: '#{pool}' + size: 1 +EOT + )} + + it 'should return nil' do + expect(subject.get_provider_for_pool(pool)).to be_nil + end + end + + context 'Given a pool which uses an invalid provider' do + let(:config) { YAML.load(<<-EOT +--- +:config: +:providers: + :mock: +:pools: + - name: '#{pool}' + size: 1 + provider: 'does_not_exist' +EOT + )} + + it 'should return nil' do + expect(subject.get_provider_for_pool(pool)).to be_nil + end + end + + context 'Given a pool which uses a valid provider' do + let(:config) { YAML.load(<<-EOT +--- +:config: +:providers: + :mock: +:pools: + - name: '#{pool}' + size: 1 + provider: #{provider_name} +EOT + )} + + it 'should return a provider object' do + result = subject.get_provider_for_pool(pool) + expect(result).to_not be_nil + expect(result.name).to eq(provider_name) + end + end + end + describe '#check_disk_queue' do let(:threads) {[]}