resource.state)
return resource
- def test_scaling_group(self):
+ def _stub_lb_reload(self, expected_list):
+ self.m.VerifyAll()
+ self.m.UnsetStubs()
+ self.m.StubOutWithMock(loadbalancer.LoadBalancer, 'reload')
+ loadbalancer.LoadBalancer.reload(expected_list).AndReturn(None)
+ self.m.ReplayAll()
+ def test_scaling_group_update(self):
t = self.load_template()
stack = self.parse_stack(t)
- # start with min then delete
+ self._stub_lb_reload(['WebServerGroup-0'])
resource = self.create_scaling_group(t, stack, 'WebServerGroup')
self.assertEqual('WebServerGroup', resource.FnGetRefId())
resource.handle_update())
resource.delete()
+ self.m.VerifyAll()
+
+ def test_scaling_group_adjust(self):
+ t = self.load_template()
+ stack = self.parse_stack(t)
# start with 3
properties = t['Resources']['WebServerGroup']['Properties']
properties['DesiredCapacity'] = '3'
+ self._stub_lb_reload(['WebServerGroup-0', 'WebServerGroup-1',
+ 'WebServerGroup-2'])
resource = self.create_scaling_group(t, stack, 'WebServerGroup')
self.assertEqual('WebServerGroup-0,WebServerGroup-1,WebServerGroup-2',
resource.resource_id)
# reduce to 1
+ self._stub_lb_reload(['WebServerGroup-0'])
resource.adjust(-2)
self.assertEqual('WebServerGroup-0', resource.resource_id)
# raise to 3
+ self._stub_lb_reload(['WebServerGroup-0', 'WebServerGroup-1',
+ 'WebServerGroup-2'])
resource.adjust(2)
self.assertEqual('WebServerGroup-0,WebServerGroup-1,WebServerGroup-2',
resource.resource_id)
# set to 2
+ self._stub_lb_reload(['WebServerGroup-0', 'WebServerGroup-1'])
resource.adjust(2, 'ExactCapacity')
+ self.assertEqual('WebServerGroup-0,WebServerGroup-1',
+ resource.resource_id)
+ self.m.VerifyAll()
+
+ def test_scaling_group_nochange(self):
+ t = self.load_template()
+ stack = self.parse_stack(t)
+
+ # Create initial group, 2 instances
+ properties = t['Resources']['WebServerGroup']['Properties']
+ properties['DesiredCapacity'] = '2'
+ self._stub_lb_reload(['WebServerGroup-0', 'WebServerGroup-1'])
+ resource = self.create_scaling_group(t, stack, 'WebServerGroup')
+ stack.resources['WebServerGroup'] = resource
self.assertEqual('WebServerGroup-0,WebServerGroup-1',
resource.resource_id)
# no change
resource.adjust(0)
+ self.assertEqual('WebServerGroup-0,WebServerGroup-1',
+ resource.resource_id)
+ resource.delete()
+ self.m.VerifyAll()
+
+ def test_scaling_group_percent(self):
+ t = self.load_template()
+ stack = self.parse_stack(t)
+
+ # Create initial group, 2 instances
+ properties = t['Resources']['WebServerGroup']['Properties']
+ properties['DesiredCapacity'] = '2'
+ self._stub_lb_reload(['WebServerGroup-0', 'WebServerGroup-1'])
+ resource = self.create_scaling_group(t, stack, 'WebServerGroup')
+ stack.resources['WebServerGroup'] = resource
self.assertEqual('WebServerGroup-0,WebServerGroup-1',
resource.resource_id)
# reduce by 50%
+ self._stub_lb_reload(['WebServerGroup-0'])
resource.adjust(-50, 'PercentChangeInCapacity')
self.assertEqual('WebServerGroup-0',
resource.resource_id)
# raise by 200%
+ self._stub_lb_reload(['WebServerGroup-0', 'WebServerGroup-1',
+ 'WebServerGroup-2'])
resource.adjust(200, 'PercentChangeInCapacity')
self.assertEqual('WebServerGroup-0,WebServerGroup-1,WebServerGroup-2',
resource.resource_id)
resource.delete()
+ self.m.VerifyAll()
- def test_scaling_policy(self):
+ def test_scaling_policy_up(self):
t = self.load_template()
stack = self.parse_stack(t)
- # start with min then delete
+ # Create initial group
+ self._stub_lb_reload(['WebServerGroup-0'])
resource = self.create_scaling_group(t, stack, 'WebServerGroup')
stack.resources['WebServerGroup'] = resource
-
self.assertEqual('WebServerGroup-0', resource.resource_id)
+ # Scale up one
+ self._stub_lb_reload(['WebServerGroup-0', 'WebServerGroup-1'])
up_policy = self.create_scaling_policy(t, stack,
'WebServerScaleUpPolicy')
up_policy.alarm()
self.assertEqual('WebServerGroup-0,WebServerGroup-1',
resource.resource_id)
+ resource.delete()
+ self.m.VerifyAll()
+
+ def test_scaling_policy_down(self):
+ t = self.load_template()
+ stack = self.parse_stack(t)
+
+ # Create initial group, 2 instances
+ properties = t['Resources']['WebServerGroup']['Properties']
+ properties['DesiredCapacity'] = '2'
+ self._stub_lb_reload(['WebServerGroup-0', 'WebServerGroup-1'])
+ resource = self.create_scaling_group(t, stack, 'WebServerGroup')
+ stack.resources['WebServerGroup'] = resource
+ self.assertEqual('WebServerGroup-0,WebServerGroup-1',
+ resource.resource_id)
+
+ # Scale down one
+ self._stub_lb_reload(['WebServerGroup-0'])
down_policy = self.create_scaling_policy(t, stack,
'WebServerScaleDownPolicy')
down_policy.alarm()
self.assertEqual('WebServerGroup-0', resource.resource_id)
resource.delete()
+ self.m.VerifyAll()