Refactors codebase
[osm/MON.git] / osm_mon / test / OpenStack / integration / test_metric_integration.py
index c130973..578c8b1 100644 (file)
@@ -29,7 +29,8 @@ import unittest
 
 from kafka.errors import KafkaError
 
-from osm_mon.core.message_bus.producer import KafkaProducer as prod
+from osm_mon.core.auth import AuthManager
+from osm_mon.core.database import VimCredentials
 
 from kafka import KafkaConsumer
 from kafka import KafkaProducer
@@ -38,17 +39,22 @@ import mock
 
 from osm_mon.plugins.OpenStack import response
 
-from osm_mon.plugins.OpenStack.Gnocchi import metrics
+from osm_mon.plugins.OpenStack.Gnocchi import metric_handler
 
 from osm_mon.plugins.OpenStack.common import Common
 
 log = logging.getLogger(__name__)
 
+mock_creds = VimCredentials()
+mock_creds.config = '{}'
 
+
+@mock.patch.object(Common, "get_auth_token", mock.Mock())
+@mock.patch.object(Common, "get_endpoint", mock.Mock())
 class MetricIntegrationTest(unittest.TestCase):
     def setUp(self):
         # Set up common and alarming class instances
-        self.metric_req = metrics.Metrics()
+        self.metric_req = metric_handler.OpenstackMetricHandler()
         self.openstack_auth = Common()
 
         try:
@@ -65,48 +71,43 @@ class MetricIntegrationTest(unittest.TestCase):
         except KafkaError:
             self.skipTest('Kafka server not present.')
 
-    @mock.patch.object(Common, "get_auth_token", mock.Mock())
-    @mock.patch.object(Common, "get_endpoint", mock.Mock())
-    @mock.patch.object(metrics.Metrics, "configure_metric")
-    @mock.patch.object(prod, "create_metrics_resp")
-    @mock.patch.object(response.OpenStack_Response, "generate_response")
-    def test_create_metric_req(self, resp, create_resp, config_metric):
+    @mock.patch.object(Common, "perform_request")
+    @mock.patch.object(AuthManager, 'get_credentials')
+    @mock.patch.object(metric_handler.OpenstackMetricHandler, "configure_metric")
+    @mock.patch.object(response.OpenStackResponseBuilder, "generate_response")
+    def test_create_metric_req(self, resp, config_metric, get_creds, perf_req):
         """Test Gnocchi create metric request message from producer."""
         # Set-up message, producer and consumer for tests
-        payload = {"vim_type": "OpenSTACK",
-                   "vim_uuid": "1",
-                   "correlation_id": 123,
-                   "metric_create":
-                       {"metric_name": "cpu_utilization",
-                        "resource_uuid": "resource_id"}}
+        payload = {"metric_create_request": {"correlation_id": 123,
+                                             "metric_name": "cpu_utilization",
+                                             "resource_uuid": "resource_id"}}
+
+        get_creds.return_value = mock_creds
+        perf_req.return_value = type('obj', (object,), {'text': json.dumps({"metrics": {"cpu_util": "1"}})})
+        resp.return_value = ''
 
         self.producer.send('metric_request', key="create_metric_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":
+            if message.key == "create_metric_request":
                 # A valid metric is created
-                config_metric.return_value = "metric_id", "resource_id", True
-                self.metric_req.metric_calls(message)
+                config_metric.return_value = "metric_id", "resource_id"
+                self.metric_req.handle_request(message, 'test_id')
 
                 # A response message is generated and sent by MON's producer
                 resp.assert_called_with(
                     'create_metric_response', status=True, cor_id=123,
-                    metric_id="metric_id", r_id="resource_id")
-                create_resp.assert_called_with(
-                    'create_metric_response', resp.return_value)
+                    metric_id="metric_id", resource_id="resource_id")
 
                 return
         self.fail("No message received in consumer")
 
-    @mock.patch.object(Common, "get_auth_token", mock.Mock())
-    @mock.patch.object(Common, "get_endpoint", mock.Mock())
-    @mock.patch.object(metrics.Metrics, "delete_metric")
-    @mock.patch.object(prod, "delete_metric_response")
-    @mock.patch.object(response.OpenStack_Response, "generate_response")
-    def test_delete_metric_req(self, resp, del_resp, del_metric):
+    @mock.patch.object(Common, "perform_request")
+    @mock.patch.object(AuthManager, 'get_credentials')
+    @mock.patch.object(metric_handler.OpenstackMetricHandler, "delete_metric")
+    @mock.patch.object(response.OpenStackResponseBuilder, "generate_response")
+    def test_delete_metric_req(self, resp, del_metric, get_creds, perf_req):
         """Test Gnocchi delete metric request message from producer."""
         # Set-up message, producer and consumer for tests
         payload = {"vim_type": "OpenSTACK",
@@ -115,6 +116,10 @@ class MetricIntegrationTest(unittest.TestCase):
                    "metric_name": "cpu_utilization",
                    "resource_uuid": "resource_id"}
 
+        get_creds.return_value = mock_creds
+        perf_req.return_value = type('obj', (object,), {'text': json.dumps({"metrics": {"cpu_util": "1"}})})
+        resp.return_value = ''
+
         self.producer.send('metric_request', key="delete_metric_request",
                            value=json.dumps(payload))
 
@@ -122,25 +127,22 @@ class MetricIntegrationTest(unittest.TestCase):
             if message.key == "delete_metric_request":
                 # Metric has been deleted
                 del_metric.return_value = True
-                self.metric_req.metric_calls(message)
+                self.metric_req.handle_request(message, 'test_id')
 
                 # A response message is generated and sent by MON's producer
                 resp.assert_called_with(
-                    'delete_metric_response', m_id=None,
-                    m_name="cpu_utilization", status=True, r_id="resource_id",
+                    'delete_metric_response', metric_id='1',
+                    metric_name="cpu_utilization", status=True, resource_id="resource_id",
                     cor_id=123)
-                del_resp.assert_called_with(
-                    'delete_metric_response', resp.return_value)
 
                 return
         self.fail("No message received in consumer")
 
-    @mock.patch.object(Common, "get_auth_token", mock.Mock())
-    @mock.patch.object(Common, "get_endpoint", mock.Mock())
-    @mock.patch.object(metrics.Metrics, "read_metric_data")
-    @mock.patch.object(prod, "read_metric_data_response")
-    @mock.patch.object(response.OpenStack_Response, "generate_response")
-    def test_read_metric_data_req(self, resp, read_resp, read_data):
+    @mock.patch.object(Common, "perform_request")
+    @mock.patch.object(AuthManager, 'get_credentials')
+    @mock.patch.object(metric_handler.OpenstackMetricHandler, "read_metric_data")
+    @mock.patch.object(response.OpenStackResponseBuilder, "generate_response")
+    def test_read_metric_data_req(self, resp, read_data, get_creds, perf_req):
         """Test Gnocchi read metric data request message from producer."""
         # Set-up message, producer and consumer for tests
         payload = {"vim_type": "OpenSTACK",
@@ -149,6 +151,10 @@ class MetricIntegrationTest(unittest.TestCase):
                    "metric_name": "cpu_utilization",
                    "resource_uuid": "resource_id"}
 
+        get_creds.return_value = mock_creds
+        perf_req.return_value = type('obj', (object,), {'text': json.dumps({"metrics": {"cpu_util": "1"}})})
+        resp.return_value = ''
+
         self.producer.send('metric_request', key="read_metric_data_request",
                            value=json.dumps(payload))
 
@@ -157,25 +163,22 @@ class MetricIntegrationTest(unittest.TestCase):
             if message.key == "read_metric_data_request":
                 # Mock empty lists generated by the request message
                 read_data.return_value = [], []
-                self.metric_req.metric_calls(message)
+                self.metric_req.handle_request(message, 'test_id')
 
                 # A response message is generated and sent by MON's producer
                 resp.assert_called_with(
-                    'read_metric_data_response', m_id=None,
-                    m_name="cpu_utilization", r_id="resource_id", cor_id=123, times=[],
-                    metrics=[])
-                read_resp.assert_called_with(
-                    'read_metric_data_response', resp.return_value)
+                    'read_metric_data_response', metric_id='1',
+                    metric_name="cpu_utilization", resource_id="resource_id", cor_id=123, times=[],
+                    metrics=[], status=True)
 
                 return
         self.fail("No message received in consumer")
 
-    @mock.patch.object(Common, "get_auth_token", mock.Mock())
-    @mock.patch.object(Common, "get_endpoint", mock.Mock())
-    @mock.patch.object(metrics.Metrics, "list_metrics")
-    @mock.patch.object(prod, "list_metric_response")
-    @mock.patch.object(response.OpenStack_Response, "generate_response")
-    def test_list_metrics_req(self, resp, list_resp, list_metrics):
+    @mock.patch.object(Common, "perform_request")
+    @mock.patch.object(AuthManager, 'get_credentials')
+    @mock.patch.object(metric_handler.OpenstackMetricHandler, "list_metrics")
+    @mock.patch.object(response.OpenStackResponseBuilder, "generate_response")
+    def test_list_metrics_req(self, resp, list_metrics, get_creds, perf_req):
         """Test Gnocchi list metrics request message from producer."""
         # Set-up message, producer and consumer for tests
         payload = {"vim_type": "OpenSTACK",
@@ -183,6 +186,10 @@ class MetricIntegrationTest(unittest.TestCase):
                    "metrics_list_request":
                        {"correlation_id": 123, }}
 
+        get_creds.return_value = mock_creds
+        perf_req.return_value = type('obj', (object,), {'text': json.dumps({"metrics": {"cpu_util": "1"}})})
+        resp.return_value = ''
+
         self.producer.send('metric_request', key="list_metric_request",
                            value=json.dumps(payload))
 
@@ -191,31 +198,29 @@ class MetricIntegrationTest(unittest.TestCase):
             if message.key == "list_metric_request":
                 # Mock an empty list generated by the request
                 list_metrics.return_value = []
-                self.metric_req.metric_calls(message)
+                self.metric_req.handle_request(message, 'test_id')
 
                 # A response message is generated and sent by MON's producer
                 resp.assert_called_with(
-                    'list_metric_response', m_list=[], cor_id=123)
-                list_resp.assert_called_with(
-                    'list_metric_response', resp.return_value)
+                    'list_metric_response', metric_list=[], cor_id=123, status=True)
 
                 return
         self.fail("No message received in consumer")
 
-    @mock.patch.object(Common, "get_auth_token", mock.Mock())
-    @mock.patch.object(Common, "get_endpoint", mock.Mock())
-    @mock.patch.object(metrics.Metrics, "get_metric_id")
-    @mock.patch.object(prod, "update_metric_response")
-    @mock.patch.object(response.OpenStack_Response, "generate_response")
-    def test_update_metrics_req(self, resp, update_resp, get_id):
+    @mock.patch.object(Common, "perform_request")
+    @mock.patch.object(AuthManager, 'get_credentials')
+    @mock.patch.object(metric_handler.OpenstackMetricHandler, "get_metric_id")
+    @mock.patch.object(response.OpenStackResponseBuilder, "generate_response")
+    def test_update_metrics_req(self, resp, get_id, get_creds, perf_req):
         """Test Gnocchi update metric request message from KafkaProducer."""
         # Set-up message, producer and consumer for tests
-        payload = {"vim_type": "OpenSTACK",
-                   "vim_uuid": "test_id",
-                   "correlation_id": 123,
-                   "metric_create":
-                       {"metric_name": "my_metric",
-                        "resource_uuid": "resource_id", }}
+        payload = {"metric_update_request": {"metric_name": "my_metric",
+                                             "correlation_id": 123,
+                                             "resource_uuid": "resource_id", }}
+
+        get_creds.return_value = mock_creds
+        perf_req.return_value = type('obj', (object,), {'text': json.dumps({"metrics": {"cpu_util": "1"}})})
+        resp.return_value = ''
 
         self.producer.send('metric_request', key="update_metric_request",
                            value=json.dumps(payload))
@@ -225,15 +230,13 @@ class MetricIntegrationTest(unittest.TestCase):
             if message.key == "update_metric_request":
                 # Gnocchi doesn't support metric updates
                 get_id.return_value = "metric_id"
-                self.metric_req.metric_calls(message)
+                self.metric_req.handle_request(message, 'test_id')
 
                 # Response message is generated and sent via MON's producer
                 # No metric update has taken place
                 resp.assert_called_with(
                     'update_metric_response', status=False, cor_id=123,
-                    r_id="resource_id", m_id="metric_id")
-                update_resp.assert_called_with(
-                    'update_metric_response', resp.return_value)
+                    resource_id="resource_id", metric_id="metric_id")
 
                 return
         self.fail("No message received in consumer")