determine if instances are InService across a given load balancer and array of load balancers

This commit is contained in:
Anuj Biyani 2013-05-31 18:20:09 -07:00
parent 20b59fb132
commit 9273f748c2
4 changed files with 105 additions and 0 deletions

View File

@ -24,4 +24,20 @@ class AwsHaRelease
@group.update(desired_capacity: @group.desired_capacity + 1)
end
def instances_inservice?(load_balancer)
load_balancer.instances.health.each do |health|
return false unless health[:state] == 'InService'
end
true
end
def all_instances_inservice?(load_balancers)
load_balancers.each do |load_balancer|
return false unless instances_inservice?(load_balancer)
end
true
end
end

View File

@ -59,5 +59,46 @@ describe 'aws-ha-release' do
expect(@group.desired_capacity).to eq 2
end
context 'determining if instances are in service' do
it 'checks all instances across a given load balancer' do
load_balancer = AWS::FakeELB::LoadBalancer.new 'test_load_balancer_01'
expect(@aws_ha_release.instances_inservice?(load_balancer)).to eq false
load_balancer.instances.health[1] = {
instance: AWS::FakeEC2::Instance.new,
description: 'N/A',
state: 'InService',
reason_code: 'N/A'
}
expect(@aws_ha_release.instances_inservice?(load_balancer)).to eq true
end
it 'checks all instances across an array of load balancers' do
load_balancers = [AWS::FakeELB::LoadBalancer.new('test_load_balancer_01'), AWS::FakeELB::LoadBalancer.new('test_load_balancer_02')]
expect(@aws_ha_release.all_instances_inservice?(load_balancers)).to eq false
load_balancers[0].instances.health[1] = {
instance: AWS::FakeEC2::Instance.new,
description: 'N/A',
state: 'InService',
reason_code: 'N/A'
}
expect(@aws_ha_release.all_instances_inservice?(load_balancers)).to eq false
load_balancers[1].instances.health[1] = {
instance: AWS::FakeEC2::Instance.new,
description: 'N/A',
state: 'InService',
reason_code: 'N/A'
}
expect(@aws_ha_release.all_instances_inservice?(load_balancers)).to eq true
end
end
end
end

11
spec/support/fake_ec2.rb Normal file
View File

@ -0,0 +1,11 @@
module AWS
class FakeEC2
def initialize
end
class Instance
def initialize
end
end
end
end

37
spec/support/fake_elb.rb Normal file
View File

@ -0,0 +1,37 @@
module AWS
class FakeELB
def initialize
end
class LoadBalancer
def initialize(name, options = {})
end
def instances
@instances ||= InstanceCollection.new
end
end
class InstanceCollection
def initialize
end
def health
@health ||= [
{
instance: AWS::FakeEC2::Instance.new,
description: 'N/A',
state: 'InService',
reason_code: 'N/A'
},
{
instance: AWS::FakeEC2::Instance.new,
description: 'Instance has failed at least the UnhealthyThreshold number of health checks consecutively.',
state: 'OutOfService',
reason_code: 'Instance'
}
]
end
end
end
end