X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=osm_mon%2Ftest%2Fintegration%2Ftest_alarm_integration.py;h=13f0fef399d9e2630be30f5da353fabdfd3c48eb;hb=refs%2Fchanges%2F11%2F5911%2F2;hp=489c3078cf1f313a269101b3045cb630fbc9cb15;hpb=bbbc9f6af36cea7a55d478020b7f385f792fb91d;p=osm%2FMON.git diff --git a/osm_mon/test/integration/test_alarm_integration.py b/osm_mon/test/integration/test_alarm_integration.py index 489c307..13f0fef 100644 --- a/osm_mon/test/integration/test_alarm_integration.py +++ b/osm_mon/test/integration/test_alarm_integration.py @@ -23,182 +23,186 @@ """Test an end to end Openstack alarm requests.""" import json - import logging +import unittest -from osm_mon.core.message_bus.producer import KafkaProducer as prod - +import mock from kafka import KafkaConsumer from kafka import KafkaProducer +from kafka.errors import KafkaError -import mock - +from osm_mon.core.message_bus.producer import KafkaProducer as prod from osm_mon.plugins.OpenStack import response - from osm_mon.plugins.OpenStack.Aodh import alarming from osm_mon.plugins.OpenStack.common import Common log = logging.getLogger(__name__) -# Set up common and alarming class instances -alarms = alarming.Alarming() -openstack_auth = Common() - -# Initialise the alarm request consumer and a producer for testing -producer = KafkaProducer(bootstrap_servers='localhost:9092') -req_consumer = KafkaConsumer(bootstrap_servers='localhost:9092', - group_id='osm_mon') -req_consumer.subscribe("alarm_request") - - -@mock.patch.object(prod, "update_alarm_response") -@mock.patch.object(alarming.Alarming, "update_alarm") -@mock.patch.object(response.OpenStack_Response, "generate_response") -def test_update_alarm_req(resp, update_alarm, update_resp): - """Test Aodh update alarm request message from KafkaProducer.""" - # Set-up message, producer and consumer for tests - payload = {"vim_type": "OpenSTACK", - "alarm_update_request": - {"correlation_id": 123, - "alarm_uuid": "alarm_id", - "metric_uuid": "metric_id"}} - - producer.send('alarm_request', key="update_alarm_request", - value=json.dumps(payload)) - - for message in req_consumer: - # Check the vim desired by the message - vim_type = json.loads(message.value)["vim_type"].lower() - if vim_type == "openstack": - # Mock a valid alarm update - update_alarm.return_value = "alarm_id", True - alarms.alarming(message, openstack_auth, None) - - # A response message is generated and sent via MON's producer - resp.assert_called_with( - 'update_alarm_response', alarm_id="alarm_id", cor_id=123, - status=True) - update_resp.assert_called_with( - 'update_alarm_response', resp.return_value, 'alarm_response') - - return - - -@mock.patch.object(prod, "create_alarm_response") -@mock.patch.object(alarming.Alarming, "configure_alarm") -@mock.patch.object(response.OpenStack_Response, "generate_response") -def test_create_alarm_req(resp, config_alarm, create_resp): - """Test Aodh create alarm request message from KafkaProducer.""" - # Set-up message, producer and consumer for tests - payload = {"vim_type": "OpenSTACK", - "alarm_create_request": - {"correlation_id": 123, - "alarm_name": "my_alarm", - "metric_name": "my_metric", - "resource_uuid": "my_resource", - "severity": "WARNING"}} - - producer.send('alarm_request', key="create_alarm_request", - value=json.dumps(payload)) - - for message in req_consumer: - # Check the vim desired by the message - vim_type = json.loads(message.value)["vim_type"].lower() - if vim_type == "openstack": - # Mock a valid alarm creation - config_alarm.return_value = "alarm_id", True - alarms.alarming(message, openstack_auth, None) - - # A response message is generated and sent via MON's produce - resp.assert_called_with( - 'create_alarm_response', status=True, alarm_id="alarm_id", - cor_id=123) - create_resp.assert_called_with( - 'create_alarm_response', resp.return_value, 'alarm_response') - - return - - -@mock.patch.object(prod, "list_alarm_response") -@mock.patch.object(alarming.Alarming, "list_alarms") -@mock.patch.object(response.OpenStack_Response, "generate_response") -def test_list_alarm_req(resp, list_alarm, list_resp): - """Test Aodh list alarm request message from KafkaProducer.""" - # Set-up message, producer and consumer for tests - payload = {"vim_type": "OpenSTACK", - "alarm_list_request": - {"correlation_id": 123, - "resource_uuid": "resource_id", }} - - producer.send('alarm_request', key="list_alarm_request", - value=json.dumps(payload)) - - for message in req_consumer: - # Check the vim desired by the message - vim_type = json.loads(message.value)["vim_type"].lower() - if vim_type == "openstack": - # Mock an empty list generated by the request - list_alarm.return_value = [] - alarms.alarming(message, openstack_auth, None) - - # Resoonse message is generated - resp.assert_called_with( - 'list_alarm_response', alarm_list=[], - cor_id=123) - # Producer attempts to send the response message back to the SO - list_resp.assert_called_with( - 'list_alarm_response', resp.return_value, 'alarm_response') - - return - - -@mock.patch.object(alarming.Alarming, "delete_alarm") -@mock.patch.object(prod, "delete_alarm_response") -@mock.patch.object(response.OpenStack_Response, "generate_response") -def test_delete_alarm_req(resp, del_resp, del_alarm): - """Test Aodh delete alarm request message from KafkaProducer.""" - # Set-up message, producer and consumer for tests - payload = {"vim_type": "OpenSTACK", - "alarm_delete_request": - {"correlation_id": 123, - "alarm_uuid": "alarm_id", }} - - producer.send('alarm_request', key="delete_alarm_request", - value=json.dumps(payload)) - - for message in req_consumer: - # Check the vim desired by the message - vim_type = json.loads(message.value)["vim_type"].lower() - if vim_type == "openstack": - alarms.alarming(message, openstack_auth, None) - - # Response message is generated and sent by MON's producer - resp.assert_called_with( - 'delete_alarm_response', alarm_id="alarm_id", - status=del_alarm.return_value, cor_id=123) - del_resp.assert_called_with( - 'delete_alarm_response', resp.return_value, 'alarm_response') - - return - - -@mock.patch.object(alarming.Alarming, "update_alarm_state") -def test_ack_alarm_req(ack_alarm): - """Test Aodh acknowledge alarm request message from KafkaProducer.""" - # Set-up message, producer and consumer for tests - payload = {"vim_type": "OpenSTACK", - "ack_details": - {"alarm_uuid": "alarm_id", }} - - producer.send('alarm_request', key="acknowledge_alarm", - value=json.dumps(payload)) - - for message in req_consumer: - # Check the vim desired by the message - vim_type = json.loads(message.value)["vim_type"].lower() - if vim_type == "openstack": - alarms.alarming(message, openstack_auth, None) - # No response message is sent for and ack request - # Alarm state is updated from alarm -> ok - ack_alarm.assert_called_with(None, None, "alarm_id") - return + +class AlarmIntegrationTest(unittest.TestCase): + def setUp(self): + # Set up common and alarming class instances + self.alarms = alarming.Alarming() + self.openstack_auth = Common() + + try: + self.producer = KafkaProducer(bootstrap_servers='localhost:9092') + self.req_consumer = KafkaConsumer(bootstrap_servers='localhost:9092', + group_id='osm_mon', + consumer_timeout_ms=2000) + self.req_consumer.subscribe(['alarm_request']) + except KafkaError: + self.skipTest('Kafka server not present.') + + @mock.patch.object(prod, "update_alarm_response") + @mock.patch.object(alarming.Alarming, "update_alarm") + @mock.patch.object(response.OpenStack_Response, "generate_response") + def test_update_alarm_req(self, resp, update_alarm, update_resp): + """Test Aodh update alarm request message from KafkaProducer.""" + # Set-up message, producer and consumer for tests + payload = {"vim_type": "OpenSTACK", + "alarm_update_request": + {"correlation_id": 123, + "alarm_uuid": "alarm_id", + "metric_uuid": "metric_id"}} + + self.producer.send('alarm_request', key="update_alarm_request", + value=json.dumps(payload)) + + for message in self.req_consumer: + # Check the vim desired by the message + vim_type = json.loads(message.value)["vim_type"].lower() + if vim_type == "openstack": + # Mock a valid alarm update + update_alarm.return_value = "alarm_id", True + self.alarms.alarming(message, self.openstack_auth, None) + + # A response message is generated and sent via MON's producer + resp.assert_called_with( + 'update_alarm_response', alarm_id="alarm_id", cor_id=123, + status=True) + update_resp.assert_called_with( + 'update_alarm_response', resp.return_value, 'alarm_response') + + return + self.fail("No message received in consumer") + + @mock.patch.object(prod, "create_alarm_response") + @mock.patch.object(alarming.Alarming, "configure_alarm") + @mock.patch.object(response.OpenStack_Response, "generate_response") + def test_create_alarm_req(self, resp, config_alarm, create_resp): + """Test Aodh create alarm request message from KafkaProducer.""" + # Set-up message, producer and consumer for tests + payload = {"vim_type": "OpenSTACK", + "alarm_create_request": + {"correlation_id": 123, + "alarm_name": "my_alarm", + "metric_name": "my_metric", + "resource_uuid": "my_resource", + "severity": "WARNING"}} + + self.producer.send('alarm_request', key="create_alarm_request", + value=json.dumps(payload)) + + for message in self.req_consumer: + # Check the vim desired by the message + vim_type = json.loads(message.value)["vim_type"].lower() + if vim_type == "openstack": + # Mock a valid alarm creation + config_alarm.return_value = "alarm_id", True + self.alarms.alarming(message, self.openstack_auth, None) + + # A response message is generated and sent via MON's produce + resp.assert_called_with( + 'create_alarm_response', status=True, alarm_id="alarm_id", + cor_id=123) + create_resp.assert_called_with( + 'create_alarm_response', resp.return_value, 'alarm_response') + + return + self.fail("No message received in consumer") + + @mock.patch.object(prod, "list_alarm_response") + @mock.patch.object(alarming.Alarming, "list_alarms") + @mock.patch.object(response.OpenStack_Response, "generate_response") + def test_list_alarm_req(self, resp, list_alarm, list_resp): + """Test Aodh list alarm request message from KafkaProducer.""" + # Set-up message, producer and consumer for tests + payload = {"vim_type": "OpenSTACK", + "alarm_list_request": + {"correlation_id": 123, + "resource_uuid": "resource_id", }} + + self.producer.send('alarm_request', key="list_alarm_request", + value=json.dumps(payload)) + + for message in self.req_consumer: + # Check the vim desired by the message + vim_type = json.loads(message.value)["vim_type"].lower() + if vim_type == "openstack": + # Mock an empty list generated by the request + list_alarm.return_value = [] + self.alarms.alarming(message, self.openstack_auth, None) + + # Resoonse message is generated + resp.assert_called_with( + 'list_alarm_response', alarm_list=[], + cor_id=123) + # Producer attempts to send the response message back to the SO + list_resp.assert_called_with( + 'list_alarm_response', resp.return_value, 'alarm_response') + + return + self.fail("No message received in consumer") + + @mock.patch.object(alarming.Alarming, "delete_alarm") + @mock.patch.object(prod, "delete_alarm_response") + @mock.patch.object(response.OpenStack_Response, "generate_response") + def test_delete_alarm_req(self, resp, del_resp, del_alarm): + """Test Aodh delete alarm request message from KafkaProducer.""" + # Set-up message, producer and consumer for tests + payload = {"vim_type": "OpenSTACK", + "alarm_delete_request": + {"correlation_id": 123, + "alarm_uuid": "alarm_id", }} + + self.producer.send('alarm_request', key="delete_alarm_request", + value=json.dumps(payload)) + + for message in self.req_consumer: + # Check the vim desired by the message + vim_type = json.loads(message.value)["vim_type"].lower() + if vim_type == "openstack": + self.alarms.alarming(message, self.openstack_auth, None) + + # Response message is generated and sent by MON's producer + resp.assert_called_with( + 'delete_alarm_response', alarm_id="alarm_id", + status=del_alarm.return_value, cor_id=123) + del_resp.assert_called_with( + 'delete_alarm_response', resp.return_value, 'alarm_response') + + return + self.fail("No message received in consumer") + + @mock.patch.object(alarming.Alarming, "update_alarm_state") + def test_ack_alarm_req(self, ack_alarm): + """Test Aodh acknowledge alarm request message from KafkaProducer.""" + # Set-up message, producer and consumer for tests + payload = {"vim_type": "OpenSTACK", + "ack_details": + {"alarm_uuid": "alarm_id", }} + + self.producer.send('alarm_request', key="acknowledge_alarm", + value=json.dumps(payload)) + + for message in self.req_consumer: + # Check the vim desired by the message + vim_type = json.loads(message.value)["vim_type"].lower() + if vim_type == "openstack": + self.alarms.alarming(message, self.openstack_auth, None) + # No response message is sent for and ack request + # Alarm state is updated from alarm -> ok + ack_alarm.assert_called_with(None, None, "alarm_id") + return + self.fail("No message received in consumer")