class AutoScalingTest(HeatTestCase):
+ dummy_instance_id = 'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa'
+
def setUp(self):
super(AutoScalingTest, self).setUp()
setup_dummy_db()
instance.Instance.check_create_complete(
cookie).MultipleTimes().AndReturn(True)
- def _stub_lb_reload(self, expected_list, unset=True):
+ def _stub_lb_reload(self, num, unset=True, nochange=False):
+ expected_list = [self.dummy_instance_id] * num
if unset:
self.m.VerifyAll()
self.m.UnsetStubs()
- self.m.StubOutWithMock(loadbalancer.LoadBalancer, 'handle_update')
+ if num > 0:
+ self.m.StubOutWithMock(instance.Instance, 'FnGetRefId')
+ instance.Instance.FnGetRefId().MultipleTimes().AndReturn(
+ self.dummy_instance_id)
- loadbalancer.LoadBalancer.handle_update(
- mox.IgnoreArg(), mox.IgnoreArg(), {'Instances': expected_list})\
- .AndReturn(None)
+ self.m.StubOutWithMock(loadbalancer.LoadBalancer, 'handle_update')
+ if nochange:
+ loadbalancer.LoadBalancer.handle_update(
+ mox.IgnoreArg(), mox.IgnoreArg(), {}).AndReturn(None)
+ else:
+ loadbalancer.LoadBalancer.handle_update(
+ mox.IgnoreArg(), mox.IgnoreArg(),
+ {'Instances': expected_list}).AndReturn(None)
def _stub_meta_expected(self, now, data, nmeta=1):
# Stop time at now
properties['MaxSize'] = '1'
stack = parse_stack(t)
- self._stub_lb_reload(['WebServerGroup-0'])
+ self._stub_lb_reload(1)
now = timeutils.utcnow()
self._stub_meta_expected(now, 'ExactCapacity : 1')
self._stub_create(1)
self.assertEqual('WebServerGroup-0', rsrc.resource_id)
# trigger adjustment to reduce to 0, resource_id should be None
- self._stub_lb_reload([])
+ self._stub_lb_reload(0)
self._stub_meta_expected(now, 'ChangeInCapacity : -1')
self.m.ReplayAll()
rsrc.adjust(-1)
t = template_format.parse(as_template)
stack = parse_stack(t)
- self._stub_lb_reload(['WebServerGroup-0'])
+ self._stub_lb_reload(1)
now = timeutils.utcnow()
self._stub_meta_expected(now, 'ExactCapacity : 1')
self._stub_create(1)
t = template_format.parse(as_template)
stack = parse_stack(t)
- self._stub_lb_reload(['WebServerGroup-0'])
+ self._stub_lb_reload(1)
now = timeutils.utcnow()
self._stub_meta_expected(now, 'ExactCapacity : 1')
self._stub_create(1)
t = template_format.parse(as_template)
stack = parse_stack(t)
- self._stub_lb_reload(['WebServerGroup-0'])
+ self._stub_lb_reload(1)
now = timeutils.utcnow()
self._stub_meta_expected(now, 'ExactCapacity : 1')
self._stub_create(1)
properties['DesiredCapacity'] = '2'
stack = parse_stack(t)
- self._stub_lb_reload(['WebServerGroup-0', 'WebServerGroup-1'])
+ self._stub_lb_reload(2)
now = timeutils.utcnow()
self._stub_meta_expected(now, 'ExactCapacity : 2')
self._stub_create(2)
properties['DesiredCapacity'] = '2'
stack = parse_stack(t)
- self._stub_lb_reload(['WebServerGroup-0', 'WebServerGroup-1'])
+ self._stub_lb_reload(2)
now = timeutils.utcnow()
self._stub_meta_expected(now, 'ExactCapacity : 2')
self._stub_create(2)
t = template_format.parse(as_template)
stack = parse_stack(t)
- self._stub_lb_reload(['WebServerGroup-0'])
+ self._stub_lb_reload(1)
now = timeutils.utcnow()
self._stub_meta_expected(now, 'ExactCapacity : 1')
self._stub_create(1)
t = template_format.parse(as_template)
stack = parse_stack(t)
- self._stub_lb_reload(['WebServerGroup-0'])
+ self._stub_lb_reload(1)
now = timeutils.utcnow()
self._stub_meta_expected(now, 'ExactCapacity : 1')
self._stub_create(1)
properties['MaxSize'] = '3'
stack = parse_stack(t)
- self._stub_lb_reload(['WebServerGroup-0'])
+ self._stub_lb_reload(1)
now = timeutils.utcnow()
self._stub_meta_expected(now, 'ExactCapacity : 1')
self._stub_create(1)
properties['MaxSize'] = '3'
stack = parse_stack(t)
- self._stub_lb_reload(['WebServerGroup-0'])
+ self._stub_lb_reload(1)
now = timeutils.utcnow()
self._stub_meta_expected(now, 'ExactCapacity : 1')
self._stub_create(1)
self.assertEqual('WebServerGroup-0', rsrc.resource_id)
# Increase min size to 2, should trigger an ExactCapacity adjust
- self._stub_lb_reload(['WebServerGroup-0', 'WebServerGroup-1'])
+ self._stub_lb_reload(2)
self._stub_meta_expected(now, 'ExactCapacity : 2')
self._stub_create(1)
self.m.ReplayAll()
properties['MaxSize'] = '3'
stack = parse_stack(t)
- self._stub_lb_reload(['WebServerGroup-0'])
+ self._stub_lb_reload(1)
now = timeutils.utcnow()
self._stub_meta_expected(now, 'ExactCapacity : 1')
self._stub_create(1)
self.assertEqual('WebServerGroup-0', rsrc.resource_id)
# Increase min size to 2 via DesiredCapacity, should adjust
- self._stub_lb_reload(['WebServerGroup-0', 'WebServerGroup-1'])
+ self._stub_lb_reload(2)
self._stub_meta_expected(now, 'ExactCapacity : 2')
self._stub_create(1)
self.m.ReplayAll()
properties['DesiredCapacity'] = '2'
stack = parse_stack(t)
- self._stub_lb_reload(['WebServerGroup-0', 'WebServerGroup-1'])
+ self._stub_lb_reload(2)
now = timeutils.utcnow()
self._stub_meta_expected(now, 'ExactCapacity : 2')
self._stub_create(2)
properties['Cooldown'] = '60'
stack = parse_stack(t)
- self._stub_lb_reload(['WebServerGroup-0'])
+ self._stub_lb_reload(1)
now = timeutils.utcnow()
self._stub_meta_expected(now, 'ExactCapacity : 1')
self._stub_create(1)
# start with 3
properties = t['Resources']['WebServerGroup']['Properties']
properties['DesiredCapacity'] = '3'
- self._stub_lb_reload(['WebServerGroup-0', 'WebServerGroup-1',
- 'WebServerGroup-2'])
+ self._stub_lb_reload(3)
now = timeutils.utcnow()
self._stub_meta_expected(now, 'ExactCapacity : 3')
self._stub_create(3)
rsrc.resource_id)
# reduce to 1
- self._stub_lb_reload(['WebServerGroup-0'])
+ self._stub_lb_reload(1)
self._stub_meta_expected(now, 'ChangeInCapacity : -2')
self.m.ReplayAll()
rsrc.adjust(-2)
self.assertEqual('WebServerGroup-0', rsrc.resource_id)
# raise to 3
- self._stub_lb_reload(['WebServerGroup-0', 'WebServerGroup-1',
- 'WebServerGroup-2'])
+ self._stub_lb_reload(3)
self._stub_meta_expected(now, 'ChangeInCapacity : 2')
self._stub_create(2)
self.m.ReplayAll()
rsrc.resource_id)
# set to 2
- self._stub_lb_reload(['WebServerGroup-0', 'WebServerGroup-1'])
+ self._stub_lb_reload(2)
self._stub_meta_expected(now, 'ExactCapacity : 2')
self.m.ReplayAll()
rsrc.adjust(2, 'ExactCapacity')
stack = parse_stack(t)
# Create initial group
- self._stub_lb_reload(['WebServerGroup-0'])
+ self._stub_lb_reload(1)
now = timeutils.utcnow()
self._stub_meta_expected(now, 'ExactCapacity : 1')
self._stub_create(1)
instance.Instance.handle_create().AndRaise(exc)
self.m.StubOutWithMock(instance.Instance, 'destroy')
instance.Instance.destroy()
+ self._stub_lb_reload(1, unset=False, nochange=True)
self.m.ReplayAll()
rsrc.adjust(1)
# Create initial group, 2 instances
properties = t['Resources']['WebServerGroup']['Properties']
properties['DesiredCapacity'] = '2'
- self._stub_lb_reload(['WebServerGroup-0', 'WebServerGroup-1'])
+ self._stub_lb_reload(2)
now = timeutils.utcnow()
self._stub_meta_expected(now, 'ExactCapacity : 2')
self._stub_create(2)
# Create initial group, 2 instances
properties = t['Resources']['WebServerGroup']['Properties']
properties['DesiredCapacity'] = '2'
- self._stub_lb_reload(['WebServerGroup-0', 'WebServerGroup-1'])
+ self._stub_lb_reload(2)
self._stub_create(2)
now = timeutils.utcnow()
self._stub_meta_expected(now, 'ExactCapacity : 2')
rsrc.resource_id)
# reduce by 50%
- self._stub_lb_reload(['WebServerGroup-0'])
+ self._stub_lb_reload(1)
self._stub_meta_expected(now, 'PercentChangeInCapacity : -50')
self.m.ReplayAll()
rsrc.adjust(-50, 'PercentChangeInCapacity')
rsrc.resource_id)
# raise by 200%
- self._stub_lb_reload(['WebServerGroup-0', 'WebServerGroup-1',
- 'WebServerGroup-2'])
+ self._stub_lb_reload(3)
self._stub_meta_expected(now, 'PercentChangeInCapacity : 200')
self._stub_create(2)
self.m.ReplayAll()
properties = t['Resources']['WebServerGroup']['Properties']
properties['DesiredCapacity'] = '2'
properties['Cooldown'] = '60'
- self._stub_lb_reload(['WebServerGroup-0', 'WebServerGroup-1'])
+ self._stub_lb_reload(2)
now = timeutils.utcnow()
self._stub_meta_expected(now, 'ExactCapacity : 2')
self._stub_create(2)
rsrc.resource_id)
# reduce by 50%
- self._stub_lb_reload(['WebServerGroup-0'])
+ self._stub_lb_reload(1)
self._stub_meta_expected(now, 'PercentChangeInCapacity : -50')
self.m.ReplayAll()
rsrc.adjust(-50, 'PercentChangeInCapacity')
properties = t['Resources']['WebServerGroup']['Properties']
properties['DesiredCapacity'] = '2'
properties['Cooldown'] = '60'
- self._stub_lb_reload(['WebServerGroup-0', 'WebServerGroup-1'])
+ self._stub_lb_reload(2)
self._stub_create(2)
now = timeutils.utcnow()
self._stub_meta_expected(now, 'ExactCapacity : 2')
rsrc.resource_id)
# reduce by 50%
- self._stub_lb_reload(['WebServerGroup-0'])
+ self._stub_lb_reload(1)
self._stub_meta_expected(now, 'PercentChangeInCapacity : -50')
self.m.ReplayAll()
rsrc.adjust(-50, 'PercentChangeInCapacity')
).AndReturn(previous_meta)
# raise by 200%, should work
- self._stub_lb_reload(['WebServerGroup-0', 'WebServerGroup-1',
- 'WebServerGroup-2'], unset=False)
+ self._stub_lb_reload(3, unset=False)
self._stub_create(2)
self._stub_meta_expected(now, 'PercentChangeInCapacity : 200')
self.m.ReplayAll()
properties = t['Resources']['WebServerGroup']['Properties']
properties['DesiredCapacity'] = '2'
properties['Cooldown'] = '0'
- self._stub_lb_reload(['WebServerGroup-0', 'WebServerGroup-1'])
+ self._stub_lb_reload(2)
now = timeutils.utcnow()
self._stub_meta_expected(now, 'ExactCapacity : 2')
self._stub_create(2)
rsrc.resource_id)
# reduce by 50%
- self._stub_lb_reload(['WebServerGroup-0'])
+ self._stub_lb_reload(1)
self._stub_meta_expected(now, 'PercentChangeInCapacity : -50')
self.m.ReplayAll()
rsrc.adjust(-50, 'PercentChangeInCapacity')
).AndReturn(previous_meta)
# raise by 200%, should work
- self._stub_lb_reload(['WebServerGroup-0', 'WebServerGroup-1',
- 'WebServerGroup-2'], unset=False)
+ self._stub_lb_reload(3, unset=False)
self._stub_meta_expected(now, 'PercentChangeInCapacity : 200')
self._stub_create(2)
self.m.ReplayAll()
stack = parse_stack(t)
# Create initial group
- self._stub_lb_reload(['WebServerGroup-0'])
+ self._stub_lb_reload(1)
now = timeutils.utcnow()
self._stub_meta_expected(now, 'ExactCapacity : 1')
self._stub_create(1)
self.assertEqual('WebServerGroup-0', rsrc.resource_id)
# Scale up one
- self._stub_lb_reload(['WebServerGroup-0', 'WebServerGroup-1'])
+ self._stub_lb_reload(2)
self._stub_meta_expected(now, 'ChangeInCapacity : 1', 2)
self._stub_create(1)
self.m.ReplayAll()
# Create initial group, 2 instances
properties = t['Resources']['WebServerGroup']['Properties']
properties['DesiredCapacity'] = '2'
- self._stub_lb_reload(['WebServerGroup-0', 'WebServerGroup-1'])
+ self._stub_lb_reload(2)
now = timeutils.utcnow()
self._stub_meta_expected(now, 'ExactCapacity : 2')
self._stub_create(2)
rsrc.resource_id)
# Scale down one
- self._stub_lb_reload(['WebServerGroup-0'])
+ self._stub_lb_reload(1)
self._stub_meta_expected(now, 'ChangeInCapacity : -1', 2)
self.m.ReplayAll()
down_policy = self.create_scaling_policy(t, stack,
stack = parse_stack(t)
# Create initial group
- self._stub_lb_reload(['WebServerGroup-0'])
+ self._stub_lb_reload(1)
now = timeutils.utcnow()
self._stub_meta_expected(now, 'ExactCapacity : 1')
self._stub_create(1)
self.assertEqual('WebServerGroup-0', rsrc.resource_id)
# Scale up one
- self._stub_lb_reload(['WebServerGroup-0', 'WebServerGroup-1'])
+ self._stub_lb_reload(2)
self._stub_meta_expected(now, 'ChangeInCapacity : 1', 2)
self._stub_create(1)
self.m.ReplayAll()
stack = parse_stack(t)
# Create initial group
- self._stub_lb_reload(['WebServerGroup-0'])
+ self._stub_lb_reload(1)
now = timeutils.utcnow()
self._stub_meta_expected(now, 'ExactCapacity : 1')
self._stub_create(1)
self.assertEqual('WebServerGroup-0', rsrc.resource_id)
# Scale up one
- self._stub_lb_reload(['WebServerGroup-0', 'WebServerGroup-1'])
+ self._stub_lb_reload(2)
self._stub_meta_expected(now, 'ChangeInCapacity : 1', 2)
self._stub_create(1)
self.m.ReplayAll()
).AndReturn(previous_meta)
now = now + datetime.timedelta(seconds=61)
- self._stub_lb_reload(['WebServerGroup-0', 'WebServerGroup-1',
- 'WebServerGroup-2'], unset=False)
+ self._stub_lb_reload(3, unset=False)
self._stub_meta_expected(now, 'ChangeInCapacity : 1', 2)
self._stub_create(1)
stack = parse_stack(t)
# Create initial group
- self._stub_lb_reload(['WebServerGroup-0'])
+ self._stub_lb_reload(1)
now = timeutils.utcnow()
self._stub_meta_expected(now, 'ExactCapacity : 1')
self._stub_create(1)
# Create the scaling policy (with Cooldown=0) and scale up one
properties = t['Resources']['WebServerScaleUpPolicy']['Properties']
properties['Cooldown'] = '0'
- self._stub_lb_reload(['WebServerGroup-0', 'WebServerGroup-1'])
+ self._stub_lb_reload(2)
self._stub_meta_expected(now, 'ChangeInCapacity : 1', 2)
self._stub_create(1)
self.m.ReplayAll()
Metadata.__get__(mox.IgnoreArg(), rsrc, mox.IgnoreArg()
).AndReturn(previous_meta)
- self._stub_lb_reload(['WebServerGroup-0', 'WebServerGroup-1',
- 'WebServerGroup-2'], unset=False)
+ self._stub_lb_reload(3, unset=False)
self._stub_meta_expected(now, 'ChangeInCapacity : 1', 2)
self._stub_create(1)
stack = parse_stack(t)
# Create initial group
- self._stub_lb_reload(['WebServerGroup-0'])
+ self._stub_lb_reload(1)
now = timeutils.utcnow()
self._stub_meta_expected(now, 'ExactCapacity : 1')
self._stub_create(1)
# same as when Cooldown==0
properties = t['Resources']['WebServerScaleUpPolicy']['Properties']
del(properties['Cooldown'])
- self._stub_lb_reload(['WebServerGroup-0', 'WebServerGroup-1'])
+ self._stub_lb_reload(2)
now = timeutils.utcnow()
self._stub_meta_expected(now, 'ChangeInCapacity : 1', 2)
self._stub_create(1)
Metadata.__get__(mox.IgnoreArg(), rsrc, mox.IgnoreArg()
).AndReturn(previous_meta)
- self._stub_lb_reload(['WebServerGroup-0', 'WebServerGroup-1',
- 'WebServerGroup-2'], unset=False)
+ self._stub_lb_reload(3, unset=False)
self._stub_meta_expected(now, 'ChangeInCapacity : 1', 2)
self._stub_create(1)
stack = parse_stack(t)
# Create initial group
- self._stub_lb_reload(['WebServerGroup-0'])
+ self._stub_lb_reload(1)
now = timeutils.utcnow()
self._stub_meta_expected(now, 'ExactCapacity : 1')
self._stub_create(1)
'WebServerScaleUpPolicy')
# Scale up one
- self._stub_lb_reload(['WebServerGroup-0', 'WebServerGroup-1'])
+ self._stub_lb_reload(2)
self._stub_meta_expected(now, 'ChangeInCapacity : 1', 2)
self._stub_create(1)
self.m.ReplayAll()
now = now + datetime.timedelta(seconds=61)
- self._stub_lb_reload(['WebServerGroup-0', 'WebServerGroup-1',
- 'WebServerGroup-2', 'WebServerGroup-3'],
- unset=False)
+ self._stub_lb_reload(4, unset=False)
self._stub_meta_expected(now, 'ChangeInCapacity : 2', 2)
self._stub_create(2)
self.m.ReplayAll()