From a9fc1bb8aa0416811db4a7348f22e2d76f2aa821 Mon Sep 17 00:00:00 2001 From: Glenn Sarti Date: Mon, 13 Feb 2017 11:06:36 -0800 Subject: [PATCH] (POOLER-73) Update test helpers This commit adds the following test helpers: - MockFindFolder Returns an mock result object from calling `Vmpooler::VsphereHelper.find_folder(foldername)` - Use MockRedis instead of using method stubs - MockLogger Creates an object which looks like the VMPooler::Logger object but just ignores all messages. This stops the proliferation of allow(logger).to .... expectations in tests - create_completed_vm Creates the required redis information for a completed VM - create_discovered_vm Creates the required redis information for a newly discovered VM - snapshot_revert_vm Creates the required redis information to revert a snapshot for a VM - disk_task_vm Creates the required redis information to add a disk addition task to a VM --- spec/helpers.rb | 43 ++++++++++++++++++++++++++++++++++ spec/unit/pool_manager_spec.rb | 4 ++-- 2 files changed, 45 insertions(+), 2 deletions(-) diff --git a/spec/helpers.rb b/spec/helpers.rb index 9005ec5..7fda0d9 100644 --- a/spec/helpers.rb +++ b/spec/helpers.rb @@ -6,6 +6,28 @@ def redis @redis end +# Mock an object which is result from Vmpooler::VsphereHelper.find_folder(foldername) +class MockFindFolder + attr_reader :childEntity + + def initialize(vmlist = []) + # Generate an array of hashes + @childEntity = vmlist.map do |vm| + vm_object = {} + vm_object['name'] = vm + + vm_object + end + end +end + +# Mock an object which represents a Logger. This stops the proliferation +# of allow(logger).to .... expectations in tests. +class MockLogger + def log(_level, string) + end +end + def expect_json(ok = true, http = 200) expect(last_response.header['Content-Type']).to eq('application/json') @@ -56,6 +78,18 @@ def create_vm(name, token = nil, redis_handle = nil) redis_db.hset("vmpooler__vm__#{name}", 'token:token', token) if token end +def create_completed_vm(name, pool, active = false, redis_handle = nil) + redis_db = redis_handle ? redis_handle : redis + redis_db.sadd("vmpooler__completed__#{pool}", name) + redis_db.hset("vmpooler__vm__#{name}", 'checkout', Time.now) + redis_db.hset("vmpooler__active__#{pool}", name, Time.now) if active +end + +def create_discovered_vm(name, pool, redis_handle = nil) + redis_db = redis_handle ? redis_handle : redis + redis_db.sadd("vmpooler__discovered__#{pool}", name) +end + def create_migrating_vm(name, pool, redis_handle = nil) redis_db = redis_handle ? redis_handle : redis redis_db.hset("vmpooler__vm__#{name}", 'checkout', Time.now) @@ -71,11 +105,20 @@ def fetch_vm(vm) redis.hgetall("vmpooler__vm__#{vm}") end +def snapshot_revert_vm(vm, snapshot = '12345678901234567890123456789012') + redis.sadd('vmpooler__tasks__snapshot-revert', "#{vm}:#{snapshot}") + redis.hset("vmpooler__vm__#{vm}", "snapshot:#{snapshot}", "1") +end + def snapshot_vm(vm, snapshot = '12345678901234567890123456789012') redis.sadd('vmpooler__tasks__snapshot', "#{vm}:#{snapshot}") redis.hset("vmpooler__vm__#{vm}", "snapshot:#{snapshot}", "1") end +def disk_task_vm(vm, disk_size = '10') + redis.sadd('vmpooler__tasks__disk', "#{vm}:#{disk_size}") +end + def has_vm_snapshot?(vm) redis.smembers('vmpooler__tasks__snapshot').any? do |snapshot| instance, sha = snapshot.split(':') diff --git a/spec/unit/pool_manager_spec.rb b/spec/unit/pool_manager_spec.rb index 5f16bf3..de42fa6 100644 --- a/spec/unit/pool_manager_spec.rb +++ b/spec/unit/pool_manager_spec.rb @@ -3,8 +3,8 @@ require 'time' require 'mock_redis' describe 'Pool Manager' do - let(:logger) { double('logger') } - let(:redis) { double('redis') } + let(:logger) { MockLogger.new } + let(:redis) { MockRedis.new } let(:metrics) { Vmpooler::DummyStatsd.new } let(:config) { {} } let(:pool) { 'pool1' }