Beispiel #1
0
 def _generate_events(self, update_events):
     gen_list = mock_driver.simple_aodh_alarm_notification_generators(
         1, update_events=update_events)
     events = mock_driver.generate_sequential_events_list(gen_list)
     self.excepted_events = events
     self.actual_events = []
     return events
Beispiel #2
0
    def test_enrich_event(self):

        aodh_driver = MockAodhDriver(self.conf)

        # 1. alarm creation with 'ok' state
        # prepare data
        detail_data = {"type": "creation",
                       AodhProps.DETAIL: self._extract_alarm_data()}
        generators = \
            mock_driver.simple_aodh_alarm_notification_generators(
                alarm_num=1,
                update_events=1,
                update_vals=detail_data)
        alarm = mock_driver.generate_sequential_events_list(generators)[0]
        alarm_info = alarm.copy()

        # action
        entity = aodh_driver.enrich_event(alarm, AodhEventType.CREATION)

        # Test assertions
        # alarm with status OK should not be handled
        self.assertIsNone(entity)

        # 2.alarm state transition from 'ok' to 'alarm'
        detail_data = {"type": "state transition",
                       AodhProps.DETAIL: {AodhProps.STATE: "alarm"}}
        alarm.update(detail_data)
        entity = aodh_driver.enrich_event(alarm,
                                          AodhEventType.STATE_TRANSITION)

        # Test assertions
        # alarm state change: ok->alarm, need to be added
        self.assertIsNotNone(entity)
        self._validate_aodh_entity_comm_props(entity, alarm_info)
        self.assertEqual(entity[AodhProps.STATE],
                         alarm[AodhProps.DETAIL][AodhProps.STATE])
        self.assertEqual(entity[AodhProps.SEVERITY],
                         alarm[AodhProps.SEVERITY])
        self.assertEqual(entity[DSProps.EVENT_TYPE],
                         AodhEventType.STATE_TRANSITION)

        # 3. delete alarm which is 'alarm' state
        # prepare data
        detail_data = {"type": "deletion"}
        alarm.update(detail_data)

        # action
        entity = aodh_driver.enrich_event(alarm, AodhEventType.DELETION)

        # Test assertions
        self.assertIsNotNone(entity)
        self._validate_aodh_entity_comm_props(entity, alarm_info)
        self.assertEqual(entity[DSProps.EVENT_TYPE],
                         AodhEventType.DELETION)

        # 4. alarm creation with 'alarm' state
        # prepare data
        detail_data = {"type": "creation",
                       AodhProps.DETAIL:
                           self._extract_alarm_data(state="alarm")}
        generators = \
            mock_driver.simple_aodh_alarm_notification_generators(
                alarm_num=1,
                update_events=1,
                update_vals=detail_data)
        alarm = mock_driver.generate_sequential_events_list(generators)[0]
        alarm_info = alarm.copy()

        # action
        entity = aodh_driver.enrich_event(alarm, AodhEventType.CREATION)

        # Test assertions
        # alarm with status 'alarm' need to be added
        self.assertIsNotNone(entity)
        self._validate_aodh_entity_comm_props(entity, alarm_info)
        self.assertEqual(entity[AodhProps.STATE],
                         alarm[AodhProps.DETAIL][AodhProps.STATE])
        self.assertEqual(entity[AodhProps.SEVERITY],
                         alarm[AodhProps.SEVERITY])
        self.assertIsNone(entity[AodhProps.RESOURCE_ID])
        self.assertEqual("*", entity[AodhProps.EVENT_TYPE])
        self.assertEqual(entity[DSProps.EVENT_TYPE],
                         AodhEventType.CREATION)

        # 5. alarm rule change
        # prepare data
        detail_data = {"type": "rule change",
                       AodhProps.DETAIL: {
                           "severity": "critical",
                           AodhProps.RULE:
                               {"query": [{"field": "traits.resource_id",
                                           "type": "",
                                           "value": "1",
                                           "op": "eq"}],
                                "event_type": "instance.update"}}}
        alarm.update(detail_data)

        # action
        entity = aodh_driver.enrich_event(alarm,
                                          AodhEventType.RULE_CHANGE)

        # Test assertions
        # alarm rule change: need to be update
        self.assertIsNotNone(entity)
        self._validate_aodh_entity_comm_props(entity, alarm_info)
        self.assertEqual(entity[AodhProps.SEVERITY],
                         alarm[AodhProps.DETAIL][AodhProps.SEVERITY])
        self.assertEqual(
            entity[AodhProps.EVENT_TYPE],
            alarm[AodhProps.DETAIL][AodhProps.RULE][AodhProps.EVENT_TYPE])
        self.assertEqual("1", entity[AodhProps.RESOURCE_ID])
        self.assertEqual(entity[DSProps.EVENT_TYPE],
                         AodhEventType.RULE_CHANGE)

        # 6. alarm state change from 'alarm' to 'ok'
        # prepare data
        detail_data = {"type": "state transition",
                       AodhProps.DETAIL: {AodhProps.STATE: "ok"}}
        alarm.update(detail_data)

        # action
        entity = aodh_driver.enrich_event(alarm,
                                          AodhEventType.STATE_TRANSITION)

        # Test assertions
        # alarm state change: alarm->OK, need to be deleted
        self.assertIsNotNone(entity)
        self._validate_aodh_entity_comm_props(entity, alarm_info)
        self.assertEqual(entity[DSProps.EVENT_TYPE],
                         AodhEventType.STATE_TRANSITION)

        # 7. delete alarm which is 'ok' state
        # prepare data
        detail_data = {"type": "deletion"}
        alarm.update(detail_data)

        # action
        entity = aodh_driver.enrich_event(alarm, AodhEventType.DELETION)

        # Test assertions
        self.assertIsNone(entity)
Beispiel #3
0
    def test_gnocchi_threshold_alarm_notifications(self):
        aodh_driver = MockAodhDriver(self.conf)

        # 1. alarm creation with 'ok' state
        # prepare data
        detail_data = {
            "type": "gnocchi_resources_threshold",
            AodhProps.DETAIL: self._create_alarm_data_gnocchi()
        }
        generators = \
            mock_driver.simple_aodh_alarm_notification_generators(
                alarm_num=1,
                update_events=1,
                update_vals=detail_data)
        alarm = mock_driver.generate_sequential_events_list(generators)[0]
        alarm_info = alarm.copy()

        # action
        entity = aodh_driver.enrich_event(alarm, AodhEventType.CREATION)

        # Test assertions
        # alarm with status OK should not be handled
        self.assertIsNone(entity)

        # 2.alarm state transition from 'ok' to 'alarm'
        detail_data = {
            "type": "state transition",
            AodhProps.DETAIL: {
                AodhProps.STATE: "alarm"
            }
        }
        alarm.update(detail_data)
        entity = aodh_driver.enrich_event(alarm,
                                          AodhEventType.STATE_TRANSITION)

        # Test assertions
        # alarm state change: ok->alarm, need to be added
        self.assertIsNotNone(entity)
        self._validate_aodh_entity_comm_props(entity, alarm_info)
        self.assertEqual(entity[AodhProps.STATE],
                         alarm[AodhProps.DETAIL][AodhProps.STATE])
        self.assertEqual(entity[AodhProps.SEVERITY], alarm[AodhProps.SEVERITY])

        # 3. delete alarm which is 'alarm' state
        # prepare data
        detail_data = {"type": "deletion"}
        alarm.update(detail_data)

        # action
        entity = aodh_driver.enrich_event(alarm, AodhEventType.DELETION)

        # Test assertions
        self.assertIsNotNone(entity)
        self._validate_aodh_entity_comm_props(entity, alarm_info)
        self.assertEqual(entity[DSProps.EVENT_TYPE], AodhEventType.DELETION)

        # 4. alarm creation with 'alarm' state
        # prepare data
        detail_data = {
            "type": "gnocchi_resources_threshold",
            AodhProps.DETAIL: self._create_alarm_data_gnocchi(state="alarm")
        }
        generators = \
            mock_driver.simple_aodh_alarm_notification_generators(
                alarm_num=1,
                update_events=1,
                update_vals=detail_data)
        alarm = mock_driver.generate_sequential_events_list(generators)[0]
        alarm_info = alarm.copy()

        # action
        entity = aodh_driver.enrich_event(alarm, AodhEventType.CREATION)

        # Test assertions
        # alarm with status 'alarm' need to be added
        self.assertIsNotNone(entity)
        self._validate_aodh_entity_comm_props(entity, alarm_info)
        self.assertEqual(entity[AodhProps.STATE],
                         alarm[AodhProps.DETAIL][AodhProps.STATE])
        self.assertEqual(entity[AodhProps.SEVERITY], alarm[AodhProps.SEVERITY])
        self.assertEqual(entity[DSProps.EVENT_TYPE], AodhEventType.CREATION)

        # 5. alarm rule change
        # prepare data
        detail_data = {
            "type": "rule change",
            AodhProps.DETAIL: {
                "severity": "critical",
                AodhProps.RULE: {
                    "granularity": "300",
                    "threshold": "0.0123",
                    "comparison_operator": "eq"
                }
            }
        }
        alarm.update(detail_data)

        # action
        entity = aodh_driver.enrich_event(alarm, AodhEventType.RULE_CHANGE)

        # Test assertions
        # alarm rule change: need to be update
        self.assertIsNotNone(entity)
        self._validate_aodh_entity_comm_props(entity, alarm_info)
        self.assertEqual(entity[AodhProps.SEVERITY],
                         alarm[AodhProps.DETAIL][AodhProps.SEVERITY])
        self.assertEqual(entity[DSProps.EVENT_TYPE], AodhEventType.RULE_CHANGE)

        # 6. alarm state change from 'alarm' to 'ok'
        # prepare data
        detail_data = {
            "type": "state transition",
            AodhProps.DETAIL: {
                AodhProps.STATE: "ok"
            }
        }
        alarm.update(detail_data)

        # action
        entity = aodh_driver.enrich_event(alarm,
                                          AodhEventType.STATE_TRANSITION)

        # Test assertions
        # alarm state change: alarm->OK, need to be deleted
        self.assertIsNotNone(entity)
        self._validate_aodh_entity_comm_props(entity, alarm_info)
        self.assertEqual(entity[DSProps.EVENT_TYPE],
                         AodhEventType.STATE_TRANSITION)

        # 7. delete alarm which is 'ok' state
        # prepare data
        detail_data = {"type": "deletion"}
        alarm.update(detail_data)

        # action
        entity = aodh_driver.enrich_event(alarm, AodhEventType.DELETION)

        # Test assertions
        self.assertIsNone(entity)