Implements multivim support in the OpenStack plugin

Fixes bugs in OpenStack plugin and respective tests
Add table to database to keep track of relations between alarms and vim
credentials

Signed-off-by: Benjamin Diaz <bdiaz@whitestack.com>
diff --git a/osm_mon/test/OpenStack/test_alarm_req.py b/osm_mon/test/OpenStack/test_alarm_req.py
index 2303506..023b31a 100644
--- a/osm_mon/test/OpenStack/test_alarm_req.py
+++ b/osm_mon/test/OpenStack/test_alarm_req.py
@@ -4,14 +4,14 @@
 # This file is part of OSM Monitoring module
 # All Rights Reserved to Intel Corporation
 
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# Licensed under the Apache License, Version 2.0 (the 'License'); you may
 # not use this file except in compliance with the License. You may obtain
 # a copy of the License at
 
 #         http://www.apache.org/licenses/LICENSE-2.0
 
 # Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# distributed under the License is distributed on an 'AS IS' BASIS, WITHOUT
 # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 # License for the specific language governing permissions and limitations
 # under the License.
@@ -40,9 +40,9 @@
 
     def __init__(self):
         """Initialize a mocked message instance."""
-        self.topic = "alarm_request"
+        self.topic = 'alarm_request'
         self.key = None
-        self.value = json.dumps({"mock_value": "mock_details"})
+        self.value = json.dumps({'vim_uuid': 'test_id', 'mock_value': 'mock_details'})
 
 
 class TestAlarmKeys(unittest.TestCase):
@@ -54,74 +54,75 @@
         self.alarming = alarm_req.Alarming()
         self.alarming.common = Common()
 
-    @mock.patch.object(Common, "_authenticate")
-    def test_alarming_env_authentication(self, auth):
+    @mock.patch.object(Common, 'get_endpoint')
+    @mock.patch.object(Common, 'get_auth_token')
+    def test_alarming_authentication(self, get_token, get_endpoint):
         """Test getting an auth_token and endpoint for alarm requests."""
-        # if auth_token is None environment variables are used to authenticare
+        # if auth_token is None environment variables are used to authenticate
         message = Message()
 
-        self.alarming.alarming(message, self.alarming.common, None)
+        self.alarming.alarming(message)
 
-        auth.assert_called_with()
+        get_token.assert_called_with('test_id')
+        get_endpoint.assert_any_call('alarming', 'test_id')
 
-    @mock.patch.object(Common, "_authenticate")
-    def test_acccess_cred_auth(self, auth):
-        """Test receiving auth_token from access creds."""
-        message = Message()
-
-        self.alarming.alarming(message, self.alarming.common, "my_auth_token")
-
-        auth.assert_not_called
-        self.assertEqual(self.alarming.auth_token, "my_auth_token")
-
-    @mock.patch.object(alarm_req.Alarming, "delete_alarm")
+    @mock.patch.object(Common, 'get_endpoint', mock.Mock())
+    @mock.patch.object(Common, 'get_auth_token', mock.Mock())
+    @mock.patch.object(alarm_req.Alarming, 'delete_alarm')
     def test_delete_alarm_key(self, del_alarm):
         """Test the functionality for a create alarm request."""
         # Mock a message value and key
         message = Message()
-        message.key = "delete_alarm_request"
-        message.value = json.dumps({"alarm_delete_request":
-                                   {"alarm_uuid": "my_alarm_id"}})
+        message.key = 'delete_alarm_request'
+        message.value = json.dumps({'vim_uuid': 'test_id',
+                                    'alarm_delete_request':
+                                        {'alarm_uuid': 'my_alarm_id'}})
 
         # Call the alarming functionality and check delete request
-        self.alarming.alarming(message, self.alarming.common, "my_auth_token")
+        self.alarming.alarming(message)
+        del_alarm.assert_called_with(mock.ANY, mock.ANY, 'my_alarm_id')
 
-        del_alarm.assert_called_with(mock.ANY, mock.ANY, "my_alarm_id")
-
-    @mock.patch.object(alarm_req.Alarming, "list_alarms")
+    @mock.patch.object(Common, 'get_endpoint', mock.Mock())
+    @mock.patch.object(Common, 'get_auth_token', mock.Mock())
+    @mock.patch.object(alarm_req.Alarming, 'list_alarms')
     def test_list_alarm_key(self, list_alarm):
         """Test the functionality for a list alarm request."""
         # Mock a message with list alarm key and value
         message = Message()
-        message.key = "list_alarm_request"
-        message.value = json.dumps({"alarm_list_request": "my_alarm_details"})
+        message.key = 'list_alarm_request'
+        message.value = json.dumps({'vim_uuid': 'test_id', 'alarm_list_request': 'my_alarm_details'})
 
         # Call the alarming functionality and check list functionality
-        self.alarming.alarming(message, self.alarming.common, "my_auth_token")
-        list_alarm.assert_called_with(mock.ANY, mock.ANY, "my_alarm_details")
+        self.alarming.alarming(message)
+        list_alarm.assert_called_with(mock.ANY, mock.ANY, 'my_alarm_details')
 
-    @mock.patch.object(alarm_req.Alarming, "update_alarm_state")
+    @mock.patch.object(Common, 'get_auth_token', mock.Mock())
+    @mock.patch.object(Common, 'get_endpoint', mock.Mock())
+    @mock.patch.object(alarm_req.Alarming, 'update_alarm_state')
     def test_ack_alarm_key(self, ack_alarm):
         """Test the functionality for an acknowledge alarm request."""
         # Mock a message with acknowledge alarm key and value
         message = Message()
-        message.key = "acknowledge_alarm"
-        message.value = json.dumps({"ack_details":
-                                    {"alarm_uuid": "my_alarm_id"}})
+        message.key = 'acknowledge_alarm'
+        message.value = json.dumps({'vim_uuid': 'test_id',
+                                    'ack_details':
+                                        {'alarm_uuid': 'my_alarm_id'}})
 
         # Call alarming functionality and check acknowledge functionality
-        self.alarming.alarming(message, self.alarming.common, "my_auth_token")
-        ack_alarm.assert_called_with(mock.ANY, mock.ANY, "my_alarm_id")
+        self.alarming.alarming(message)
+        ack_alarm.assert_called_with(mock.ANY, mock.ANY, 'my_alarm_id')
 
-    @mock.patch.object(alarm_req.Alarming, "configure_alarm")
+    @mock.patch.object(Common, 'get_auth_token', mock.Mock())
+    @mock.patch.object(Common, 'get_endpoint', mock.Mock())
+    @mock.patch.object(alarm_req.Alarming, 'configure_alarm')
     def test_config_alarm_key(self, config_alarm):
         """Test the functionality for a create alarm request."""
         # Mock a message with config alarm key and value
         message = Message()
-        message.key = "create_alarm_request"
-        message.value = json.dumps({"alarm_create_request": "alarm_details"})
+        message.key = 'create_alarm_request'
+        message.value = json.dumps({'vim_uuid': 'test_id', 'alarm_create_request': 'alarm_details'})
 
         # Call alarming functionality and check config alarm call
-        config_alarm.return_value = "my_alarm_id", True
-        self.alarming.alarming(message, self.alarming.common, "my_auth_token")
-        config_alarm.assert_called_with(mock.ANY, mock.ANY, "alarm_details")
+        config_alarm.return_value = 'my_alarm_id', True
+        self.alarming.alarming(message)
+        config_alarm.assert_called_with(mock.ANY, mock.ANY, mock.ANY, 'alarm_details')
diff --git a/osm_mon/test/OpenStack/test_alarming.py b/osm_mon/test/OpenStack/test_alarming.py
index effd920..598ef2b 100644
--- a/osm_mon/test/OpenStack/test_alarming.py
+++ b/osm_mon/test/OpenStack/test_alarming.py
@@ -22,20 +22,20 @@
 """Tests for all alarm request message keys."""
 
 import json
-
 import logging
-
 import unittest
 
 import mock
 
 from osm_mon.plugins.OpenStack.Aodh import alarming as alarm_req
 from osm_mon.plugins.OpenStack.common import Common
+from osm_mon.plugins.OpenStack.settings import Config
 
 log = logging.getLogger(__name__)
 
 auth_token = mock.ANY
-endpoint = mock.ANY
+alarm_endpoint = "alarm_endpoint"
+metric_endpoint = "metric_endpoint"
 
 
 class Response(object):
@@ -56,19 +56,18 @@
         """Setup for tests."""
         super(TestAlarming, self).setUp()
         self.alarming = alarm_req.Alarming()
-        self.alarming.common = Common()
 
     @mock.patch.object(alarm_req.Alarming, "check_payload")
     @mock.patch.object(alarm_req.Alarming, "check_for_metric")
-    @mock.patch.object(Common, "_perform_request")
+    @mock.patch.object(Common, "perform_request")
     def test_config_invalid_alarm_req(self, perf_req, check_metric, check_pay):
         """Test configure an invalid alarm request."""
         # Configuring with invalid alarm name results in failure
         values = {"alarm_name": "my_alarm",
                   "metric_name": "my_metric",
                   "resource_uuid": "my_r_id"}
-        self.alarming.configure_alarm(endpoint, auth_token, values)
-        perf_req.assert_not_called
+        self.alarming.configure_alarm(alarm_endpoint, metric_endpoint, auth_token, values)
+        perf_req.assert_not_called()
         perf_req.reset_mock()
 
         # Correct alarm_name will check for metric in Gnocchi
@@ -79,12 +78,12 @@
 
         check_metric.return_value = None
 
-        self.alarming.configure_alarm(endpoint, auth_token, values)
-        perf_req.assert_not_called
+        self.alarming.configure_alarm(alarm_endpoint, metric_endpoint, auth_token, values)
+        perf_req.assert_not_called()
 
     @mock.patch.object(alarm_req.Alarming, "check_payload")
     @mock.patch.object(alarm_req.Alarming, "check_for_metric")
-    @mock.patch.object(Common, "_perform_request")
+    @mock.patch.object(Common, "perform_request")
     def test_config_valid_alarm_req(self, perf_req, check_metric, check_pay):
         """Test config a valid alarm."""
         # Correct alarm_name will check for metric in Gnocchi
@@ -96,70 +95,70 @@
         check_metric.return_value = "my_metric_id"
         check_pay.return_value = "my_payload"
 
-        self.alarming.configure_alarm(endpoint, auth_token, values)
+        self.alarming.configure_alarm(alarm_endpoint, metric_endpoint, auth_token, values)
         perf_req.assert_called_with(
-            "<ANY>/v2/alarms/", auth_token,
+            "alarm_endpoint/v2/alarms/", auth_token,
             req_type="post", payload="my_payload")
 
-    @mock.patch.object(Common, "_perform_request")
+    @mock.patch.object(Common, "perform_request")
     def test_delete_alarm_req(self, perf_req):
         """Test delete alarm request."""
-        self.alarming.delete_alarm(endpoint, auth_token, "my_alarm_id")
+        self.alarming.delete_alarm(alarm_endpoint, auth_token, "my_alarm_id")
 
         perf_req.assert_called_with(
-            "<ANY>/v2/alarms/my_alarm_id", auth_token, req_type="delete")
+            "alarm_endpoint/v2/alarms/my_alarm_id", auth_token, req_type="delete")
 
-    @mock.patch.object(Common, "_perform_request")
+    @mock.patch.object(Common, "perform_request")
     def test_invalid_list_alarm_req(self, perf_req):
         """Test invalid list alarm_req."""
         # Request will not be performed with out a resoure_id
         list_details = {"mock_details": "invalid_details"}
-        self.alarming.list_alarms(endpoint, auth_token, list_details)
+        self.alarming.list_alarms(alarm_endpoint, auth_token, list_details)
 
-        perf_req.assert_not_called
+        perf_req.assert_not_called()
 
-    @mock.patch.object(Common, "_perform_request")
+    @mock.patch.object(Common, "perform_request")
     def test_valid_list_alarm_req(self, perf_req):
         """Test valid list alarm request."""
         # Minimum requirement for an alarm list is resource_id
         list_details = {"resource_uuid": "mock_r_id"}
-        self.alarming.list_alarms(endpoint, auth_token, list_details)
+        self.alarming.list_alarms(alarm_endpoint, auth_token, list_details)
 
         perf_req.assert_called_with(
-            "<ANY>/v2/alarms/", auth_token, req_type="get")
+            "alarm_endpoint/v2/alarms/", auth_token, req_type="get")
         perf_req.reset_mock()
 
         # Check list with alarm_name defined
         list_details = {"resource_uuid": "mock_r_id",
                         "alarm_name": "my_alarm",
                         "severity": "critical"}
-        self.alarming.list_alarms(endpoint, auth_token, list_details)
+        self.alarming.list_alarms(alarm_endpoint, auth_token, list_details)
 
         perf_req.assert_called_with(
-            "<ANY>/v2/alarms/", auth_token, req_type="get")
+            "alarm_endpoint/v2/alarms/", auth_token, req_type="get")
 
-    @mock.patch.object(Common, "_perform_request")
+    @mock.patch.object(Common, "perform_request")
     def test_ack_alarm_req(self, perf_req):
         """Test update alarm state for acknowledge alarm request."""
-        self.alarming.update_alarm_state(endpoint, auth_token, "my_alarm_id")
+        self.alarming.update_alarm_state(alarm_endpoint, auth_token, "my_alarm_id")
 
         perf_req.assert_called_with(
-            "<ANY>/v2/alarms/my_alarm_id/state", auth_token, req_type="put",
+            "alarm_endpoint/v2/alarms/my_alarm_id/state", auth_token, req_type="put",
             payload=json.dumps("ok"))
 
     @mock.patch.object(alarm_req.Alarming, "check_payload")
-    @mock.patch.object(Common, "_perform_request")
+    @mock.patch.object(Common, "perform_request")
     def test_update_alarm_invalid(self, perf_req, check_pay):
         """Test update alarm with invalid get response."""
         values = {"alarm_uuid": "my_alarm_id"}
 
-        self.alarming.update_alarm(endpoint, auth_token, values)
+        self.alarming.update_alarm(alarm_endpoint, auth_token, values)
 
         perf_req.assert_called_with(mock.ANY, auth_token, req_type="get")
-        check_pay.assert_not_called
+        check_pay.assert_not_called()
 
     @mock.patch.object(alarm_req.Alarming, "check_payload")
-    @mock.patch.object(Common, "_perform_request")
+    @mock.patch.object(Common, "perform_request")
     def test_update_alarm_invalid_payload(self, perf_req, check_pay):
         """Test update alarm with invalid payload."""
         resp = Response({"name": "my_alarm",
@@ -171,35 +170,36 @@
         check_pay.return_value = None
         values = {"alarm_uuid": "my_alarm_id"}
 
-        self.alarming.update_alarm(endpoint, auth_token, values)
+        self.alarming.update_alarm(alarm_endpoint, auth_token, values)
 
         perf_req.assert_called_with(mock.ANY, auth_token, req_type="get")
         self.assertEqual(perf_req.call_count, 1)
 
     @mock.patch.object(alarm_req.Alarming, "check_payload")
-    @mock.patch.object(Common, "_perform_request")
+    @mock.patch.object(Common, "perform_request")
     def test_update_alarm_valid(self, perf_req, check_pay):
         """Test valid update alarm request."""
         resp = Response({"name": "my_alarm",
                          "state": "alarm",
                          "gnocchi_resources_threshold_rule":
                          {"resource_id": "my_resource_id",
-                          "metric": "my_metric"}})
+                          "metric": "disk.write.requests"}})
         perf_req.return_value = resp
         values = {"alarm_uuid": "my_alarm_id"}
 
-        self.alarming.update_alarm(endpoint, auth_token, values)
+        self.alarming.update_alarm(alarm_endpoint, auth_token, values)
 
-        check_pay.assert_called_with(values, "my_metric", "my_resource_id",
+        check_pay.assert_called_with(values, "disk_write_ops", "my_resource_id",
                                      "my_alarm", alarm_state="alarm")
 
         self.assertEqual(perf_req.call_count, 2)
         # Second call is the update request
         perf_req.assert_called_with(
-            '<ANY>/v2/alarms/my_alarm_id', auth_token,
+            'alarm_endpoint/v2/alarms/my_alarm_id', auth_token,
             req_type="put", payload=check_pay.return_value)
 
-    def test_check_valid_payload(self):
+    @mock.patch.object(Config, "instance")
+    def test_check_valid_payload(self, cfg):
         """Test the check payload function for a valid payload."""
         values = {"severity": "warning",
                   "statistic": "COUNT",
@@ -207,6 +207,7 @@
                   "operation": "GT",
                   "granularity": 300,
                   "resource_type": "generic"}
+        cfg.return_value.OS_NOTIFIER_URI = "http://localhost:8662"
         payload = self.alarming.check_payload(
             values, "disk_write_ops", "r_id", "alarm_name")
 
@@ -214,7 +215,7 @@
             json.loads(payload), {"name": "alarm_name",
                                   "gnocchi_resources_threshold_rule":
                                   {"resource_id": "r_id",
-                                   "metric": "disk.disk_ops",
+                                   "metric": "disk.write.requests",
                                    "comparison_operator": "gt",
                                    "aggregation_method": "count",
                                    "threshold": 12,
@@ -225,7 +226,9 @@
                                   "type": "gnocchi_resources_threshold",
                                   "alarm_actions": ["http://localhost:8662"]})
 
-    def test_check_valid_state_payload(self):
+    @mock.patch.object(Config, "instance")
+    @mock.patch.object(Common, "perform_request")
+    def test_check_valid_state_payload(self, perform_req, cfg):
         """Test the check payload function for a valid payload with state."""
         values = {"severity": "warning",
                   "statistic": "COUNT",
@@ -233,6 +236,7 @@
                   "operation": "GT",
                   "granularity": 300,
                   "resource_type": "generic"}
+        cfg.return_value.OS_NOTIFIER_URI = "http://localhost:8662"
         payload = self.alarming.check_payload(
             values, "disk_write_ops", "r_id", "alarm_name", alarm_state="alarm")
 
@@ -240,7 +244,7 @@
             json.loads(payload), {"name": "alarm_name",
                                   "gnocchi_resources_threshold_rule":
                                   {"resource_id": "r_id",
-                                   "metric": "disk.disk_ops",
+                                   "metric": "disk.write.requests",
                                    "comparison_operator": "gt",
                                    "aggregation_method": "count",
                                    "threshold": 12,
@@ -259,21 +263,21 @@
 
         self.assertEqual(payload, None)
 
-    @mock.patch.object(Common, "_perform_request")
+    @mock.patch.object(Common, "perform_request")
     def test_get_alarm_state(self, perf_req):
         """Test the get alarm state function."""
-        self.alarming.get_alarm_state(endpoint, auth_token, "alarm_id")
+        self.alarming.get_alarm_state(alarm_endpoint, auth_token, "alarm_id")
 
         perf_req.assert_called_with(
-            "<ANY>/v2/alarms/alarm_id/state", auth_token, req_type="get")
+            "alarm_endpoint/v2/alarms/alarm_id/state", auth_token, req_type="get")
 
     @mock.patch.object(Common, "get_endpoint")
-    @mock.patch.object(Common, "_perform_request")
+    @mock.patch.object(Common, "perform_request")
     def test_check_for_metric(self, perf_req, get_endpoint):
         """Test the check for metric function."""
         get_endpoint.return_value = "gnocchi_endpoint"
 
-        self.alarming.check_for_metric(auth_token, "metric_name", "r_id")
+        self.alarming.check_for_metric(auth_token, metric_endpoint, "metric_name", "r_id")
 
         perf_req.assert_called_with(
-            "gnocchi_endpoint/v1/metric?sort=name:asc", auth_token, req_type="get")
+            "metric_endpoint/v1/metric?sort=name:asc", auth_token, req_type="get")
diff --git a/osm_mon/test/OpenStack/test_common.py b/osm_mon/test/OpenStack/test_common.py
index 983128b..9853d15 100644
--- a/osm_mon/test/OpenStack/test_common.py
+++ b/osm_mon/test/OpenStack/test_common.py
@@ -31,6 +31,8 @@
 
 import mock
 
+from osm_mon.core.auth import AuthManager
+from osm_mon.core.database import VimCredentials
 from osm_mon.plugins.OpenStack.common import Common
 from osm_mon.plugins.OpenStack.settings import Config
 
@@ -50,10 +52,10 @@
         self.value = json.dumps({"mock_value": "mock_details",
                                  "vim_type": "OPENSTACK",
                                  "access_config":
-                                 {"openstack_site": "my_site",
-                                  "user": "my_user",
-                                  "password": "my_password",
-                                  "vim_tenant_name": "my_tenant"}})
+                                     {"openstack_site": "my_site",
+                                      "user": "my_user",
+                                      "password": "my_password",
+                                      "vim_tenant_name": "my_tenant"}})
 
 
 class TestCommon(unittest.TestCase):
@@ -63,58 +65,28 @@
         """Test Setup."""
         super(TestCommon, self).setUp()
         self.common = Common()
+        self.creds = VimCredentials()
+        self.creds.id = 'test_id'
+        self.creds.user = 'user'
+        self.creds.url = 'url'
+        self.creds.password = 'password'
+        self.creds.tenant_name = 'tenant_name'
 
-    @mock.patch.object(client, "Client")
-    def test_authenticate_exists(self, key_client):
-        """Testing if an authentication token already exists."""
-        # If the auth_token is already generated a new one will not be creates
-        self.common._auth_token = "my_auth_token"
-        token = self.common._authenticate()
-
-        self.assertEqual(token, "my_auth_token")
-
+    @mock.patch.object(AuthManager, "get_credentials")
     @mock.patch.object(Config, "instance")
     @mock.patch.object(client, "Client")
-    def test_authenticate_none(self, key_client, cfg):
+    def test_get_auth_token(self, key_client, cfg, get_creds):
         """Test generating a new authentication token."""
-        # If auth_token doesn't exist one will try to be created with keystone
-        # With the configuration values from the environment
-        self.common._auth_token = None
-        config = cfg.return_value
-        url = config.OS_AUTH_URL
-        user = config.OS_USERNAME
-        pword = config.OS_PASSWORD
-        tenant = config.OS_TENANT_NAME
-
-        self.common._authenticate()
-
-        key_client.assert_called_with(auth_url=url,
-                                      username=user,
-                                      password=pword,
-                                      tenant_name=tenant)
-        key_client.reset_mock()
-
-    @mock.patch.object(client, "Client")
-    def test_authenticate_access_cred(self, key_client):
-        """Test generating an auth_token using access_credentials from SO."""
-        # Mock valid message from SO
-        self.common._auth_token = None
-        message = Message()
-
-        self.common._authenticate(message=message)
-
-        # The class variables are set for each consifugration
-        self.assertEqual(self.common.openstack_url, "my_site")
-        self.assertEqual(self.common.user, "my_user")
-        self.assertEqual(self.common.password, "my_password")
-        self.assertEqual(self.common.tenant, "my_tenant")
-        key_client.assert_called
+        get_creds.return_value = self.creds
+        Common.get_auth_token('test_id')
+        get_creds.assert_called_with('test_id')
+        key_client.assert_called_with(auth_url='url', password='password', tenant_name='tenant_name', username='user')
 
     @mock.patch.object(requests, 'post')
     def test_post_req(self, post):
         """Testing a post request."""
-        self.common._perform_request("url", "auth_token", req_type="post",
-                                     payload="payload")
+        Common.perform_request("url", "auth_token", req_type="post",
+                                    payload="payload")
 
         post.assert_called_with("url", data="payload", headers=mock.ANY,
                                 timeout=mock.ANY)
@@ -123,15 +95,15 @@
     def test_get_req(self, get):
         """Testing a get request."""
         # Run the defualt get request without any parameters
-        self.common._perform_request("url", "auth_token", req_type="get")
+        Common.perform_request("url", "auth_token", req_type="get")
 
         get.assert_called_with("url", params=None, headers=mock.ANY,
                                timeout=mock.ANY)
 
         # Test with some parameters specified
         get.reset_mock()
-        self.common._perform_request("url", "auth_token", req_type="get",
-                                     params="some parameters")
+        Common.perform_request("url", "auth_token", req_type="get",
+                                    params="some parameters")
 
         get.assert_called_with("url", params="some parameters",
                                headers=mock.ANY, timeout=mock.ANY)
@@ -139,14 +111,14 @@
     @mock.patch.object(requests, 'put')
     def test_put_req(self, put):
         """Testing a put request."""
-        self.common._perform_request("url", "auth_token", req_type="put",
-                                     payload="payload")
+        Common.perform_request("url", "auth_token", req_type="put",
+                                    payload="payload")
         put.assert_called_with("url", data="payload", headers=mock.ANY,
                                timeout=mock.ANY)
 
     @mock.patch.object(requests, 'delete')
     def test_delete_req(self, delete):
         """Testing a delete request."""
-        self.common._perform_request("url", "auth_token", req_type="delete")
+        Common.perform_request("url", "auth_token", req_type="delete")
 
         delete.assert_called_with("url", headers=mock.ANY, timeout=mock.ANY)
diff --git a/osm_mon/test/OpenStack/test_metric_calls.py b/osm_mon/test/OpenStack/test_metric_calls.py
index d209f61..b77df5e 100644
--- a/osm_mon/test/OpenStack/test_metric_calls.py
+++ b/osm_mon/test/OpenStack/test_metric_calls.py
@@ -56,6 +56,13 @@
         self.status_code = "STATUS_CODE"
 
 
+def perform_request_side_effect(*args, **kwargs):
+    resp = Response()
+    if 'marker' in args[0]:
+        resp.text = json.dumps([])
+    return resp
+
+
 class TestMetricCalls(unittest.TestCase):
     """Integration test for metric request keys."""
 
@@ -67,7 +74,7 @@
 
     @mock.patch.object(metric_req.Metrics, "get_metric_name")
     @mock.patch.object(metric_req.Metrics, "get_metric_id")
-    @mock.patch.object(Common, "_perform_request")
+    @mock.patch.object(Common, "perform_request")
     def test_invalid_config_metric_req(
             self, perf_req, get_metric, get_metric_name):
         """Test the configure metric function, for an invalid metric."""
@@ -77,7 +84,7 @@
         m_id, r_id, status = self.metrics.configure_metric(
             endpoint, auth_token, values)
 
-        perf_req.assert_not_called
+        perf_req.assert_not_called()
         self.assertEqual(m_id, None)
         self.assertEqual(r_id, None)
         self.assertEqual(status, False)
@@ -89,7 +96,7 @@
         m_id, r_id, status = self.metrics.configure_metric(
             endpoint, auth_token, values)
 
-        perf_req.assert_not_called
+        perf_req.assert_not_called()
         self.assertEqual(m_id, None)
         self.assertEqual(r_id, "r_id")
         self.assertEqual(status, False)
@@ -102,14 +109,14 @@
         m_id, r_id, status = self.metrics.configure_metric(
             endpoint, auth_token, values)
 
-        perf_req.assert_not_called
+        perf_req.assert_not_called()
         self.assertEqual(m_id, "metric_id")
         self.assertEqual(r_id, "r_id")
         self.assertEqual(status, False)
 
     @mock.patch.object(metric_req.Metrics, "get_metric_name")
     @mock.patch.object(metric_req.Metrics, "get_metric_id")
-    @mock.patch.object(Common, "_perform_request")
+    @mock.patch.object(Common, "perform_request")
     def test_valid_config_metric_req(
             self, perf_req, get_metric, get_metric_name):
         """Test the configure metric function, for a valid metric."""
@@ -120,9 +127,9 @@
         get_metric.return_value = None
         payload = {"id": "r_id",
                    "metrics": {"metric_name":
-                               {"archive_policy_name": "high",
-                                "name": "metric_name",
-                                "unit": "units"}}}
+                                   {"archive_policy_name": "high",
+                                    "name": "metric_name",
+                                    "unit": "units"}}}
 
         self.metrics.configure_metric(endpoint, auth_token, values)
 
@@ -130,7 +137,7 @@
             "<ANY>/v1/resource/generic", auth_token, req_type="post",
             payload=json.dumps(payload))
 
-    @mock.patch.object(Common, "_perform_request")
+    @mock.patch.object(Common, "perform_request")
     def test_delete_metric_req(self, perf_req):
         """Test the delete metric function."""
         self.metrics.delete_metric(endpoint, auth_token, "metric_id")
@@ -138,7 +145,7 @@
         perf_req.assert_called_with(
             "<ANY>/v1/metric/metric_id", auth_token, req_type="delete")
 
-    @mock.patch.object(Common, "_perform_request")
+    @mock.patch.object(Common, "perform_request")
     def test_delete_metric_invalid_status(self, perf_req):
         """Test invalid response for delete request."""
         perf_req.return_value = "404"
@@ -148,67 +155,64 @@
         self.assertEqual(status, False)
 
     @mock.patch.object(metric_req.Metrics, "response_list")
-    @mock.patch.object(Common, "_perform_request")
+    @mock.patch.object(Common, "perform_request")
     def test_complete_list_metric_req(self, perf_req, resp_list):
         """Test the complete list metric function."""
         # Test listing metrics without any configuration options
         values = {}
-        resp = Response()
-        perf_req.return_value = resp
+        perf_req.side_effect = perform_request_side_effect
         self.metrics.list_metrics(endpoint, auth_token, values)
 
-        perf_req.assert_called_with(
+        perf_req.assert_any_call(
             "<ANY>/v1/metric?sort=name:asc", auth_token, req_type="get")
         resp_list.assert_called_with([{u'id': u'test_id'}])
 
     @mock.patch.object(metric_req.Metrics, "response_list")
-    @mock.patch.object(Common, "_perform_request")
+    @mock.patch.object(Common, "perform_request")
     def test_resource_list_metric_req(self, perf_req, resp_list):
         """Test the resource list metric function."""
         # Test listing metrics with a resource id specified
         values = {"resource_uuid": "resource_id"}
-        resp = Response()
-        perf_req.return_value = resp
+        perf_req.side_effect = perform_request_side_effect
         self.metrics.list_metrics(endpoint, auth_token, values)
 
-        perf_req.assert_called_with(
+        perf_req.assert_any_call(
             "<ANY>/v1/metric?sort=name:asc", auth_token, req_type="get")
         resp_list.assert_called_with(
             [{u'id': u'test_id'}], resource="resource_id")
 
     @mock.patch.object(metric_req.Metrics, "response_list")
-    @mock.patch.object(Common, "_perform_request")
+    @mock.patch.object(Common, "perform_request")
     def test_name_list_metric_req(self, perf_req, resp_list):
         """Test the metric_name list metric function."""
         # Test listing metrics with a metric_name specified
         values = {"metric_name": "disk_write_bytes"}
-        resp = Response()
-        perf_req.return_value = resp
+        perf_req.side_effect = perform_request_side_effect
         self.metrics.list_metrics(endpoint, auth_token, values)
 
-        perf_req.assert_called_with(
+        perf_req.assert_any_call(
             "<ANY>/v1/metric?sort=name:asc", auth_token, req_type="get")
         resp_list.assert_called_with(
             [{u'id': u'test_id'}], metric_name="disk_write_bytes")
 
     @mock.patch.object(metric_req.Metrics, "response_list")
-    @mock.patch.object(Common, "_perform_request")
+    @mock.patch.object(Common, "perform_request")
     def test_combined_list_metric_req(self, perf_req, resp_list):
         """Test the combined resource and metric list metric function."""
         # Test listing metrics with a resource id and metric name specified
+
         values = {"resource_uuid": "resource_id",
                   "metric_name": "packets_sent"}
-        resp = Response()
-        perf_req.return_value = resp
+        perf_req.side_effect = perform_request_side_effect
         self.metrics.list_metrics(endpoint, auth_token, values)
 
-        perf_req.assert_called_with(
+        perf_req.assert_any_call(
             "<ANY>/v1/metric?sort=name:asc", auth_token, req_type="get")
         resp_list.assert_called_with(
             [{u'id': u'test_id'}], resource="resource_id",
             metric_name="packets_sent")
 
-    @mock.patch.object(Common, "_perform_request")
+    @mock.patch.object(Common, "perform_request")
     def test_get_metric_id(self, perf_req):
         """Test get_metric_id function."""
         self.metrics.get_metric_id(endpoint, auth_token, "my_metric", "r_id")
@@ -234,7 +238,7 @@
         self.assertEqual(metric_name, "my_invalid_metric")
         self.assertEqual(norm_name, None)
 
-    @mock.patch.object(Common, "_perform_request")
+    @mock.patch.object(Common, "perform_request")
     def test_valid_read_data_req(self, perf_req):
         """Test the read metric data function, for a valid call."""
         values = {"metric_uuid": "metric_id",
@@ -243,9 +247,9 @@
 
         self.metrics.read_metric_data(endpoint, auth_token, values)
 
-        perf_req.assert_called_once
+        perf_req.assert_called_once()
 
-    @mock.patch.object(Common, "_perform_request")
+    @mock.patch.object(Common, "perform_request")
     def test_invalid_read_data_req(self, perf_req):
         """Test the read metric data function, for an invalid call."""
         # Teo empty lists wil be returned because the values are invalid
@@ -264,7 +268,7 @@
 
         # Check for the expected values in the resulting list
         for l in result_list:
-            self.assertIn(l, resp_list[0])
+            self.assertIn(l, resp_list[0].values())
 
     def test_name_response_list(self):
         """Test the response list with metric name configured."""
@@ -283,7 +287,7 @@
 
         # Check for the expected values in the resulting list
         for l in result_list:
-            self.assertIn(l, resp_list[0])
+            self.assertIn(l, resp_list[0].values())
 
     def test_resource_response_list(self):
         """Test the response list with resource_id configured."""
@@ -300,12 +304,12 @@
 
         # Check for the expected values in the resulting list
         for l in result_list:
-            self.assertIn(l, resp_list[0])
+            self.assertIn(l, resp_list[0].values())
 
     def test_combined_response_list(self):
         """Test the response list function with resource_id and metric_name."""
         # Test for a combined resource and name list
-        # resource and name are on the lisat
+        # resource and name are on the list
         valid_name = "disk_write_ops"
         valid_id = "r_id"
         resp_list = self.metrics.response_list(
@@ -313,7 +317,7 @@
 
         # Check for the expected values in the resulting list
         for l in result_list:
-            self.assertIn(l, resp_list[0])
+            self.assertIn(l, resp_list[0].values())
 
         # resource not on list
         invalid_id = "mock_resource"
diff --git a/osm_mon/test/OpenStack/test_metric_req.py b/osm_mon/test/OpenStack/test_metric_req.py
index 2a3cbc3..6a924d9 100644
--- a/osm_mon/test/OpenStack/test_metric_req.py
+++ b/osm_mon/test/OpenStack/test_metric_req.py
@@ -43,7 +43,7 @@
         """Initialize a mocked message instance."""
         self.topic = "metric_request"
         self.key = None
-        self.value = json.dumps({"mock_message": "message_details"})
+        self.value = json.dumps({"vim_uuid": "test_id", "mock_message": "message_details"})
 
 
 class TestMetricReq(unittest.TestCase):
@@ -52,53 +52,49 @@
     def setUp(self):
         """Setup the tests for metric request keys."""
         super(TestMetricReq, self).setUp()
-        self.common = Common()
         self.metrics = metric_req.Metrics()
 
-    @mock.patch.object(Common, "_authenticate")
-    def test_access_cred_metric_auth(self, auth):
+    @mock.patch.object(Common, 'get_endpoint')
+    @mock.patch.object(Common, "get_auth_token")
+    def test_access_cred_metric_auth(self, get_token, get_endpoint):
         """Test authentication with access credentials."""
         message = Message()
 
-        self.metrics.metric_calls(message, self.common, "my_auth_token")
+        self.metrics.metric_calls(message)
 
-        auth.assert_not_called
-        self.assertEqual(self.metrics.auth_token, "my_auth_token")
+        get_token.assert_called_with('test_id')
+        get_endpoint.assert_any_call('metric', 'test_id')
 
-    @mock.patch.object(Common, "_authenticate")
-    def test_env_metric_auth(self, auth):
-        """Test authentication with environment variables."""
-        message = Message()
-
-        self.metrics.metric_calls(message, self.common, None)
-
-        auth.assert_called_with()
-
+    @mock.patch.object(Common, "get_auth_token", mock.Mock())
+    @mock.patch.object(Common, 'get_endpoint', mock.Mock())
     @mock.patch.object(metric_req.Metrics, "delete_metric")
     def test_delete_metric_key(self, del_metric):
         """Test the functionality for a delete metric request."""
         # Mock a message value and key
         message = Message()
         message.key = "delete_metric_request"
-        message.value = json.dumps({"metric_uuid": "my_metric_id"})
+        message.value = json.dumps({"vim_uuid": "test_id", "metric_uuid": "my_metric_id"})
 
         # Call the metric functionality and check delete request
-        self.metrics.metric_calls(message, self.common, "my_auth_token")
-
+        self.metrics.metric_calls(message)
         del_metric.assert_called_with(mock.ANY, mock.ANY, "my_metric_id")
 
+    @mock.patch.object(Common, "get_auth_token", mock.Mock())
+    @mock.patch.object(Common, 'get_endpoint', mock.Mock())
     @mock.patch.object(metric_req.Metrics, "list_metrics")
     def test_list_metric_key(self, list_metrics):
         """Test the functionality for a list metric request."""
         # Mock a message with list metric key and value
         message = Message()
         message.key = "list_metric_request"
-        message.value = json.dumps({"metrics_list_request": "metric_details"})
+        message.value = json.dumps({"vim_uuid": "test_id", "metrics_list_request": "metric_details"})
 
         # Call the metric functionality and check list functionality
-        self.metrics.metric_calls(message, self.common, "my_auth_token")
+        self.metrics.metric_calls(message)
         list_metrics.assert_called_with(mock.ANY, mock.ANY, "metric_details")
 
+    @mock.patch.object(Common, "get_auth_token", mock.Mock())
+    @mock.patch.object(Common, 'get_endpoint', mock.Mock())
     @mock.patch.object(metric_req.Metrics, "read_metric_data")
     @mock.patch.object(metric_req.Metrics, "list_metrics")
     @mock.patch.object(metric_req.Metrics, "delete_metric")
@@ -109,41 +105,46 @@
         # Mock a message with update metric key and value
         message = Message()
         message.key = "update_metric_request"
-        message.value = json.dumps({"metric_create":
-                                    {"metric_name": "my_metric",
-                                     "resource_uuid": "my_r_id"}})
+        message.value = json.dumps({"vim_uuid": "test_id",
+                                    "metric_create":
+                                        {"metric_name": "my_metric",
+                                         "resource_uuid": "my_r_id"}})
 
         # Call metric functionality and confirm no function is called
         # Gnocchi does not support updating a metric configuration
-        self.metrics.metric_calls(message, self.common, "my_auth_token")
-        config_metric.assert_not_called
-        list_metrics.assert_not_called
-        delete_metric.assert_not_called
-        read_data.assert_not_called
+        self.metrics.metric_calls(message)
+        config_metric.assert_not_called()
+        list_metrics.assert_not_called()
+        delete_metric.assert_not_called()
+        read_data.assert_not_called()
 
+    @mock.patch.object(Common, "get_auth_token", mock.Mock())
+    @mock.patch.object(Common, 'get_endpoint', mock.Mock())
     @mock.patch.object(metric_req.Metrics, "configure_metric")
     def test_config_metric_key(self, config_metric):
         """Test the functionality for a create metric request."""
         # Mock a message with create metric key and value
         message = Message()
         message.key = "create_metric_request"
-        message.value = json.dumps({"metric_create": "metric_details"})
+        message.value = json.dumps({"vim_uuid": "test_id", "metric_create": "metric_details"})
 
         # Call metric functionality and check config metric
         config_metric.return_value = "metric_id", "resource_id", True
-        self.metrics.metric_calls(message, self.common, "my_auth_token")
+        self.metrics.metric_calls(message)
         config_metric.assert_called_with(mock.ANY, mock.ANY, "metric_details")
 
+    @mock.patch.object(Common, "get_auth_token", mock.Mock())
+    @mock.patch.object(Common, 'get_endpoint', mock.Mock())
     @mock.patch.object(metric_req.Metrics, "read_metric_data")
     def test_read_data_key(self, read_data):
         """Test the functionality for a read metric data request."""
         # Mock a message with a read data key and value
         message = Message()
         message.key = "read_metric_data_request"
-        message.value = json.dumps({"alarm_uuid": "alarm_id"})
+        message.value = json.dumps({"vim_uuid": "test_id", "alarm_uuid": "alarm_id"})
 
         # Call metric functionality and check read data metrics
         read_data.return_value = "time_stamps", "data_values"
-        self.metrics.metric_calls(message, self.common, "my_auth_token")
+        self.metrics.metric_calls(message)
         read_data.assert_called_with(
             mock.ANY, mock.ANY, json.loads(message.value))
diff --git a/osm_mon/test/OpenStack/test_notifier.py b/osm_mon/test/OpenStack/test_notifier.py
index 97b3c2a..81ef2e8 100644
--- a/osm_mon/test/OpenStack/test_notifier.py
+++ b/osm_mon/test/OpenStack/test_notifier.py
@@ -52,7 +52,7 @@
                    {"resource_id": "my_resource_id"}}'
 
 invalid_get_resp = '{"gnocchi_resources_threshold_rule":\
-                     {"resource_id": "None"}}'
+                     {"resource_id": null}}'
 
 valid_notify_resp = '{"notify_details": {"status": "current_state",\
                                          "severity": "critical",\
@@ -117,22 +117,24 @@
     def notify_alarm(self, values):
         """Mock the notify_alarm functionality to generate a valid response."""
         config = Config.instance()
-        config.read_environ("aodh")
+        config.read_environ()
         self._alarming = Alarming()
         self._common = Common()
         self._response = OpenStack_Response()
         self._producer = KafkaProducer('alarm_response')
         alarm_id = values['alarm_id']
 
-        auth_token = self._common._authenticate()
-        endpoint = self._common.get_endpoint("alarming")
+        vim_uuid = 'test_id'
+
+        auth_token = Common.get_auth_token(vim_uuid)
+        endpoint = Common.get_endpoint("alarming", vim_uuid)
 
         # If authenticated generate and send response message
-        if (auth_token is not None and endpoint is not None):
+        if auth_token is not None and endpoint is not None:
             url = "{}/v2/alarms/%s".format(endpoint) % alarm_id
 
             # Get the resource_id of the triggered alarm and the date
-            result = self._common._perform_request(
+            result = Common.perform_request(
                 url, auth_token, req_type="get")
             alarm_details = json.loads(result.text)
             gnocchi_rule = alarm_details['gnocchi_resources_threshold_rule']
@@ -168,7 +170,7 @@
         """Test do_GET, generates headers for get request."""
         self.handler.do_GET()
 
-        set_head.assert_called_once
+        set_head.assert_called_once()
 
     @mock.patch.object(NotifierHandler, "notify_alarm")
     @mock.patch.object(NotifierHandler, "_set_headers")
@@ -176,12 +178,12 @@
         """Test do_POST functionality for a POST request."""
         self.handler.do_POST()
 
-        set_head.assert_called_once
+        set_head.assert_called_once()
         notify.assert_called_with(json.loads(post_data))
 
     @mock.patch.object(Common, "get_endpoint")
-    @mock.patch.object(Common, "_authenticate")
-    @mock.patch.object(Common, "_perform_request")
+    @mock.patch.object(Common, "get_auth_token")
+    @mock.patch.object(Common, "perform_request")
     def test_notify_alarm_unauth(self, perf_req, auth, endpoint):
         """Test notify alarm when not authenticated with keystone."""
         # Response request will not be performed unless there is a valid
@@ -191,26 +193,26 @@
         endpoint.return_value = None
         self.handler.notify_alarm(json.loads(post_data))
 
-        perf_req.assert_not_called
+        perf_req.assert_not_called()
 
         # Valid endpoint
         auth.return_value = None
         endpoint.return_value = "my_endpoint"
         self.handler.notify_alarm(json.loads(post_data))
 
-        perf_req.assert_not_called
+        perf_req.assert_not_called()
 
         # Valid auth_token
         auth.return_value = "my_auth_token"
         endpoint.return_value = None
         self.handler.notify_alarm(json.loads(post_data))
 
-        perf_req.assert_not_called
+        perf_req.assert_not_called()
 
     @mock.patch.object(Common, "get_endpoint")
     @mock.patch.object(OpenStack_Response, "generate_response")
-    @mock.patch.object(Common, "_authenticate")
-    @mock.patch.object(Common, "_perform_request")
+    @mock.patch.object(Common, "get_auth_token")
+    @mock.patch.object(Common, "perform_request")
     def test_notify_alarm_invalid_alarm(self, perf_req, auth, resp, endpoint):
         """Test valid authentication, invalid alarm details."""
         # Mock valid auth_token and endpoint
@@ -221,13 +223,14 @@
         self.handler.notify_alarm(json.loads(post_data))
 
         # Response is not generated
-        resp.assert_not_called
+        resp.assert_not_called()
 
+    @mock.patch.object(KafkaProducer, "notify_alarm")
     @mock.patch.object(Common, "get_endpoint")
     @mock.patch.object(OpenStack_Response, "generate_response")
-    @mock.patch.object(Common, "_authenticate")
-    @mock.patch.object(Common, "_perform_request")
-    def test_notify_alarm_resp_call(self, perf_req, auth, response, endpoint):
+    @mock.patch.object(Common, "get_auth_token")
+    @mock.patch.object(Common, "perform_request")
+    def test_notify_alarm_resp_call(self, perf_req, auth, response, endpoint, notify):
         """Test notify_alarm tries to generate a response for SO."""
         # Mock valid auth token and endpoint, valid response from aodh
         auth.return_value = "my_auth_token"
@@ -235,6 +238,7 @@
         perf_req.return_value = Response(valid_get_resp)
         self.handler.notify_alarm(json.loads(post_data))
 
+        notify.assert_called()
         response.assert_called_with('notify_alarm', a_id="my_alarm_id",
                                     r_id="my_resource_id", sev="critical",
                                     date="dd-mm-yyyy 00:00",
@@ -244,8 +248,9 @@
     @mock.patch.object(Common, "get_endpoint")
     @mock.patch.object(KafkaProducer, "notify_alarm")
     @mock.patch.object(OpenStack_Response, "generate_response")
-    @mock.patch.object(Common, "_authenticate")
-    @mock.patch.object(Common, "_perform_request")
+    @mock.patch.object(Common, "get_auth_token")
+    @mock.patch.object(Common, "perform_request")
+    @unittest.skip("Schema validation not implemented yet.")
     def test_notify_alarm_invalid_resp(
             self, perf_req, auth, response, notify, endpoint):
         """Test the notify_alarm function, sends response to the producer."""
@@ -257,13 +262,13 @@
 
         self.handler.notify_alarm(json.loads(post_data))
 
-        notify.assert_not_called
+        notify.assert_not_called()
 
     @mock.patch.object(Common, "get_endpoint")
     @mock.patch.object(KafkaProducer, "notify_alarm")
     @mock.patch.object(OpenStack_Response, "generate_response")
-    @mock.patch.object(Common, "_authenticate")
-    @mock.patch.object(Common, "_perform_request")
+    @mock.patch.object(Common, "get_auth_token")
+    @mock.patch.object(Common, "perform_request")
     def test_notify_alarm_valid_resp(
             self, perf_req, auth, response, notify, endpoint):
         """Test the notify_alarm function, sends response to the producer."""
diff --git a/osm_mon/test/OpenStack/test_settings.py b/osm_mon/test/OpenStack/test_settings.py
index 66da6af..0f924ce 100644
--- a/osm_mon/test/OpenStack/test_settings.py
+++ b/osm_mon/test/OpenStack/test_settings.py
@@ -44,15 +44,7 @@
 
     def test_set_os_username(self):
         """Test reading the environment for OpenStack plugin configuration."""
-        os.environ["OS_USERNAME"] = "test"
-        self.cfg.read_environ("my_service")
+        os.environ["OS_NOTIFIER_URI"] = "test"
+        self.cfg.read_environ()
 
-        self.assertEqual(self.cfg.OS_USERNAME, "test")
-
-    @mock.patch.object(os, "environ")
-    def test_read_environ(self, environ):
-        """Test reading environment variables for configuration."""
-        self.cfg.read_environ("my_service")
-
-        # Called for each key in the configuration dictionary
-        environ.assert_called_once
+        self.assertEqual(self.cfg.OS_NOTIFIER_URI, "test")
diff --git a/osm_mon/test/integration/test_access_cred.py b/osm_mon/test/integration/test_access_cred.py
deleted file mode 100644
index 231711b..0000000
--- a/osm_mon/test/integration/test_access_cred.py
+++ /dev/null
@@ -1,81 +0,0 @@
-# Copyright 2017 Intel Research and Development Ireland Limited
-# *************************************************************
-
-# This file is part of OSM Monitoring module
-# All Rights Reserved to Intel Corporation
-
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-
-#         http://www.apache.org/licenses/LICENSE-2.0
-
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-
-# For those usages not covered by the Apache License, Version 2.0 please
-# contact: helena.mcgough@intel.com or adrian.hoban@intel.com
-
-# __author__ = "Helena McGough"
-"""Test an end to end Openstack access_credentials requests."""
-
-import json
-import logging
-import unittest
-
-import mock
-from kafka import KafkaConsumer
-from kafka import KafkaProducer
-from kafka.errors import KafkaError
-from keystoneclient.v3 import client
-
-from osm_mon.plugins.OpenStack.Aodh import alarming
-from osm_mon.plugins.OpenStack.common import Common
-
-log = logging.getLogger(__name__)
-
-
-# TODO: Remove this file
-class AccessCredentialsTest(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(['access_credentials'])
-        except KafkaError:
-            self.skipTest('Kafka server not present.')
-
-    @mock.patch.object(client, "Client")
-    def test_access_cred_req(self, keyclient):
-        """Test access credentials request message from KafkaProducer."""
-        # Set-up message, producer and consumer for tests
-        payload = {"vim_type": "OpenStack",
-                   "access_config":
-                       {"openstack_site": "my_site",
-                        "user": "my_user",
-                        "password": "my_password",
-                        "vim_tenant_name": "my_tenant"}}
-
-        self.producer.send('access_credentials', 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.openstack_auth._authenticate(message=message)
-
-                # A keystone client is created with the valid access_credentials
-                keyclient.assert_called_with(
-                    auth_url="my_site", username="my_user", password="my_password",
-                    tenant_name="my_tenant")
-
-                return
diff --git a/osm_mon/test/integration/test_alarm_integration.py b/osm_mon/test/integration/test_alarm_integration.py
index 13f0fef..368cc10 100644
--- a/osm_mon/test/integration/test_alarm_integration.py
+++ b/osm_mon/test/integration/test_alarm_integration.py
@@ -31,29 +31,31 @@
 from kafka import KafkaProducer
 from kafka.errors import KafkaError
 
+from osm_mon.core.auth import AuthManager
 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
+from keystoneclient.v3 import client
 
 log = logging.getLogger(__name__)
 
 
 class AlarmIntegrationTest(unittest.TestCase):
     def setUp(self):
+        try:
+            self.producer = KafkaProducer(bootstrap_servers='localhost:9092')
+            self.req_consumer = KafkaConsumer(bootstrap_servers='localhost:9092',
+                                              consumer_timeout_ms=5000)
+            self.req_consumer.subscribe(['alarm_request'])
+        except KafkaError:
+            self.skipTest('Kafka server not present.')
         # 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(Common, "get_auth_token", mock.Mock())
+    @mock.patch.object(Common, "get_endpoint", mock.Mock())
     @mock.patch.object(prod, "update_alarm_response")
     @mock.patch.object(alarming.Alarming, "update_alarm")
     @mock.patch.object(response.OpenStack_Response, "generate_response")
@@ -61,6 +63,7 @@
         """Test Aodh update alarm request message from KafkaProducer."""
         # Set-up message, producer and consumer for tests
         payload = {"vim_type": "OpenSTACK",
+                   "vim_uuid": "test_id",
                    "alarm_update_request":
                        {"correlation_id": 123,
                         "alarm_uuid": "alarm_id",
@@ -71,11 +74,10 @@
 
         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 == "update_alarm_request":
                 # Mock a valid alarm update
                 update_alarm.return_value = "alarm_id", True
-                self.alarms.alarming(message, self.openstack_auth, None)
+                self.alarms.alarming(message)
 
                 # A response message is generated and sent via MON's producer
                 resp.assert_called_with(
@@ -87,6 +89,8 @@
                 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(prod, "create_alarm_response")
     @mock.patch.object(alarming.Alarming, "configure_alarm")
     @mock.patch.object(response.OpenStack_Response, "generate_response")
@@ -94,6 +98,7 @@
         """Test Aodh create alarm request message from KafkaProducer."""
         # Set-up message, producer and consumer for tests
         payload = {"vim_type": "OpenSTACK",
+                   "vim_uuid": "test_id",
                    "alarm_create_request":
                        {"correlation_id": 123,
                         "alarm_name": "my_alarm",
@@ -106,11 +111,10 @@
 
         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_alarm_request":
                 # Mock a valid alarm creation
                 config_alarm.return_value = "alarm_id", True
-                self.alarms.alarming(message, self.openstack_auth, None)
+                self.alarms.alarming(message)
 
                 # A response message is generated and sent via MON's produce
                 resp.assert_called_with(
@@ -122,6 +126,8 @@
                 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(prod, "list_alarm_response")
     @mock.patch.object(alarming.Alarming, "list_alarms")
     @mock.patch.object(response.OpenStack_Response, "generate_response")
@@ -129,6 +135,7 @@
         """Test Aodh list alarm request message from KafkaProducer."""
         # Set-up message, producer and consumer for tests
         payload = {"vim_type": "OpenSTACK",
+                   "vim_uuid": "test_id",
                    "alarm_list_request":
                        {"correlation_id": 123,
                         "resource_uuid": "resource_id", }}
@@ -138,13 +145,12 @@
 
         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 == "list_alarm_request":
                 # Mock an empty list generated by the request
                 list_alarm.return_value = []
-                self.alarms.alarming(message, self.openstack_auth, None)
+                self.alarms.alarming(message)
 
-                # Resoonse message is generated
+                # Response message is generated
                 resp.assert_called_with(
                     'list_alarm_response', alarm_list=[],
                     cor_id=123)
@@ -155,6 +161,8 @@
                 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(alarming.Alarming, "delete_alarm")
     @mock.patch.object(prod, "delete_alarm_response")
     @mock.patch.object(response.OpenStack_Response, "generate_response")
@@ -162,6 +170,7 @@
         """Test Aodh delete alarm request message from KafkaProducer."""
         # Set-up message, producer and consumer for tests
         payload = {"vim_type": "OpenSTACK",
+                   "vim_uuid": "test_id",
                    "alarm_delete_request":
                        {"correlation_id": 123,
                         "alarm_uuid": "alarm_id", }}
@@ -171,9 +180,8 @@
 
         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)
+            if message.key == "delete_alarm_request":
+                self.alarms.alarming(message)
 
                 # Response message is generated and sent by MON's producer
                 resp.assert_called_with(
@@ -190,19 +198,10 @@
         """Test Aodh acknowledge alarm request message from KafkaProducer."""
         # Set-up message, producer and consumer for tests
         payload = {"vim_type": "OpenSTACK",
+                   "vim_uuid": "test_id",
                    "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")
+        self.producer.flush()
diff --git a/osm_mon/test/integration/test_metric_integration.py b/osm_mon/test/integration/test_metric_integration.py
index 312359a..6b32a12 100644
--- a/osm_mon/test/integration/test_metric_integration.py
+++ b/osm_mon/test/integration/test_metric_integration.py
@@ -54,12 +54,14 @@
         try:
             self.producer = KafkaProducer(bootstrap_servers='localhost:9092')
             self.req_consumer = KafkaConsumer(bootstrap_servers='localhost:9092',
-                                              group_id='osm_mon',
+                                              auto_offset_reset='earliest',
                                               consumer_timeout_ms=2000)
             self.req_consumer.subscribe(['metric_request'])
         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")
@@ -67,6 +69,7 @@
         """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": "my_metric",
@@ -76,12 +79,13 @@
                            value=json.dumps(payload))
 
         for message in self.req_consumer:
+            print(message)
             # Check the vim desired by the message
             vim_type = json.loads(message.value)["vim_type"].lower()
             if vim_type == "openstack":
                 # A valid metric is created
                 config_metric.return_value = "metric_id", "resource_id", True
-                self.metric_req.metric_calls(message, self.openstack_auth, None)
+                self.metric_req.metric_calls(message)
 
                 # A response message is generated and sent by MON's producer
                 resp.assert_called_with(
@@ -93,6 +97,8 @@
                 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")
@@ -100,6 +106,7 @@
         """Test Gnocchi delete metric request message from producer."""
         # Set-up message, producer and consumer for tests
         payload = {"vim_type": "OpenSTACK",
+                   "vim_uuid": "1",
                    "correlation_id": 123,
                    "metric_uuid": "metric_id",
                    "metric_name": "metric_name",
@@ -111,10 +118,10 @@
         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 == "delete_metric_request":
                 # Metric has been deleted
                 del_metric.return_value = True
-                self.metric_req.metric_calls(message, self.openstack_auth, None)
+                self.metric_req.metric_calls(message)
 
                 # A response message is generated and sent by MON's producer
                 resp.assert_called_with(
@@ -127,6 +134,8 @@
                 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")
@@ -134,6 +143,7 @@
         """Test Gnocchi read metric data request message from producer."""
         # Set-up message, producer and consumer for tests
         payload = {"vim_type": "OpenSTACK",
+                   "vim_uuid": "test_id",
                    "correlation_id": 123,
                    "metric_uuid": "metric_id",
                    "metric_name": "metric_name",
@@ -144,11 +154,10 @@
 
         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 == "read_metric_data_request":
                 # Mock empty lists generated by the request message
                 read_data.return_value = [], []
-                self.metric_req.metric_calls(message, self.openstack_auth, None)
+                self.metric_req.metric_calls(message)
 
                 # A response message is generated and sent by MON's producer
                 resp.assert_called_with(
@@ -162,6 +171,8 @@
                 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")
@@ -169,6 +180,7 @@
         """Test Gnocchi list metrics request message from producer."""
         # Set-up message, producer and consumer for tests
         payload = {"vim_type": "OpenSTACK",
+                   "vim_uuid": "1",
                    "metrics_list_request":
                        {"correlation_id": 123, }}
 
@@ -177,11 +189,10 @@
 
         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 == "list_metric_request":
                 # Mock an empty list generated by the request
                 list_metrics.return_value = []
-                self.metric_req.metric_calls(message, self.openstack_auth, None)
+                self.metric_req.metric_calls(message)
 
                 # A response message is generated and sent by MON's producer
                 resp.assert_called_with(
@@ -192,6 +203,8 @@
                 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")
@@ -199,6 +212,7 @@
         """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",
@@ -209,13 +223,12 @@
 
         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 == "update_metric_request":
                 # Gnocchi doesn't support metric updates
                 get_id.return_value = "metric_id"
-                self.metric_req.metric_calls(message, self.openstack_auth, None)
+                self.metric_req.metric_calls(message)
 
-                # Reponse message is generated and sent via MON's producer
+                # 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,
diff --git a/osm_mon/test/integration/test_notify_alarm.py b/osm_mon/test/integration/test_notify_alarm.py
index 96458ba..db21c4e 100644
--- a/osm_mon/test/integration/test_notify_alarm.py
+++ b/osm_mon/test/integration/test_notify_alarm.py
@@ -28,8 +28,8 @@
 import socket
 import unittest
 
-from BaseHTTPServer import BaseHTTPRequestHandler
-from BaseHTTPServer import HTTPServer
+from six.moves.BaseHTTPServer import BaseHTTPRequestHandler
+from six.moves.BaseHTTPServer import HTTPServer
 
 from threading import Thread
 
@@ -87,22 +87,22 @@
     def notify_alarm(self, values):
         """Mock the notify_alarm functionality to generate a valid response."""
         config = Config.instance()
-        config.read_environ("aodh")
+        config.read_environ()
         self._alarming = Alarming()
         self._common = Common()
         self._response = OpenStack_Response()
         self._producer = KafkaProducer('alarm_response')
         alarm_id = values['alarm_id']
 
-        auth_token = self._common._authenticate()
-        endpoint = self._common.get_endpoint("alarming")
+        auth_token = Common.get_auth_token('test_id')
+        endpoint = Common.get_endpoint('alarming', 'test_id')
 
         # If authenticated generate and send response message
-        if (auth_token is not None and endpoint is not None):
+        if auth_token is not None and endpoint is not None:
             url = "{}/v2/alarms/%s".format(endpoint) % alarm_id
 
             # Get the resource_id of the triggered alarm and the date
-            result = self._common._perform_request(
+            result = Common.perform_request(
                 url, auth_token, req_type="get")
             alarm_details = json.loads(result.text)
             gnocchi_rule = alarm_details['gnocchi_resources_threshold_rule']
@@ -156,9 +156,9 @@
 class AlarmNotificationTest(unittest.TestCase):
     @mock.patch.object(KafkaProducer, "notify_alarm")
     @mock.patch.object(OpenStack_Response, "generate_response")
-    @mock.patch.object(Common, "_perform_request")
+    @mock.patch.object(Common, "perform_request")
     @mock.patch.object(Common, "get_endpoint")
-    @mock.patch.object(Common, "_authenticate")
+    @mock.patch.object(Common, "get_auth_token")
     def test_post_notify_alarm(self, auth, endpoint, perf_req, resp, notify):
         """Integration test for notify_alarm."""
         url = 'http://localhost:{port}/users'.format(port=mock_server_port)
@@ -178,14 +178,14 @@
         endpoint.return_value = "my_endpoint"
         perf_req.return_value = MockResponse(valid_get_resp)
 
-        # Generate a post reqest for testing
-        requests.post(url, json.dumps(payload))
-
+        # Generate a post request for testing
+        response = requests.post(url, json.dumps(payload))
+        self.assertEqual(response.status_code, 200)
         # A response message is generated with the following details
         resp.assert_called_with(
             "notify_alarm", a_id="my_alarm_id", r_id="my_resource_id",
             sev="critical", date='dd-mm-yyyy 00:00', state="current_state",
             vim_type="OpenStack")
 
-        # Reponse message is sent back to the SO via MON's producer
+        # Response message is sent back to the SO via MON's producer
         notify.assert_called_with("notify_alarm", mock.ANY, "alarm_response")
diff --git a/osm_mon/test/integration/test_vim_account.py b/osm_mon/test/integration/test_vim_account.py
index bc610c3..e84b3cb 100644
--- a/osm_mon/test/integration/test_vim_account.py
+++ b/osm_mon/test/integration/test_vim_account.py
@@ -49,10 +49,12 @@
         except KafkaError:
             self.skipTest('Kafka server not present.')
 
-    def test_create_vim_account(self):
+    # TODO: REFACTOR. This test requires common_consumer running. Needs to be changed so it does not.
+    @unittest.skip("Needs refactoring.")
+    def test_create_edit_delete_vim_account(self):
         """Test vim_account creation message from KafkaProducer."""
         # Set-up message, producer and consumer for tests
-        payload = {
+        create_payload = {
             "_id": "test_id",
             "name": "test_name",
             "vim_type": "openstack",
@@ -66,12 +68,48 @@
                 }
         }
 
-        self.producer.send('vim_account', key=b'create', value=json.dumps(payload))
+        self.producer.send('vim_account', key=b'create', value=json.dumps(create_payload))
 
         self.producer.flush()
 
-        # FIXME: Create a schema for a vim_account_create_response, so we can test it
-        time.sleep(5)
-        creds = self.auth_manager.get_credentials(payload['_id'])
-        self.assertEqual(creds.name, payload['name'])
-        self.assertEqual(json.loads(creds.config), payload['config'])
+        time.sleep(1)
+        creds = self.auth_manager.get_credentials(create_payload['_id'])
+        self.assertIsNotNone(creds)
+        self.assertEqual(creds.name, create_payload['name'])
+        self.assertEqual(json.loads(creds.config), create_payload['config'])
+
+        # Set-up message, producer and consumer for tests
+        edit_payload = {
+            "_id": "test_id",
+            "name": "test_name_edited",
+            "vim_type": "openstack",
+            "vim_url": "auth_url",
+            "vim_user": "user",
+            "vim_password": "password",
+            "vim_tenant_name": "tenant",
+            "config":
+                {
+                    "foo_edited": "bar_edited"
+                }
+        }
+
+        self.producer.send('vim_account', key=b'edit', value=json.dumps(edit_payload))
+
+        self.producer.flush()
+
+        time.sleep(1)
+        creds = self.auth_manager.get_credentials(edit_payload['_id'])
+        self.assertEqual(creds.name, edit_payload['name'])
+        self.assertEqual(json.loads(creds.config), edit_payload['config'])
+
+        delete_payload = {
+            "_id": "test_id"
+        }
+
+        self.producer.send('vim_account', key=b'delete', value=json.dumps(delete_payload))
+
+        self.producer.flush()
+
+        time.sleep(1)
+        creds = self.auth_manager.get_credentials(delete_payload['_id'])
+        self.assertIsNone(creds)