From cd8a87560ff2d71d6f3d4cb6bef5c5324006f9ff Mon Sep 17 00:00:00 2001 From: Dakota Schneider Date: Fri, 29 Jun 2018 14:49:04 -0700 Subject: [PATCH] (MOB) "Good luck" --- lib/vmpooler/pool_manager.rb | 31 +++--- spec/unit/pool_manager_spec.rb | 176 ++++++++++++++++++++++++--------- 2 files changed, 145 insertions(+), 62 deletions(-) diff --git a/lib/vmpooler/pool_manager.rb b/lib/vmpooler/pool_manager.rb index 45bcd7a..e559c12 100644 --- a/lib/vmpooler/pool_manager.rb +++ b/lib/vmpooler/pool_manager.rb @@ -737,6 +737,22 @@ module Vmpooler end end + def check_ready_pool_vms(pool_name, provider, pool_check_response, inventory, pool_ttl) + # READY + $redis.smembers("vmpooler__ready__#{pool_name}").each do |vm| + if inventory[vm] + begin + pool_check_response[:checked_ready_vms] += 1 + check_ready_vm(vm, pool_name, pool_ttl || 0, provider) + rescue => err + $logger.log('d', "[!] [#{pool_name}] _check_pool failed with an error while evaluating ready VMs: #{err}") + end + else + move_vm_queue(pool_name, vm, 'ready', 'completed', 'is a ready VM but is missing from inventory. Marking as completed.') + end + end + end + def _check_pool(pool, provider) pool_check_response = { discovered_vms: 0, @@ -756,20 +772,7 @@ module Vmpooler check_running_pool_vms(pool['name'], provider, pool_check_response, inventory) - - # READY - $redis.smembers("vmpooler__ready__#{pool['name']}").each do |vm| - if inventory[vm] - begin - pool_check_response[:checked_ready_vms] += 1 - check_ready_vm(vm, pool['name'], pool['ready_ttl'] || 0, provider) - rescue => err - $logger.log('d', "[!] [#{pool['name']}] _check_pool failed with an error while evaluating ready VMs: #{err}") - end - else - move_vm_queue(pool['name'], vm, 'ready', 'completed', 'is a ready VM but is missing from inventory. Marking as completed.') - end - end + check_ready_pool_vms(pool['name'], provider, pool_check_response, inventory, pool['ready_ttl']) # PENDING $redis.smembers("vmpooler__pending__#{pool['name']}").each do |vm| diff --git a/spec/unit/pool_manager_spec.rb b/spec/unit/pool_manager_spec.rb index 3142cee..d92d46e 100644 --- a/spec/unit/pool_manager_spec.rb +++ b/spec/unit/pool_manager_spec.rb @@ -24,7 +24,7 @@ describe 'Pool Manager' do let(:config) { YAML.load(<<-EOT --- -:config: +:config: {} :providers: :mock: :pools: @@ -2664,6 +2664,86 @@ EOT end end + describe '#check_running_pool_vms' do + let(:new_vm_response) { + # Mock response from Base Provider for vms_in_pool + [{ 'name' => vm}] + } + let(:inventory) { + # mock response from create_inventory + {vm => 1} + } + let(:pool_check_response) { + {:checked_running_vms => 0} + } + + context 'Running VM not in the inventory' do + before(:each) do + expect(provider).to receive(:vms_in_pool).with(pool).and_return(new_vm_response) + expect(logger).to receive(:log).with('s', "[?] [#{pool}] '#{vm}' added to 'discovered' queue") + create_running_vm(pool,vm,token) + end + + it 'should not call check_running_vm' do + expect(subject).to receive(:check_running_vm).exactly(0).times + + subject.check_running_pool_vms(pool, provider, pool_check_response, inventory) + end + + it 'should move the VM to completed queue' do + expect(subject).to receive(:move_vm_queue).with(pool,vm,'running','completed',String).and_call_original + + subject._check_pool(pool_object,provider) + end + end + + context 'Running VM in the inventory' do + before(:each) do + expect(provider).to receive(:vms_in_pool).with(pool).and_return(vm_response) + allow(subject).to receive(:check_running_vm) + create_running_vm(pool,vm,token) + end + + it 'should log an error if one occurs' do + expect(subject).to receive(:check_running_vm).and_raise(RuntimeError,'MockError') + expect(logger).to receive(:log).with('d', "[!] [#{pool}] _check_pool with an error while evaluating running VMs: MockError") + + subject._check_pool(pool_object,provider) + end + + it 'should return the number of checked running VMs' do + result = subject._check_pool(pool_object,provider) + + expect(result[:checked_running_vms]).to be(1) + end + + it 'should use the VM lifetime in preference to defaults' do + big_lifetime = 2000 + + redis.hset("vmpooler__vm__#{vm}", 'lifetime',big_lifetime) + # The lifetime comes in as string + expect(subject).to receive(:check_running_vm).with(vm,pool,"#{big_lifetime}",provider) + + subject._check_pool(pool_object,provider) + end + + it 'should use the configuration default if the VM lifetime is not set' do + config[:config]['vm_lifetime'] = 50 + expect(subject).to receive(:check_running_vm).with(vm,pool,50,provider) + + subject._check_pool(pool_object,provider) + end + + it 'should use a lifetime of 12 if nothing is set' do + expect(subject).to receive(:check_running_vm).with(vm,pool,12,provider) + + subject._check_pool(pool_object,provider) + end + end + + + end + describe '#_check_pool' do let(:new_vm_response) { # Mock response from Base Provider for vms_in_pool @@ -2794,69 +2874,69 @@ EOT end # RUNNING - context 'Running VM not in the inventory' do - before(:each) do - expect(provider).to receive(:vms_in_pool).with(pool).and_return(new_vm_response) - expect(logger).to receive(:log).with('s', "[?] [#{pool}] '#{new_vm}' added to 'discovered' queue") - create_running_vm(pool,vm,token) - end + # context 'Running VM not in the inventory' do + # before(:each) do + # expect(provider).to receive(:vms_in_pool).with(pool).and_return(new_vm_response) + # expect(logger).to receive(:log).with('s', "[?] [#{pool}] '#{new_vm}' added to 'discovered' queue") + # create_running_vm(pool,vm,token) + # end - it 'should not call check_running_vm' do - expect(subject).to receive(:check_running_vm).exactly(0).times + # it 'should not call check_running_vm' do + # expect(subject).to receive(:check_running_vm).exactly(0).times - subject._check_pool(pool_object,provider) - end + # subject._check_pool(pool_object,provider) + # end - it 'should move the VM to completed queue' do - expect(subject).to receive(:move_vm_queue).with(pool,vm,'running','completed',String).and_call_original + # it 'should move the VM to completed queue' do + # expect(subject).to receive(:move_vm_queue).with(pool,vm,'running','completed',String).and_call_original - subject._check_pool(pool_object,provider) - end - end + # subject._check_pool(pool_object,provider) + # end + # end - context 'Running VM in the inventory' do - before(:each) do - expect(provider).to receive(:vms_in_pool).with(pool).and_return(vm_response) - allow(subject).to receive(:check_running_vm) - create_running_vm(pool,vm,token) - end + # context 'Running VM in the inventory' do + # before(:each) do + # expect(provider).to receive(:vms_in_pool).with(pool).and_return(vm_response) + # allow(subject).to receive(:check_running_vm) + # create_running_vm(pool,vm,token) + # end - it 'should log an error if one occurs' do - expect(subject).to receive(:check_running_vm).and_raise(RuntimeError,'MockError') - expect(logger).to receive(:log).with('d', "[!] [#{pool}] _check_pool with an error while evaluating running VMs: MockError") + # it 'should log an error if one occurs' do + # expect(subject).to receive(:check_running_vm).and_raise(RuntimeError,'MockError') + # expect(logger).to receive(:log).with('d', "[!] [#{pool}] _check_pool with an error while evaluating running VMs: MockError") - subject._check_pool(pool_object,provider) - end + # subject._check_pool(pool_object,provider) + # end - it 'should return the number of checked running VMs' do - result = subject._check_pool(pool_object,provider) + # it 'should return the number of checked running VMs' do + # result = subject._check_pool(pool_object,provider) - expect(result[:checked_running_vms]).to be(1) - end + # expect(result[:checked_running_vms]).to be(1) + # end - it 'should use the VM lifetime in preference to defaults' do - big_lifetime = 2000 + # it 'should use the VM lifetime in preference to defaults' do + # big_lifetime = 2000 - redis.hset("vmpooler__vm__#{vm}", 'lifetime',big_lifetime) - # The lifetime comes in as string - expect(subject).to receive(:check_running_vm).with(vm,pool,"#{big_lifetime}",provider) + # redis.hset("vmpooler__vm__#{vm}", 'lifetime',big_lifetime) + # # The lifetime comes in as string + # expect(subject).to receive(:check_running_vm).with(vm,pool,"#{big_lifetime}",provider) - subject._check_pool(pool_object,provider) - end + # subject._check_pool(pool_object,provider) + # end - it 'should use the configuration default if the VM lifetime is not set' do - config[:config]['vm_lifetime'] = 50 - expect(subject).to receive(:check_running_vm).with(vm,pool,50,provider) + # it 'should use the configuration default if the VM lifetime is not set' do + # config[:config]['vm_lifetime'] = 50 + # expect(subject).to receive(:check_running_vm).with(vm,pool,50,provider) - subject._check_pool(pool_object,provider) - end + # subject._check_pool(pool_object,provider) + # end - it 'should use a lifetime of 12 if nothing is set' do - expect(subject).to receive(:check_running_vm).with(vm,pool,12,provider) + # it 'should use a lifetime of 12 if nothing is set' do + # expect(subject).to receive(:check_running_vm).with(vm,pool,12,provider) - subject._check_pool(pool_object,provider) - end - end + # subject._check_pool(pool_object,provider) + # end + # end # READY context 'Ready VM not in the inventory' do