Esempio n. 1
0
 def test_unknown_asg(self):
     logger.debug('TestInitMachineState.test_unknown_asg')
     stepfns.asg_helper = Mock(**{'describe_asg.return_value': {}})
     expected_msg = 'AutoScaling Group does not exist'
     (state_machine_dict,
      msg) = stepfns.init_machine_state(launch_notification)
     self.assertDictEqual(state_machine_dict, {})
     self.assertEqual(msg, expected_msg)
Esempio n. 2
0
    def test_unknown_notification(self):
        logger.debug('TestInitMachineState.test_unknown_notification')
        stepfns.asg_helper = Mock(
            **{'describe_asg.return_value': self.asg_dict})
        for bad_notification in [{'hello': 'world'}, 'test', None]:

            (state_machine_dict,
             msg) = stepfns.init_machine_state(bad_notification)
            self.assertDictEqual(state_machine_dict, {})
            self.assertEqual(msg, 'Invalid SNS message')
Esempio n. 3
0
 def test_missing_az(self):
     logger.debug('TestInitMachineState.test_malformed_notification')
     stepfns.asg_helper = Mock(
         **{'describe_asg.return_value': self.asg_dict})
     bad_notification = copy.deepcopy(launch_notification)
     del (bad_notification['Details']['Availability Zone'])
     (state_machine_dict,
      msg) = stepfns.init_machine_state(bad_notification)
     self.assertDictEqual(state_machine_dict, {})
     self.assertTrue(msg)
Esempio n. 4
0
 def test_fixed_asg(self):
     logger.debug('TestInitMachineState.test_fixed_asg')
     self.asg_dict['MinSize'] = 1
     self.asg_dict['MaxSize'] = 1
     self.asg_dict['DesiredCapacity'] = 1
     stepfns.asg_helper = Mock(
         **{'describe_asg.return_value': self.asg_dict})
     expected_msg = 'AutoScaling Group has fixed size'
     (state_machine_dict,
      msg) = stepfns.init_machine_state(launch_notification)
     self.assertDictEqual(state_machine_dict, {})
     self.assertEqual(msg, expected_msg)
Esempio n. 5
0
 def test_malformed_notification(self):
     logger.debug('TestInitMachineState.test_malformed_notification')
     stepfns.asg_helper = Mock(
         **{'describe_asg.return_value': self.asg_dict})
     for required_key in [
             'EC2InstanceId', 'AutoScalingGroupName', 'Details',
             'Description'
     ]:
         bad_notification = copy.deepcopy(launch_notification)
         del (bad_notification[required_key])
         (state_machine_dict,
          msg) = stepfns.init_machine_state(bad_notification)
         self.assertDictEqual(state_machine_dict, {})
         self.assertTrue(msg)
Esempio n. 6
0
 def test_attachment_notification(self):
     logger.debug('TestInitMachineState.test_attachment_notification')
     stepfns.asg_helper = Mock(
         **{'describe_asg.return_value': self.asg_dict})
     attach_notification = copy.deepcopy(launch_notification)
     attach_notification[
         'Description'] = 'Attaching an existing EC2 instance: {}'.format(
             attach_notification['EC2InstanceId'])
     attach_notification[
         'Cause'] = 'At 2018-03-05T22:04:49Z an instance was added in response to user request. Keeping the capacity at the new 1.'
     # launch notifications of attached instances do not include the Subnet ID
     del (attach_notification['Details']['Subnet ID'])
     (state_machine_dict,
      msg) = stepfns.init_machine_state(attach_notification)
     self.assertDictEqual(state_machine_dict, {})
     self.assertTrue(msg)
Esempio n. 7
0
 def test_asg_with_tag_overrides(self):
     logger.debug('TestInitMachineState.test_asg_with_tag_overrides')
     wait_s = int(random.random() * 10)
     spot_req_wait_s = wait_s + 1
     attach_wait_s = wait_s + 2
     spot_fail_wait_s = wait_s + 3
     min_protected = 2
     self.asg_dict['Tags'].append({
         'Key': 'spoptimize:init_sleep_interval',
         'Value': '{}'.format(wait_s)
     })
     self.asg_dict['Tags'].append({
         'Key': 'spoptimize:spot_req_sleep_interval',
         'Value': '{}'.format(spot_req_wait_s)
     })
     self.asg_dict['Tags'].append({
         'Key': 'spoptimize:spot_attach_sleep_interval',
         'Value': '{}'.format(attach_wait_s)
     })
     self.asg_dict['Tags'].append({
         'Key': 'spoptimize:spot_failure_sleep_interval',
         'Value': '{}'.format(spot_fail_wait_s)
     })
     self.asg_dict['Tags'].append({
         'Key': 'spoptimize:min_protected_instances',
         'Value': '{}'.format(min_protected)
     })
     stepfns.asg_helper = Mock(
         **{'describe_asg.return_value': self.asg_dict})
     (state_machine_dict,
      msg) = stepfns.init_machine_state(launch_notification)
     self.assertEqual(state_machine_dict['init_sleep_interval'], wait_s)
     self.assertEqual(state_machine_dict['spot_req_sleep_interval'],
                      spot_req_wait_s)
     self.assertEqual(state_machine_dict['spot_attach_sleep_interval'],
                      attach_wait_s)
     self.assertEqual(state_machine_dict['spot_failure_sleep_interval'],
                      spot_fail_wait_s)
     self.assertEqual(state_machine_dict['min_protected_instances'],
                      min_protected)
     self.assertIsNone(msg)
Esempio n. 8
0
    def test_standard_asg(self):
        logger.debug('TestInitMachineState.test_standard_asg')
        stepfns.asg_helper = Mock(
            **{'describe_asg.return_value': self.asg_dict})
        random.seed(randseed)
        expected_state = state_machine_init.copy()
        expected_state['autoscaling_group'] = self.asg_dict.copy()
        expected_state['init_sleep_interval'] = int(
            (self.asg_dict['HealthCheckGracePeriod'] *
             self.asg_dict['DesiredCapacity']) + (60 * random.random()) + 30)

        expected_state['spot_attach_sleep_interval'] = int(
            self.asg_dict['HealthCheckGracePeriod'] + 30)
        random.seed(randseed)
        (state_machine_dict,
         msg) = stepfns.init_machine_state(launch_notification)
        self.assertDictEqual(state_machine_dict, expected_state)
        self.assertGreater(
            state_machine_dict['init_sleep_interval'],
            self.asg_dict['HealthCheckGracePeriod'] *
            self.asg_dict['DesiredCapacity'])
        self.assertIsNone(msg)