예제 #1
0
    def test_extract_event_action(self):
        LOG.debug('Test extract event action')

        # Test setup
        spec_list = mock_sync.simple_host_generators(
            zone_num=1,
            host_num=1,
            snapshot_events=1,
            snap_vals={DSProps.DATASOURCE_ACTION: DatasourceAction.SNAPSHOT})

        hosts_events = mock_sync.generate_random_events_list(spec_list)
        host_transformer = self.transformers[NOVA_HOST_DATASOURCE]

        # Test action
        action = host_transformer._extract_graph_action(hosts_events[0])

        # Test assertion
        self.assertEqual(GraphAction.UPDATE_ENTITY, action)

        # Test setup
        spec_list = mock_sync.simple_host_generators(
            zone_num=1,
            host_num=1,
            snapshot_events=1,
            snap_vals={DSProps.DATASOURCE_ACTION:
                       DatasourceAction.INIT_SNAPSHOT})
        hosts_events = mock_sync.generate_random_events_list(spec_list)
        host_transformer = self.transformers[NOVA_HOST_DATASOURCE]

        # Test action
        action = host_transformer._extract_graph_action(hosts_events[0])

        # Test assertions
        self.assertEqual(GraphAction.CREATE_ENTITY, action)
    def test_extract_event_action(self):
        LOG.debug('Test extract event action')

        # Test setup
        spec_list = mock_sync.simple_host_generators(
            zone_num=1,
            host_num=1,
            snapshot_events=1,
            snap_vals={DSProps.DATASOURCE_ACTION: DatasourceAction.SNAPSHOT})

        hosts_events = mock_sync.generate_random_events_list(spec_list)
        host_transformer = self.transformers[NOVA_HOST_DATASOURCE]

        # Test action
        action = host_transformer._extract_graph_action(hosts_events[0])

        # Test assertion
        self.assertEqual(GraphAction.UPDATE_ENTITY, action)

        # Test setup
        spec_list = mock_sync.simple_host_generators(
            zone_num=1,
            host_num=1,
            snapshot_events=1,
            snap_vals={DSProps.DATASOURCE_ACTION:
                       DatasourceAction.INIT_SNAPSHOT})
        hosts_events = mock_sync.generate_random_events_list(spec_list)
        host_transformer = self.transformers[NOVA_HOST_DATASOURCE]

        # Test action
        action = host_transformer._extract_graph_action(hosts_events[0])

        # Test assertions
        self.assertEqual(GraphAction.CREATE_ENTITY, action)
예제 #3
0
    def test_extract_action_type(self):
        LOG.debug('Test extract action type')

        # Test setup
        spec_list = mock_sync.simple_host_generators(
            zone_num=1,
            host_num=1,
            snapshot_events=1,
            snap_vals={DSProps.SYNC_MODE: SyncMode.SNAPSHOT})

        hosts_events = mock_sync.generate_random_events_list(spec_list)
        host_transformer = HostTransformer(self.transformers)

        # Test action
        action = host_transformer._extract_action_type(hosts_events[0])

        # Test assertion
        self.assertEqual(EventAction.UPDATE_ENTITY, action)

        # Test setup
        spec_list = mock_sync.simple_host_generators(
            zone_num=1,
            host_num=1,
            snapshot_events=1,
            snap_vals={DSProps.SYNC_MODE: SyncMode.INIT_SNAPSHOT})
        hosts_events = mock_sync.generate_random_events_list(spec_list)
        host_transformer = HostTransformer(self.transformers)

        # Test action
        action = host_transformer._extract_action_type(hosts_events[0])

        # Test assertions
        self.assertEqual(EventAction.CREATE_ENTITY, action)
예제 #4
0
    def test_overlapping_deduced_alarm_1(self):

        event_queue, processor, evaluator = self._init_system()

        # generate WARNING nagios alarm
        vals = {'status': 'WARNING', 'service': 'cause_warning_deduced_alarm'}
        vals.update(_NAGIOS_TEST_INFO)
        generator = mock_driver.simple_nagios_alarm_generators(1, 1, vals)
        warning_test = mock_driver.generate_random_events_list(generator)[0]

        host_v = self.get_host_after_event(event_queue, warning_test,
                                           processor, _TARGET_HOST)
        alarms = \
            self._get_deduced_alarms_on_host(host_v, processor.entity_graph)
        self.assertEqual(1, len(alarms))
        self.assertEqual('WARNING', alarms[0]['severity'])
        causes = self._get_alarm_causes(alarms[0], processor.entity_graph)
        self.assertEqual(1, len(causes))

        # generate CRITICAL nagios alarm to trigger
        vals = {'status': 'CRITICAL',
                'service': 'cause_critical_deduced_alarm'}
        vals.update(_NAGIOS_TEST_INFO)
        generator = mock_driver.simple_nagios_alarm_generators(1, 1, vals)
        critical_test = mock_driver.generate_random_events_list(generator)[0]

        host_v = self.get_host_after_event(event_queue, critical_test,
                                           processor, _TARGET_HOST)
        alarms = \
            self._get_deduced_alarms_on_host(host_v, processor.entity_graph)
        self.assertEqual(1, len(alarms))
        self.assertEqual('CRITICAL', alarms[0]['severity'])
        causes = self._get_alarm_causes(alarms[0], processor.entity_graph)
        self.assertEqual(2, len(causes))

        # remove WARNING nagios alarm, leaving only CRITICAL one
        warning_test['status'] = 'OK'
        warning_test[DSProps.EVENT_TYPE] = GraphAction.DELETE_ENTITY
        host_v = self.get_host_after_event(event_queue, warning_test,
                                           processor, _TARGET_HOST)
        alarms = \
            self._get_deduced_alarms_on_host(host_v, processor.entity_graph)
        self.assertEqual(1, len(alarms))
        self.assertEqual('CRITICAL', alarms[0]['severity'])
        causes = self._get_alarm_causes(alarms[0], processor.entity_graph)
        self.assertEqual(1, len(causes))

        # next disable the alarm
        critical_test['status'] = 'OK'
        critical_test[DSProps.EVENT_TYPE] = GraphAction.DELETE_ENTITY
        host_v = self.get_host_after_event(event_queue, critical_test,
                                           processor, _TARGET_HOST)
        alarms = \
            self._get_deduced_alarms_on_host(host_v, processor.entity_graph)
        self.assertEqual(0, len(alarms))
    def test_overlapping_deduced_alarm_1(self):

        event_queue, processor, evaluator = self._init_system()

        # generate WARNING nagios alarm
        vals = {'status': 'WARNING', 'service': 'cause_warning_deduced_alarm'}
        vals.update(_NAGIOS_TEST_INFO)
        generator = mock_driver.simple_nagios_alarm_generators(1, 1, vals)
        warning_test = mock_driver.generate_random_events_list(generator)[0]

        host_v = self.get_host_after_event(event_queue, warning_test,
                                           processor, _TARGET_HOST)
        alarms = \
            self._get_deduced_alarms_on_host(host_v, processor.entity_graph)
        self.assertEqual(1, len(alarms))
        self.assertEqual('WARNING', alarms[0]['severity'])
        causes = self._get_alarm_causes(alarms[0], processor.entity_graph)
        self.assertEqual(1, len(causes))

        # generate CRITICAL nagios alarm to trigger
        vals = {
            'status': 'CRITICAL',
            'service': 'cause_critical_deduced_alarm'
        }
        vals.update(_NAGIOS_TEST_INFO)
        generator = mock_driver.simple_nagios_alarm_generators(1, 1, vals)
        critical_test = mock_driver.generate_random_events_list(generator)[0]

        host_v = self.get_host_after_event(event_queue, critical_test,
                                           processor, _TARGET_HOST)
        alarms = \
            self._get_deduced_alarms_on_host(host_v, processor.entity_graph)
        self.assertEqual(1, len(alarms))
        self.assertEqual('CRITICAL', alarms[0]['severity'])
        causes = self._get_alarm_causes(alarms[0], processor.entity_graph)
        self.assertEqual(2, len(causes))

        # remove WARNING nagios alarm, leaving only CRITICAL one
        warning_test['status'] = 'OK'
        host_v = self.get_host_after_event(event_queue, warning_test,
                                           processor, _TARGET_HOST)
        alarms = \
            self._get_deduced_alarms_on_host(host_v, processor.entity_graph)
        self.assertEqual(1, len(alarms))
        self.assertEqual('CRITICAL', alarms[0]['severity'])
        causes = self._get_alarm_causes(alarms[0], processor.entity_graph)
        self.assertEqual(1, len(causes))

        # next disable the alarm
        critical_test['status'] = 'OK'
        host_v = self.get_host_after_event(event_queue, critical_test,
                                           processor, _TARGET_HOST)
        alarms = \
            self._get_deduced_alarms_on_host(host_v, processor.entity_graph)
        self.assertEqual(0, len(alarms))
예제 #6
0
    def test_deduced_state(self):

        event_queue, processor, evaluator = self._init_system()

        host_v = self._get_host_from_graph(_TARGET_HOST,
                                           processor.entity_graph)
        self.assertEqual('AVAILABLE', host_v[VProps.AGGREGATED_STATE],
                         'host should be AVAILABLE when starting')

        # generate nagios alarm to trigger template scenario
        test_vals = {'status': 'WARNING', 'service': 'cause_suboptimal_state'}
        test_vals.update(_NAGIOS_TEST_INFO)
        generator = mock_driver.simple_nagios_alarm_generators(1, 1, test_vals)
        warning_test = mock_driver.generate_random_events_list(generator)[0]

        host_v = self.get_host_after_event(event_queue, warning_test,
                                           processor, _TARGET_HOST)
        self.assertEqual('SUBOPTIMAL', host_v[VProps.AGGREGATED_STATE],
                         'host should be SUBOPTIMAL with warning alarm')

        # next disable the alarm
        warning_test['status'] = 'OK'
        host_v = self.get_host_after_event(event_queue, warning_test,
                                           processor, _TARGET_HOST)
        self.assertEqual('AVAILABLE', host_v[VProps.AGGREGATED_STATE],
                         'host should be AVAILABLE when alarm disabled')
예제 #7
0
    def test_deduced_alarm(self):

        event_queue, processor, evaluator = self._init_system()

        host_v = self._get_host_from_graph(_TARGET_HOST,
                                           processor.entity_graph)
        self.assertEqual('AVAILABLE', host_v[VProps.AGGREGATED_STATE],
                         'host should be AVAILABLE when starting')

        # generate CRITICAL nagios alarm to trigger
        test_vals = {'status': 'WARNING',
                     'service': 'cause_warning_deduced_alarm'}
        test_vals.update(_NAGIOS_TEST_INFO)
        generator = mock_driver.simple_nagios_alarm_generators(1, 1, test_vals)
        warning_test = mock_driver.generate_random_events_list(generator)[0]

        host_v = self.get_host_after_event(event_queue, warning_test,
                                           processor, _TARGET_HOST)
        alarms = \
            self._get_deduced_alarms_on_host(host_v, processor.entity_graph)
        self.assertEqual(1, len(alarms))
        self.assertEqual('WARNING', alarms[0]['severity'])
        causes = self._get_alarm_causes(alarms[0], processor.entity_graph)
        self.assertEqual(1, len(causes))

        # next disable the alarm
        warning_test['status'] = 'OK'
        host_v = self.get_host_after_event(event_queue, warning_test,
                                           processor, _TARGET_HOST)
        alarms = \
            self._get_deduced_alarms_on_host(host_v, processor.entity_graph)
        self.assertEqual(0, len(alarms))
    def test_deduced_state(self):

        event_queue, processor, evaluator = self._init_system()

        host_v = self._get_host_from_graph(_TARGET_HOST,
                                           processor.entity_graph)
        self.assertEqual('AVAILABLE', host_v[VProps.AGGREGATED_STATE],
                         'host should be AVAILABLE when starting')

        # generate nagios alarm to trigger template scenario
        test_vals = {'status': 'WARNING', 'service': 'cause_suboptimal_state'}
        test_vals.update(_NAGIOS_TEST_INFO)
        generator = mock_driver.simple_nagios_alarm_generators(1, 1, test_vals)
        warning_test = mock_driver.generate_random_events_list(generator)[0]

        host_v = self.get_host_after_event(event_queue, warning_test,
                                           processor, _TARGET_HOST)
        self.assertEqual('SUBOPTIMAL', host_v[VProps.AGGREGATED_STATE],
                         'host should be SUBOPTIMAL with warning alarm')

        # next disable the alarm
        warning_test['status'] = 'OK'
        host_v = self.get_host_after_event(event_queue, warning_test,
                                           processor, _TARGET_HOST)
        self.assertEqual('AVAILABLE', host_v[VProps.AGGREGATED_STATE],
                         'host should be AVAILABLE when alarm disabled')
    def test_deduced_alarm(self):

        event_queue, processor, evaluator = self._init_system()

        host_v = self._get_host_from_graph(_TARGET_HOST,
                                           processor.entity_graph)
        self.assertEqual('AVAILABLE', host_v[VProps.AGGREGATED_STATE],
                         'host should be AVAILABLE when starting')

        # generate CRITICAL nagios alarm to trigger
        test_vals = {
            'status': 'WARNING',
            'service': 'cause_warning_deduced_alarm'
        }
        test_vals.update(_NAGIOS_TEST_INFO)
        generator = mock_driver.simple_nagios_alarm_generators(1, 1, test_vals)
        warning_test = mock_driver.generate_random_events_list(generator)[0]

        host_v = self.get_host_after_event(event_queue, warning_test,
                                           processor, _TARGET_HOST)
        alarms = \
            self._get_deduced_alarms_on_host(host_v, processor.entity_graph)
        self.assertEqual(1, len(alarms))
        self.assertEqual('WARNING', alarms[0]['severity'])
        causes = self._get_alarm_causes(alarms[0], processor.entity_graph)
        self.assertEqual(1, len(causes))

        # next disable the alarm
        warning_test['status'] = 'OK'
        host_v = self.get_host_after_event(event_queue, warning_test,
                                           processor, _TARGET_HOST)
        alarms = \
            self._get_deduced_alarms_on_host(host_v, processor.entity_graph)
        self.assertEqual(0, len(alarms))
    def test_update_transform(self):
        LOG.debug('Test transform entity update event')

        # Test setup
        spec_list = mock_sync.simple_switch_generators(2, 10, 0, None, 10)
        static_events = mock_sync.generate_random_events_list(spec_list)
        self._events_transform_test(static_events)
예제 #11
0
    def test_update_event_transform(self):
        LOG.debug('Test tactual transform action for update events')

        # Test setup
        spec_list = mock_sync.simple_instance_generators(host_num=1,
                                                         vm_num=1,
                                                         snapshot_events=0,
                                                         update_events=10)
        instance_events = mock_sync.generate_random_events_list(spec_list)

        for event in instance_events:
            # Test action
            wrapper = self.transformers[NOVA_INSTANCE_DATASOURCE].transform(
                event)

            # Test assertions
            self._validate_vertex_props(wrapper.vertex, event)

            # Validate the neighbors: only one  valid host neighbor
            neighbors = wrapper.neighbors
            self.assertEqual(1, len(neighbors))
            self._validate_host_neighbor(neighbors[0], event)

            event_type = event[DSProps.EVENT_TYPE]
            if event_type == 'compute.instance.delete.end':
                self.assertEqual(GraphAction.DELETE_ENTITY, wrapper.action)
            elif event_type == 'compute.instance.create.start':
                self.assertEqual(GraphAction.CREATE_ENTITY, wrapper.action)
            else:
                self.assertEqual(GraphAction.UPDATE_ENTITY, wrapper.action)
    def test_snapshot_event_transform(self):
        LOG.debug('Test tactual transform action for '
                  'snapshot and snapshot init events')

        # Test setup
        spec_list = mock_sync.simple_instance_generators(host_num=1,
                                                         vm_num=1,
                                                         snapshot_events=10,
                                                         update_events=0)
        instance_events = mock_sync.generate_random_events_list(spec_list)

        for event in instance_events:
            # Test action
            wrapper = self.transformers[NOVA_INSTANCE_DATASOURCE].transform(
                event)

            # Test assertions
            self._validate_vertex_props(wrapper.vertex, event)

            self.assertEqual(1,
                             len(wrapper.neighbors),
                             'Instance has only one host neighbor')
            host_neighbor = wrapper.neighbors[0]
            self._validate_host_neighbor(host_neighbor, event)

            datasource_action = event[DSProps.DATASOURCE_ACTION]
            if datasource_action == DatasourceAction.INIT_SNAPSHOT:
                self.assertEqual(GraphAction.CREATE_ENTITY, wrapper.action)
            elif datasource_action == DatasourceAction.SNAPSHOT:
                self.assertEqual(GraphAction.UPDATE_ENTITY, wrapper.action)
예제 #13
0
    def test_cinder_volume_validity(self):
        # Setup
        processor = self._create_processor_with_graph(self.conf)
        self.assertEqual(self._num_total_expected_vertices(),
                         len(processor.entity_graph))

        spec_list = mock_driver.simple_volume_generators(volume_num=1,
                                                         instance_num=1,
                                                         snapshot_events=1)
        static_events = mock_driver.generate_random_events_list(spec_list)
        cinder_volume_event = static_events[0]
        cinder_volume_event['attachments'][0]['server_id'] = \
            self._find_entity_id_by_type(processor.entity_graph,
                                         NOVA_INSTANCE_DATASOURCE)

        # Action
        processor.process_event(cinder_volume_event)

        # Test assertions
        self.assertEqual(self._num_total_expected_vertices() + 1,
                         len(processor.entity_graph))

        cinder_vertices = processor.entity_graph.get_vertices(
            vertex_attr_filter={
                VProps.VITRAGE_CATEGORY: EntityCategory.RESOURCE,
                VProps.VITRAGE_TYPE: CINDER_VOLUME_DATASOURCE
            })
        self.assertEqual(1, len(cinder_vertices))

        cinder_neighbors = processor.entity_graph.neighbors(
            cinder_vertices[0].vertex_id)
        self.assertEqual(1, len(cinder_neighbors))

        self.assertEqual(NOVA_INSTANCE_DATASOURCE,
                         cinder_neighbors[0][VProps.VITRAGE_TYPE])
예제 #14
0
    def test_snapshot_transform(self):
        LOG.debug('Nova host transformer test: transform entity event')

        # Test setup
        spec_list = mock_sync.simple_host_generators(zone_num=2,
                                                     host_num=4,
                                                     snapshot_events=5)

        host_events = mock_sync.generate_random_events_list(spec_list)

        for event in host_events:
            # Test action
            wrapper = self.transformers[NOVA_HOST_DATASOURCE].transform(event)

            # Test assertions
            self._validate_vertex_props(wrapper.vertex, event)

            neighbors = wrapper.neighbors
            self.assertThat(neighbors, matchers.HasLength(1))
            self._validate_zone_neighbor(neighbors[0], event)

            if DatasourceAction.SNAPSHOT == event[DSProps.DATASOURCE_ACTION]:
                self.assertEqual(GraphAction.UPDATE_ENTITY, wrapper.action)
            else:
                self.assertEqual(GraphAction.CREATE_ENTITY, wrapper.action)
    def test_update_event_transform(self):
        LOG.debug('Test tactual transform action for update events')

        # Test setup
        spec_list = mock_sync.simple_instance_generators(host_num=1,
                                                         vm_num=1,
                                                         snapshot_events=0,
                                                         update_events=10)
        instance_events = mock_sync.generate_random_events_list(spec_list)

        for event in instance_events:
            # Test action
            wrapper = self.transformers[NOVA_INSTANCE_DATASOURCE].transform(
                event)

            # Test assertions
            self._validate_vertex_props(wrapper.vertex, event)

            # Validate the neighbors: only one  valid host neighbor
            neighbors = wrapper.neighbors
            self.assertEqual(1, len(neighbors))
            self._validate_host_neighbor(neighbors[0], event)

            event_type = event[DSProps.EVENT_TYPE]
            if event_type == 'compute.instance.delete.end':
                self.assertEqual(GraphAction.DELETE_ENTITY, wrapper.action)
            elif event_type == 'compute.instance.create.start':
                self.assertEqual(GraphAction.CREATE_ENTITY, wrapper.action)
            else:
                self.assertEqual(GraphAction.UPDATE_ENTITY, wrapper.action)
예제 #16
0
    def test_snapshot_event_transform(self):
        LOG.debug('Test tactual transform action for '
                  'snapshot and snapshot init events')

        # Test setup
        spec_list = mock_sync.simple_instance_generators(host_num=1,
                                                         vm_num=1,
                                                         snapshot_events=10,
                                                         update_events=0)
        instance_events = mock_sync.generate_random_events_list(spec_list)

        for event in instance_events:
            # Test action
            wrapper = self.transformers[NOVA_INSTANCE_DATASOURCE].transform(
                event)

            # Test assertions
            self._validate_vertex_props(wrapper.vertex, event)

            self.assertEqual(1,
                             len(wrapper.neighbors),
                             'Instance has only one host neighbor')
            host_neighbor = wrapper.neighbors[0]
            self._validate_host_neighbor(host_neighbor, event)

            datasource_action = event[DSProps.DATASOURCE_ACTION]
            if datasource_action == DatasourceAction.INIT_SNAPSHOT:
                self.assertEqual(GraphAction.CREATE_ENTITY, wrapper.action)
            elif datasource_action == DatasourceAction.SNAPSHOT:
                self.assertEqual(GraphAction.UPDATE_ENTITY, wrapper.action)
예제 #17
0
    def test_snapshot_transform(self):
        LOG.debug('Nova host transformer test: transform entity event')

        # Test setup
        spec_list = mock_sync.simple_host_generators(zone_num=2,
                                                     host_num=4,
                                                     snapshot_events=5)

        host_events = mock_sync.generate_random_events_list(spec_list)

        for event in host_events:
            # Test action
            wrapper = self.transformers[NOVA_HOST_DATASOURCE].transform(event)

            # Test assertions
            self._validate_vertex_props(wrapper.vertex, event)

            neighbors = wrapper.neighbors
            self.assertEqual(1, len(neighbors))
            self._validate_zone_neighbor(neighbors[0], event)

            if SyncMode.SNAPSHOT == event[DSProps.SYNC_MODE]:
                self.assertEqual(EventAction.UPDATE_ENTITY, wrapper.action)
            else:
                self.assertEqual(EventAction.CREATE_ENTITY, wrapper.action)
예제 #18
0
    def test_snapshot_event_transform(self):
        LOG.debug('Test tactual transform action for '
                  'snapshot and snapshot init events')

        k8s_spec_list = \
            mock_sync.simple_k8s_nodes_generators(nodes_num=2,
                                                  snapshot_events=1)

        nodes_events = mock_sync.generate_random_events_list(k8s_spec_list)

        for event in nodes_events:

            k8s_wrapper = self.transformers[KUBERNETES_DATASOURCE].transform(
                event)

            # Test assertions
            self.assertEqual(cluster_name, k8s_wrapper.vertex[VProps.NAME])
            n_length = str(len(k8s_wrapper.neighbors))
            self.assertThat(n_length, matchers.HasLength(1),
                            'Cluster vertex has one neighbor')
            self._validate_cluster_neighbors(k8s_wrapper.neighbors, event)
            datasource_action = event[DSProps.DATASOURCE_ACTION]
            if datasource_action == DatasourceAction.INIT_SNAPSHOT:
                self.assertEqual(GraphAction.CREATE_ENTITY, k8s_wrapper.action)
            elif datasource_action == DatasourceAction.SNAPSHOT:
                self.assertEqual(GraphAction.UPDATE_ENTITY, k8s_wrapper.action)
예제 #19
0
    def _create_events():
        spec_list = mock_sync.simple_instance_generators(
            host_num=1, vm_num=1, update_events=1,
            use_nova_versioned_format=True
        )
        update_versioned_event = \
            mock_sync.generate_random_events_list(spec_list)[0]

        spec_list = mock_sync.simple_instance_generators(
            host_num=1, vm_num=1, update_events=1,
            use_nova_versioned_format=False
        )
        update_legacy_event = \
            mock_sync.generate_random_events_list(spec_list)[0]

        return update_versioned_event, update_legacy_event
예제 #20
0
    def test_snapshot_transform(self):
        LOG.debug('Test transform entity snapshot/snapshot_init event')

        # Test setup
        spec_list = mock_sync.simple_switch_generators(2, 10, 10)
        static_events = mock_sync.generate_random_events_list(spec_list)
        self._events_transform_test(static_events)
예제 #21
0
    def test_nagios_validity(self):
        # Setup
        processor = self._create_processor_with_graph(self.conf, uuid=True)
        self.assertEqual(self._num_total_expected_vertices(),
                         len(processor.entity_graph))

        spec_list = mock_driver.simple_nagios_alarm_generators(host_num=1,
                                                               events_num=1)
        static_events = mock_driver.generate_random_events_list(spec_list)
        nagios_event = static_events[0]
        nagios_event['resource_name'] = \
            self._find_entity_id_by_type(processor.entity_graph,
                                         NOVA_HOST_DATASOURCE)
        nagios_event['status'] = 'critical'

        # Action
        processor.process_event(nagios_event)

        # Test assertions
        self.assertEqual(self._num_total_expected_vertices() + 1,
                         len(processor.entity_graph))

        nagios_vertices = processor.entity_graph.get_vertices(
            vertex_attr_filter={
                VProps.CATEGORY: EntityCategory.ALARM,
                VProps.TYPE: NAGIOS_DATASOURCE
            })
        self.assertEqual(1, len(nagios_vertices))

        nagios_neighbors = processor.entity_graph.neighbors(
            nagios_vertices[0].vertex_id)
        self.assertEqual(1, len(nagios_neighbors))

        self.assertEqual(NOVA_HOST_DATASOURCE,
                         nagios_neighbors[0][VProps.TYPE])
    def test_create_entity_key(self):
        LOG.debug('Test get key from nova instance transformer')

        # Test setup
        spec_list = mock_sync.simple_instance_generators(host_num=1,
                                                         vm_num=1,
                                                         snapshot_events=1,
                                                         update_events=0)
        instance_events = mock_sync.generate_random_events_list(spec_list)

        instance_transformer = self.transformers[NOVA_INSTANCE_DATASOURCE]
        for event in instance_events:
            # Test action
            observed_key = instance_transformer._create_entity_key(event)

            # Test assertions
            observed_key_fields = observed_key.split(
                TransformerBase.KEY_SEPARATOR)

            self.assertEqual(EntityCategory.RESOURCE, observed_key_fields[0])
            self.assertEqual(NOVA_INSTANCE_DATASOURCE, observed_key_fields[1])

            instance_id = tbase.extract_field_value(event, 'id')

            self.assertEqual(instance_id, observed_key_fields[2])

            key_values = instance_transformer._key_values(
                NOVA_INSTANCE_DATASOURCE, instance_id)
            expected_key = tbase.build_key(key_values)

            self.assertEqual(expected_key, observed_key)
    def test_snapshot_transform(self):
        LOG.debug('Test transform entity snapshot/snapshot_init event')

        # Test setup
        spec_list = mock_sync.simple_switch_generators(2, 10, 10)
        static_events = mock_sync.generate_random_events_list(spec_list)
        self._events_transform_test(static_events)
예제 #24
0
    def test_update_transform(self):
        LOG.debug('Test transform entity update event')

        # Test setup
        spec_list = mock_sync.simple_switch_generators(2, 10, 0, None, 10)
        static_events = mock_sync.generate_random_events_list(spec_list)
        self._events_transform_test(static_events)
예제 #25
0
    def test_create_entity_key(self):
        LOG.debug('Test get key from kubernetes transformer')

        # Test setup
        spec_list = mock_sync.simple_k8s_nodes_generators(nodes_num=1,
                                                          snapshot_events=1)

        nodes_events = mock_sync.generate_random_events_list(spec_list)

        kubernetes_transformer = self.transformers[KUBERNETES_DATASOURCE]
        for event in nodes_events:
            # Test action
            observed_key = kubernetes_transformer._create_entity_key(event)

            # Test assertions
            observed_key_fields = observed_key.split(
                TransformerBase.KEY_SEPARATOR)

            self.assertEqual(EntityCategory.RESOURCE, observed_key_fields[0])
            self.assertEqual(
                KUBERNETES_DATASOURCE,
                observed_key_fields[1]
            )

            key_values = kubernetes_transformer._key_values(
                KUBERNETES_DATASOURCE,
                cluster_name)
            expected_key = tbase.build_key(key_values)

            self.assertEqual(expected_key, observed_key)
    def test_update_event_transform(self):
        LOG.debug('Test actual transform action for update events')

        # Test setup
        spec_list = mock_sync.simple_instance_generators(
            host_num=1, vm_num=1, update_events=10,
            use_nova_versioned_format=False
        )
        instance_events = mock_sync.generate_random_events_list(spec_list)

        self._test_update_event_transform(instance_events)
예제 #27
0
    def test_overlapping_deduced_alarm_2(self):

        event_queue, processor, evaluator = self._init_system()

        # generate CRITICAL nagios alarm to trigger
        test_vals = {'status': 'CRITICAL',
                     'service': 'cause_critical_deduced_alarm'}
        test_vals.update(_NAGIOS_TEST_INFO)
        generator = mock_driver.simple_nagios_alarm_generators(1, 1, test_vals)
        critical_test = mock_driver.generate_random_events_list(generator)[0]

        host_v = self.get_host_after_event(event_queue, critical_test,
                                           processor, _TARGET_HOST)
        alarms = \
            self._get_deduced_alarms_on_host(host_v, processor.entity_graph)
        self.assertEqual(1, len(alarms))
        self.assertEqual('CRITICAL', alarms[0]['severity'])

        # generate WARNING nagios alarm to trigger
        test_vals = {'status': 'WARNING',
                     'service': 'cause_warning_deduced_alarm'}
        test_vals.update(_NAGIOS_TEST_INFO)
        generator = mock_driver.simple_nagios_alarm_generators(1, 1, test_vals)
        warning_test = mock_driver.generate_random_events_list(generator)[0]

        host_v = self.get_host_after_event(event_queue, warning_test,
                                           processor, _TARGET_HOST)
        alarms = \
            self._get_deduced_alarms_on_host(host_v, processor.entity_graph)
        self.assertEqual(1, len(alarms))
        self.assertEqual('CRITICAL', alarms[0]['severity'])

        # remove CRITICAL nagios alarm, leaving only WARNING one
        critical_test['status'] = 'OK'
        host_v = self.get_host_after_event(event_queue, critical_test,
                                           processor, _TARGET_HOST)
        alarms = \
            self._get_deduced_alarms_on_host(host_v, processor.entity_graph)
        self.assertEqual(1, len(alarms))
        self.assertEqual('WARNING', alarms[0]['severity'])
예제 #28
0
    def test_heat_stack_validity(self):
        # Setup
        processor = self._create_processor_with_graph()
        self.assertThat(processor.entity_graph,
                        matchers.HasLength(
                            self._num_total_expected_vertices())
                        )

        spec_list = mock_driver.simple_stack_generators(
            stack_num=1,
            instance_and_volume_num=1,
            snapshot_events=1)
        static_events = mock_driver.generate_random_events_list(spec_list)
        heat_stack_event = static_events[0]

        # Action
        processor.process_event(heat_stack_event)

        # Test assertions
        self.assertThat(processor.entity_graph,
                        matchers.HasLength(
                            self._num_total_expected_vertices() + 3)
                        )

        stack_vertices = processor.entity_graph.get_vertices(
            vertex_attr_filter={
                VProps.VITRAGE_CATEGORY: EntityCategory.RESOURCE,
                VProps.VITRAGE_TYPE: HEAT_STACK_DATASOURCE
            })
        self.assertThat(stack_vertices, matchers.HasLength(1))

        instance_vertices = processor.entity_graph.get_vertices(
            vertex_attr_filter={
                VProps.VITRAGE_CATEGORY: EntityCategory.RESOURCE,
                VProps.VITRAGE_TYPE: NOVA_INSTANCE_DATASOURCE
            })
        self.assertThat(instance_vertices,
                        matchers.HasLength(self.NUM_INSTANCES + 1))

        cinder_vertices = processor.entity_graph.get_vertices(
            vertex_attr_filter={
                VProps.VITRAGE_CATEGORY: EntityCategory.RESOURCE,
                VProps.VITRAGE_TYPE: CINDER_VOLUME_DATASOURCE
            })
        self.assertThat(cinder_vertices, matchers.HasLength(1))

        stack_neighbors = processor.entity_graph.neighbors(
            stack_vertices[0].vertex_id)
        self.assertThat(stack_neighbors, matchers.HasLength(2))
    def test_snapshot_transform(self):
        LOG.debug("Nova zone transformer test: transform entity event")

        # Test setup
        spec_list = mock_sync.simple_zone_generators(zone_num=1, host_num=1, snapshot_events=5)
        zone_events = mock_sync.generate_random_events_list(spec_list)

        for event in zone_events:
            # Test action
            wrapper = self.transformers[NOVA_ZONE_DATASOURCE].transform(event)

            # Test assertions
            vertex = wrapper.vertex
            self._validate_vertex_props(vertex, event)

            neighbors = wrapper.neighbors
            self.assertEqual(2, len(neighbors))
            self._validate_neighbors(neighbors, vertex.vertex_id, event)
예제 #30
0
    def test_heat_stack_validity(self):
        # Setup
        processor = self._create_processor_with_graph(self.conf)
        self.assertEqual(self._num_total_expected_vertices(),
                         len(processor.entity_graph))

        spec_list = mock_driver.simple_stack_generators(
            stack_num=1,
            instance_and_volume_num=1,
            snapshot_events=1)
        static_events = mock_driver.generate_random_events_list(spec_list)
        heat_stack_event = static_events[0]

        # Action
        processor.process_event(heat_stack_event)

        # Test assertions
        self.assertEqual(self._num_total_expected_vertices() + 3,
                         len(processor.entity_graph))

        stack_vertices = processor.entity_graph.get_vertices(
            vertex_attr_filter={
                VProps.CATEGORY: EntityCategory.RESOURCE,
                VProps.TYPE: HEAT_STACK_DATASOURCE
            })
        self.assertEqual(1, len(stack_vertices))

        instance_vertices = processor.entity_graph.get_vertices(
            vertex_attr_filter={
                VProps.CATEGORY: EntityCategory.RESOURCE,
                VProps.TYPE: NOVA_INSTANCE_DATASOURCE
            })
        self.assertEqual(self.NUM_INSTANCES + 1, len(instance_vertices))

        cinder_vertices = processor.entity_graph.get_vertices(
            vertex_attr_filter={
                VProps.CATEGORY: EntityCategory.RESOURCE,
                VProps.TYPE: CINDER_VOLUME_DATASOURCE
            })
        self.assertEqual(1, len(cinder_vertices))

        stack_neighbors = processor.entity_graph.neighbors(
            stack_vertices[0].vertex_id)
        self.assertEqual(2, len(stack_neighbors))
예제 #31
0
파일: base.py 프로젝트: Idandos/vitrage
    def _create_event(spec_type=None, sync_mode=None,
                      event_type=None, properties=None):
        # generate event
        spec_list = mock_sync.simple_instance_generators(1, 1, 1)
        events_list = mock_sync.generate_random_events_list(
            spec_list)

        # update properties
        if sync_mode is not None:
            events_list[0][DSProps.SYNC_MODE] = sync_mode

        if event_type is not None:
            events_list[0][DSProps.EVENT_TYPE] = event_type

        if properties is not None:
            for key, value in properties.items():
                events_list[0][key] = value

        return events_list[0]
예제 #32
0
    def test_static_physical_validity(self):
        # Setup
        processor = self._create_processor_with_graph(self.conf)
        transformers = processor.transformer_manager.transformers
        transformers[SWITCH] = transformers[STATIC_PHYSICAL_DATASOURCE]
        self.assertThat(processor.entity_graph,
                        matchers.HasLength(
                            self._num_total_expected_vertices())
                        )

        spec_list = mock_driver.simple_switch_generators(
            switch_num=1,
            host_num=1,
            snapshot_events=1)
        static_events = mock_driver.generate_random_events_list(spec_list)
        static_physical_event = static_events[0]
        static_physical_event[DSProps.ENTITY_TYPE] = SWITCH
        static_physical_event['relationships'][0]['name'] = \
            self._find_entity_id_by_type(processor.entity_graph,
                                         NOVA_HOST_DATASOURCE)

        # Action
        processor.process_event(static_physical_event)

        # Test assertions
        self.assertThat(processor.entity_graph,
                        matchers.HasLength(
                            self._num_total_expected_vertices() + 1)
                        )

        static_physical_vertices = processor.entity_graph.get_vertices(
            vertex_attr_filter={
                VProps.VITRAGE_CATEGORY: EntityCategory.RESOURCE,
                VProps.VITRAGE_TYPE: SWITCH
            })
        self.assertThat(static_physical_vertices, matchers.HasLength(1))

        static_physical_neighbors = processor.entity_graph.neighbors(
            static_physical_vertices[0].vertex_id)
        self.assertThat(static_physical_neighbors, matchers.HasLength(1))

        self.assertEqual(NOVA_HOST_DATASOURCE,
                         static_physical_neighbors[0][VProps.VITRAGE_TYPE])
예제 #33
0
    def test_snapshot_event_transform(self):
        # Test setup
        spec_list = mock_sync.simple_trove_cluster_generators(
            clust_num=1, inst_num=1, snapshot_events=10)
        events = mock_sync.generate_random_events_list(spec_list)

        for event in events:
            # Test action
            transformer = self.transformers[TROVE_CLUSTER_DATASOURCE]
            wrapper = transformer.transform(event)

            # Test assertions
            vertex = wrapper.vertex
            self._validate_vertex_props(vertex, event)

            neighbours = wrapper.neighbors
            self.assertThat(neighbours, matchers.HasLength(1))
            self._validate_server_neighbour(neighbours[0], vertex.vertex_id,
                                            event)
예제 #34
0
    def test_heat_stack_validity(self):
        # Setup
        processor = self._create_processor_with_graph(self.conf, uuid=True)
        self.assertEqual(self._num_total_expected_vertices(),
                         len(processor.entity_graph))

        spec_list = mock_driver.simple_stack_generators(
            stack_num=1, instance_and_volume_num=1, snapshot_events=1)
        static_events = mock_driver.generate_random_events_list(spec_list)
        heat_stack_event = static_events[0]

        # Action
        processor.process_event(heat_stack_event)

        # Test assertions
        self.assertEqual(self._num_total_expected_vertices() + 3,
                         len(processor.entity_graph))

        stack_vertices = processor.entity_graph.get_vertices(
            vertex_attr_filter={
                VProps.CATEGORY: EntityCategory.RESOURCE,
                VProps.TYPE: HEAT_STACK_DATASOURCE
            })
        self.assertEqual(1, len(stack_vertices))

        instance_vertices = processor.entity_graph.get_vertices(
            vertex_attr_filter={
                VProps.CATEGORY: EntityCategory.RESOURCE,
                VProps.TYPE: NOVA_INSTANCE_DATASOURCE
            })
        self.assertEqual(self.NUM_INSTANCES + 1, len(instance_vertices))

        cinder_vertices = processor.entity_graph.get_vertices(
            vertex_attr_filter={
                VProps.CATEGORY: EntityCategory.RESOURCE,
                VProps.TYPE: CINDER_VOLUME_DATASOURCE
            })
        self.assertEqual(1, len(cinder_vertices))

        stack_neighbors = processor.entity_graph.neighbors(
            stack_vertices[0].vertex_id)
        self.assertEqual(2, len(stack_neighbors))
예제 #35
0
    def _create_event(spec_type=None,
                      datasource_action=None,
                      event_type=None,
                      properties=None):
        # generate event
        spec_list = mock_sync.simple_instance_generators(1, 1, 1)
        events_list = mock_sync.generate_random_events_list(spec_list)

        # update properties
        if datasource_action is not None:
            events_list[0][DSProps.DATASOURCE_ACTION] = datasource_action

        if event_type is not None:
            events_list[0][DSProps.EVENT_TYPE] = event_type

        if properties is not None:
            for key, value in properties.items():
                events_list[0][key] = value

        return events_list[0]
예제 #36
0
파일: base.py 프로젝트: charliebr30/vitrage
    def _create_event(spec_type=None,
                      sync_mode=None,
                      event_type=None,
                      properties=None):
        # generate event
        spec_list = mock_sync.simple_instance_generators(1, 1, 1)
        events_list = mock_sync.generate_random_events_list(spec_list)

        # update properties
        if sync_mode is not None:
            events_list[0][DSProps.SYNC_MODE] = sync_mode

        if event_type is not None:
            events_list[0][DSProps.EVENT_TYPE] = event_type

        if properties is not None:
            for key, value in properties.items():
                events_list[0][key] = value

        return events_list[0]
    def test_update_transform(self):
        LOG.debug("Consistency transformer test: transform entity event " "update")

        # Test setup
        spec_list = mock_sync.simple_consistency_generators(consistency_num=7, update_events=7)
        static_events = mock_sync.generate_random_events_list(spec_list)

        for event in static_events:
            # Test action
            wrapper = self.transformers[CONSISTENCY_DATASOURCE].transform(event)

            # Test assertions
            vertex = wrapper.vertex
            self._validate_consistency_vertex_props(vertex, event)

            neighbors = wrapper.neighbors
            self.assertIsNone(neighbors)

            action = wrapper.action
            self.assertIn(action, self.actions)
예제 #38
0
    def test_snapshot_transform(self):
        LOG.debug('Nova zone transformer test: transform entity event')

        # Test setup
        spec_list = mock_sync.simple_zone_generators(zone_num=1,
                                                     host_num=1,
                                                     snapshot_events=5)
        zone_events = mock_sync.generate_random_events_list(spec_list)

        for event in zone_events:
            # Test action
            wrapper = self.transformers[NOVA_ZONE_DATASOURCE].transform(event)

            # Test assertions
            vertex = wrapper.vertex
            self._validate_vertex_props(vertex, event)

            neighbors = wrapper.neighbors
            self.assertEqual(2, len(neighbors))
            self._validate_neighbors(neighbors, vertex.vertex_id, event)
예제 #39
0
파일: base.py 프로젝트: openstack/vitrage
    def _create_event(spec_type=None,
                      datasource_action=None,
                      event_type=None,
                      properties=None):
        # generate event
        spec_list = mock_sync.simple_instance_generators(1, 1, 1)
        events_list = mock_sync.generate_random_events_list(
            spec_list)

        # update properties
        if datasource_action is not None:
            events_list[0][DSProps.DATASOURCE_ACTION] = datasource_action

        if event_type is not None:
            events_list[0][DSProps.EVENT_TYPE] = event_type

        if properties is not None:
            for key, value in properties.items():
                events_list[0][key] = value

        return events_list[0]
예제 #40
0
    def test_update_transform(self):
        LOG.debug('Heat Stack transformer test: transform entity event '
                  'update')

        # Test setup
        spec_list = \
            mock_sync.simple_stack_generators(stack_num=3,
                                              instance_and_volume_num=7,
                                              snapshot_events=7)
        static_events = mock_sync.generate_random_events_list(spec_list)

        for event in static_events:
            # Test action
            wrapper = self.transformers[HEAT_STACK_DATASOURCE].transform(event)

            # Test assertions
            vertex = wrapper.vertex
            self._validate_stack_vertex_props(vertex, event)

            neighbors = wrapper.neighbors
            self._validate_neighbors(neighbors, vertex.vertex_id, event)
예제 #41
0
    def test_nagios_validity(self):
        # Setup
        processor = self._create_processor_with_graph(self.conf)
        self.assertThat(processor.entity_graph,
                        matchers.HasLength(
                            self._num_total_expected_vertices())
                        )

        spec_list = mock_driver.simple_nagios_alarm_generators(
            host_num=1,
            events_num=1)
        static_events = mock_driver.generate_random_events_list(spec_list)
        nagios_event = static_events[0]
        nagios_event['resource_name'] = \
            self._find_entity_id_by_type(processor.entity_graph,
                                         NOVA_HOST_DATASOURCE)
        nagios_event['status'] = NagiosTestStatus.CRITICAL

        # Action
        processor.process_event(nagios_event)

        # Test assertions
        self.assertThat(processor.entity_graph,
                        matchers.HasLength(
                            self._num_total_expected_vertices() + 1)
                        )

        nagios_vertices = processor.entity_graph.get_vertices(
            vertex_attr_filter={
                VProps.VITRAGE_CATEGORY: EntityCategory.ALARM,
                VProps.VITRAGE_TYPE: NAGIOS_DATASOURCE
            })
        self.assertThat(nagios_vertices, matchers.HasLength(1))

        nagios_neighbors = processor.entity_graph.neighbors(
            nagios_vertices[0].vertex_id)
        self.assertThat(nagios_neighbors, matchers.HasLength(1))

        self.assertEqual(NOVA_HOST_DATASOURCE,
                         nagios_neighbors[0][VProps.VITRAGE_TYPE])
예제 #42
0
    def test_update_transform(self):
        LOG.debug('Cinder Volume transformer test: transform entity event '
                  'update')

        # Test setup
        spec_list = mock_sync.simple_volume_generators(volume_num=3,
                                                       instance_num=7,
                                                       update_events=7)
        static_events = mock_sync.generate_random_events_list(spec_list)

        for event in static_events:
            # Test action
            wrapper = self.transformers[CINDER_VOLUME_DATASOURCE].transform(
                event)

            # Test assertions
            vertex = wrapper.vertex
            self._validate_volume_vertex_props(vertex, event)

            neighbors = wrapper.neighbors
            self.assertThat(neighbors, matchers.HasLength(1))
            self._validate_neighbors(neighbors, vertex.vertex_id, event)
    def test_update_transform(self):
        LOG.debug('Cinder Volume transformer test: transform entity event '
                  'update')

        # Test setup
        spec_list = mock_sync.simple_volume_generators(volume_num=3,
                                                       instance_num=7,
                                                       update_events=7)
        static_events = mock_sync.generate_random_events_list(spec_list)

        for event in static_events:
            # Test action
            wrapper = self.transformers[CINDER_VOLUME_DATASOURCE].transform(
                event)

            # Test assertions
            vertex = wrapper.vertex
            self._validate_volume_vertex_props(vertex, event)

            neighbors = wrapper.neighbors
            self.assertEqual(1, len(neighbors))
            self._validate_neighbors(neighbors, vertex.vertex_id, event)
    def test_update_transform(self):
        LOG.debug('Heat Stack transformer test: transform entity event '
                  'update')

        # Test setup
        spec_list = \
            mock_sync.simple_stack_generators(stack_num=3,
                                              instance_and_volume_num=7,
                                              snapshot_events=7)
        static_events = mock_sync.generate_random_events_list(spec_list)

        for event in static_events:
            # Test action
            wrapper = self.transformers[HEAT_STACK_DATASOURCE].transform(
                event)

            # Test assertions
            vertex = wrapper.vertex
            self._validate_stack_vertex_props(vertex, event)

            neighbors = wrapper.neighbors
            self._validate_neighbors(neighbors, vertex.vertex_id, event)
예제 #45
0
    def test_static_physical_validity(self):
        # Setup
        processor = self._create_processor_with_graph(self.conf)
        transformers = processor.transformer_manager.transformers
        transformers[SWITCH] = transformers[STATIC_PHYSICAL_DATASOURCE]
        self.assertEqual(self._num_total_expected_vertices(),
                         len(processor.entity_graph))

        spec_list = mock_driver.simple_switch_generators(
            switch_num=1,
            host_num=1,
            snapshot_events=1)
        static_events = mock_driver.generate_random_events_list(spec_list)
        static_physical_event = static_events[0]
        static_physical_event[DSProps.SYNC_TYPE] = SWITCH
        static_physical_event['relationships'][0]['name'] = \
            self._find_entity_id_by_type(processor.entity_graph,
                                         NOVA_HOST_DATASOURCE)

        # Action
        processor.process_event(static_physical_event)

        # Test assertions
        self.assertEqual(self._num_total_expected_vertices() + 1,
                         len(processor.entity_graph))

        static_physical_vertices = processor.entity_graph.get_vertices(
            vertex_attr_filter={
                VProps.CATEGORY: EntityCategory.RESOURCE,
                VProps.TYPE: SWITCH
            })
        self.assertEqual(1, len(static_physical_vertices))

        static_physical_neighbors = processor.entity_graph.neighbors(
            static_physical_vertices[0].vertex_id)
        self.assertEqual(1, len(static_physical_neighbors))

        self.assertEqual(NOVA_HOST_DATASOURCE,
                         static_physical_neighbors[0][VProps.TYPE])
예제 #46
0
    def test_trove_instance_validity(self):
        # Setup
        processor = self._create_processor_with_graph()
        self.assertThat(processor.entity_graph,
                        matchers.HasLength(
                            self._num_total_expected_vertices())
                        )

        spec_list = mock_driver.simple_trove_instance_generators(
            inst_num=1,
            snapshot_events=1)
        static_events = mock_driver.generate_random_events_list(spec_list)
        trove_instance_event = static_events[0]
        trove_instance_event['server_id'] = \
            self._find_entity_id_by_type(processor.entity_graph,
                                         NOVA_INSTANCE_DATASOURCE)

        # Action
        processor.process_event(trove_instance_event)

        # Test assertions
        self.assertThat(processor.entity_graph,
                        matchers.HasLength(
                            self._num_total_expected_vertices() + 1)
                        )

        trove_vertices = processor.entity_graph.get_vertices(
            vertex_attr_filter={
                VProps.VITRAGE_CATEGORY: EntityCategory.RESOURCE,
                VProps.VITRAGE_TYPE: TROVE_INSTANCE_DATASOURCE
            })
        self.assertThat(trove_vertices, matchers.HasLength(1))

        trove_neighbors = processor.entity_graph.neighbors(
            trove_vertices[0].vertex_id)
        self.assertThat(trove_neighbors, matchers.HasLength(1))
        self.assertEqual(NOVA_INSTANCE_DATASOURCE,
                         trove_neighbors[0][VProps.VITRAGE_TYPE])
예제 #47
0
    def test_update_transform(self):
        LOG.debug('Consistency transformer test: transform entity event '
                  'update')

        # Test setup
        spec_list = mock_sync.simple_consistency_generators(consistency_num=7,
                                                            update_events=7)
        static_events = mock_sync.generate_random_events_list(spec_list)

        for event in static_events:
            # Test action
            wrapper = self.transformers[CONSISTENCY_DATASOURCE].transform(
                event)

            # Test assertions
            vertex = wrapper.vertex
            self._validate_consistency_vertex_props(vertex, event)

            neighbors = wrapper.neighbors
            self.assertIsNone(neighbors)

            action = wrapper.action
            self.assertIn(action, self.actions)
    def test_extract_key(self):
        LOG.debug('Test get key from nova instance transformer')

        # Test setup
        spec_list = mock_sync.simple_instance_generators(
            host_num=1,
            vm_num=1,
            snapshot_events=1,
            update_events=0
        )
        instance_events = mock_sync.generate_random_events_list(spec_list)

        instance_transformer = self.transformers[NOVA_INSTANCE_DATASOURCE]
        for event in instance_events:
            # Test action
            observed_key = instance_transformer._create_entity_key(event)

            # Test assertions
            observed_key_fields = observed_key.split(
                TransformerBase.KEY_SEPARATOR)

            self.assertEqual(EntityCategory.RESOURCE, observed_key_fields[0])
            self.assertEqual(
                NOVA_INSTANCE_DATASOURCE,
                observed_key_fields[1]
            )

            instance_id = tbase.extract_field_value(event, 'id')

            self.assertEqual(instance_id, observed_key_fields[2])

            key_values = instance_transformer._key_values(
                NOVA_INSTANCE_DATASOURCE,
                instance_id)
            expected_key = tbase.build_key(key_values)

            self.assertEqual(expected_key, observed_key)
예제 #49
0
    def test_nagios_validity(self):
        # Setup
        processor = self._create_processor_with_graph(self.conf)
        self.assertEqual(self._num_total_expected_vertices(),
                         len(processor.entity_graph))

        spec_list = mock_driver.simple_nagios_alarm_generators(
            host_num=1,
            events_num=1)
        static_events = mock_driver.generate_random_events_list(spec_list)
        nagios_event = static_events[0]
        nagios_event['resource_name'] = \
            self._find_entity_id_by_type(processor.entity_graph,
                                         NOVA_HOST_DATASOURCE)
        nagios_event['status'] = 'critical'

        # Action
        processor.process_event(nagios_event)

        # Test assertions
        self.assertEqual(self._num_total_expected_vertices() + 1,
                         len(processor.entity_graph))

        nagios_vertices = processor.entity_graph.get_vertices(
            vertex_attr_filter={
                VProps.CATEGORY: EntityCategory.ALARM,
                VProps.TYPE: NAGIOS_DATASOURCE
            })
        self.assertEqual(1, len(nagios_vertices))

        nagios_neighbors = processor.entity_graph.neighbors(
            nagios_vertices[0].vertex_id)
        self.assertEqual(1, len(nagios_neighbors))

        self.assertEqual(NOVA_HOST_DATASOURCE,
                         nagios_neighbors[0][VProps.TYPE])
예제 #50
0
    def test_cinder_volume_validity(self):
        # Setup
        processor = self._create_processor_with_graph(self.conf)
        self.assertEqual(self._num_total_expected_vertices(),
                         len(processor.entity_graph))

        spec_list = mock_driver.simple_volume_generators(
            volume_num=1,
            instance_num=1,
            snapshot_events=1)
        static_events = mock_driver.generate_random_events_list(spec_list)
        cinder_volume_event = static_events[0]
        cinder_volume_event['attachments'][0]['server_id'] = \
            self._find_entity_id_by_type(processor.entity_graph,
                                         NOVA_INSTANCE_DATASOURCE)

        # Action
        processor.process_event(cinder_volume_event)

        # Test assertions
        self.assertEqual(self._num_total_expected_vertices() + 1,
                         len(processor.entity_graph))

        cinder_vertices = processor.entity_graph.get_vertices(
            vertex_attr_filter={
                VProps.CATEGORY: EntityCategory.RESOURCE,
                VProps.TYPE: CINDER_VOLUME_DATASOURCE
            })
        self.assertEqual(1, len(cinder_vertices))

        cinder_neighbors = processor.entity_graph.neighbors(
            cinder_vertices[0].vertex_id)
        self.assertEqual(1, len(cinder_neighbors))

        self.assertEqual(NOVA_INSTANCE_DATASOURCE,
                         cinder_neighbors[0][VProps.TYPE])