diff --git a/tox.ini b/tox.ini
index fc1e4d4..17529a8 100644
--- a/tox.ini
+++ b/tox.ini
@@ -95,7 +95,7 @@
 # line. Rejecting code for this reason is wrong.
 ignore = E123,E125,H405
 builtins = _
-exclude=.venv,.git,.tox,dist,doc,*lib/python*,*egg,build,tungsten_tempest_plugin/services/contrail/json/
+exclude=.venv,.git,.tox,dist,doc,*lib/python*,*egg,build
 
 [hacking]
 local-check-factory = tungsten_tempest_plugin.hacking.checks.factory
diff --git a/tungsten_tempest_plugin/tests/api/contrail/rbac_base.py b/tungsten_tempest_plugin/tests/api/contrail/rbac_base.py
index 54d7f2a..6a1b6c8 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/rbac_base.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/rbac_base.py
@@ -18,10 +18,6 @@
 """
 
 from oslo_log import log as logging
-from patrole_tempest_plugin import rbac_utils
-from tempest import config
-from tempest.lib import exceptions
-from tempest import test
 
 from tungsten_tempest_plugin.services.contrail.json.access_control_client \
     import AccessControlClient
@@ -94,6 +90,13 @@
 from tungsten_tempest_plugin.services.contrail.json.vm_contrail_client import \
     VmContrailClient
 
+from patrole_tempest_plugin import rbac_utils
+
+from tempest import config
+from tempest import test
+
+from tempest.lib import exceptions
+
 CONF = config.CONF
 LOG = logging.getLogger(__name__)
 
diff --git a/tungsten_tempest_plugin/tests/api/contrail/test_access_control.py b/tungsten_tempest_plugin/tests/api/contrail/test_access_control.py
index 8e157e5..36d8713 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_access_control.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_access_control.py
@@ -17,18 +17,22 @@
 Tempest test-case to test Access Control using RBAC roles
 """
 
+from tungsten_tempest_plugin.tests.api.contrail import rbac_base
+
 from patrole_tempest_plugin import rbac_rule_validation
+
 from tempest import config
 from tempest.lib.common.utils import data_utils
-from tempest.lib import decorators
-
-from tungsten_tempest_plugin.tests.api.contrail import rbac_base
+from tempest.lib.decorators import idempotent_id
 
 CONF = config.CONF
 
 
 class AccessControlTest(rbac_base.BaseContrailTest):
-    """Test class to test Access Control objects using RBAC roles"""
+
+    """
+    Test class to test Access Control objects using RBAC roles
+    """
 
     def _create_api_access_lists(self):
         api_list_name = data_utils.rand_name('test-api-list')
@@ -73,37 +77,45 @@
                         new_ctrl_list['uuid'])
         return new_ctrl_list
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="list_api_access_lists")
-    @decorators.idempotent_id('2bfde8fd-36fe-4e69-ba59-6f2db8941e7d')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="list_api_access_lists")
+    @idempotent_id('2bfde8fd-36fe-4e69-ba59-6f2db8941e7d')
     def test_list_api_access_lists(self):
-        """test method for list api access list"""
+        """
+        test method for list api access list
+        """
         with self.rbac_utils.override_role(self):
             self.access_control_client.list_api_access_lists()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="create_api_access_lists")
-    @decorators.idempotent_id('b2b5f50c-07d8-4d79-b9a4-78187ad97353')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="create_api_access_lists")
+    @idempotent_id('b2b5f50c-07d8-4d79-b9a4-78187ad97353')
     def test_create_api_access_lists(self):
-        """test method for create api access list"""
+        """
+        test method for create api access list
+        """
         with self.rbac_utils.override_role(self):
             self._create_api_access_lists()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="show_api_access_list")
-    @decorators.idempotent_id('b82e8e6b-83b5-424d-9652-ef6a34067f4f')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="show_api_access_list")
+    @idempotent_id('b82e8e6b-83b5-424d-9652-ef6a34067f4f')
     def test_show_api_access_list(self):
-        """test method for show api access list"""
+        """
+        test method for show api access list
+        """
         new_api_list = self._create_api_access_lists()
         with self.rbac_utils.override_role(self):
             self.access_control_client.show_api_access_list(
                 new_api_list['uuid'])
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="update_api_access_list")
-    @decorators.idempotent_id('edc88825-1e2e-47ff-b7b4-f68d6310fbad')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="update_api_access_list")
+    @idempotent_id('edc88825-1e2e-47ff-b7b4-f68d6310fbad')
     def test_update_api_access_list(self):
-        """test method for update api access list"""
+        """
+        test method for update api access list
+        """
         new_api_list = self._create_api_access_lists()
         update_name = data_utils.rand_name('test')
         with self.rbac_utils.override_role(self):
@@ -111,39 +123,47 @@
                 new_api_list['uuid'],
                 display_name=update_name)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="delete_api_access_list")
-    @decorators.idempotent_id('f27d9044-95f2-4733-81ed-df9340dbd421')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="delete_api_access_list")
+    @idempotent_id('f27d9044-95f2-4733-81ed-df9340dbd421')
     def test_delete_api_access_list(self):
-        """test method for delete api access list"""
+        """
+        test method for delete api access list
+        """
         new_api_list = self._create_api_access_lists()
         with self.rbac_utils.override_role(self):
             self.access_control_client.delete_api_access_list(
                 new_api_list['uuid'])
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="list_access_control_lists")
-    @decorators.idempotent_id('c56a1338-a9d1-4286-8aeb-3a0d60d93037')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="list_access_control_lists")
+    @idempotent_id('c56a1338-a9d1-4286-8aeb-3a0d60d93037')
     def test_list_access_control_lists(self):
-        """test method for list access control list"""
+        """
+        test method for list access control list
+        """
         with self.rbac_utils.override_role(self):
             self.access_control_client.list_access_control_lists()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="create_access_control_lists")
-    @decorators.idempotent_id('9f225d2b-5376-42f5-97aa-cf63be47fa19')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="create_access_control_lists")
+    @idempotent_id('9f225d2b-5376-42f5-97aa-cf63be47fa19')
     def test_create_access_control(self):
-        """test method for create access control list"""
+        """
+        test method for create access control list
+        """
         # Create Security Group
         sec_group = self._create_security_groups()
         with self.rbac_utils.override_role(self):
             self._create_access_control_lists(sec_group['name'])
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="show_access_control_list")
-    @decorators.idempotent_id('f0ed882b-f3de-48b7-884a-637ee0b7d6b6')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="show_access_control_list")
+    @idempotent_id('f0ed882b-f3de-48b7-884a-637ee0b7d6b6')
     def test_show_access_control_list(self):
-        """test method for show access control list"""
+        """
+        test method for show access control list
+        """
         # Create Security Group
         sec_group = self._create_security_groups()
         new_ctrl_list = self._create_access_control_lists(
@@ -152,11 +172,13 @@
             self.access_control_client.show_access_control_list(
                 new_ctrl_list['uuid'])
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="update_access_control_list")
-    @decorators.idempotent_id('9a4b3133-dd07-4a1a-b282-f7770c372fb8')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="update_access_control_list")
+    @idempotent_id('9a4b3133-dd07-4a1a-b282-f7770c372fb8')
     def test_update_access_control_list(self):
-        """test method for update access control list"""
+        """
+        test method for update access control list
+        """
         sec_group = self._create_security_groups()
         new_ctrl_list = self._create_access_control_lists(
             sec_group['name'])
@@ -166,11 +188,13 @@
                 new_ctrl_list['uuid'],
                 display_name=update_name)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="delete_access_control_list")
-    @decorators.idempotent_id('36a8ace1-71ca-4c7c-8667-d8387d6f964a')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="delete_access_control_list")
+    @idempotent_id('36a8ace1-71ca-4c7c-8667-d8387d6f964a')
     def test_delete_access_control_list(self):
-        """test method for delete access control list"""
+        """
+        test method for delete access control list
+        """
         # Create Security Group
         sec_group = self._create_security_groups()
         new_ctrl_list = self._create_access_control_lists(
diff --git a/tungsten_tempest_plugin/tests/api/contrail/test_alarm.py b/tungsten_tempest_plugin/tests/api/contrail/test_alarm.py
index c2ef808..a191f45 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_alarm.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_alarm.py
@@ -18,19 +18,25 @@
 """
 
 from oslo_log import log as logging
-from patrole_tempest_plugin import rbac_rule_validation
-from tempest import config
-from tempest.lib.common.utils import data_utils
-from tempest.lib import decorators
 
 from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
+from patrole_tempest_plugin import rbac_rule_validation
+
+from tempest import config
+
+from tempest.lib.common.utils import data_utils
+from tempest.lib.decorators import idempotent_id
+
 CONF = config.CONF
 LOG = logging.getLogger(__name__)
 
 
 class AlarmContrailTest(rbac_base.BaseContrailTest):
-    """Test class to test Alarm objects using RBAC roles"""
+
+    """
+    Test class to test Alarm objects using RBAC roles
+    """
 
     def _create_global_system_config(self):
         config_name = data_utils.rand_name('test-config')
@@ -82,51 +88,61 @@
         }
         self.alarm_client.update_alarm(alarm_uuid, **put_body)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="list_alarms")
-    @decorators.idempotent_id('dc7d19dd-dd5e-4ec8-bf0c-c6d9d83a60a8')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="list_alarms")
+    @idempotent_id('dc7d19dd-dd5e-4ec8-bf0c-c6d9d83a60a8')
     def test_list_alarms(self):
-        """test method for list alarms"""
+        """
+        test method for list alarms
+        """
         with self.rbac_utils.override_role(self):
             self.alarm_client.list_alarms()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="create_alarms")
-    @decorators.idempotent_id('7fe55d0c-e54a-4bb7-95a6-9c53f9e9c4bf')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="create_alarms")
+    @idempotent_id('7fe55d0c-e54a-4bb7-95a6-9c53f9e9c4bf')
     def test_create_alarms(self):
-        """test method for create alarms"""
+        """
+        test method for create alarms
+        """
         # Create global system config
         global_system_config = self._create_global_system_config()['name']
         with self.rbac_utils.override_role(self):
             self._create_alarm(global_system_config)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="show_alarm")
-    @decorators.idempotent_id('ab0ccbe4-7bfe-4176-890a-d438ee04290d')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="show_alarm")
+    @idempotent_id('ab0ccbe4-7bfe-4176-890a-d438ee04290d')
     def test_show_alarm(self):
-        """test method for show alarms"""
+        """
+        test method for show alarms
+        """
         # Create global system config
         global_system_config = self._create_global_system_config()['name']
         alarm_uuid = self._create_alarm(global_system_config)
         with self.rbac_utils.override_role(self):
             self.alarm_client.show_alarm(alarm_uuid)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="update_alarm")
-    @decorators.idempotent_id('ab331cca-ee53-4106-9b30-7319bfb1bea7')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="update_alarm")
+    @idempotent_id('ab331cca-ee53-4106-9b30-7319bfb1bea7')
     def test_update_alarm(self):
-        """test method for update alarms"""
+        """
+        test method for update alarms
+        """
         # Create global system config
         global_system_config = self._create_global_system_config()['name']
         alarm_uuid = self._create_alarm(global_system_config)
         with self.rbac_utils.override_role(self):
             self._update_alarm(alarm_uuid)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="delete_alarm")
-    @decorators.idempotent_id('84fadb14-77c0-4f21-b5b2-1da7a2fd27e6')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="delete_alarm")
+    @idempotent_id('84fadb14-77c0-4f21-b5b2-1da7a2fd27e6')
     def test_delete_alarm(self):
-        """test method for delete alarms"""
+        """
+        test method for delete alarms
+        """
         # Create global system config
         global_system_config = self._create_global_system_config()['name']
         alarm_uuid = self._create_alarm(global_system_config)
diff --git a/tungsten_tempest_plugin/tests/api/contrail/test_alias_ip.py b/tungsten_tempest_plugin/tests/api/contrail/test_alias_ip.py
index 2418333..69da2d3 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_alias_ip.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_alias_ip.py
@@ -17,18 +17,21 @@
 Tempest test-case to test Alias IP and IP pools objects using RBAC roles
 """
 
+from tungsten_tempest_plugin.tests.api.contrail import rbac_base
+
 from patrole_tempest_plugin import rbac_rule_validation
+
 from tempest import config
 from tempest.lib.common.utils import data_utils
-from tempest.lib import decorators
-
-from tungsten_tempest_plugin.tests.api.contrail import rbac_base
+from tempest.lib.decorators import idempotent_id
 
 CONF = config.CONF
 
 
 class AliasIPsTest(rbac_base.BaseContrailTest):
-    """Test class to test Alias IP and IP pools objects using RBAC roles"""
+    """
+    Test class to test Alias IP and IP pools objects using RBAC roles
+    """
 
     @classmethod
     def resource_setup(cls):
@@ -111,39 +114,47 @@
                         new_alias_ip['uuid'])
         return new_alias_ip
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="list_alias_ips")
-    @decorators.idempotent_id('899d6824-0755-41ef-adef-03eb1858bcb0')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="list_alias_ips")
+    @idempotent_id('899d6824-0755-41ef-adef-03eb1858bcb0')
     def test_list_alias_ips(self):
-        """test method for list alias IP"""
+        """
+        test method for list alias IP
+        """
         with self.rbac_utils.override_role(self):
             self.alias_ip_client.list_alias_ips()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="create_alias_ips")
-    @decorators.idempotent_id('bc9aae29-22a8-4eed-a31f-c0ded300e3a3')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="create_alias_ips")
+    @idempotent_id('bc9aae29-22a8-4eed-a31f-c0ded300e3a3')
     def test_create_alias_ips(self):
-        """test method for create alias IP"""
+        """
+        test method for create alias IP
+        """
         new_alias_ip_pool = self._create_alias_ip_pools()
         with self.rbac_utils.override_role(self):
             self._create_alias_ips(new_alias_ip_pool, '2.2.3.1')
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="show_alias_ip")
-    @decorators.idempotent_id('d20318b1-c204-44e7-a44c-66f6a1fbe7a0')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="show_alias_ip")
+    @idempotent_id('d20318b1-c204-44e7-a44c-66f6a1fbe7a0')
     def test_show_alias_ip(self):
-        """test method for show alias IP"""
+        """
+        test method for show alias IP
+        """
         new_alias_ip_pool = self._create_alias_ip_pools()
         new_alias_ip = self._create_alias_ips(new_alias_ip_pool, '2.2.3.2')
         with self.rbac_utils.override_role(self):
             self.alias_ip_client.show_alias_ip(
                 new_alias_ip['uuid'])
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="update_alias_ip")
-    @decorators.idempotent_id('c237b18f-d899-4b80-8e9b-068244a24612')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="update_alias_ip")
+    @idempotent_id('c237b18f-d899-4b80-8e9b-068244a24612')
     def test_update_alias_ip(self):
-        """test method for update alias IP"""
+        """
+        test method for update alias IP
+        """
         new_alias_ip_pool = self._create_alias_ip_pools()
         new_alias_ip = self._create_alias_ips(new_alias_ip_pool, '2.2.3.3')
         update_name = data_utils.rand_name('test')
@@ -152,48 +163,58 @@
                 new_alias_ip['uuid'],
                 display_name=update_name)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="delete_alias_ip")
-    @decorators.idempotent_id('456c641c-9066-4125-8dec-d1529ad8f1ba')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="delete_alias_ip")
+    @idempotent_id('456c641c-9066-4125-8dec-d1529ad8f1ba')
     def test_delete_alias_ip(self):
-        """test method for delete alias IP"""
+        """
+        test method for delete alias IP
+        """
         new_alias_ip_pool = self._create_alias_ip_pools()
         new_alias_ip = self._create_alias_ips(new_alias_ip_pool, '2.2.3.4')
         with self.rbac_utils.override_role(self):
             self.alias_ip_client.delete_alias_ip(
                 new_alias_ip['uuid'])
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="list_alias_ip_pools")
-    @decorators.idempotent_id('ffe85f35-589a-4b90-a1d3-6aed92a85954')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="list_alias_ip_pools")
+    @idempotent_id('ffe85f35-589a-4b90-a1d3-6aed92a85954')
     def test_list_alias_ip_pools(self):
-        """est method for list alias IP pools"""
+        """
+        est method for list alias IP pools
+        """
         with self.rbac_utils.override_role(self):
             self.alias_ip_client.list_alias_ip_pools()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="create_alias_ip_pools")
-    @decorators.idempotent_id('83abd2c0-d46a-4337-87d0-31cdb86e4226')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="create_alias_ip_pools")
+    @idempotent_id('83abd2c0-d46a-4337-87d0-31cdb86e4226')
     def test_create_alias_ip_pools(self):
-        """test method for create alias IP pool"""
+        """
+        test method for create alias IP pool
+        """
         with self.rbac_utils.override_role(self):
             self._create_alias_ip_pools()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="show_alias_ip_pool")
-    @decorators.idempotent_id('a1cbe111-ccba-4fa4-ba59-7d1ee08a15db')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="show_alias_ip_pool")
+    @idempotent_id('a1cbe111-ccba-4fa4-ba59-7d1ee08a15db')
     def test_show_alias_ip_pool(self):
-        """test method for show alias IP pool"""
+        """
+        test method for show alias IP pool
+        """
         new_alias_ip_pool = self._create_alias_ip_pools()
         with self.rbac_utils.override_role(self):
             self.alias_ip_client.show_alias_ip_pool(
                 new_alias_ip_pool['uuid'])
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="update_alias_ip_pool")
-    @decorators.idempotent_id('7f3448d7-22f1-4808-b3eb-15eeb3f079aa')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="update_alias_ip_pool")
+    @idempotent_id('7f3448d7-22f1-4808-b3eb-15eeb3f079aa')
     def test_update_alias_ip_pool(self):
-        """test method for update alias IP pool"""
+        """
+        test method for update alias IP pool
+        """
         new_alias_ip_pool = self._create_alias_ip_pools()
         update_name = data_utils.rand_name('test')
         with self.rbac_utils.override_role(self):
@@ -201,11 +222,13 @@
                 new_alias_ip_pool['uuid'],
                 display_name=update_name)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="delete_alias_ip_pool")
-    @decorators.idempotent_id('f59ea4fb-d10f-40c8-a8fa-dcd948ca89c8')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="delete_alias_ip_pool")
+    @idempotent_id('f59ea4fb-d10f-40c8-a8fa-dcd948ca89c8')
     def test_delete_alias_ip_pool(self):
-        """test method for delete alias IP pool"""
+        """
+        test method for delete alias IP pool
+        """
         new_alias_ip_pool = self._create_alias_ip_pools()
         with self.rbac_utils.override_role(self):
             self.alias_ip_client.delete_alias_ip_pool(
diff --git a/tungsten_tempest_plugin/tests/api/contrail/test_analytics_node.py b/tungsten_tempest_plugin/tests/api/contrail/test_analytics_node.py
index 23b1fcc..9d94dba 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_analytics_node.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_analytics_node.py
@@ -18,19 +18,24 @@
 """
 
 from oslo_log import log as logging
-from patrole_tempest_plugin import rbac_rule_validation
-from tempest import config
-from tempest.lib.common.utils import data_utils
-from tempest.lib import decorators
 
 from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
+from patrole_tempest_plugin import rbac_rule_validation
+
+from tempest import config
+from tempest.lib.common.utils import data_utils
+from tempest.lib.decorators import idempotent_id
+
 CONF = config.CONF
 LOG = logging.getLogger(__name__)
 
 
 class ContrailAnalyticsNodeTest(rbac_base.BaseContrailTest):
-    """Test class to test analytics node objects using RBAC roles"""
+
+    """
+    Test class to test analytics node objects using RBAC roles
+    """
 
     def _create_global_system_config(self):
         config_name = data_utils.rand_name('test-config')
@@ -60,40 +65,48 @@
                         new_node['uuid'])
         return new_node
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="list_analytics_nodes")
-    @decorators.idempotent_id('d3002e37-4b42-446d-b144-1b53f0dadfd3')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="list_analytics_nodes")
+    @idempotent_id('d3002e37-4b42-446d-b144-1b53f0dadfd3')
     def test_list_analytics_nodes(self):
-        """test method for list analytics nodes"""
+        """
+        test method for list analytics nodes
+        """
         with self.rbac_utils.override_role(self):
             self.analytics_node_client.list_analytics_nodes()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="show_analytics_node")
-    @decorators.idempotent_id('b51043fd-77ba-4312-b96f-569ed5153338')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="show_analytics_node")
+    @idempotent_id('b51043fd-77ba-4312-b96f-569ed5153338')
     def test_show_analytics_node(self):
-        """test method for show analytics nodes"""
+        """
+        test method for show analytics nodes
+        """
         # create global system config
         global_system_config = self._create_global_system_config()['name']
         new_node = self._create_analytics_node(global_system_config)
         with self.rbac_utils.override_role(self):
             self.analytics_node_client.show_analytics_node(new_node['uuid'])
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="create_analytics_nodes")
-    @decorators.idempotent_id('c57482c9-fcb4-4f41-95b0-7f0ffeee3dc3')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="create_analytics_nodes")
+    @idempotent_id('c57482c9-fcb4-4f41-95b0-7f0ffeee3dc3')
     def test_create_analytics_nodes(self):
-        """test method for create analytics nodes"""
+        """
+        test method for create analytics nodes
+        """
         # create global system config
         global_system_config = self._create_global_system_config()['name']
         with self.rbac_utils.override_role(self):
             self._create_analytics_node(global_system_config)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="update_analytics_node")
-    @decorators.idempotent_id('ff50a2df-6283-409e-ab03-c13b63acc8a0')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="update_analytics_node")
+    @idempotent_id('ff50a2df-6283-409e-ab03-c13b63acc8a0')
     def test_update_analytics_node(self):
-        """test method for update analytics nodes"""
+        """
+        test method for update analytics nodes
+        """
         # create global system config
         global_system_config = self._create_global_system_config()['name']
         new_node = self._create_analytics_node(global_system_config)
@@ -102,11 +115,13 @@
             self.analytics_node_client.update_analytics_node(
                 new_node['uuid'], display_name=update_name)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="delete_analytics_node")
-    @decorators.idempotent_id('972f997a-c89f-4227-8ae9-5a2335ec0b0a')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="delete_analytics_node")
+    @idempotent_id('972f997a-c89f-4227-8ae9-5a2335ec0b0a')
     def test_delete_analytics_node(self):
-        """test method for delete analytics nodes"""
+        """
+        test method for delete analytics nodes
+        """
         # create global system config
         global_system_config = self._create_global_system_config()['name']
         new_node = self._create_analytics_node(global_system_config)
diff --git a/tungsten_tempest_plugin/tests/api/contrail/test_attachments_client.py b/tungsten_tempest_plugin/tests/api/contrail/test_attachments_client.py
index d13fcf4..950af4c 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_attachments_client.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_attachments_client.py
@@ -17,18 +17,23 @@
 Tempest test-case to test attachment clients objects using RBAC roles
 """
 
-from patrole_tempest_plugin import rbac_rule_validation
-from tempest import config
-from tempest.lib.common.utils import data_utils
-from tempest.lib import decorators
 
 from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
+from patrole_tempest_plugin import rbac_rule_validation
+
+from tempest import config
+from tempest.lib.common.utils import data_utils
+from tempest.lib.decorators import idempotent_id
+
 CONF = config.CONF
 
 
 class AttachmentsClientTest(rbac_base.BaseContrailTest):
-    """Test class to test attachment client objects using RBAC roles"""
+
+    """
+    Test class to test attachment client objects using RBAC roles
+    """
 
     def _create_provider_attachments(self):
         provider_name = data_utils.rand_name('test-provider-attachment')
@@ -56,37 +61,45 @@
                         new_customer['uuid'])
         return new_customer
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="list_provider_attachments")
-    @decorators.idempotent_id('961dbf54-ae4f-42e8-9d27-69fa7df39013')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="list_provider_attachments")
+    @idempotent_id('961dbf54-ae4f-42e8-9d27-69fa7df39013')
     def test_list_provider_attachments(self):
-        """test method for list provider attachment objects"""
+        """
+        test method for list provider attachment objects
+        """
         with self.rbac_utils.override_role(self):
             self.attachments_client.list_provider_attachments()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="create_provider_attachments")
-    @decorators.idempotent_id('73ad032e-3e81-4dcc-be55-1987484207cd')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="create_provider_attachments")
+    @idempotent_id('73ad032e-3e81-4dcc-be55-1987484207cd')
     def test_create_providerattach(self):
-        """test method for create provider attachment objects"""
+        """
+        test method for create provider attachment objects
+        """
         with self.rbac_utils.override_role(self):
             self._create_provider_attachments()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="show_provider_attachment")
-    @decorators.idempotent_id('7b5278bc-dd79-495a-9f74-448c04f52bd2')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="show_provider_attachment")
+    @idempotent_id('7b5278bc-dd79-495a-9f74-448c04f52bd2')
     def test_show_provider_attachment(self):
-        """test method for delete provider attachment objects"""
+        """
+        test method for delete provider attachment objects
+        """
         new_provider = self._create_provider_attachments()
         with self.rbac_utils.override_role(self):
             self.attachments_client.show_provider_attachment(
                 new_provider['uuid'])
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="update_provider_attachment")
-    @decorators.idempotent_id('3516ff99-eddf-4932-afa4-433a43a0e5ac')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="update_provider_attachment")
+    @idempotent_id('3516ff99-eddf-4932-afa4-433a43a0e5ac')
     def test_update_provider_attachment(self):
-        """test method for update provider attachment objects"""
+        """
+        test method for update provider attachment objects
+        """
         new_provider = self._create_provider_attachments()
         update_name = data_utils.rand_name('test')
         with self.rbac_utils.override_role(self):
@@ -94,47 +107,57 @@
                 new_provider['uuid'],
                 display_name=update_name)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="delete_provider_attachment")
-    @decorators.idempotent_id('234d5505-2abf-418b-b43b-ea6f5a724fd3')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="delete_provider_attachment")
+    @idempotent_id('234d5505-2abf-418b-b43b-ea6f5a724fd3')
     def test_delete_provider_attachment(self):
-        """test method for delete provider attachment objects"""
+        """
+        test method for delete provider attachment objects
+        """
         new_provider = self._create_provider_attachments()
         with self.rbac_utils.override_role(self):
             self.attachments_client.delete_provider_attachment(
                 new_provider['uuid'])
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="list_customer_attachments")
-    @decorators.idempotent_id('3eca8fd8-ec3c-4a0e-8f62-b15d28796b7f')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="list_customer_attachments")
+    @idempotent_id('3eca8fd8-ec3c-4a0e-8f62-b15d28796b7f')
     def test_list_customer_attachments(self):
-        """test method for list customer attachment objects"""
+        """
+        test method for list customer attachment objects
+        """
         with self.rbac_utils.override_role(self):
             self.attachments_client.list_customer_attachments()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="create_customer_attachments")
-    @decorators.idempotent_id('53f93053-554c-4202-b763-0230d9a0553a')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="create_customer_attachments")
+    @idempotent_id('53f93053-554c-4202-b763-0230d9a0553a')
     def test_create_customerattachments(self):
-        """test method for create customer attachment objects"""
+        """
+        test method for create customer attachment objects
+        """
         with self.rbac_utils.override_role(self):
             self._create_customer_attachments()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="show_customer_attachment")
-    @decorators.idempotent_id('c6671540-695c-4cba-bcee-4a5d1cddd412')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="show_customer_attachment")
+    @idempotent_id('c6671540-695c-4cba-bcee-4a5d1cddd412')
     def test_show_customer_attachment(self):
-        """test method for show customer attachment objects"""
+        """
+        test method for show customer attachment objects
+        """
         new_customer = self._create_customer_attachments()
         with self.rbac_utils.override_role(self):
             self.attachments_client.show_customer_attachment(
                 new_customer['uuid'])
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="update_customer_attachment")
-    @decorators.idempotent_id('50419cca-dd03-4d02-9c06-88446647fcba')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="update_customer_attachment")
+    @idempotent_id('50419cca-dd03-4d02-9c06-88446647fcba')
     def test_update_customer_attachment(self):
-        """test method for update customer attachment objects"""
+        """
+        test method for update customer attachment objects
+        """
         new_customer = self._create_customer_attachments()
         update_name = data_utils.rand_name('test')
         with self.rbac_utils.override_role(self):
@@ -142,11 +165,13 @@
                 new_customer['uuid'],
                 display_name=update_name)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="delete_customer_attachment")
-    @decorators.idempotent_id('5385c275-8e86-4739-9cb6-d1e0ed522807')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="delete_customer_attachment")
+    @idempotent_id('5385c275-8e86-4739-9cb6-d1e0ed522807')
     def test_delete_customer_attachment(self):
-        """test method for delete customer attachment objects"""
+        """
+        test method for delete customer attachment objects
+        """
         new_customer = self._create_customer_attachments()
         with self.rbac_utils.override_role(self):
             self.attachments_client.delete_customer_attachment(
diff --git a/tungsten_tempest_plugin/tests/api/contrail/test_bgp_as_a_service.py b/tungsten_tempest_plugin/tests/api/contrail/test_bgp_as_a_service.py
index 40b9fe0..900d563 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_bgp_as_a_service.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_bgp_as_a_service.py
@@ -17,18 +17,22 @@
 Tempest test-case to test BGP as a Service objects using RBAC roles
 """
 
+from tungsten_tempest_plugin.tests.api.contrail import rbac_base
+
 from patrole_tempest_plugin import rbac_rule_validation
+
 from tempest import config
 from tempest.lib.common.utils import data_utils
-from tempest.lib import decorators
-
-from tungsten_tempest_plugin.tests.api.contrail import rbac_base
+from tempest.lib.decorators import idempotent_id
 
 CONF = config.CONF
 
 
 class BGPAsAServicesTest(rbac_base.BaseContrailTest):
-    """Test class to test BGP as a Service objects using RBAC roles"""
+
+    """
+    Test class to test BGP as a Service objects using RBAC roles
+    """
 
     def _create_bgp_as_a_services(self):
         bgp_name = data_utils.rand_name('test-bgp')
@@ -41,47 +45,57 @@
                         new_bgp['uuid'])
         return new_bgp
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="list_bgp_as_a_services")
-    @decorators.idempotent_id('d3153cd0-379e-4e62-9780-ef237e567fc5')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="list_bgp_as_a_services")
+    @idempotent_id('d3153cd0-379e-4e62-9780-ef237e567fc5')
     def test_list_bgp_as_a_services(self):
-        """test method for list bgp as a service objects"""
+        """
+        test method for list bgp as a service objects
+        """
         with self.rbac_utils.override_role(self):
             self.bgp_as_a_service_client.list_bgp_as_a_services()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="create_bgp_as_a_services")
-    @decorators.idempotent_id('a039f0c4-b53a-492b-a5c5-fbdf046afcf4')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="create_bgp_as_a_services")
+    @idempotent_id('a039f0c4-b53a-492b-a5c5-fbdf046afcf4')
     def test_create_bgp_as_a_services(self):
-        """test method for create bgp as a service objects"""
+        """
+        test method for create bgp as a service objects
+        """
         with self.rbac_utils.override_role(self):
             self._create_bgp_as_a_services()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="show_bgp_as_a_service")
-    @decorators.idempotent_id('c2fae8b4-929c-4d2f-914d-76a7414a56dc')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="show_bgp_as_a_service")
+    @idempotent_id('c2fae8b4-929c-4d2f-914d-76a7414a56dc')
     def test_show_bgp_as_a_service(self):
-        """test method for show bgp as a service objects"""
+        """
+        test method for show bgp as a service objects
+        """
         new_bgp = self._create_bgp_as_a_services()
         with self.rbac_utils.override_role(self):
             self.bgp_as_a_service_client.show_bgp_as_a_service(
                 new_bgp['uuid'])
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="delete_bgp_as_a_service")
-    @decorators.idempotent_id('78c8389a-7bb5-4027-bae1-923af3d6e77c')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="delete_bgp_as_a_service")
+    @idempotent_id('78c8389a-7bb5-4027-bae1-923af3d6e77c')
     def test_delete_bgp_as_a_service(self):
-        """test method for delete bgp as a service objects"""
+        """
+        test method for delete bgp as a service objects
+        """
         new_bgp = self._create_bgp_as_a_services()
         with self.rbac_utils.override_role(self):
             self.bgp_as_a_service_client.delete_bgp_as_a_service(
                 new_bgp['uuid'])
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="update_bgp_as_a_service")
-    @decorators.idempotent_id('38ba2ecb-71e2-4a2f-be43-e82491dffa05')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="update_bgp_as_a_service")
+    @idempotent_id('38ba2ecb-71e2-4a2f-be43-e82491dffa05')
     def test_update_bgp_as_a_service(self):
-        """test method for update bgp as a service objects"""
+        """
+        test method for update bgp as a service objects
+        """
         new_bgp = self._create_bgp_as_a_services()
         with self.rbac_utils.override_role(self):
             self.bgp_as_a_service_client.update_bgp_as_a_service(
diff --git a/tungsten_tempest_plugin/tests/api/contrail/test_config_client.py b/tungsten_tempest_plugin/tests/api/contrail/test_config_client.py
index d5aa1fb..051138b 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_config_client.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_config_client.py
@@ -20,19 +20,24 @@
 import random
 
 from oslo_log import log as logging
-from patrole_tempest_plugin import rbac_rule_validation
-from tempest import config
-from tempest.lib.common.utils import data_utils
-from tempest.lib import decorators
 
 from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
+from patrole_tempest_plugin import rbac_rule_validation
+
+from tempest import config
+from tempest.lib.common.utils import data_utils
+from tempest.lib.decorators import idempotent_id
+
 CONF = config.CONF
 LOG = logging.getLogger(__name__)
 
 
 class ConfigNodeTest(rbac_base.BaseContrailTest):
-    """Test class to test config node objects using RBAC roles"""
+
+    """
+    Test class to test config node objects using RBAC roles
+    """
 
     @staticmethod
     def _random_ip_generator():
@@ -43,7 +48,7 @@
     def _create_config_node(self):
         config_node_ip_address = self._random_ip_generator()
         display_name = data_utils.rand_name('config_node')
-        fq_name = [display_name]
+        fq_name = ["default-global-system-config", display_name]
         config_node = self.config_client.create_config_nodes(
             config_node_ip_address=config_node_ip_address,
             display_name=display_name, fq_name=fq_name)
@@ -54,48 +59,58 @@
                             config_node_id)
         return config_node
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="list_config_nodes")
-    @decorators.idempotent_id('b560e060-e4f0-45b0-93e2-55f0cb201e06')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="list_config_nodes")
+    @idempotent_id('b560e060-e4f0-45b0-93e2-55f0cb201e06')
     def test_list_config_nodes(self):
-        """test method for list config node objects"""
+        """
+        test method for list config node objects
+        """
         with self.rbac_utils.override_role(self):
             self.config_client.list_config_nodes()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="create_config_nodes")
-    @decorators.idempotent_id('a8d20d0d-dc5a-4cae-87c5-7f6914c3701e')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="create_config_nodes")
+    @idempotent_id('a8d20d0d-dc5a-4cae-87c5-7f6914c3701e')
     def test_create_config_nodes(self):
-        """test method for create config node objects"""
+        """
+        test method for create config node objects
+        """
         with self.rbac_utils.override_role(self):
             self._create_config_node()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="delete_config_node")
-    @decorators.idempotent_id('16573a85-57ab-418c-bb23-5dd936e7be90')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="delete_config_node")
+    @idempotent_id('16573a85-57ab-418c-bb23-5dd936e7be90')
     def test_delete_config_node(self):
-        """test method for delete config node objects"""
+        """
+        test method for delete config node objects
+        """
         config_node = self._create_config_node()
         config_node_uuid = config_node['config-node']['uuid']
         with self.rbac_utils.override_role(self):
             self.config_client.delete_config_node(
                 config_node_uuid)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="show_config_node")
-    @decorators.idempotent_id('a5b17108-4fa3-4d09-b861-e2857aab8f80')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="show_config_node")
+    @idempotent_id('a5b17108-4fa3-4d09-b861-e2857aab8f80')
     def test_show_config_node(self):
-        """test method for show config node objects"""
+        """
+        test method for show config node objects
+        """
         config_node = self._create_config_node()
         config_node_uuid = config_node['config-node']['uuid']
         with self.rbac_utils.override_role(self):
             self.config_client.show_config_node(config_node_uuid)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="update_config_node")
-    @decorators.idempotent_id('8f70d2c0-594b-4a94-ab15-88bd8a2e62e5')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="update_config_node")
+    @idempotent_id('8f70d2c0-594b-4a94-ab15-88bd8a2e62e5')
     def test_update_config_node(self):
-        """test method for update config node objects"""
+        """
+        test method for update config node objects
+        """
         config_node = self._create_config_node()
         config_node_uuid = config_node['config-node']['uuid']
         updated_name = data_utils.rand_name('new_config_node')
@@ -105,7 +120,10 @@
 
 
 class ConfigRootTest(rbac_base.BaseContrailTest):
-    """Test class to test config root objects using RBAC roles"""
+
+    """
+    Test class to test config root objects using RBAC roles
+    """
 
     def _create_config_root(self):
         display_name = data_utils.rand_name('config_root')
@@ -119,40 +137,48 @@
                             config_root_uuid)
         return config_root
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="create_config_roots")
-    @decorators.idempotent_id('291b28ea-d0d8-47cd-ac76-1f980047cb76')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="create_config_roots")
+    @idempotent_id('291b28ea-d0d8-47cd-ac76-1f980047cb76')
     def test_create_config_roots(self):
-        """test method for create config root service objects"""
+        """
+        test method for create config root service objects
+        """
         with self.rbac_utils.override_role(self):
             self._create_config_root()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="delete_config_root")
-    @decorators.idempotent_id('bd04c0fb-3deb-4904-ad2c-1a10933c30dd')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="delete_config_root")
+    @idempotent_id('bd04c0fb-3deb-4904-ad2c-1a10933c30dd')
     def test_delete_config_root(self):
-        """test method for delete config root service objects"""
+        """
+        test method for delete config root service objects
+        """
         config_root = self._create_config_root()
         config_root_uuid = config_root['config-root']['uuid']
         with self.rbac_utils.override_role(self):
             self.config_client.delete_config_root(
                 config_root_uuid)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="show_config_root")
-    @decorators.idempotent_id('fba2c419-9a83-4d88-9a26-84770544bb3f')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="show_config_root")
+    @idempotent_id('fba2c419-9a83-4d88-9a26-84770544bb3f')
     def test_show_config_root(self):
-        """test method for show config root service objects"""
+        """
+        test method for show config root service objects
+        """
         config_root = self._create_config_root()
         config_root_uuid = config_root['config-root']['uuid']
         with self.rbac_utils.override_role(self):
             self.config_client.show_config_root(config_root_uuid)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="update_config_root")
-    @decorators.idempotent_id('bfcc074f-5e1c-4b45-8a2a-857239f8acb0')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="update_config_root")
+    @idempotent_id('bfcc074f-5e1c-4b45-8a2a-857239f8acb0')
     def test_update_config_root(self):
-        """test method for update config root service objects"""
+        """
+        test method for update config root service objects
+        """
         config_root = self._create_config_root()
         config_root_uuid = config_root['config-root']['uuid']
         updated_name = data_utils.rand_name('new_config_root')
@@ -160,17 +186,22 @@
             self.config_client.update_config_root(
                 config_root_uuid, display_name=updated_name)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="list_config_roots")
-    @decorators.idempotent_id('316e7425-8fb0-41b4-9080-a76697abbafa')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="list_config_roots")
+    @idempotent_id('316e7425-8fb0-41b4-9080-a76697abbafa')
     def test_list_config_roots(self):
-        """test method for list config root service objects"""
+        """
+        test method for list config root service objects
+        """
         with self.rbac_utils.override_role(self):
             self.config_client.list_config_roots()
 
 
 class GlobalSystemConfigTest(rbac_base.BaseContrailTest):
-    """Test class to test config node objects using RBAC roles"""
+
+    """
+    Test class to test config node objects using RBAC roles
+    """
 
     def _create_global_system_config(self):
         config_name = data_utils.rand_name('test-config')
@@ -187,37 +218,45 @@
                         new_config['uuid'])
         return new_config
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="list_global_system_configs")
-    @decorators.idempotent_id('d1d189a7-14c1-49c5-b180-cd42ed2ca123')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="list_global_system_configs")
+    @idempotent_id('d1d189a7-14c1-49c5-b180-cd42ed2ca123')
     def test_list_global_system_configs(self):
-        """test method for list global system config service objects"""
+        """
+        test method for list global system config service objects
+        """
         with self.rbac_utils.override_role(self):
             self.config_client.list_global_system_configs()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="create_global_system_configs")
-    @decorators.idempotent_id('e0ba6a20-3e28-47ac-bf95-9a848fcee49a')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="create_global_system_configs")
+    @idempotent_id('e0ba6a20-3e28-47ac-bf95-9a848fcee49a')
     def test_create_global_sys_configs(self):
-        """test method for create global system config service objects"""
+        """
+        test method for create global system config service objects
+        """
         with self.rbac_utils.override_role(self):
             self._create_global_system_config()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="show_global_system_config")
-    @decorators.idempotent_id('4b9f9131-cb34-4b7d-9d06-c6aca85cce3a')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="show_global_system_config")
+    @idempotent_id('4b9f9131-cb34-4b7d-9d06-c6aca85cce3a')
     def test_show_global_system_config(self):
-        """test method for show global system config service objects"""
+        """
+        test method for show global system config service objects
+        """
         new_config = self._create_global_system_config()
         with self.rbac_utils.override_role(self):
             self.config_client.show_global_system_config(
                 new_config['uuid'])
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="update_global_system_config")
-    @decorators.idempotent_id('4f90dc83-da59-45a4-8ab6-b387bd6c2df4')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="update_global_system_config")
+    @idempotent_id('4f90dc83-da59-45a4-8ab6-b387bd6c2df4')
     def test_update_global_sys_config(self):
-        """test method for update global system config service objects"""
+        """
+        test method for update global system config service objects
+        """
         new_config = self._create_global_system_config()
         update_name = data_utils.rand_name('test')
         with self.rbac_utils.override_role(self):
@@ -225,11 +264,13 @@
                 new_config['uuid'],
                 display_name=update_name)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="delete_global_system_config")
-    @decorators.idempotent_id('fce1653c-e657-4a1e-8ced-7e02d297d6c9')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="delete_global_system_config")
+    @idempotent_id('fce1653c-e657-4a1e-8ced-7e02d297d6c9')
     def test_delete_global_sys_config(self):
-        """test method for delete global system config service objects"""
+        """
+        test method for delete global system config service objects
+        """
         new_config = self._create_global_system_config()
         with self.rbac_utils.override_role(self):
             self.config_client.delete_global_system_config(
diff --git a/tungsten_tempest_plugin/tests/api/contrail/test_database.py b/tungsten_tempest_plugin/tests/api/contrail/test_database.py
index 502eacb..97cadc7 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_database.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_database.py
@@ -18,19 +18,24 @@
 """
 
 from oslo_log import log as logging
-from patrole_tempest_plugin import rbac_rule_validation
-from tempest import config
-from tempest.lib.common.utils import data_utils
-from tempest.lib import decorators
 
 from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
+from patrole_tempest_plugin import rbac_rule_validation
+
+from tempest import config
+from tempest.lib.common.utils import data_utils
+from tempest.lib.decorators import idempotent_id
+
 CONF = config.CONF
 LOG = logging.getLogger(__name__)
 
 
 class ContrailDatabaseTest(rbac_base.BaseContrailTest):
-    """Test class to test database objects using RBAC roles"""
+
+    """
+    Test class to test database objects using RBAC roles
+    """
 
     def _create_global_system_config(self):
         config_name = data_utils.rand_name('test-config')
@@ -66,22 +71,26 @@
                         db_node['uuid'])
         return db_node
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="list_database_nodes")
-    @decorators.idempotent_id('5ae6f965-6161-443f-b19e-dfa7b364c533')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="list_database_nodes")
+    @idempotent_id('5ae6f965-6161-443f-b19e-dfa7b364c533')
     def test_list_database_nodes(self):
-        """test method for list database objects"""
+        """
+        test method for list database objects
+        """
         # Create global system config
         global_system_config = self._create_global_system_config()['name']
         self._create_database_node(global_system_config)
         with self.rbac_utils.override_role(self):
             self.db_client.list_database_nodes()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="show_database_node")
-    @decorators.idempotent_id('4a07d9a8-7b99-43bd-b628-06c023993aab')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="show_database_node")
+    @idempotent_id('4a07d9a8-7b99-43bd-b628-06c023993aab')
     def test_show_database_node(self):
-        """test method for show database objects"""
+        """
+        test method for show database objects
+        """
         # Create global system config
         global_system_config = self._create_global_system_config()['name']
         db_node = self._create_database_node(global_system_config)
@@ -89,21 +98,25 @@
         with self.rbac_utils.override_role(self):
             self.db_client.show_database_node(db_node_id)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="create_database_nodes")
-    @decorators.idempotent_id('b9aa9c6b-9381-44f0-94fb-e4523bf2a87e')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="create_database_nodes")
+    @idempotent_id('b9aa9c6b-9381-44f0-94fb-e4523bf2a87e')
     def test_create_database_nodes(self):
-        """test method for update database objects"""
+        """
+        test method for update database objects
+        """
         # Create global system config
         global_system_config = self._create_global_system_config()['name']
         with self.rbac_utils.override_role(self):
             self._create_database_node(global_system_config)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="update_database_node")
-    @decorators.idempotent_id('6e59f393-0e55-4327-871e-7f0ad53f2e17')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="update_database_node")
+    @idempotent_id('6e59f393-0e55-4327-871e-7f0ad53f2e17')
     def test_update_database_node(self):
-        """test method for update database objects"""
+        """
+        test method for update database objects
+        """
         # Create global system config
         global_system_config = self._create_global_system_config()['name']
         db_node = self._create_database_node(global_system_config)
@@ -114,11 +127,13 @@
                 db_node_id=db_node_id,
                 display_name=display_name)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="delete_database_node")
-    @decorators.idempotent_id('0cbc5a52-d7e7-4a1c-a85d-6bf44012d99b')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="delete_database_node")
+    @idempotent_id('0cbc5a52-d7e7-4a1c-a85d-6bf44012d99b')
     def test_delete_database_node(self):
-        """test method for delete database objects"""
+        """
+        test method for delete database objects
+        """
         # Create global system config
         global_system_config = self._create_global_system_config()['name']
         db_node = self._create_database_node(global_system_config)
diff --git a/tungsten_tempest_plugin/tests/api/contrail/test_discovery_service_assignment.py b/tungsten_tempest_plugin/tests/api/contrail/test_discovery_service_assignment.py
index 9063003..f8209e0 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_discovery_service_assignment.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_discovery_service_assignment.py
@@ -17,20 +17,22 @@
 Tempest test-case to test discovery service assignment objects using RBAC roles
 """
 
+from tungsten_tempest_plugin.tests.api.contrail import rbac_base
+
 from patrole_tempest_plugin import rbac_rule_validation
+
 from tempest import config
 from tempest.lib.common.utils import data_utils
-from tempest.lib import decorators
-
-from tungsten_tempest_plugin.tests.api.contrail import rbac_base
+from tempest.lib.decorators import idempotent_id
 
 CONF = config.CONF
 
 
 class DiscoveryServiceAssignmentTest(rbac_base.BaseContrailTest):
-    """Test class to test discovery service assignment objects using RBAC roles
 
     """
+    Test class to test discovery service assignment objects using RBAC roles
+    """
 
     def _create_discovery_service_assignments(self):
         dsa_name = [data_utils.rand_name('test-dsa')]
@@ -42,36 +44,44 @@
                         new_dsa['uuid'])
         return new_dsa
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="list_discovery_service_assignments")
-    @decorators.idempotent_id('9ac1e4ca-8983-403f-b644-7758935f2f36')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="list_discovery_service_assignments")
+    @idempotent_id('9ac1e4ca-8983-403f-b644-7758935f2f36')
     def test_list_discovery_service(self):
-        """test method for list discovery service assignment objects"""
+        """
+        test method for list discovery service assignment objects
+        """
         with self.rbac_utils.override_role(self):
             self.dsa_client.list_ds_assignments()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="create_discovery_service_assignments")
-    @decorators.idempotent_id('40ad1208-a039-4809-8516-41b4dfcbd00c')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="create_discovery_service_assignments")
+    @idempotent_id('40ad1208-a039-4809-8516-41b4dfcbd00c')
     def test_create_discovery_service(self):
-        """test method for create discovery service assignment objects"""
+        """
+        test method for create discovery service assignment objects
+        """
         with self.rbac_utils.override_role(self):
             self._create_discovery_service_assignments()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="show_discovery_service_assignment")
-    @decorators.idempotent_id('63660fe9-22b8-456c-a757-a7da1abfbce8')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="show_discovery_service_assignment")
+    @idempotent_id('63660fe9-22b8-456c-a757-a7da1abfbce8')
     def test_show_discovery_service(self):
-        """test method for show discovery service assignment objects"""
+        """
+        test method for show discovery service assignment objects
+        """
         new_dsa = self._create_discovery_service_assignments()
         with self.rbac_utils.override_role(self):
             self.dsa_client.show_ds_assignment(new_dsa['uuid'])
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="update_discovery_service_assignment")
-    @decorators.idempotent_id('71ce1404-965b-4670-abb7-5b6fea3b24b7')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="update_discovery_service_assignment")
+    @idempotent_id('71ce1404-965b-4670-abb7-5b6fea3b24b7')
     def test_update_discovery_service(self):
-        """test method for update discovery service assignment objects"""
+        """
+        test method for update discovery service assignment objects
+        """
         new_dsa = self._create_discovery_service_assignments()
         update_name = data_utils.rand_name('test')
         with self.rbac_utils.override_role(self):
@@ -80,11 +90,13 @@
                 fq_name=new_dsa['fq_name'],
                 display_name=update_name)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="delete_discovery_service_assignment")
-    @decorators.idempotent_id('e7ff845d-2140-4eb0-9720-26370459723b')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="delete_discovery_service_assignment")
+    @idempotent_id('e7ff845d-2140-4eb0-9720-26370459723b')
     def test_delete_discovery_service(self):
-        """test method for delete discovery service assignment objects"""
+        """
+        test method for delete discovery service assignment objects
+        """
         new_dsa = self._create_discovery_service_assignments()
         with self.rbac_utils.override_role(self):
             self.dsa_client.delete_ds_assignment(
diff --git a/tungsten_tempest_plugin/tests/api/contrail/test_domain.py b/tungsten_tempest_plugin/tests/api/contrail/test_domain.py
index d550bfb..8e74adf 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_domain.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_domain.py
@@ -18,19 +18,24 @@
 """
 
 from oslo_log import log as logging
-from patrole_tempest_plugin import rbac_rule_validation
-from tempest import config
-from tempest.lib.common.utils import data_utils
-from tempest.lib import decorators
 
 from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
+from patrole_tempest_plugin import rbac_rule_validation
+
+from tempest import config
+from tempest.lib.common.utils import data_utils
+from tempest.lib.decorators import idempotent_id
+
 CONF = config.CONF
 LOG = logging.getLogger(__name__)
 
 
 class DomainContrailTest(rbac_base.BaseContrailTest):
-    """Test class to test domain objects using RBAC roles"""
+
+    """
+    Test class to test domain objects using RBAC roles
+    """
 
     def _create_domains(self):
         fq_name = data_utils.rand_name('domain')
@@ -51,45 +56,55 @@
         }
         self.domain_client.update_domain(domain_uuid, **put_body)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="list_domains")
-    @decorators.idempotent_id('fa02e27b-f661-4186-a522-69e8fcb6abf9')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="list_domains")
+    @idempotent_id('fa02e27b-f661-4186-a522-69e8fcb6abf9')
     def test_list_domains(self):
-        """test method for list domain objects"""
+        """
+        test method for list domain objects
+        """
         with self.rbac_utils.override_role(self):
             self.domain_client.list_domains()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="create_domains")
-    @decorators.idempotent_id('3f18be91-c37b-4e17-bf5e-b704d993f738')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="create_domains")
+    @idempotent_id('3f18be91-c37b-4e17-bf5e-b704d993f738')
     def test_create_domains(self):
-        """test method for create domain objects"""
+        """
+        test method for create domain objects
+        """
         with self.rbac_utils.override_role(self):
             self._create_domains()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="show_domain")
-    @decorators.idempotent_id('e79f8581-ba9f-420a-aa26-f1cb51cf4bbf')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="show_domain")
+    @idempotent_id('e79f8581-ba9f-420a-aa26-f1cb51cf4bbf')
     def test_show_domain(self):
-        """test method for show domain objects"""
+        """
+        test method for show domain objects
+        """
         domain_uuid = self._create_domains()
         with self.rbac_utils.override_role(self):
             self.domain_client.show_domain(domain_uuid)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="update_domain")
-    @decorators.idempotent_id('fdf72539-20b5-4bdb-b22b-70c86fbb52a4')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="update_domain")
+    @idempotent_id('fdf72539-20b5-4bdb-b22b-70c86fbb52a4')
     def test_update_domain(self):
-        """test method for update domain objects"""
+        """
+        test method for update domain objects
+        """
         domain_uuid = self._create_domains()
         with self.rbac_utils.override_role(self):
             self._update_domain(domain_uuid)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="delete_domain")
-    @decorators.idempotent_id('abaad2b0-6bde-40b8-b257-20ca805c1dca')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="delete_domain")
+    @idempotent_id('abaad2b0-6bde-40b8-b257-20ca805c1dca')
     def test_delete_domain(self):
-        """test method for delete domain objects"""
+        """
+        test method for delete domain objects
+        """
         domain_uuid = self._create_domains()
         with self.rbac_utils.override_role(self):
             self.domain_client.delete_domain(domain_uuid)
diff --git a/tungsten_tempest_plugin/tests/api/contrail/test_dsa_rule.py b/tungsten_tempest_plugin/tests/api/contrail/test_dsa_rule.py
index af3cab2..95ed9a9 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_dsa_rule.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_dsa_rule.py
@@ -18,19 +18,24 @@
 """
 
 from oslo_log import log as logging
-from patrole_tempest_plugin import rbac_rule_validation
-from tempest import config
-from tempest.lib.common.utils import data_utils
-from tempest.lib import decorators
 
 from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
+from patrole_tempest_plugin import rbac_rule_validation
+
+from tempest import config
+from tempest.lib.common.utils import data_utils
+from tempest.lib.decorators import idempotent_id
+
 CONF = config.CONF
 LOG = logging.getLogger(__name__)
 
 
 class ContrailDSARuleTest(rbac_base.BaseContrailTest):
-    """Test class to test DSA rule objects using RBAC roles"""
+
+    """
+    Test class to test DSA rule objects using RBAC roles
+    """
 
     def _create_discovery_service_assignments(self):
         dsa_name = [data_utils.rand_name('test-dsa')]
@@ -55,19 +60,23 @@
                         new_rule['uuid'])
         return new_rule
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="list_dsa_rules")
-    @decorators.idempotent_id('3227673b-96fc-4d26-ab0b-109347e9e9c2')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="list_dsa_rules")
+    @idempotent_id('3227673b-96fc-4d26-ab0b-109347e9e9c2')
     def test_list_dsa_rules(self):
-        """test method for list dsa rules objects"""
+        """
+        test method for list dsa rules objects
+        """
         with self.rbac_utils.override_role(self):
             self.dsa_rule_client.list_dsa_rules()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="show_dsa_rule")
-    @decorators.idempotent_id('0f90ea4f-c050-4c31-93a7-1e0c58df914e')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="show_dsa_rule")
+    @idempotent_id('0f90ea4f-c050-4c31-93a7-1e0c58df914e')
     def test_show_dsa_rule(self):
-        """test method for show dsa rules objects"""
+        """
+        test method for show dsa rules objects
+        """
         # create discover service assignment
         discovery_service_assignment = \
             self._create_discovery_service_assignments()['name']
@@ -75,22 +84,26 @@
         with self.rbac_utils.override_role(self):
             self.dsa_rule_client.show_dsa_rule(new_rule['uuid'])
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="create_dsa_rules")
-    @decorators.idempotent_id('c3774ca3-45d0-4ca8-a6b3-f895441b1d0e')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="create_dsa_rules")
+    @idempotent_id('c3774ca3-45d0-4ca8-a6b3-f895441b1d0e')
     def test_create_dsa_rules(self):
-        """test method for create dsa rules objects"""
+        """
+        test method for create dsa rules objects
+        """
         # create discover service assignment
         discovery_service_assignment = \
             self._create_discovery_service_assignments()['name']
         with self.rbac_utils.override_role(self):
             self._create_dsa_rules(discovery_service_assignment)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="update_dsa_rule")
-    @decorators.idempotent_id('5cfe7e8e-d91c-4183-8e6c-733e826707be')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="update_dsa_rule")
+    @idempotent_id('5cfe7e8e-d91c-4183-8e6c-733e826707be')
     def test_update_dsa_rule(self):
-        """test method for update dsa rules objects"""
+        """
+        test method for update dsa rules objects
+        """
         # create discover service assignment
         discovery_service_assignment = \
             self._create_discovery_service_assignments()['name']
@@ -100,11 +113,13 @@
             self.dsa_rule_client.update_dsa_rule(
                 new_rule['uuid'], display_name=update_name)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="delete_dsa_rule")
-    @decorators.idempotent_id('d3b869db-fa49-48f0-861a-08efd9879b15')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="delete_dsa_rule")
+    @idempotent_id('d3b869db-fa49-48f0-861a-08efd9879b15')
     def test_delete_dsa_rule(self):
-        """test method for delete dsa rules objects"""
+        """
+        test method for delete dsa rules objects
+        """
         # create discover service assignment
         discovery_service_assignment = \
             self._create_discovery_service_assignments()['name']
diff --git a/tungsten_tempest_plugin/tests/api/contrail/test_floating_ip.py b/tungsten_tempest_plugin/tests/api/contrail/test_floating_ip.py
index a3c5752..ee325bc 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_floating_ip.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_floating_ip.py
@@ -18,19 +18,24 @@
 """
 
 from oslo_log import log as logging
-from patrole_tempest_plugin import rbac_rule_validation
-from tempest import config
-from tempest.lib.common.utils import data_utils
-from tempest.lib import decorators
 
 from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
+from patrole_tempest_plugin import rbac_rule_validation
+
+from tempest import config
+from tempest.lib.common.utils import data_utils
+from tempest.lib.decorators import idempotent_id
+
 CONF = config.CONF
 LOG = logging.getLogger(__name__)
 
 
 class BaseFloatingIpTest(rbac_base.BaseContrailTest):
-    """Base class to test floating IP objects using RBAC roles"""
+
+    """
+    Base class to test floating IP objects using RBAC roles
+    """
 
     @classmethod
     def resource_setup(cls):
@@ -65,13 +70,13 @@
                              'uuid': cls.ipam['uuid'],
                              'attr': {
                                  'ipam_subnets': [{'subnet': subnet_ip_prefix}]
+                                 }
                              }
-                         }
-                     ],
+                         ],
                      'virtual_network_properties': {
                          'forwarding_mode': 'l3'
-                     }
-                     }
+                         }
+                    }
         body = cls.vn_client.create_virtual_networks(**post_body)
         cls.network = body['virtual-network']
 
@@ -85,7 +90,10 @@
 
 
 class FloatingIpPoolTest(BaseFloatingIpTest):
-    """Test class to test Floating IP pool objects using RBAC roles"""
+
+    """
+    Test class to test Floating IP pool objects using RBAC roles
+    """
 
     def _create_floating_ip_pool(self):
         pool_name = data_utils.rand_name('rbac-fip-pool')
@@ -105,55 +113,68 @@
 
         return fip_pool
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="create_floating_ip_pools")
-    @decorators.idempotent_id('a83ca5e8-be4b-4161-869c-f981a724cf82')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="create_floating_ip_pools")
+    @idempotent_id('a83ca5e8-be4b-4161-869c-f981a724cf82')
     def test_create_floating_ip_pools(self):
-        """test method for create floating IP pool objects"""
+        """
+        test method for create floating IP pool objects
+        """
         with self.rbac_utils.override_role(self):
             self._create_floating_ip_pool()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="list_floating_ip_pools")
-    @decorators.idempotent_id('9d20e78d-0463-4a0e-b30c-40770bee35bc')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="list_floating_ip_pools")
+    @idempotent_id('9d20e78d-0463-4a0e-b30c-40770bee35bc')
     def test_list_floating_ip_pools(self):
-        """test method for list floating IP pool objects"""
+        """
+        test method for list floating IP pool objects
+        """
         self._create_floating_ip_pool()
         with self.rbac_utils.override_role(self):
             self.fip_client.list_floating_ip_pools()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="show_floating_ip_pool")
-    @decorators.idempotent_id('1ec3124c-c15c-4ee6-b2de-2feed9599e38')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="show_floating_ip_pool")
+    @idempotent_id('1ec3124c-c15c-4ee6-b2de-2feed9599e38')
     def test_show_floating_ip_pool(self):
-        """test method for show floating IP pool objects"""
+        """
+        test method for show floating IP pool objects
+        """
         uuid = self._create_floating_ip_pool()['uuid']
         with self.rbac_utils.override_role(self):
             self.fip_client.show_floating_ip_pool(uuid)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="update_floating_ip_pool")
-    @decorators.idempotent_id('6563f2e7-ae6b-483b-8c07-0111efc86817')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="update_floating_ip_pool")
+    @idempotent_id('6563f2e7-ae6b-483b-8c07-0111efc86817')
     def test_update_floating_ip_pool(self):
-        """test method for update floating IP pool objects"""
+        """
+        test method for update floating IP pool objects
+        """
         uuid = self._create_floating_ip_pool()['uuid']
         with self.rbac_utils.override_role(self):
             self.fip_client.update_floating_ip_pool(
                 uuid,
                 display_name='rbac-fip-pool-new-name')
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="delete_floating_ip_pool")
-    @decorators.idempotent_id('c4b449ae-2f12-49cf-9dec-2b21c143aff6')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="delete_floating_ip_pool")
+    @idempotent_id('c4b449ae-2f12-49cf-9dec-2b21c143aff6')
     def test_delete_floating_ip_pool(self):
-        """test method for delete floating IP pool objects"""
+        """
+        test method for delete floating IP pool objects
+        """
         uuid = self._create_floating_ip_pool()['uuid']
         with self.rbac_utils.override_role(self):
             self.fip_client.delete_floating_ip_pool(uuid)
 
 
 class FloatingIpTest(BaseFloatingIpTest):
-    """Test class to test floating IP objects using RBAC roles"""
+
+    """
+    Test class to test floating IP objects using RBAC roles
+    """
 
     @classmethod
     def resource_setup(cls):
@@ -188,48 +209,58 @@
                         fip['uuid'])
         return fip
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="create_floating_ips")
-    @decorators.idempotent_id('ff05f70f-9db9-43cb-a5ce-38cbbef2c430')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="create_floating_ips")
+    @idempotent_id('ff05f70f-9db9-43cb-a5ce-38cbbef2c430')
     def test_create_floating_ips(self):
-        """test method for create floating IP objects"""
+        """
+        test method for create floating IP objects
+        """
         with self.rbac_utils.override_role(self):
             self._create_floating_ip()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="list_floating_ips")
-    @decorators.idempotent_id('e56046f9-32f9-41ce-9c1b-b982997ac347')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="list_floating_ips")
+    @idempotent_id('e56046f9-32f9-41ce-9c1b-b982997ac347')
     def test_list_floating_ips(self):
-        """test method for list floating IP objects"""
+        """
+        test method for list floating IP objects
+        """
         self._create_floating_ip()
         with self.rbac_utils.override_role(self):
             self.fip_client.list_floating_ips()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="show_floating_ip")
-    @decorators.idempotent_id('293f2c26-4101-4a2f-86d4-feb2878bd511')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="show_floating_ip")
+    @idempotent_id('293f2c26-4101-4a2f-86d4-feb2878bd511')
     def test_show_floating_ip(self):
-        """test method for show floating IP objects"""
+        """
+        test method for show floating IP objects
+        """
         uuid = self._create_floating_ip()['uuid']
         with self.rbac_utils.override_role(self):
             self.fip_client.show_floating_ip(uuid)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="update_floating_ip")
-    @decorators.idempotent_id('a09283c9-73d3-42f7-876d-f33040686d6d')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="update_floating_ip")
+    @idempotent_id('a09283c9-73d3-42f7-876d-f33040686d6d')
     def test_update_floating_ip(self):
-        """test method for update floating IP objects"""
+        """
+        test method for update floating IP objects
+        """
         uuid = self._create_floating_ip()['uuid']
         with self.rbac_utils.override_role(self):
             self.fip_client.update_floating_ip(
                 uuid,
                 display_name='rbac-fip-new-name')
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="delete_floating_ip")
-    @decorators.idempotent_id('a26f162f-da56-4153-aed6-bffccba92bc7')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="delete_floating_ip")
+    @idempotent_id('a26f162f-da56-4153-aed6-bffccba92bc7')
     def test_delete_floating_ip(self):
-        """test method for delete floating IP objects"""
+        """
+        test method for delete floating IP objects
+        """
         uuid = self._create_floating_ip()['uuid']
         with self.rbac_utils.override_role(self):
             self.fip_client.delete_floating_ip(uuid)
diff --git a/tungsten_tempest_plugin/tests/api/contrail/test_forwarding_class.py b/tungsten_tempest_plugin/tests/api/contrail/test_forwarding_class.py
index 5ca5831..6f642f9 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_forwarding_class.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_forwarding_class.py
@@ -18,19 +18,24 @@
 """
 
 from oslo_log import log as logging
-from patrole_tempest_plugin import rbac_rule_validation
-from tempest import config
-from tempest.lib.common.utils import data_utils
-from tempest.lib import decorators
 
 from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
+from patrole_tempest_plugin import rbac_rule_validation
+
+from tempest import config
+from tempest.lib.common.utils import data_utils
+from tempest.lib.decorators import idempotent_id
+
 CONF = config.CONF
 LOG = logging.getLogger(__name__)
 
 
 class ContrailForwardingClassTest(rbac_base.BaseContrailTest):
-    """Test class to test Forwarding class objects using RBAC roles"""
+
+    """
+    Test class to test Forwarding class objects using RBAC roles
+    """
 
     def _create_global_system_config(self):
         config_name = data_utils.rand_name('test-config')
@@ -80,19 +85,23 @@
                         new_fclass['uuid'])
         return new_fclass
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="list_forwarding_classs")
-    @decorators.idempotent_id('807a66fd-d4a4-472c-a13d-7ba590509e6e')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="list_forwarding_classs")
+    @idempotent_id('807a66fd-d4a4-472c-a13d-7ba590509e6e')
     def test_list_forwarding_classs(self):
-        """test method for list forwarding classes objects"""
+        """
+        test method for list forwarding classes objects
+        """
         with self.rbac_utils.override_role(self):
             self.forwarding_class_client.list_forwarding_classs()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="show_forwarding_class")
-    @decorators.idempotent_id('8ef21f71-72a4-4de9-af93-6e759aa463c0')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="show_forwarding_class")
+    @idempotent_id('8ef21f71-72a4-4de9-af93-6e759aa463c0')
     def test_show_forwarding_class(self):
-        """test method for show forwarding classes objects"""
+        """
+        test method for show forwarding classes objects
+        """
         # Create global system config
         global_system_config = self._create_global_system_config()['name']
         # Create a global qos config
@@ -104,11 +113,13 @@
             self.forwarding_class_client.show_forwarding_class(
                 new_fclass['uuid'])
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="create_forwarding_classs")
-    @decorators.idempotent_id('d098859c-ad36-4385-8fb0-c00934a99b6f')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="create_forwarding_classs")
+    @idempotent_id('d098859c-ad36-4385-8fb0-c00934a99b6f')
     def test_create_forwarding_classs(self):
-        """test method for create forwarding classes objects"""
+        """
+        test method for create forwarding classes objects
+        """
         # Create global system config
         global_system_config = self._create_global_system_config()['name']
         # Create a global qos config
@@ -118,11 +129,13 @@
             self._create_forwarding_class(global_system_config,
                                           global_qos_config)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="update_forwarding_class")
-    @decorators.idempotent_id('589dc03d-a25d-48be-9d9c-d3f92ff2cfc6')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="update_forwarding_class")
+    @idempotent_id('589dc03d-a25d-48be-9d9c-d3f92ff2cfc6')
     def test_update_forwarding_class(self):
-        """test method for update forwarding classes objects"""
+        """
+        test method for update forwarding classes objects
+        """
         # Create global system config
         global_system_config = self._create_global_system_config()['name']
         # Create a global qos config
@@ -135,11 +148,13 @@
             self.forwarding_class_client.update_forwarding_class(
                 new_fclass['uuid'], display_name=update_name)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="delete_forwarding_class")
-    @decorators.idempotent_id('a0348ffc-68c5-4d94-ba03-d08483503ced')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="delete_forwarding_class")
+    @idempotent_id('a0348ffc-68c5-4d94-ba03-d08483503ced')
     def test_delete_forwarding_class(self):
-        """test method for delete forwarding classes objects"""
+        """
+        test method for delete forwarding classes objects
+        """
         # Create global system config
         global_system_config = self._create_global_system_config()['name']
         # Create a global qos config
diff --git a/tungsten_tempest_plugin/tests/api/contrail/test_fqname_id.py b/tungsten_tempest_plugin/tests/api/contrail/test_fqname_id.py
index bedd059..e8c8a3c 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_fqname_id.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_fqname_id.py
@@ -18,19 +18,24 @@
 """
 
 from oslo_log import log as logging
-from patrole_tempest_plugin import rbac_rule_validation
-from tempest import config
-from tempest.lib.common.utils import data_utils
-from tempest.lib import decorators
 
 from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
+from patrole_tempest_plugin import rbac_rule_validation
+
+from tempest import config
+from tempest.lib.common.utils import data_utils
+from tempest.lib.decorators import idempotent_id
+
 CONF = config.CONF
 LOG = logging.getLogger(__name__)
 
 
 class FqnameIdTest(rbac_base.BaseContrailTest):
-    """Test class to test Fqname ID objects using RBAC roles"""
+
+    """
+    Test class to test Fqname ID objects using RBAC roles
+    """
 
     @classmethod
     def resource_setup(cls):
@@ -49,19 +54,23 @@
                                  cls.network['uuid'])
         super(FqnameIdTest, cls).resource_cleanup()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="fqname_to_id")
-    @decorators.idempotent_id('1fc1350b-3146-49bc-9af5-a61a98b55541')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="fqname_to_id")
+    @idempotent_id('1fc1350b-3146-49bc-9af5-a61a98b55541')
     def test_fqname_to_id(self):
-        """test method for fqname to id rules objects"""
+        """
+        test method for fqname to id rules objects
+        """
         with self.rbac_utils.override_role(self):
             self.fq_client.fqname_to_id(fq_name=self.network['fq_name'],
                                         type=self.type)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="id_to_fqname")
-    @decorators.idempotent_id('ecdd77d7-8508-4639-86cd-b97907b363ff')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="id_to_fqname")
+    @idempotent_id('ecdd77d7-8508-4639-86cd-b97907b363ff')
     def test_id_to_fqname(self):
-        """test method for id to fqname rules objects"""
+        """
+        test method for id to fqname rules objects
+        """
         with self.rbac_utils.override_role(self):
             self.fq_client.id_to_fqname(uuid=self.network['uuid'])
diff --git a/tungsten_tempest_plugin/tests/api/contrail/test_instance_ip.py b/tungsten_tempest_plugin/tests/api/contrail/test_instance_ip.py
index 4b0b453..d242ffd 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_instance_ip.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_instance_ip.py
@@ -18,19 +18,24 @@
 """
 
 from oslo_log import log as logging
-from patrole_tempest_plugin import rbac_rule_validation
-from tempest import config
-from tempest.lib.common.utils import data_utils
-from tempest.lib import decorators
 
 from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
+from patrole_tempest_plugin import rbac_rule_validation
+
+from tempest import config
+from tempest.lib.common.utils import data_utils
+from tempest.lib.decorators import idempotent_id
+
 CONF = config.CONF
 LOG = logging.getLogger(__name__)
 
 
 class InstanceIPTest(rbac_base.BaseContrailTest):
-    """Test class to test instance IP objects using RBAC roles"""
+
+    """
+    Test class to test instance IP objects using RBAC roles
+    """
 
     @classmethod
     def resource_setup(cls):
@@ -60,13 +65,13 @@
                              'uuid': cls.ipam['uuid'],
                              'attr': {
                                  'ipam_subnets': [{'subnet': subnet_ip_prefix}]
+                                 }
                              }
-                         }
-                     ],
+                         ],
                      'virtual_network_properties': {
                          'forwarding_mode': 'l3'
-                     }
-                     }
+                         }
+                    }
         body = cls.vn_client.create_virtual_networks(**post_body)
         cls.network = body['virtual-network']
 
@@ -100,48 +105,58 @@
                         iip['uuid'])
         return iip
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="list_instance_ips")
-    @decorators.idempotent_id('31db3b3f-c40b-4f7f-bb8b-0a110f099553')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="list_instance_ips")
+    @idempotent_id('31db3b3f-c40b-4f7f-bb8b-0a110f099553')
     def test_list_instance_ips(self):
-        """test method for list instance IP objects"""
+        """
+        test method for list instance IP objects
+        """
         self._create_instance_ip()
         with self.rbac_utils.override_role(self):
             self.iip_client.list_instance_ips()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="create_instance_ips")
-    @decorators.idempotent_id('78f5cd4d-345d-4d87-8b8b-4d5d3fec4a12')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="create_instance_ips")
+    @idempotent_id('78f5cd4d-345d-4d87-8b8b-4d5d3fec4a12')
     def test_create_instance_ips(self):
-        """test method for create instance IP objects"""
+        """
+        test method for create instance IP objects
+        """
         with self.rbac_utils.override_role(self):
             self._create_instance_ip()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="show_instance_ip")
-    @decorators.idempotent_id('276f3838-d9cb-4432-bbb4-db31c4c1db5c')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="show_instance_ip")
+    @idempotent_id('276f3838-d9cb-4432-bbb4-db31c4c1db5c')
     def test_show_instance_ip(self):
-        """test method for update instance IP objects"""
+        """
+        test method for update instance IP objects
+        """
         uuid = self._create_instance_ip()['uuid']
         with self.rbac_utils.override_role(self):
             self.iip_client.show_instance_ip(uuid)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="update_instance_ip")
-    @decorators.idempotent_id('b85975a5-176f-44b1-a615-b6f0a39a7708')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="update_instance_ip")
+    @idempotent_id('b85975a5-176f-44b1-a615-b6f0a39a7708')
     def test_update_instance_ip(self):
-        """test method for update instance IP objects"""
+        """
+        test method for update instance IP objects
+        """
         uuid = self._create_instance_ip()['uuid']
         with self.rbac_utils.override_role(self):
             self.iip_client.update_instance_ip(
                 uuid,
                 display_name='rbac-iip-new-name')
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="delete_instance_ip")
-    @decorators.idempotent_id('d9c1d400-1dfb-4adb-8d97-0e8b498226b7')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="delete_instance_ip")
+    @idempotent_id('d9c1d400-1dfb-4adb-8d97-0e8b498226b7')
     def test_delete_instance_ip(self):
-        """test method for delete instance IP objects"""
+        """
+        test method for delete instance IP objects
+        """
         uuid = self._create_instance_ip()['uuid']
         with self.rbac_utils.override_role(self):
             self.iip_client.delete_instance_ip(uuid)
diff --git a/tungsten_tempest_plugin/tests/api/contrail/test_interfaces.py b/tungsten_tempest_plugin/tests/api/contrail/test_interfaces.py
index d14a878..9115fc2 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_interfaces.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_interfaces.py
@@ -18,19 +18,24 @@
 """
 
 from oslo_log import log as logging
-from patrole_tempest_plugin import rbac_rule_validation
-from tempest import config
-from tempest.lib.common.utils import data_utils
-from tempest.lib import decorators
 
 from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
+from patrole_tempest_plugin import rbac_rule_validation
+
+from tempest import config
+from tempest.lib.common.utils import data_utils
+from tempest.lib.decorators import idempotent_id
+
 CONF = config.CONF
 LOG = logging.getLogger(__name__)
 
 
 class InterfacesTest(rbac_base.BaseContrailTest):
-    """Test class to test interfaces objects using RBAC roles"""
+
+    """
+    Test class to test interfaces objects using RBAC roles
+    """
 
     router_name = data_utils.rand_name('rbac-physical-router')
     physical_if_name = data_utils.rand_name('rbac-physical-interface')
@@ -88,29 +93,35 @@
                         logical_if['uuid'])
         return logical_if
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="list_physical_interfaces")
-    @decorators.idempotent_id('c496a2b4-51b2-4674-a60e-483a315baccb')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="list_physical_interfaces")
+    @idempotent_id('c496a2b4-51b2-4674-a60e-483a315baccb')
     def test_list_physical_interfaces(self):
-        """test method for list physical interfaces objects"""
+        """
+        test method for list physical interfaces objects
+        """
         with self.rbac_utils.override_role(self):
             self.interface_client.list_physical_interfaces()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="create_physical_interfaces")
-    @decorators.idempotent_id('066f53d8-3d2a-4ad6-983f-243de7c12962')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="create_physical_interfaces")
+    @idempotent_id('066f53d8-3d2a-4ad6-983f-243de7c12962')
     def test_create_physical_interfaces(self):
-        """test method for create physical interfaces objects"""
+        """
+        test method for create physical interfaces objects
+        """
 
         self._create_physical_router()
         with self.rbac_utils.override_role(self):
             self._create_physical_interface()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="update_physical_interface")
-    @decorators.idempotent_id('91c4fc90-ed0f-42ec-87c6-ff6c2a9ab8de')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="update_physical_interface")
+    @idempotent_id('91c4fc90-ed0f-42ec-87c6-ff6c2a9ab8de')
     def test_update_physical_interface(self):
-        """test method for update physical interfaces objects"""
+        """
+        test method for update physical interfaces objects
+        """
         self._create_physical_router()
         uuid = self._create_physical_interface()['uuid']
         # Required for Contrail 3.0.3 but not for 3.1.1
@@ -124,50 +135,60 @@
             self.interface_client.update_physical_interface(
                 uuid, **body)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="delete_physical_interface")
-    @decorators.idempotent_id('5d77ea76-be8c-49cc-8f08-72fbdaf9028f')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="delete_physical_interface")
+    @idempotent_id('5d77ea76-be8c-49cc-8f08-72fbdaf9028f')
     def test_delete_physical_interface(self):
-        """test method for delete physical interfaces objects"""
+        """
+        test method for delete physical interfaces objects
+        """
         self._create_physical_router()
         uuid = self._create_physical_interface()['uuid']
 
         with self.rbac_utils.override_role(self):
             self.interface_client.delete_physical_interface(uuid)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="show_physical_interface")
-    @decorators.idempotent_id('2c75c7e7-ef34-4e24-9c2f-5a2182db33a6')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="show_physical_interface")
+    @idempotent_id('2c75c7e7-ef34-4e24-9c2f-5a2182db33a6')
     def test_show_physical_interface(self):
-        """test method for show physical interfaces objects"""
+        """
+        test method for show physical interfaces objects
+        """
         self._create_physical_router()
         uuid = self._create_physical_interface()['uuid']
         with self.rbac_utils.override_role(self):
             self.interface_client.show_physical_interface(uuid)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="list_logical_interfaces")
-    @decorators.idempotent_id('43ac3727-4a43-42d7-b52f-df75018915b9')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="list_logical_interfaces")
+    @idempotent_id('43ac3727-4a43-42d7-b52f-df75018915b9')
     def test_list_logical_interfaces(self):
-        """test method for list physical interfaces objects"""
+        """
+        test method for list physical interfaces objects
+        """
         with self.rbac_utils.override_role(self):
             self.interface_client.list_logical_interfaces()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="create_logical_interfaces")
-    @decorators.idempotent_id('503facf2-0752-47e4-a0a4-7a3103133a61')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="create_logical_interfaces")
+    @idempotent_id('503facf2-0752-47e4-a0a4-7a3103133a61')
     def test_create_logical_interfaces(self):
-        """test method for create logical interfaces objects"""
+        """
+        test method for create logical interfaces objects
+        """
         self._create_physical_router()
         self._create_physical_interface()
         with self.rbac_utils.override_role(self):
             self._create_logical_interface()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="update_logical_interface")
-    @decorators.idempotent_id('63c991f4-6aba-454c-9c49-522dc77b3f5c')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="update_logical_interface")
+    @idempotent_id('63c991f4-6aba-454c-9c49-522dc77b3f5c')
     def test_update_logical_interface(self):
-        """test method for update logical interfaces objects"""
+        """
+        test method for update logical interfaces objects
+        """
         self._create_physical_router()
         self._create_physical_interface()
         uuid = self._create_logical_interface()['uuid']
@@ -182,22 +203,26 @@
             self.interface_client.update_logical_interface(
                 uuid, **body)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="delete_logical_interface")
-    @decorators.idempotent_id('a36743d1-3ea1-4cf5-89d8-9c0b885fa625')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="delete_logical_interface")
+    @idempotent_id('a36743d1-3ea1-4cf5-89d8-9c0b885fa625')
     def test_delete_logical_interface(self):
-        """test method for update logical interfaces objects"""
+        """
+        test method for update logical interfaces objects
+        """
         self._create_physical_router()
         self._create_physical_interface()
         uuid = self._create_logical_interface()['uuid']
         with self.rbac_utils.override_role(self):
             self.interface_client.delete_logical_interface(uuid)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="show_logical_interface")
-    @decorators.idempotent_id('f0f7fab7-eeb9-4d29-8415-31a50180fb44')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="show_logical_interface")
+    @idempotent_id('f0f7fab7-eeb9-4d29-8415-31a50180fb44')
     def test_show_logical_interface(self):
-        """test method for show logical interfaces objects"""
+        """
+        test method for show logical interfaces objects
+        """
         self._create_physical_router()
         self._create_physical_interface()
         uuid = self._create_logical_interface()['uuid']
diff --git a/tungsten_tempest_plugin/tests/api/contrail/test_load_balancer.py b/tungsten_tempest_plugin/tests/api/contrail/test_load_balancer.py
index 568c7ff..647f053 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_load_balancer.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_load_balancer.py
@@ -18,19 +18,24 @@
 """
 
 from oslo_log import log as logging
-from patrole_tempest_plugin import rbac_rule_validation
-from tempest import config
-from tempest.lib.common.utils import data_utils
-from tempest.lib import decorators
 
 from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
+from patrole_tempest_plugin import rbac_rule_validation
+
+from tempest import config
+from tempest.lib.common.utils import data_utils
+from tempest.lib.decorators import idempotent_id
+
 CONF = config.CONF
 LOG = logging.getLogger(__name__)
 
 
 class BaseLoadBalancerTest(rbac_base.BaseContrailTest):
-    """Base class to test load balancer objects using RBAC roles"""
+
+    """
+    Base class to test load balancer objects using RBAC roles
+    """
 
     def _create_load_balancer(self):
         fq_name = data_utils.rand_name('load-balancer')
@@ -162,97 +167,121 @@
 
 
 class LoadBalancerContrailTest(BaseLoadBalancerTest):
-    """Test class to test load balancer objects using RBAC roles"""
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="list_load_balancers")
-    @decorators.idempotent_id('5d840b6b-3974-4945-916f-dd53ba27e42f')
+    """
+    Test class to test load balancer objects using RBAC roles
+    """
+
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="list_load_balancers")
+    @idempotent_id('5d840b6b-3974-4945-916f-dd53ba27e42f')
     def test_list_load_balancers(self):
-        """test method for list load balancer objects"""
+        """
+        test method for list load balancer objects
+        """
         with self.rbac_utils.override_role(self):
             self.load_balancer_client.list_load_balancers()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="create_load_balancers")
-    @decorators.idempotent_id('6a18d506-0794-4eb9-a945-165bf146005d')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="create_load_balancers")
+    @idempotent_id('6a18d506-0794-4eb9-a945-165bf146005d')
     def test_create_load_balancers(self):
-        """test method for create load balancer objects"""
+        """
+        test method for create load balancer objects
+        """
         with self.rbac_utils.override_role(self):
             self._create_load_balancer()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="show_load_balancer")
-    @decorators.idempotent_id('428012aa-cd0e-4702-89d2-459046d4bd5f')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="show_load_balancer")
+    @idempotent_id('428012aa-cd0e-4702-89d2-459046d4bd5f')
     def test_show_load_balancer(self):
-        """test method for show load balancer objects"""
+        """
+        test method for show load balancer objects
+        """
         lb_uuid = self._create_load_balancer()
         with self.rbac_utils.override_role(self):
             self.load_balancer_client.show_load_balancer(lb_uuid)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="update_load_balancer")
-    @decorators.idempotent_id('7cd3d7b2-b149-40c1-a801-a6a8a660bd24')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="update_load_balancer")
+    @idempotent_id('7cd3d7b2-b149-40c1-a801-a6a8a660bd24')
     def test_update_load_balancer(self):
-        """test method for update load balancer objects"""
+        """
+        test method for update load balancer objects
+        """
         lb_uuid = self._create_load_balancer()
         with self.rbac_utils.override_role(self):
             self._update_load_balancer(lb_uuid)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="delete_load_balancer")
-    @decorators.idempotent_id('b28c6b11-d1b0-45d0-8942-638b6b590702')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="delete_load_balancer")
+    @idempotent_id('b28c6b11-d1b0-45d0-8942-638b6b590702')
     def test_delete_load_balancer(self):
-        """test method for delete load balancer objects"""
+        """
+        test method for delete load balancer objects
+        """
         lb_uuid = self._create_load_balancer()
         with self.rbac_utils.override_role(self):
             self.load_balancer_client.delete_load_balancer(lb_uuid)
 
 
 class LoadBalancerHealthMonitorContrailTest(BaseLoadBalancerTest):
-    """Test class to test load balancer Health Monitor objects using RBAC roles
 
     """
+    Test class to test load balancer Health Monitor objects using RBAC roles
+    """
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="list_load_balancer_health_monitors")
-    @decorators.idempotent_id('3e3d8bdc-3621-4c5e-8130-1187f445a4e6')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="list_load_balancer_health_monitors")
+    @idempotent_id('3e3d8bdc-3621-4c5e-8130-1187f445a4e6')
     def test_list_lb_health_monitors(self):
-        """test method for list load balancer health monitor objects"""
+        """
+        test method for list load balancer health monitor objects
+        """
         with self.rbac_utils.override_role(self):
             self.load_balancer_client.list_lb_healthmonitors()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="create_load_balancer_health_monitors")
-    @decorators.idempotent_id('bddb93ad-d331-4bbc-bac6-2763cae4eb2c')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="create_load_balancer_health_monitors")
+    @idempotent_id('bddb93ad-d331-4bbc-bac6-2763cae4eb2c')
     def test_create_lb_health_monitors(self):
-        """test method for create load balancer health monitor objects"""
+        """
+        test method for create load balancer health monitor objects
+        """
         with self.rbac_utils.override_role(self):
             self._create_load_balancer_health_monitor()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="show_load_balancer_health_monitor")
-    @decorators.idempotent_id('30d23994-1e3a-4a76-8f18-e00d0854412a')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="show_load_balancer_health_monitor")
+    @idempotent_id('30d23994-1e3a-4a76-8f18-e00d0854412a')
     def test_show_lb_health_monitor(self):
-        """test method for show load balancer health monitor objects"""
+        """
+        test method for show load balancer health monitor objects
+        """
         lb_hm_uuid = self._create_load_balancer_health_monitor()
         with self.rbac_utils.override_role(self):
             self.load_balancer_client.show_lb_healthmonitor(
                 lb_hm_uuid)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="update_load_balancer_health_monitor")
-    @decorators.idempotent_id('c32ba92c-3a69-4255-867a-1423c93faa6f')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="update_load_balancer_health_monitor")
+    @idempotent_id('c32ba92c-3a69-4255-867a-1423c93faa6f')
     def test_update_lb_health_monitor(self):
-        """test method for update load balancer health monitor objects"""
+        """
+        test method for update load balancer health monitor objects
+        """
         lb_hm_uuid = self._create_load_balancer_health_monitor()
         with self.rbac_utils.override_role(self):
             self._update_load_balancer_health_monitor(lb_hm_uuid)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="delete_load_balancer_health_monitor")
-    @decorators.idempotent_id('b4d7ea9d-fd8c-433b-96fc-c24866b3f6a7')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="delete_load_balancer_health_monitor")
+    @idempotent_id('b4d7ea9d-fd8c-433b-96fc-c24866b3f6a7')
     def test_delete_lb_health_monitor(self):
-        """test method for delete load balancer health monitor objects"""
+        """
+        test method for delete load balancer health monitor objects
+        """
         lb_hm_uuid = self._create_load_balancer_health_monitor()
         with self.rbac_utils.override_role(self):
             self.load_balancer_client.delete_lb_healthmonitor(
@@ -260,48 +289,61 @@
 
 
 class LoadBalancerListenerContrailTest(BaseLoadBalancerTest):
-    """Base class to test load balancer Listener objects using RBAC roles"""
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="list_load_balancer_listeners")
-    @decorators.idempotent_id('7e02882f-0eab-41c2-b48a-bf71e083b912')
+    """
+    Base class to test load balancer Listener objects using RBAC roles
+    """
+
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="list_load_balancer_listeners")
+    @idempotent_id('7e02882f-0eab-41c2-b48a-bf71e083b912')
     def test_list_lb_listeners(self):
-        """test method for list load balancer listener objects"""
+        """
+        test method for list load balancer listener objects
+        """
         with self.rbac_utils.override_role(self):
             self.load_balancer_client.list_load_balancer_listeners()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="create_load_balancer_listeners")
-    @decorators.idempotent_id('0551de87-fa4c-463f-8968-ec6f2a6098d0')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="create_load_balancer_listeners")
+    @idempotent_id('0551de87-fa4c-463f-8968-ec6f2a6098d0')
     def test_create_lb_listeners(self):
-        """test method for create load balancer listener objects"""
+        """
+        test method for create load balancer listener objects
+        """
         with self.rbac_utils.override_role(self):
             self._create_load_balancer_listener()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="show_load_balancer_listener")
-    @decorators.idempotent_id('ade38959-9506-4262-8d3c-5ba5eb63d85f')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="show_load_balancer_listener")
+    @idempotent_id('ade38959-9506-4262-8d3c-5ba5eb63d85f')
     def test_show_lb_listener(self):
-        """test method for show load balancer listener objects"""
+        """
+        test method for show load balancer listener objects
+        """
         lb_listener_uuid = self._create_load_balancer_listener()
         with self.rbac_utils.override_role(self):
             self.load_balancer_client.show_load_balancer_listener(
                 lb_listener_uuid)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="update_load_balancer_listener")
-    @decorators.idempotent_id('e529e538-da31-4159-91c2-6c0a828282a4')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="update_load_balancer_listener")
+    @idempotent_id('e529e538-da31-4159-91c2-6c0a828282a4')
     def test_update_lb_listener(self):
-        """test method for update load balancer listener objects"""
+        """
+        test method for update load balancer listener objects
+        """
         lb_listener_uuid = self._create_load_balancer_listener()
         with self.rbac_utils.override_role(self):
             self._update_load_balancer_listener(lb_listener_uuid)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="delete_load_balancer_listener")
-    @decorators.idempotent_id('feaf3e9a-ffd1-4327-ad7a-35f9e9e4989b')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="delete_load_balancer_listener")
+    @idempotent_id('feaf3e9a-ffd1-4327-ad7a-35f9e9e4989b')
     def test_delete_lb_listener(self):
-        """test method for delete load balancer listener objects"""
+        """
+        test method for delete load balancer listener objects
+        """
         lb_listener_uuid = self._create_load_balancer_listener()
         with self.rbac_utils.override_role(self):
             self.load_balancer_client.delete_load_balancer_listener(
@@ -309,94 +351,120 @@
 
 
 class LoadBalancerPoolContrailTest(BaseLoadBalancerTest):
-    """Base class to test load balancer Pool objects using RBAC roles"""
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="list_load_balancer_pools")
-    @decorators.idempotent_id('3d177a9e-7067-4e9e-b4e8-0acc5887dff0')
+    """
+    Base class to test load balancer Pool objects using RBAC roles
+    """
+
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="list_load_balancer_pools")
+    @idempotent_id('3d177a9e-7067-4e9e-b4e8-0acc5887dff0')
     def test_list_load_balancer_pools(self):
-        """test method for list load balancer pool objects"""
+        """
+        test method for list load balancer pool objects
+        """
         with self.rbac_utils.override_role(self):
             self.load_balancer_client.list_load_balancer_pools()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="create_load_balancer_pools")
-    @decorators.idempotent_id('a52c6ec7-a996-4191-9a70-7879a211a711')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="create_load_balancer_pools")
+    @idempotent_id('a52c6ec7-a996-4191-9a70-7879a211a711')
     def test_create_load_balancer_pools(self):
-        """test method for create load balancer pool objects"""
+        """
+        test method for create load balancer pool objects
+        """
         with self.rbac_utils.override_role(self):
             self._create_load_balancer_pool()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="show_load_balancer_pool")
-    @decorators.idempotent_id('7923da4e-53b1-4024-9a40-5bc91cee8e2d')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="show_load_balancer_pool")
+    @idempotent_id('7923da4e-53b1-4024-9a40-5bc91cee8e2d')
     def test_show_load_balancer_pool(self):
-        """test method for show load balancer pool objects"""
+        """
+        test method for show load balancer pool objects
+        """
         lb_pool_uuid = self._create_load_balancer_pool()
         with self.rbac_utils.override_role(self):
             self.load_balancer_client.show_load_balancer_pool(lb_pool_uuid)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="update_load_balancer_pool")
-    @decorators.idempotent_id('391c0c5e-c218-4c98-9b58-6d2724ec4c20')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="update_load_balancer_pool")
+    @idempotent_id('391c0c5e-c218-4c98-9b58-6d2724ec4c20')
     def test_update_load_balancer_pool(self):
-        """test method for update load balancer pool objects"""
+        """
+        test method for update load balancer pool objects
+        """
         lb_pool_uuid = self._create_load_balancer_pool()
         with self.rbac_utils.override_role(self):
             self._update_load_balancer_pool(lb_pool_uuid)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="delete_load_balancer_pool")
-    @decorators.idempotent_id('8b3617c0-4064-48f8-96b8-e2f996fce5c3')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="delete_load_balancer_pool")
+    @idempotent_id('8b3617c0-4064-48f8-96b8-e2f996fce5c3')
     def test_delete_load_balancer_pool(self):
-        """test method for delete load balancer pool objects"""
+        """
+        test method for delete load balancer pool objects
+        """
         lb_pool_uuid = self._create_load_balancer_pool()
         with self.rbac_utils.override_role(self):
             self.load_balancer_client.delete_load_balancer_pool(lb_pool_uuid)
 
 
 class LoadBalancerMemberContrailTest(BaseLoadBalancerTest):
-    """Base class to test load balancer Member using RBAC roles"""
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="list_load_balancer_members")
-    @decorators.idempotent_id('b3c51463-8166-486a-a26e-0f7aeaa41e0f')
+    """
+    Base class to test load balancer Member using RBAC roles
+    """
+
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="list_load_balancer_members")
+    @idempotent_id('b3c51463-8166-486a-a26e-0f7aeaa41e0f')
     def test_list_load_balancer_members(self):
-        """test method for list load balancer member objects"""
+        """
+        test method for list load balancer member objects
+        """
         with self.rbac_utils.override_role(self):
             self.load_balancer_client.list_load_balancer_members()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="create_load_balancer_members")
-    @decorators.idempotent_id('ad60688f-7a20-4dd5-8229-4076d85b9d55')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="create_load_balancer_members")
+    @idempotent_id('ad60688f-7a20-4dd5-8229-4076d85b9d55')
     def test_create_lb_members(self):
-        """test method for create load balancer member objects"""
+        """
+        test method for create load balancer member objects
+        """
         with self.rbac_utils.override_role(self):
             self._create_load_balancer_member()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="show_load_balancer_member")
-    @decorators.idempotent_id('917602ff-24d5-4a07-a6a6-5e5b9539bbf1')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="show_load_balancer_member")
+    @idempotent_id('917602ff-24d5-4a07-a6a6-5e5b9539bbf1')
     def test_show_load_balancer_member(self):
-        """test method for show load balancer member objects"""
+        """
+        test method for show load balancer member objects
+        """
         lb_member_uuid = self._create_load_balancer_member()
         with self.rbac_utils.override_role(self):
             self.load_balancer_client.show_load_balancer_member(lb_member_uuid)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="update_load_balancer_member")
-    @decorators.idempotent_id('b1611005-5c77-4ac0-8fcc-4a035dfbaa84')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="update_load_balancer_member")
+    @idempotent_id('b1611005-5c77-4ac0-8fcc-4a035dfbaa84')
     def test_update_lb_member(self):
-        """test method for update load balancer member objects"""
+        """
+        test method for update load balancer member objects
+        """
         lb_member_uuid = self._create_load_balancer_member()
         with self.rbac_utils.override_role(self):
             self._update_load_balancer_member(lb_member_uuid)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="delete_load_balancer_member")
-    @decorators.idempotent_id('dc21883a-a822-4d39-b815-4dfd6b505b0b')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="delete_load_balancer_member")
+    @idempotent_id('dc21883a-a822-4d39-b815-4dfd6b505b0b')
     def test_delete_lb_member(self):
-        """test method for delete load balancer member objects"""
+        """
+        test method for delete load balancer member objects
+        """
         lb_member_uuid = self._create_load_balancer_member()
         with self.rbac_utils.override_role(self):
             self.load_balancer_client.delete_load_balancer_member(
diff --git a/tungsten_tempest_plugin/tests/api/contrail/test_namespace.py b/tungsten_tempest_plugin/tests/api/contrail/test_namespace.py
index 7d19d8a..a3b18ec 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_namespace.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_namespace.py
@@ -17,20 +17,26 @@
 Tempest test-case to test namespace objects using RBAC roles
 """
 
+
 from oslo_log import log as logging
-from patrole_tempest_plugin import rbac_rule_validation
-from tempest import config
-from tempest.lib.common.utils import data_utils
-from tempest.lib import decorators
 
 from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
+from patrole_tempest_plugin import rbac_rule_validation
+
+from tempest import config
+from tempest.lib.common.utils import data_utils
+from tempest.lib.decorators import idempotent_id
+
 CONF = config.CONF
 LOG = logging.getLogger(__name__)
 
 
 class NamespaceContrailTest(rbac_base.BaseContrailTest):
-    """Test class to test namespace objects using RBAC roles"""
+
+    """
+    Test class to test namespace objects using RBAC roles
+    """
 
     def _create_namespace(self):
         fq_name = data_utils.rand_name('namespace')
@@ -51,45 +57,55 @@
         }
         self.namespace_client.update_namespace(namespace_uuid, **put_body)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="list_namespaces")
-    @decorators.idempotent_id('e436390d-d669-4047-9838-421ea93e94be')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="list_namespaces")
+    @idempotent_id('e436390d-d669-4047-9838-421ea93e94be')
     def test_list_namespaces(self):
-        """test method for list namespace objects"""
+        """
+        test method for list namespace objects
+        """
         with self.rbac_utils.override_role(self):
             self.namespace_client.list_namespaces()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="create_namespaces")
-    @decorators.idempotent_id('503ae445-7e67-4db6-989a-af0b7f9a7e95')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="create_namespaces")
+    @idempotent_id('503ae445-7e67-4db6-989a-af0b7f9a7e95')
     def test_create_namespaces(self):
-        """test method for create namespace objects"""
+        """
+        test method for create namespace objects
+        """
         with self.rbac_utils.override_role(self):
             self._create_namespace()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="show_namespace")
-    @decorators.idempotent_id('f916971a-7c07-4386-b887-8b78d8a1e528')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="show_namespace")
+    @idempotent_id('f916971a-7c07-4386-b887-8b78d8a1e528')
     def test_show_namespace(self):
-        """test method for show namespace objects"""
+        """
+        test method for show namespace objects
+        """
         namespace_uuid = self._create_namespace()
         with self.rbac_utils.override_role(self):
             self.namespace_client.show_namespace(namespace_uuid)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="update_namespace")
-    @decorators.idempotent_id('3649f65a-922a-4b8a-9b8b-520c333e192e')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="update_namespace")
+    @idempotent_id('3649f65a-922a-4b8a-9b8b-520c333e192e')
     def test_update_namespace(self):
-        """test method for update namespace objects"""
+        """
+        test method for update namespace objects
+        """
         namespace_uuid = self._create_namespace()
         with self.rbac_utils.override_role(self):
             self._update_namespace(namespace_uuid)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="delete_namespace")
-    @decorators.idempotent_id('80e736bf-fc7d-4274-8173-a50c883776a9')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="delete_namespace")
+    @idempotent_id('80e736bf-fc7d-4274-8173-a50c883776a9')
     def test_delete_namespace(self):
-        """test method for delete namespace objects"""
+        """
+        test method for delete namespace objects
+        """
         namespace_uuid = self._create_namespace()
         with self.rbac_utils.override_role(self):
             self.namespace_client.delete_namespace(namespace_uuid)
diff --git a/tungsten_tempest_plugin/tests/api/contrail/test_network_ipams.py b/tungsten_tempest_plugin/tests/api/contrail/test_network_ipams.py
index c0ede87..d8e72a4 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_network_ipams.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_network_ipams.py
@@ -17,18 +17,22 @@
 Tempest test-case to test network ipam objects using RBAC roles
 """
 
+from tungsten_tempest_plugin.tests.api.contrail import rbac_base
+
 from patrole_tempest_plugin import rbac_rule_validation
+
 from tempest import config
 from tempest.lib.common.utils import data_utils
-from tempest.lib import decorators
-
-from tungsten_tempest_plugin.tests.api.contrail import rbac_base
+from tempest.lib.decorators import idempotent_id
 
 CONF = config.CONF
 
 
 class NetworkIpamsTest(rbac_base.BaseContrailTest):
-    """Test class to test network ipam objects using RBAC roles"""
+
+    """
+    Test class to test network ipam objects using RBAC roles
+    """
 
     def _create_network_ipams(self):
         ipam_name = data_utils.rand_name('test-ipam')
@@ -41,45 +45,55 @@
                         new_ipam['uuid'])
         return new_ipam
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="list_network_ipams")
-    @decorators.idempotent_id('9ee2c4d8-3209-4ef8-86e1-0ecea2d4c5f2')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="list_network_ipams")
+    @idempotent_id('9ee2c4d8-3209-4ef8-86e1-0ecea2d4c5f2')
     def test_list_network_ipams(self):
-        """test method for list n/w ipam objects"""
+        """
+        test method for list n/w ipam objects
+        """
         with self.rbac_utils.override_role(self):
             self.network_ipams_client.list_network_ipams()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="create_network_ipams")
-    @decorators.idempotent_id('ef2415ea-0810-413a-85a0-4508c9d7af91')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="create_network_ipams")
+    @idempotent_id('ef2415ea-0810-413a-85a0-4508c9d7af91')
     def test_create_network_ipams(self):
-        """test method for create n/w ipam objects"""
+        """
+        test method for create n/w ipam objects
+        """
         with self.rbac_utils.override_role(self):
             self._create_network_ipams()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="show_network_ipam")
-    @decorators.idempotent_id('527b19e5-068a-44e3-b175-b504eafeec6e')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="show_network_ipam")
+    @idempotent_id('527b19e5-068a-44e3-b175-b504eafeec6e')
     def test_show_network_ipam(self):
-        """test method for show n/w ipam objects"""
+        """
+        test method for show n/w ipam objects
+        """
         new_ipam = self._create_network_ipams()
         with self.rbac_utils.override_role(self):
             self.network_ipams_client.show_network_ipam(new_ipam['uuid'])
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="delete_network_ipam")
-    @decorators.idempotent_id('118c1620-efb6-4cc6-8eb5-71bf8631d365')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="delete_network_ipam")
+    @idempotent_id('118c1620-efb6-4cc6-8eb5-71bf8631d365')
     def test_delete_network_ipam(self):
-        """test method for delete n/w ipam objects"""
+        """
+        test method for delete n/w ipam objects
+        """
         new_ipam = self._create_network_ipams()
         with self.rbac_utils.override_role(self):
             self.network_ipams_client.delete_network_ipam(new_ipam['uuid'])
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="update_network_ipam")
-    @decorators.idempotent_id('44cbe2d9-583d-4215-964a-1c321f5e8d92')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="update_network_ipam")
+    @idempotent_id('44cbe2d9-583d-4215-964a-1c321f5e8d92')
     def test_update_network_ipam(self):
-        """test method for update n/w ipam objects"""
+        """
+        test method for update n/w ipam objects
+        """
         new_ipam = self._create_network_ipams()
         with self.rbac_utils.override_role(self):
             self.network_ipams_client.update_network_ipam(
diff --git a/tungsten_tempest_plugin/tests/api/contrail/test_network_policy.py b/tungsten_tempest_plugin/tests/api/contrail/test_network_policy.py
index 1dc9b40..572c145 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_network_policy.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_network_policy.py
@@ -18,19 +18,24 @@
 """
 
 from oslo_log import log as logging
-from patrole_tempest_plugin import rbac_rule_validation
-from tempest import config
-from tempest.lib.common.utils import data_utils
-from tempest.lib import decorators
 
 from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
+from patrole_tempest_plugin import rbac_rule_validation
+
+from tempest import config
+from tempest.lib.common.utils import data_utils
+from tempest.lib.decorators import idempotent_id
+
 CONF = config.CONF
 LOG = logging.getLogger(__name__)
 
 
 class NetworkPolicyTest(rbac_base.BaseContrailTest):
-    """Test class to test network policy objects using RBAC roles"""
+
+    """
+    Test class to test network policy objects using RBAC roles
+    """
 
     def _create_policy(self):
         fq_name = data_utils.rand_name('network-policy')
@@ -53,45 +58,55 @@
         self.network_policy_client.update_network_policy(network_policy_uuid,
                                                          **put_body)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="list_network_policys")
-    @decorators.idempotent_id('fa2a28f3-a8bb-4908-95b9-1e11cf58b16f')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="list_network_policys")
+    @idempotent_id('fa2a28f3-a8bb-4908-95b9-1e11cf58b16f')
     def test_list_policys(self):
-        """test method for list n/w policy objects"""
+        """
+        test method for list n/w policy objects
+        """
         with self.rbac_utils.override_role(self):
             self.network_policy_client.list_network_policys()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="create_network_policys")
-    @decorators.idempotent_id('a30be228-afba-40c9-8678-ae020db68d79')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="create_network_policys")
+    @idempotent_id('a30be228-afba-40c9-8678-ae020db68d79')
     def test_create_network_policys(self):
-        """test method for create n/w policy objects"""
+        """
+        test method for create n/w policy objects
+        """
         with self.rbac_utils.override_role(self):
             self._create_policy()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="show_network_policy")
-    @decorators.idempotent_id('6cefe92e-8936-49a6-bce0-12da3396e7ab')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="show_network_policy")
+    @idempotent_id('6cefe92e-8936-49a6-bce0-12da3396e7ab')
     def test_show_network_policy(self):
-        """test method for show n/w policy objects"""
+        """
+        test method for show n/w policy objects
+        """
         policy_uuid = self._create_policy()
         with self.rbac_utils.override_role(self):
             self.network_policy_client.show_network_policy(policy_uuid)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="update_network_policy")
-    @decorators.idempotent_id('1d470505-3ad4-4870-87d7-3f0b0f9fc635')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="update_network_policy")
+    @idempotent_id('1d470505-3ad4-4870-87d7-3f0b0f9fc635')
     def test_update_network_policy(self):
-        """test method for update n/w policy objects"""
+        """
+        test method for update n/w policy objects
+        """
         policy_uuid = self._create_policy()
         with self.rbac_utils.override_role(self):
             self._update_policy(policy_uuid)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="delete_network_policy")
-    @decorators.idempotent_id('aae9018f-e7a2-4a75-a68e-afd6c380640e')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="delete_network_policy")
+    @idempotent_id('aae9018f-e7a2-4a75-a68e-afd6c380640e')
     def test_delete_network_policy(self):
-        """test method for delete n/w policy objects"""
+        """
+        test method for delete n/w policy objects
+        """
         policy_uuid = self._create_policy()
         with self.rbac_utils.override_role(self):
             self.network_policy_client.delete_network_policy(policy_uuid)
diff --git a/tungsten_tempest_plugin/tests/api/contrail/test_port_tuple.py b/tungsten_tempest_plugin/tests/api/contrail/test_port_tuple.py
index e276c9b..82285a1 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_port_tuple.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_port_tuple.py
@@ -18,19 +18,24 @@
 """
 
 from oslo_log import log as logging
-from patrole_tempest_plugin import rbac_rule_validation
-from tempest import config
-from tempest.lib.common.utils import data_utils
-from tempest.lib import decorators
 
 from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
+from patrole_tempest_plugin import rbac_rule_validation
+
+from tempest import config
+from tempest.lib.common.utils import data_utils
+from tempest.lib.decorators import idempotent_id
+
 CONF = config.CONF
 LOG = logging.getLogger(__name__)
 
 
 class ContrailPortTupleTest(rbac_base.BaseContrailTest):
-    """Test class to test port tuple objects using RBAC roles"""
+
+    """
+    Test class to test port tuple objects using RBAC roles
+    """
 
     @classmethod
     def resource_setup(cls):
@@ -69,47 +74,57 @@
                         new_tuple['uuid'])
         return new_tuple
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="list_port_tuples")
-    @decorators.idempotent_id('3789eef8-0e80-4057-b7b0-926655144beb')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="list_port_tuples")
+    @idempotent_id('3789eef8-0e80-4057-b7b0-926655144beb')
     def test_list_port_tuples(self):
-        """test method for list port tuple objects"""
+        """
+        test method for list port tuple objects
+        """
         with self.rbac_utils.override_role(self):
             self.port_tuple_client.list_port_tuples()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="show_port_tuple")
-    @decorators.idempotent_id('ae5a90ed-5771-4680-be6b-c7626caa3a52')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="show_port_tuple")
+    @idempotent_id('ae5a90ed-5771-4680-be6b-c7626caa3a52')
     def test_show_port_tuple(self):
-        """test method for show port tuple objects"""
+        """
+        test method for show port tuple objects
+        """
         new_tuple = self._create_port_tuple()
         with self.rbac_utils.override_role(self):
             self.port_tuple_client.show_port_tuple(new_tuple['uuid'])
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="create_port_tuples")
-    @decorators.idempotent_id('0e2283da-fe25-4204-b5b3-fef3c200d0c8')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="create_port_tuples")
+    @idempotent_id('0e2283da-fe25-4204-b5b3-fef3c200d0c8')
     def test_create_port_tuples(self):
-        """test method for create port tuple objects"""
+        """
+        test method for create port tuple objects
+        """
         with self.rbac_utils.override_role(self):
             self._create_port_tuple()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="update_port_tuple")
-    @decorators.idempotent_id('b16f19e2-ec8e-4107-961d-561890183dd0')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="update_port_tuple")
+    @idempotent_id('b16f19e2-ec8e-4107-961d-561890183dd0')
     def test_update_port_tuple(self):
-        """test method for update port tuple objects"""
+        """
+        test method for update port tuple objects
+        """
         new_tuple = self._create_port_tuple()
         update_name = data_utils.rand_name('updated_tuple')
         with self.rbac_utils.override_role(self):
             self.port_tuple_client.update_port_tuple(
                 new_tuple['uuid'], display_name=update_name)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="delete_port_tuple")
-    @decorators.idempotent_id('3f28e8b8-f9de-437f-a398-0a11c7fcd652')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="delete_port_tuple")
+    @idempotent_id('3f28e8b8-f9de-437f-a398-0a11c7fcd652')
     def test_delete_port_tuple(self):
-        """test method for delete port tuple objects"""
+        """
+        test method for delete port tuple objects
+        """
         new_tuple = self._create_port_tuple()
         with self.rbac_utils.override_role(self):
             self.port_tuple_client.delete_port_tuple(new_tuple['uuid'])
diff --git a/tungsten_tempest_plugin/tests/api/contrail/test_project.py b/tungsten_tempest_plugin/tests/api/contrail/test_project.py
index e5a773f..ea6d045 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_project.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_project.py
@@ -18,19 +18,24 @@
 """
 
 from oslo_log import log as logging
-from patrole_tempest_plugin import rbac_rule_validation
-from tempest import config
-from tempest.lib.common.utils import data_utils
-from tempest.lib import decorators
 
 from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
+from patrole_tempest_plugin import rbac_rule_validation
+
+from tempest import config
+from tempest.lib.common.utils import data_utils
+from tempest.lib.decorators import idempotent_id
+
 CONF = config.CONF
 LOG = logging.getLogger(__name__)
 
 
 class ProjectContrailTest(rbac_base.BaseContrailTest):
-    """Test class to test project objects using RBAC roles"""
+
+    """
+    Test class to test project objects using RBAC roles
+    """
 
     def _create_project(self):
         fq_name = data_utils.rand_name('project')
@@ -52,45 +57,55 @@
         }
         self.project_client.update_project(project_uuid, **put_body)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="list_projects")
-    @decorators.idempotent_id('7db819fd-ceee-4a6b-9ad7-2e837c055bdd')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="list_projects")
+    @idempotent_id('7db819fd-ceee-4a6b-9ad7-2e837c055bdd')
     def test_list_projects(self):
-        """test method for list project objects"""
+        """
+        test method for list project objects
+        """
         with self.rbac_utils.override_role(self):
             self.project_client.list_projects()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="create_projects")
-    @decorators.idempotent_id('38b9b7a8-1568-417d-b0a3-e7adee88e4b9')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="create_projects")
+    @idempotent_id('38b9b7a8-1568-417d-b0a3-e7adee88e4b9')
     def test_create_projects(self):
-        """test method for create project objects"""
+        """
+        test method for create project objects
+        """
         with self.rbac_utils.override_role(self):
             self._create_project()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="show_project")
-    @decorators.idempotent_id('c47e57c4-34b0-46c2-a678-83b1fe9afd25')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="show_project")
+    @idempotent_id('c47e57c4-34b0-46c2-a678-83b1fe9afd25')
     def test_show_project(self):
-        """test method for show project objects"""
+        """
+        test method for show project objects
+        """
         project_uuid = self._create_project()
         with self.rbac_utils.override_role(self):
             self.project_client.show_project(project_uuid)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="update_project")
-    @decorators.idempotent_id('3d4bd416-16cc-437c-9e95-f9ceda424f8b')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="update_project")
+    @idempotent_id('3d4bd416-16cc-437c-9e95-f9ceda424f8b')
     def test_update_project(self):
-        """test method for update project objects"""
+        """
+        test method for update project objects
+        """
         project_uuid = self._create_project()
         with self.rbac_utils.override_role(self):
             self._update_project(project_uuid)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="delete_project")
-    @decorators.idempotent_id('787ebe8b-b88d-4488-b157-f70554bdd783')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="delete_project")
+    @idempotent_id('787ebe8b-b88d-4488-b157-f70554bdd783')
     def test_delete_project(self):
-        """test method for delete project objects"""
+        """
+        test method for delete project objects
+        """
         project_uuid = self._create_project()
         with self.rbac_utils.override_role(self):
             self.project_client.delete_project(project_uuid)
diff --git a/tungsten_tempest_plugin/tests/api/contrail/test_qos_config.py b/tungsten_tempest_plugin/tests/api/contrail/test_qos_config.py
index 4ea40a3..fb1abde 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_qos_config.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_qos_config.py
@@ -18,19 +18,24 @@
 """
 
 from oslo_log import log as logging
-from patrole_tempest_plugin import rbac_rule_validation
-from tempest import config
-from tempest.lib.common.utils import data_utils
-from tempest.lib import decorators
 
 from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
+from patrole_tempest_plugin import rbac_rule_validation
+
+from tempest import config
+from tempest.lib.common.utils import data_utils
+from tempest.lib.decorators import idempotent_id
+
 LOG = logging.getLogger(__name__)
 CONF = config.CONF
 
 
 class QosConfigContrailTest(rbac_base.BaseContrailTest):
-    """Test class to test QoS config objects using RBAC roles"""
+
+    """
+    Test class to test QoS config objects using RBAC roles
+    """
 
     def _delete_qos_config(self, qos_config_id):
         self.qos_client.delete_qos_config(qos_config_id)
@@ -47,46 +52,56 @@
                         qos_config['uuid'])
         return qos_config
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="list_qos_configs")
-    @decorators.idempotent_id('6bc44b34-14d4-4e0e-b45d-fe3df047879f')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="list_qos_configs")
+    @idempotent_id('6bc44b34-14d4-4e0e-b45d-fe3df047879f')
     def test_list_qos_configs(self):
-        """test method for list QoS config objects"""
+        """
+        test method for list QoS config objects
+        """
         self._create_qos_configs()
         with self.rbac_utils.override_role(self):
             self.qos_client.list_qos_configs()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="create_qos_configs")
-    @decorators.idempotent_id('031b4a27-22cd-4d93-938d-ba6d0f3163ba')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="create_qos_configs")
+    @idempotent_id('031b4a27-22cd-4d93-938d-ba6d0f3163ba')
     def test_create_qos_configs(self):
-        """test method for create QoS config objects"""
+        """
+        test method for create QoS config objects
+        """
         with self.rbac_utils.override_role(self):
             self._create_qos_configs()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="show_qos_config")
-    @decorators.idempotent_id('a9d82b49-3492-4667-b252-ef30b0ee6eb3')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="show_qos_config")
+    @idempotent_id('a9d82b49-3492-4667-b252-ef30b0ee6eb3')
     def test_show_qos_config(self):
-        """test method for show QoS config objects"""
+        """
+        test method for show QoS config objects
+        """
         qos_config = self._create_qos_configs()
         with self.rbac_utils.override_role(self):
             self.qos_client.show_qos_config(qos_config['uuid'])
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="delete_qos_config")
-    @decorators.idempotent_id('d324a5e6-cc86-4444-91a2-74592283a7ec')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="delete_qos_config")
+    @idempotent_id('d324a5e6-cc86-4444-91a2-74592283a7ec')
     def test_delete_qos_config(self):
-        """test method for delete QoS config objects"""
+        """
+        test method for delete QoS config objects
+        """
         qos_config = self._create_qos_configs()
         with self.rbac_utils.override_role(self):
             self.qos_client.delete_qos_config(qos_config['uuid'])
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="update_qos_config")
-    @decorators.idempotent_id('7f1901a5-0cf0-40bd-98a5-f8a930b11cfe')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="update_qos_config")
+    @idempotent_id('7f1901a5-0cf0-40bd-98a5-f8a930b11cfe')
     def test_update_qos_config(self):
-        """test method for update QoS config objects"""
+        """
+        test method for update QoS config objects
+        """
         qos_config = self._create_qos_configs()
         display_name = data_utils.rand_name('qos_config')
         with self.rbac_utils.override_role(self):
diff --git a/tungsten_tempest_plugin/tests/api/contrail/test_qos_global_config.py b/tungsten_tempest_plugin/tests/api/contrail/test_qos_global_config.py
index 7f26b9a..1325ab9 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_qos_global_config.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_qos_global_config.py
@@ -18,19 +18,24 @@
 """
 
 from oslo_log import log as logging
-from patrole_tempest_plugin import rbac_rule_validation
-from tempest import config
-from tempest.lib.common.utils import data_utils
-from tempest.lib import decorators
 
 from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
+from patrole_tempest_plugin import rbac_rule_validation
+
+from tempest import config
+from tempest.lib.common.utils import data_utils
+from tempest.lib.decorators import idempotent_id
+
 LOG = logging.getLogger(__name__)
 CONF = config.CONF
 
 
 class QosContrailTest(rbac_base.BaseContrailTest):
-    """Test class to test QoS Config objects using RBAC roles"""
+
+    """
+    Test class to test QoS Config objects using RBAC roles
+    """
 
     @classmethod
     def resource_setup(cls):
@@ -67,43 +72,51 @@
                         qos_global_config['uuid'])
         return qos_global_config
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="list_global_qos_configs")
-    @decorators.idempotent_id('74e5a7b7-f538-4be3-90a5-6862b07fb118')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="list_global_qos_configs")
+    @idempotent_id('74e5a7b7-f538-4be3-90a5-6862b07fb118')
     def test_list_global_qos_configs(self):
-        """test method for list global QoS objects"""
+        """
+        test method for list global QoS objects
+        """
         # Create global system config
         global_system_config = self._create_global_system_config()['name']
         self._create_qos_global_configs(global_system_config)
         with self.rbac_utils.override_role(self):
             self.qos_client.list_global_qos_configs()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="create_global_qos_configs")
-    @decorators.idempotent_id('d7da1ca0-7bf7-4d1b-982c-820cd37fe9fa')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="create_global_qos_configs")
+    @idempotent_id('d7da1ca0-7bf7-4d1b-982c-820cd37fe9fa')
     def test_create_global_qos_configs(self):
-        """test method for create global QoS objects"""
+        """
+        test method for create global QoS objects
+        """
         # Create global system config
         global_system_config = self._create_global_system_config()['name']
         with self.rbac_utils.override_role(self):
             self._create_qos_global_configs(global_system_config)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="show_global_qos_config")
-    @decorators.idempotent_id('e3bd44e0-19a9-46e7-83d3-268dcc537ad9')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="show_global_qos_config")
+    @idempotent_id('e3bd44e0-19a9-46e7-83d3-268dcc537ad9')
     def test_show_global_qos_config(self):
-        """test method for show global QoS objects"""
+        """
+        test method for show global QoS objects
+        """
         # Create global system config
         global_system_config = self._create_global_system_config()['name']
         test = self._create_qos_global_configs(global_system_config)
         with self.rbac_utils.override_role(self):
             self.qos_client.show_global_qos_config(instance_id=test['uuid'])
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="update_global_qos_config")
-    @decorators.idempotent_id('f834c4d7-bc81-4c59-bada-c4d752219a6e')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="update_global_qos_config")
+    @idempotent_id('f834c4d7-bc81-4c59-bada-c4d752219a6e')
     def test_update_global_qos_config(self):
-        """test method for update global QoS objects"""
+        """
+        test method for update global QoS objects
+        """
         # Create global system config
         global_system_config = self._create_global_system_config()['name']
         qos = self._create_qos_global_configs(global_system_config)
@@ -113,11 +126,13 @@
                 instance_id=qos['uuid'],
                 display_name=display_name)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="delete_global_qos_config")
-    @decorators.idempotent_id('78b9a3da-4eb1-4f4b-8a23-a8a2e733b515')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="delete_global_qos_config")
+    @idempotent_id('78b9a3da-4eb1-4f4b-8a23-a8a2e733b515')
     def test_delete_global_qos_config(self):
-        """test method for delete global QoS objects"""
+        """
+        test method for delete global QoS objects
+        """
         # Create global system config
         global_system_config = self._create_global_system_config()['name']
         qos_global_config = self._create_qos_global_configs(
diff --git a/tungsten_tempest_plugin/tests/api/contrail/test_qos_queue.py b/tungsten_tempest_plugin/tests/api/contrail/test_qos_queue.py
index 8f56fb2..229811a 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_qos_queue.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_qos_queue.py
@@ -18,26 +18,32 @@
 """
 
 from oslo_log import log as logging
-from patrole_tempest_plugin import rbac_rule_validation
-from tempest import config
-from tempest.lib.common.utils import data_utils
-from tempest.lib import decorators
 
 from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
+from patrole_tempest_plugin import rbac_rule_validation
+
+from tempest import config
+from tempest.lib.common.utils import data_utils
+from tempest.lib.decorators import idempotent_id
+
 LOG = logging.getLogger(__name__)
 CONF = config.CONF
 
 
 class QosQueueContrailTest(rbac_base.BaseContrailTest):
-    """Test class to test QoS Queue using RBAC roles"""
+
+    """
+    Test class to test QoS Queue using RBAC roles
+    """
 
     def _delete_qos_queue(self, qos_queue_id):
         self.qos_client.delete_qos_queue(qos_queue_id)
 
     def _create_qos_queues(self):
         name = data_utils.rand_name('test-rbac-qos-queue')
-        fq_name = [name]
+        fq_name = ["default-global-system-config", "default-global-qos-config",
+                   name]
         qos_queue = self.qos_client.create_qos_queues(
             fq_name=fq_name)['qos-queue']
         self.addCleanup(self._try_delete_resource,
@@ -45,46 +51,56 @@
                         qos_queue['uuid'])
         return qos_queue
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="list_qos_queues")
-    @decorators.idempotent_id('3d3a4397-2afe-4bbd-be59-56a1bcc2e49d')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="list_qos_queues")
+    @idempotent_id('3d3a4397-2afe-4bbd-be59-56a1bcc2e49d')
     def test_list_qos_queues(self):
-        """test method for listing QoS queues"""
+        """
+        test method for listing QoS queues
+        """
         self._create_qos_queues()
         with self.rbac_utils.override_role(self):
             self.qos_client.list_qos_queues()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="create_qos_queues")
-    @decorators.idempotent_id('d89c45f4-c83c-47b3-8720-7feffab4519c')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="create_qos_queues")
+    @idempotent_id('d89c45f4-c83c-47b3-8720-7feffab4519c')
     def test_create_qos_queues(self):
-        """test method for creating QoS queues"""
+        """
+         test method for creating QoS queues
+        """
         with self.rbac_utils.override_role(self):
             self._create_qos_queues()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="show_qos_queue")
-    @decorators.idempotent_id('d2773d5c-9858-4938-8a77-62cafd5034da')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="show_qos_queue")
+    @idempotent_id('d2773d5c-9858-4938-8a77-62cafd5034da')
     def test_show_qos_queue(self):
-        """test method for showing QoS queues"""
+        """
+        test method for showing QoS queues
+        """
         qos_queue = self._create_qos_queues()
         with self.rbac_utils.override_role(self):
             self.qos_client.show_qos_queue(qos_queue['uuid'])
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="delete_qos_queue")
-    @decorators.idempotent_id('64c828d0-6594-472b-a504-40915067c7bd')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="delete_qos_queue")
+    @idempotent_id('64c828d0-6594-472b-a504-40915067c7bd')
     def test_delete_qos_queue(self):
-        """test method for deleting QoS queues"""
+        """
+        test method for deleting QoS queues
+        """
         qos_queue = self._create_qos_queues()
         with self.rbac_utils.override_role(self):
             self.qos_client.delete_qos_queue(qos_queue['uuid'])
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="update_qos_queue")
-    @decorators.idempotent_id('0733ab1a-f5aa-4e70-a011-174aa203dc33')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="update_qos_queue")
+    @idempotent_id('0733ab1a-f5aa-4e70-a011-174aa203dc33')
     def test_update_qos_queue(self):
-        """test method for deleting QoS queues"""
+        """
+        test method for deleting QoS queues
+        """
         qos_queue = self._create_qos_queues()
         display_name = data_utils.rand_name('qos_queue')
         with self.rbac_utils.override_role(self):
diff --git a/tungsten_tempest_plugin/tests/api/contrail/test_route.py b/tungsten_tempest_plugin/tests/api/contrail/test_route.py
index 1f389d3..06257c8 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_route.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_route.py
@@ -20,19 +20,24 @@
 import random
 
 from oslo_log import log as logging
-from patrole_tempest_plugin import rbac_rule_validation
-from tempest import config
-from tempest.lib.common.utils import data_utils
-from tempest.lib import decorators
 
 from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
+from patrole_tempest_plugin import rbac_rule_validation
+
+from tempest import config
+from tempest.lib.common.utils import data_utils
+from tempest.lib.decorators import idempotent_id
+
 CONF = config.CONF
 LOG = logging.getLogger(__name__)
 
 
 class ContrailRouteTableTest(rbac_base.BaseContrailTest):
-    """Test class to test route objects using RBAC roles"""
+
+    """
+    Test class to test route objects using RBAC roles
+    """
 
     def _delete_route_table(self, route_id):
         self.route_client.delete_route_table(route_id)
@@ -49,37 +54,45 @@
                         route_table['uuid'])
         return route_table
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="list_route_tables")
-    @decorators.idempotent_id('ca5a5d42-6e49-40e4-a5ac-de07b397b775')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="list_route_tables")
+    @idempotent_id('ca5a5d42-6e49-40e4-a5ac-de07b397b775')
     def test_list_route_tables(self):
-        """test method for list route table objects"""
+        """
+        test method for list route table objects
+        """
         self._create_route_tables()
         with self.rbac_utils.override_role(self):
             self.route_client.list_route_tables()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="show_route_table")
-    @decorators.idempotent_id('084a2759-991a-4ae2-bde4-8f9915966f6e')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="show_route_table")
+    @idempotent_id('084a2759-991a-4ae2-bde4-8f9915966f6e')
     def test_show_route_table(self):
-        """test method for show route table objects"""
+        """
+        test method for show route table objects
+        """
         route_table = self._create_route_tables()
         with self.rbac_utils.override_role(self):
             self.route_client.show_route_table(route_table['uuid'])
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="create_route_tables")
-    @decorators.idempotent_id('3fab8105-c0be-4c9e-be5f-d2dce4deb921')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="create_route_tables")
+    @idempotent_id('3fab8105-c0be-4c9e-be5f-d2dce4deb921')
     def test_create_route_tables(self):
-        """test method for create route table objects"""
+        """
+        test method for create route table objects
+        """
         with self.rbac_utils.override_role(self):
             self._create_route_tables()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="update_route_table")
-    @decorators.idempotent_id('2acee7ad-843e-40b0-b8f8-a6d90a51c6c8')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="update_route_table")
+    @idempotent_id('2acee7ad-843e-40b0-b8f8-a6d90a51c6c8')
     def test_update_route_table(self):
-        """test method for update route table objects"""
+        """
+        test method for update route table objects
+        """
         route_table = self._create_route_tables()
         display_name = data_utils.rand_name('RouteNew')
         with self.rbac_utils.override_role(self):
@@ -87,18 +100,23 @@
                 route_id=route_table['uuid'],
                 display_name=display_name)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="delete_route_table")
-    @decorators.idempotent_id('20a5086c-ec9a-43e0-ae2c-4161c0f4b280')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="delete_route_table")
+    @idempotent_id('20a5086c-ec9a-43e0-ae2c-4161c0f4b280')
     def test_delete_route_table(self):
-        """test method for delete route table objects"""
+        """
+        test method for delete route table objects
+        """
         route_table = self._create_route_tables()
         with self.rbac_utils.override_role(self):
             self._delete_route_table(route_table['uuid'])
 
 
 class ContrailInterfaceRouteTableTest(rbac_base.BaseContrailTest):
-    """Test class to test route interface table using RBAC roles"""
+
+    """
+    Test class to test route interface table using RBAC roles
+    """
 
     def _delete_interface_route_table(self, route_id):
         self.route_client.delete_interface_route_table(route_id)
@@ -117,38 +135,46 @@
                         interface_route_table['uuid'])
         return interface_route_table
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="list_interface_route_tables")
-    @decorators.idempotent_id('b1f8f0a6-6074-4615-a439-19869a48bc49')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="list_interface_route_tables")
+    @idempotent_id('b1f8f0a6-6074-4615-a439-19869a48bc49')
     def test_list_interface_route(self):
-        """test method for list route interface table objects"""
+        """
+        test method for list route interface table objects
+        """
         self._create_interface_route_tables()
         with self.rbac_utils.override_role(self):
             self.route_client.list_interface_route_tables()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="show_interface_route_table")
-    @decorators.idempotent_id('94703a28-5e33-4003-b95b-6a3cc5752fd4')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="show_interface_route_table")
+    @idempotent_id('94703a28-5e33-4003-b95b-6a3cc5752fd4')
     def test_show_interface_route(self):
-        """test method for show route interface table objects"""
+        """
+        test method for show route interface table objects
+        """
         interface_rte_table = self._create_interface_route_tables()
         with self.rbac_utils.override_role(self):
             self.route_client.show_interface_route_table(
                 interface_rte_table['uuid'])
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="create_interface_route_tables")
-    @decorators.idempotent_id('b89ef437-4759-4c04-948b-d2ff9675ab07')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="create_interface_route_tables")
+    @idempotent_id('b89ef437-4759-4c04-948b-d2ff9675ab07')
     def test_create_interface_route(self):
-        """test method for create route interface table objects"""
+        """
+        test method for create route interface table objects
+        """
         with self.rbac_utils.override_role(self):
             self._create_interface_route_tables()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="update_interface_route_table")
-    @decorators.idempotent_id('e9346d4f-7a07-41bc-8e88-e8ae9fa309ea')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="update_interface_route_table")
+    @idempotent_id('e9346d4f-7a07-41bc-8e88-e8ae9fa309ea')
     def test_update_interface_route(self):
-        """test method for update route interface table objects"""
+        """
+        test method for update route interface table objects
+        """
         interface_rte_table = self._create_interface_route_tables()
         display_name = data_utils.rand_name('InterfaceRouteNew')
         with self.rbac_utils.override_role(self):
@@ -156,11 +182,13 @@
                 interface_route_id=interface_rte_table['uuid'],
                 display_name=display_name)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="delete_interface_route_table")
-    @decorators.idempotent_id('b00444a5-cb4c-45bc-b393-503e9e333e98')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="delete_interface_route_table")
+    @idempotent_id('b00444a5-cb4c-45bc-b393-503e9e333e98')
     def test_delete_interface_route(self):
-        """test method for delete route interface table objects"""
+        """
+        test method for delete route interface table objects
+        """
         interface_rte_table = self._create_interface_route_tables()
         with self.rbac_utils.override_role(self):
             self._delete_interface_route_table(
@@ -168,7 +196,10 @@
 
 
 class ContrailRouteTargetsTest(rbac_base.BaseContrailTest):
-    """Test class to test route targets using RBAC roles"""
+
+    """
+    Test class to test route targets using RBAC roles
+    """
 
     def _delete_route_target(self, target_id):
         self.route_client.delete_route_target(target_id)
@@ -187,37 +218,45 @@
                         route_target['uuid'])
         return route_target
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="list_route_targets")
-    @decorators.idempotent_id('757efd07-8027-4a16-887a-1e42f16b4140')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="list_route_targets")
+    @idempotent_id('757efd07-8027-4a16-887a-1e42f16b4140')
     def test_list_route_targets(self):
-        """test method for list route target objects"""
+        """
+        test method for list route target objects
+        """
         self._create_route_targets()
         with self.rbac_utils.override_role(self):
             self.route_client.list_route_targets()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="show_route_target")
-    @decorators.idempotent_id('76c60d98-dd5e-453a-bf0e-7854f78a1a5e')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="show_route_target")
+    @idempotent_id('76c60d98-dd5e-453a-bf0e-7854f78a1a5e')
     def test_show_route_target(self):
-        """test method for show route target objects"""
+        """
+        test method for show route target objects
+        """
         target = self._create_route_targets()
         with self.rbac_utils.override_role(self):
             self.route_client.show_route_target(target['uuid'])
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="create_route_targets")
-    @decorators.idempotent_id('fcdb4ebc-b92d-49f2-88e9-68c93aec94be')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="create_route_targets")
+    @idempotent_id('fcdb4ebc-b92d-49f2-88e9-68c93aec94be')
     def test_create_route_targets(self):
-        """test method for create route target objects"""
+        """
+        test method for create route target objects
+        """
         with self.rbac_utils.override_role(self):
             self._create_route_targets()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="update_route_target")
-    @decorators.idempotent_id('dd830a77-4bfe-4a8c-b4e9-08b6ef2af3be')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="update_route_target")
+    @idempotent_id('dd830a77-4bfe-4a8c-b4e9-08b6ef2af3be')
     def test_update_route_target(self):
-        """test method for update route target objects"""
+        """
+        test method for update route target objects
+        """
         target = self._create_route_targets()
         display_name = data_utils.rand_name('RouteTargetNew')
         with self.rbac_utils.override_role(self):
@@ -225,18 +264,23 @@
                 route_target_id=target['uuid'],
                 display_name=display_name)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="delete_route_target")
-    @decorators.idempotent_id('dfaa58f9-ec29-4d51-a475-870fac08908d')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="delete_route_target")
+    @idempotent_id('dfaa58f9-ec29-4d51-a475-870fac08908d')
     def test_delete_route_target(self):
-        """test method for delete route target objects"""
+        """
+        test method for delete route target objects
+        """
         target = self._create_route_targets()
         with self.rbac_utils.override_role(self):
             self._delete_route_target(target['uuid'])
 
 
 class ContrailRouteAggregateTest(rbac_base.BaseContrailTest):
-    """Test class to test route aggregate using RBAC roles"""
+
+    """
+    Test class to test route aggregate using RBAC roles
+    """
 
     def _delete_route_aggregate(self, route_aggr_id):
         self.route_client.delete_route_aggregate(route_aggr_id)
@@ -254,38 +298,46 @@
                         route_aggr['uuid'])
         return route_aggr
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="list_route_aggregates")
-    @decorators.idempotent_id('15f2c30c-4404-4228-94a0-86c5ec5cf62e')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="list_route_aggregates")
+    @idempotent_id('15f2c30c-4404-4228-94a0-86c5ec5cf62e')
     def test_list_route_aggregates(self):
-        """test method for list route aggregate objects"""
+        """
+        test method for list route aggregate objects
+        """
         self._create_route_aggregates()
         with self.rbac_utils.override_role(self):
             self.route_client.list_route_aggregates()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="show_route_aggregate")
-    @decorators.idempotent_id('c8edee30-81c4-44e2-8485-055bed853384')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="show_route_aggregate")
+    @idempotent_id('c8edee30-81c4-44e2-8485-055bed853384')
     def test_show_route_aggregate(self):
-        """test method for show route aggregate objects"""
+        """
+        test method for show route aggregate objects
+        """
         route_aggr = self._create_route_aggregates()
         with self.rbac_utils.override_role(self):
             self.route_client.show_route_aggregate(
                 route_aggr['uuid'])
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="create_route_aggregates")
-    @decorators.idempotent_id('7553a54f-e41c-4555-b745-a858c5a70690')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="create_route_aggregates")
+    @idempotent_id('7553a54f-e41c-4555-b745-a858c5a70690')
     def test_create_route_aggregates(self):
-        """test method for create route aggregate objects"""
+        """
+        test method for create route aggregate objects
+        """
         with self.rbac_utils.override_role(self):
             self._create_route_aggregates()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="update_route_aggregate")
-    @decorators.idempotent_id('de1e6102-0bc6-4f9b-a354-48eb051ab5e4')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="update_route_aggregate")
+    @idempotent_id('de1e6102-0bc6-4f9b-a354-48eb051ab5e4')
     def test_update_route_aggregate(self):
-        """test method for update route aggregate objects"""
+        """
+        test method for update route aggregate objects
+        """
         route_aggr = self._create_route_aggregates()
         display_name = data_utils.rand_name('RouteAggregateNew')
         with self.rbac_utils.override_role(self):
@@ -293,11 +345,13 @@
                 route_aggr_id=route_aggr['uuid'],
                 display_name=display_name)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="delete_route_aggregate")
-    @decorators.idempotent_id('e16dbdc6-d7cf-43c7-af9d-bd76cc220200')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="delete_route_aggregate")
+    @idempotent_id('e16dbdc6-d7cf-43c7-af9d-bd76cc220200')
     def test_delete_route_aggregate(self):
-        """test method for delete route aggregate objects"""
+        """
+        test method for delete route aggregate objects
+        """
         # Create aggregate
         route_aggr = self._create_route_aggregates()
         with self.rbac_utils.override_role(self):
diff --git a/tungsten_tempest_plugin/tests/api/contrail/test_routers.py b/tungsten_tempest_plugin/tests/api/contrail/test_routers.py
index 53a439e..65133b2 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_routers.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_routers.py
@@ -18,19 +18,24 @@
 """
 
 from oslo_log import log as logging
-from patrole_tempest_plugin import rbac_rule_validation
-from tempest import config
-from tempest.lib.common.utils import data_utils
-from tempest.lib import decorators
 
 from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
+from patrole_tempest_plugin import rbac_rule_validation
+
+from tempest import config
+from tempest.lib.common.utils import data_utils
+from tempest.lib.decorators import idempotent_id
+
 CONF = config.CONF
 LOG = logging.getLogger(__name__)
 
 
 class BaseRouterTest(rbac_base.BaseContrailTest):
-    """Test class to test router objects using RBAC roles"""
+
+    """
+    Test class to test router objects using RBAC roles
+    """
 
     @classmethod
     def resource_setup(cls):
@@ -136,29 +141,35 @@
                         router['uuid'])
         return router
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="list_physical_routers")
-    @decorators.idempotent_id('349ac042-b922-4727-9e1b-8f363ee343f3')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="list_physical_routers")
+    @idempotent_id('349ac042-b922-4727-9e1b-8f363ee343f3')
     def test_list_physical_routers(self):
-        """test method for list physical router objects"""
+        """
+        test method for list physical router objects
+        """
         with self.rbac_utils.override_role(self):
             self.router_client.list_physical_routers()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="create_physical_routers")
-    @decorators.idempotent_id('d0b7449e-9037-4f9f-8c7e-9f364c95f18a')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="create_physical_routers")
+    @idempotent_id('d0b7449e-9037-4f9f-8c7e-9f364c95f18a')
     def test_create_physical_routers(self):
-        """test method for create physical router objects"""
+        """
+        test method for create physical router objects
+        """
         # Create global system config
         global_system_config = self._create_global_system_config()['name']
         with self.rbac_utils.override_role(self):
             self._create_physical_router(global_system_config)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="show_physical_router")
-    @decorators.idempotent_id('6dfc53f4-a884-46d5-b303-22ba59c116f4')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="show_physical_router")
+    @idempotent_id('6dfc53f4-a884-46d5-b303-22ba59c116f4')
     def test_show_physical_router(self):
-        """test method for show physical router objects"""
+        """
+        test method for show physical router objects
+        """
         # Create global system config
         global_system_config = self._create_global_system_config()['name']
         physical_router_uuid = self._create_physical_router(
@@ -166,11 +177,13 @@
         with self.rbac_utils.override_role(self):
             self.router_client.show_physical_router(physical_router_uuid)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="update_physical_router")
-    @decorators.idempotent_id('c270f369-8cd7-4ee3-8ab1-4580c3138a5c')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="update_physical_router")
+    @idempotent_id('c270f369-8cd7-4ee3-8ab1-4580c3138a5c')
     def test_update_physical_router(self):
-        """test method for update physical router objects"""
+        """
+        test method for update physical router objects
+        """
         # Create global system config
         global_system_config = self._create_global_system_config()['name']
         updated_fq_name = data_utils.rand_name('rbac-physical-router-new-name')
@@ -181,11 +194,13 @@
                 physical_router_uuid,
                 display_name=updated_fq_name)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="delete_physical_router")
-    @decorators.idempotent_id('eeded742-6a8d-4e88-bfa8-fe32db463c53')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="delete_physical_router")
+    @idempotent_id('eeded742-6a8d-4e88-bfa8-fe32db463c53')
     def test_delete_physical_router(self):
-        """test method for delete physical router objects"""
+        """
+        test method for delete physical router objects
+        """
         # Create global system config
         global_system_config = self._create_global_system_config()['name']
         physical_router_uuid = self._create_physical_router(
@@ -193,40 +208,48 @@
         with self.rbac_utils.override_role(self):
             self.router_client.delete_physical_router(physical_router_uuid)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="list_bgp_routers")
-    @decorators.idempotent_id('49bfb461-f99e-4585-b051-e20a3c937589')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="list_bgp_routers")
+    @idempotent_id('49bfb461-f99e-4585-b051-e20a3c937589')
     def test_list_bgp_routers(self):
-        """test method for list bgp router objects"""
+        """
+        test method for list bgp router objects
+        """
         with self.rbac_utils.override_role(self):
             self.router_client.list_bgp_routers()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="create_bgp_routers")
-    @decorators.idempotent_id('7567974c-040e-4edd-b3a1-c633aa9651cb')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="create_bgp_routers")
+    @idempotent_id('7567974c-040e-4edd-b3a1-c633aa9651cb')
     def test_create_bgp_routers(self):
-        """test method for create bgp router objects"""
+        """
+        test method for create bgp router objects
+        """
         # Create Routing Instance
         routing_instance = self._create_routing_instances()
         with self.rbac_utils.override_role(self):
             self._create_bgp_router(routing_instance)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="show_bgp_router")
-    @decorators.idempotent_id('0d3ad424-18c9-4d96-8708-fa1ebd45594b')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="show_bgp_router")
+    @idempotent_id('0d3ad424-18c9-4d96-8708-fa1ebd45594b')
     def test_show_bgp_router(self):
-        """test method for show bgp router objects"""
+        """
+        test method for show bgp router objects
+        """
         # Create Routing Instance
         routing_instance = self._create_routing_instances()
         bgp_router_uuid = self._create_bgp_router(routing_instance)['uuid']
         with self.rbac_utils.override_role(self):
             self.router_client.show_bgp_router(bgp_router_uuid)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="update_bgp_router")
-    @decorators.idempotent_id('dc50e7c5-7614-4281-8a66-282c52f3c769')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="update_bgp_router")
+    @idempotent_id('dc50e7c5-7614-4281-8a66-282c52f3c769')
     def test_update_bgp_router(self):
-        """test method for update bgp router objects"""
+        """
+        test method for update bgp router objects
+        """
         # Create Routing Instance
         routing_instance = self._create_routing_instances()
         updated_fq_name = data_utils.rand_name('rbac-bgp-router-new-name')
@@ -236,40 +259,48 @@
                 bgp_router_uuid,
                 display_name=updated_fq_name)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="delete_bgp_router")
-    @decorators.idempotent_id('f14aee72-cad4-4c3e-8eea-7886a81abb24')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="delete_bgp_router")
+    @idempotent_id('f14aee72-cad4-4c3e-8eea-7886a81abb24')
     def test_delete_bgp_router(self):
-        """test method for delete bgp router objects"""
+        """
+        test method for delete bgp router objects
+        """
         # Create Routing Instance
         routing_instance = self._create_routing_instances()
         bgp_router_uuid = self._create_bgp_router(routing_instance)['uuid']
         with self.rbac_utils.override_role(self):
             self.router_client.delete_bgp_router(bgp_router_uuid)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="list_global_vrouter_configs")
-    @decorators.idempotent_id('4af768d1-3cbe-4aff-bcbc-0e045cac3277')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="list_global_vrouter_configs")
+    @idempotent_id('4af768d1-3cbe-4aff-bcbc-0e045cac3277')
     def test_list_global_vrouter(self):
-        """test method for list global vrouter config objects"""
+        """
+        test method for list global vrouter config objects
+        """
         with self.rbac_utils.override_role(self):
             self.router_client.list_global_vrouter_configs()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="create_global_vrouter_configs")
-    @decorators.idempotent_id('e13d800f-9304-4a06-9bf1-ad08345a13a8')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="create_global_vrouter_configs")
+    @idempotent_id('e13d800f-9304-4a06-9bf1-ad08345a13a8')
     def test_create_global_vrouter(self):
-        """test method for create global vrouter config objects"""
+        """
+        test method for create global vrouter config objects
+        """
         # Create global system config
         global_system_config = self._create_global_system_config()['name']
         with self.rbac_utils.override_role(self):
             self._create_global_vrouter_config(global_system_config)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="show_global_vrouter_config")
-    @decorators.idempotent_id('3bb6f4e1-fd3f-4338-8392-f7f80974a80e')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="show_global_vrouter_config")
+    @idempotent_id('3bb6f4e1-fd3f-4338-8392-f7f80974a80e')
     def test_show_global_vrouter_config(self):
-        """test method for show global vrouter config objects"""
+        """
+        test method for show global vrouter config objects
+        """
         # Create global system config
         global_system_config = self._create_global_system_config()['name']
         global_vrouter_config_uuid = self._create_global_vrouter_config(
@@ -278,11 +309,13 @@
             self.router_client.show_global_vrouter_config(
                 global_vrouter_config_uuid)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="update_global_vrouter_config")
-    @decorators.idempotent_id('36fcdd51-c42b-4e67-8c26-73d4cde47507')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="update_global_vrouter_config")
+    @idempotent_id('36fcdd51-c42b-4e67-8c26-73d4cde47507')
     def test_update_global_vrouter(self):
-        """test method for update global vrouter config objects"""
+        """
+        test method for update global vrouter config objects
+        """
         # Create global system config
         global_system_config = self._create_global_system_config()['name']
         updated_fq_name = data_utils.rand_name(
@@ -294,11 +327,13 @@
                 global_vrouter_config_uuid,
                 display_name=updated_fq_name)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="delete_global_vrouter_config")
-    @decorators.idempotent_id('4f3d59e8-3dac-4346-9d13-5ebe5ad8f6cf')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="delete_global_vrouter_config")
+    @idempotent_id('4f3d59e8-3dac-4346-9d13-5ebe5ad8f6cf')
     def test_delete_global_vrouter(self):
-        """test method for delete global vrouter config objects"""
+        """
+        test method for delete global vrouter config objects
+        """
         # Create global system config
         global_system_config = self._create_global_system_config()['name']
         global_vrouter_config_uuid = self._create_global_vrouter_config(
@@ -307,36 +342,44 @@
             self.router_client.delete_global_vrouter_config(
                 global_vrouter_config_uuid)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="list_logical_routers")
-    @decorators.idempotent_id('674bf3de-a9e5-45c2-921b-b89db73a2abe')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="list_logical_routers")
+    @idempotent_id('674bf3de-a9e5-45c2-921b-b89db73a2abe')
     def test_list_logical_routers(self):
-        """test method for list logical router objects"""
+        """
+        test method for list logical router objects
+        """
         with self.rbac_utils.override_role(self):
             self.router_client.list_logical_routers()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="create_logical_routers")
-    @decorators.idempotent_id('610f051b-8eba-4d3a-ba43-91386bfc0e52')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="create_logical_routers")
+    @idempotent_id('610f051b-8eba-4d3a-ba43-91386bfc0e52')
     def test_create_logical_routers(self):
-        """test method for create logical router objects"""
+        """
+        test method for create logical router objects
+        """
         with self.rbac_utils.override_role(self):
             self._create_logical_router()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="show_logical_router")
-    @decorators.idempotent_id('992841d4-0d5d-4d85-b513-049b33e2a2e2')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="show_logical_router")
+    @idempotent_id('992841d4-0d5d-4d85-b513-049b33e2a2e2')
     def test_show_logical_router(self):
-        """test method for show logical router objects"""
+        """
+        test method for show logical router objects
+        """
         logical_router_uuid = self._create_logical_router()['uuid']
         with self.rbac_utils.override_role(self):
             self.router_client.show_logical_router(logical_router_uuid)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="update_logical_router")
-    @decorators.idempotent_id('518197bf-5233-4059-9021-5d7ecc74718e')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="update_logical_router")
+    @idempotent_id('518197bf-5233-4059-9021-5d7ecc74718e')
     def test_update_logical_router(self):
-        """test method for update logical router objects"""
+        """
+        test method for update logical router objects
+        """
         updated_fq_name = data_utils.rand_name('rbac-logical-router-new-name')
         logical_router_uuid = self._create_logical_router()['uuid']
         with self.rbac_utils.override_role(self):
@@ -344,38 +387,46 @@
                 logical_router_uuid,
                 display_name=updated_fq_name)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="delete_logical_router")
-    @decorators.idempotent_id('70448b9c-4444-45e0-b307-7bff4dc075b1')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="delete_logical_router")
+    @idempotent_id('70448b9c-4444-45e0-b307-7bff4dc075b1')
     def test_delete_logical_router(self):
-        """test method for delete logical router objects"""
+        """
+        test method for delete logical router objects
+        """
         logical_router_uuid = self._create_logical_router()['uuid']
         with self.rbac_utils.override_role(self):
             self.router_client.delete_logical_router(logical_router_uuid)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="list_virtual_routers")
-    @decorators.idempotent_id('604dc476-732e-4890-8665-a497360f5475')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="list_virtual_routers")
+    @idempotent_id('604dc476-732e-4890-8665-a497360f5475')
     def test_list_virtual_routers(self):
-        """test method for list virtual router objects"""
+        """
+        test method for list virtual router objects
+        """
         with self.rbac_utils.override_role(self):
             self.router_client.list_virtual_routers()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="create_virtual_routers")
-    @decorators.idempotent_id('114beb14-45c0-4714-a407-d160bb102022')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="create_virtual_routers")
+    @idempotent_id('114beb14-45c0-4714-a407-d160bb102022')
     def test_create_virtual_routers(self):
-        """test method for create virtual router objects"""
+        """
+        test method for create virtual router objects
+        """
         # Create global system config
         global_system_config = self._create_global_system_config()['name']
         with self.rbac_utils.override_role(self):
             self._create_virtual_router(global_system_config)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="show_virtual_router")
-    @decorators.idempotent_id('258fe4e0-3e39-460f-aafa-e3b53c96e534')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="show_virtual_router")
+    @idempotent_id('258fe4e0-3e39-460f-aafa-e3b53c96e534')
     def test_show_virtual_router(self):
-        """test method for show virtual router objects"""
+        """
+        test method for show virtual router objects
+        """
         # Create global system config
         global_system_config = self._create_global_system_config()['name']
         virtual_router_uuid = self._create_virtual_router(
@@ -383,11 +434,13 @@
         with self.rbac_utils.override_role(self):
             self.router_client.show_virtual_router(virtual_router_uuid)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="update_virtual_router")
-    @decorators.idempotent_id('d1c72191-2068-4552-a78f-038cdd4c9c1d')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="update_virtual_router")
+    @idempotent_id('d1c72191-2068-4552-a78f-038cdd4c9c1d')
     def test_update_virtual_router(self):
-        """test method for update virtual router objects"""
+        """
+        test method for update virtual router objects
+        """
         # Create global system config
         global_system_config = self._create_global_system_config()['name']
         updated_fq_name = data_utils.rand_name('rbac-virtual-router-new-name')
@@ -398,11 +451,13 @@
                 virtual_router_uuid,
                 display_name=updated_fq_name)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="delete_virtual_router")
-    @decorators.idempotent_id('efbe25d6-8763-42d4-baf6-9f342e710144')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="delete_virtual_router")
+    @idempotent_id('efbe25d6-8763-42d4-baf6-9f342e710144')
     def test_delete_virtual_router(self):
-        """test method for delete virtual router objects"""
+        """
+        test method for delete virtual router objects
+        """
         # Create global system config
         global_system_config = self._create_global_system_config()['name']
         virtual_router_uuid = self._create_virtual_router(
diff --git a/tungsten_tempest_plugin/tests/api/contrail/test_routing.py b/tungsten_tempest_plugin/tests/api/contrail/test_routing.py
index a6554f8..b3f80dd 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_routing.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_routing.py
@@ -17,18 +17,22 @@
 Tempest test-case to test routing objects using RBAC roles
 """
 
+from tungsten_tempest_plugin.tests.api.contrail import rbac_base
+
 from patrole_tempest_plugin import rbac_rule_validation
+
 from tempest import config
 from tempest.lib.common.utils import data_utils
-from tempest.lib import decorators
-
-from tungsten_tempest_plugin.tests.api.contrail import rbac_base
+from tempest.lib.decorators import idempotent_id
 
 CONF = config.CONF
 
 
 class RoutingTest(rbac_base.BaseContrailTest):
-    """Test class to test routing objects using RBAC roles"""
+
+    """
+    Test class to test routing objects using RBAC roles
+    """
 
     @classmethod
     def resource_setup(cls):
@@ -57,45 +61,55 @@
                         new_instance['uuid'])
         return new_instance
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="list_routing_instances")
-    @decorators.idempotent_id('054c56ba-76b2-4161-a702-40301d8de085')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="list_routing_instances")
+    @idempotent_id('054c56ba-76b2-4161-a702-40301d8de085')
     def test_list_routing_instances(self):
-        """test method for list routing instance objects"""
+        """
+        test method for list routing instance objects
+        """
         with self.rbac_utils.override_role(self):
             self.routing_client.list_routing_instances()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="create_routing_instances")
-    @decorators.idempotent_id('3d44a46b-5436-43a8-b2f7-8581f0f04dbc')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="create_routing_instances")
+    @idempotent_id('3d44a46b-5436-43a8-b2f7-8581f0f04dbc')
     def test_create_routing_instances(self):
-        """test method for create routing instance objects"""
+        """
+        test method for create routing instance objects
+        """
         with self.rbac_utils.override_role(self):
             self._create_routing_instances()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="show_routing_instance")
-    @decorators.idempotent_id('161abb37-6037-422b-b453-108a5d10caca')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="show_routing_instance")
+    @idempotent_id('161abb37-6037-422b-b453-108a5d10caca')
     def test_show_routing_instance(self):
-        """test method for show routing instance objects"""
+        """
+        test method for show routing instance objects
+        """
         new_instance = self._create_routing_instances()
         with self.rbac_utils.override_role(self):
             self.routing_client.show_routing_instance(new_instance['uuid'])
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="delete_routing_instance")
-    @decorators.idempotent_id('1d3af01e-01bf-4347-a9bc-633732339e0e')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="delete_routing_instance")
+    @idempotent_id('1d3af01e-01bf-4347-a9bc-633732339e0e')
     def test_delete_routing_instance(self):
-        """test method for delete routing instance objects"""
+        """
+        test method for delete routing instance objects
+        """
         new_instance = self._create_routing_instances()
         with self.rbac_utils.override_role(self):
             self.routing_client.delete_routing_instance(new_instance['uuid'])
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="update_routing_instance")
-    @decorators.idempotent_id('ebcfd442-2a26-4954-968b-e17e414ed0d1')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="update_routing_instance")
+    @idempotent_id('ebcfd442-2a26-4954-968b-e17e414ed0d1')
     def test_update_routing_instance(self):
-        """test method for update routing instance objects"""
+        """
+        test method for update routing instance objects
+        """
         new_instance = self._create_routing_instances()
         with self.rbac_utils.override_role(self):
             self.routing_client.update_routing_instance(
diff --git a/tungsten_tempest_plugin/tests/api/contrail/test_routing_policy.py b/tungsten_tempest_plugin/tests/api/contrail/test_routing_policy.py
index eb873a1..9b1dde9 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_routing_policy.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_routing_policy.py
@@ -18,19 +18,24 @@
 """
 
 from oslo_log import log as logging
-from patrole_tempest_plugin import rbac_rule_validation
-from tempest import config
-from tempest.lib.common.utils import data_utils
-from tempest.lib import decorators
 
 from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
+from patrole_tempest_plugin import rbac_rule_validation
+
+from tempest import config
+from tempest.lib.common.utils import data_utils
+from tempest.lib.decorators import idempotent_id
+
 CONF = config.CONF
 LOG = logging.getLogger(__name__)
 
 
 class RoutingPolicyTest(rbac_base.BaseContrailTest):
-    """Test class to test routing policy objects using RBAC roles"""
+
+    """
+    Test class to test routing policy objects using RBAC roles
+    """
 
     def _create_routing_policy(self):
         fq_name = data_utils.rand_name('routing-policy')
@@ -53,45 +58,55 @@
         self.routing_policy_client.update_routing_policy(routing_policy_uuid,
                                                          **put_body)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="list_routing_policys")
-    @decorators.idempotent_id('fe25a306-bc4f-42b3-91ca-38df01e35345')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="list_routing_policys")
+    @idempotent_id('fe25a306-bc4f-42b3-91ca-38df01e35345')
     def test_list_routing_policys(self):
-        """test method for list routing policy objects"""
+        """
+        test method for list routing policy objects
+        """
         with self.rbac_utils.override_role(self):
             self.routing_policy_client.list_routing_policys()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="create_routing_policys")
-    @decorators.idempotent_id('f8ca5e30-8bb3-410f-8618-8fdca70bda06')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="create_routing_policys")
+    @idempotent_id('f8ca5e30-8bb3-410f-8618-8fdca70bda06')
     def test_create_routing_policys(self):
-        """test method for create routing policy objects"""
+        """
+        test method for create routing policy objects
+        """
         with self.rbac_utils.override_role(self):
             self._create_routing_policy()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="show_routing_policy")
-    @decorators.idempotent_id('3421e84e-3e2a-452a-9a26-b2caf00b1cbc')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="show_routing_policy")
+    @idempotent_id('3421e84e-3e2a-452a-9a26-b2caf00b1cbc')
     def test_show_routing_policy(self):
-        """test method for show routing policy objects"""
+        """
+        test method for show routing policy objects
+        """
         policy_uuid = self._create_routing_policy()
         with self.rbac_utils.override_role(self):
             self.routing_policy_client.show_routing_policy(policy_uuid)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="update_routing_policy")
-    @decorators.idempotent_id('9fc1f44f-c8e2-4f5a-8239-e9b783f55d94')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="update_routing_policy")
+    @idempotent_id('9fc1f44f-c8e2-4f5a-8239-e9b783f55d94')
     def test_update_routing_policy(self):
-        """test method for update routing policy objects"""
+        """
+        test method for update routing policy objects
+        """
         policy_uuid = self._create_routing_policy()
         with self.rbac_utils.override_role(self):
             self._update_routing_policy(policy_uuid)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="delete_routing_policy")
-    @decorators.idempotent_id('24f1cd7a-2917-4b81-a0a3-a40ed2d40c7d')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="delete_routing_policy")
+    @idempotent_id('24f1cd7a-2917-4b81-a0a3-a40ed2d40c7d')
     def test_delete_routing_policy(self):
-        """test method for delete routing policy objects"""
+        """
+        test method for delete routing policy objects
+        """
         policy_uuid = self._create_routing_policy()
         with self.rbac_utils.override_role(self):
             self.routing_policy_client.delete_routing_policy(policy_uuid)
diff --git a/tungsten_tempest_plugin/tests/api/contrail/test_security_group.py b/tungsten_tempest_plugin/tests/api/contrail/test_security_group.py
index af65578..8a14b03 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_security_group.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_security_group.py
@@ -17,19 +17,24 @@
 Tempest test-case to test service group objects using RBAC roles
 """
 from oslo_log import log as logging
-from patrole_tempest_plugin import rbac_rule_validation
-from tempest import config
-from tempest.lib.common.utils import data_utils
-from tempest.lib import decorators
 
 from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
+from patrole_tempest_plugin import rbac_rule_validation
+
+from tempest import config
+from tempest.lib.common.utils import data_utils
+from tempest.lib.decorators import idempotent_id
+
 CONF = config.CONF
 LOG = logging.getLogger(__name__)
 
 
 class ContrailSecurityGroupTest(rbac_base.BaseContrailTest):
-    """Test class to test security group objects using RBAC roles"""
+
+    """
+    Test class to test security group objects using RBAC roles
+    """
 
     def _delete_security_group(self, sec_grp_id):
         return self.security_group_client.delete_security_group(sec_grp_id)
@@ -49,48 +54,58 @@
                         sec_grp['uuid'])
         return sec_grp
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="list_security_groups")
-    @decorators.idempotent_id('a13cc1d5-f562-4b68-b732-980deb3cddf4')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="list_security_groups")
+    @idempotent_id('a13cc1d5-f562-4b68-b732-980deb3cddf4')
     def test_list_security_groups(self):
-        """test method for list security group objects"""
+        """
+        test method for list security group objects
+        """
         self._create_security_groups()
         with self.rbac_utils.override_role(self):
             self.security_group_client.list_security_groups()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="show_security_group")
-    @decorators.idempotent_id('c7ca1781-08ae-4fa2-bd6d-1f369950c4c4')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="show_security_group")
+    @idempotent_id('c7ca1781-08ae-4fa2-bd6d-1f369950c4c4')
     def test_show_security_group(self):
-        """test method for show security group objects"""
+        """
+        test method for show security group objects
+        """
         grp = self._create_security_groups()
         grp_id = grp['uuid']
         with self.rbac_utils.override_role(self):
             self.security_group_client.show_security_group(grp_id)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="delete_security_group")
-    @decorators.idempotent_id('e682d7b4-deb8-4b5c-9c9b-1e1ada827b40')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="delete_security_group")
+    @idempotent_id('e682d7b4-deb8-4b5c-9c9b-1e1ada827b40')
     def test_delete_security_group(self):
-        """test method for delete security group objects"""
+        """
+        test method for delete security group objects
+        """
         grp = self._create_security_groups()
         grp_id = grp['uuid']
         with self.rbac_utils.override_role(self):
             self._delete_security_group(grp_id)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="create_security_groups")
-    @decorators.idempotent_id('63a2ff14-7869-40a2-962a-d65752de5651')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="create_security_groups")
+    @idempotent_id('63a2ff14-7869-40a2-962a-d65752de5651')
     def test_create_security_groups(self):
-        """test method for create security group objects"""
+        """
+        test method for create security group objects
+        """
         with self.rbac_utils.override_role(self):
             self._create_security_groups()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="update_security_group")
-    @decorators.idempotent_id('cf9aafe2-fffb-4028-8fd7-4d6634e144e7')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="update_security_group")
+    @idempotent_id('cf9aafe2-fffb-4028-8fd7-4d6634e144e7')
     def test_update_security_group(self):
-        """test method for update security group objects"""
+        """
+        test method for update security group objects
+        """
         grp = self._create_security_groups()
         grp_id = grp['uuid']
         display_name = data_utils.rand_name('securitygroupnew')
diff --git a/tungsten_tempest_plugin/tests/api/contrail/test_service_appliances.py b/tungsten_tempest_plugin/tests/api/contrail/test_service_appliances.py
index b1eab41..7abe131 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_service_appliances.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_service_appliances.py
@@ -17,18 +17,22 @@
 Tempest test-case to test service appliance using RBAC roles
 """
 
+from tungsten_tempest_plugin.tests.api.contrail import rbac_base
+
 from patrole_tempest_plugin import rbac_rule_validation
+
 from tempest import config
 from tempest.lib.common.utils import data_utils
-from tempest.lib import decorators
-
-from tungsten_tempest_plugin.tests.api.contrail import rbac_base
+from tempest.lib.decorators import idempotent_id
 
 CONF = config.CONF
 
 
 class ServiceAppliancesTest(rbac_base.BaseContrailTest):
-    """Test class to test service appliances objects using RBAC roles"""
+
+    """
+    Test class to test service appliances objects using RBAC roles
+    """
 
     def _create_global_system_config(self):
         config_name = data_utils.rand_name('test-config')
@@ -71,19 +75,23 @@
                         new_appliance['uuid'])
         return new_appliance
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="list_service_appliances")
-    @decorators.idempotent_id('6b5fc17c-34e6-4d21-a53e-a0dfe69afd31')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="list_service_appliances")
+    @idempotent_id('6b5fc17c-34e6-4d21-a53e-a0dfe69afd31')
     def test_list_service_appliances(self):
-        """test method for list service appliance objects"""
+        """
+        test method for list service appliance objects
+        """
         with self.rbac_utils.override_role(self):
             self.service_appliances_client.list_service_appliances()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="create_service_appliances")
-    @decorators.idempotent_id('0563c0c8-b986-466e-8540-aa8ad7a10367')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="create_service_appliances")
+    @idempotent_id('0563c0c8-b986-466e-8540-aa8ad7a10367')
     def test_create_service_appliances(self):
-        """test method for create service appliance objects"""
+        """
+        test method for create service appliance objects
+        """
         # Create global system config
         global_system_config = self._create_global_system_config()['name']
         new_set = \
@@ -91,11 +99,13 @@
         with self.rbac_utils.override_role(self):
             self._create_service_appliances(new_set)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="show_service_appliance")
-    @decorators.idempotent_id('ea30dcfe-8657-4a7d-9cf1-3176d334bf27')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="show_service_appliance")
+    @idempotent_id('ea30dcfe-8657-4a7d-9cf1-3176d334bf27')
     def test_show_service_appliance(self):
-        """test method for show service appliance objects"""
+        """
+        test method for show service appliance objects
+        """
         # Create global system config
         global_system_config = \
             self._create_global_system_config()['name']
@@ -106,11 +116,13 @@
             self.service_appliances_client.show_service_appliance(
                 new_appliance['uuid'])
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="update_service_appliance")
-    @decorators.idempotent_id('a54ca33a-8590-4844-96d7-b96882b59e86')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="update_service_appliance")
+    @idempotent_id('a54ca33a-8590-4844-96d7-b96882b59e86')
     def test_update_service_appliance(self):
-        """test method for update service appliance objects"""
+        """
+        test method for update service appliance objects
+        """
         # Create global system config
         global_system_config = self._create_global_system_config()['name']
         new_set = \
@@ -122,11 +134,13 @@
                 new_appliance['uuid'],
                 display_name=update_name)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="delete_service_appliance")
-    @decorators.idempotent_id('362deff5-7b72-4929-ba81-972cfcfa1309')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="delete_service_appliance")
+    @idempotent_id('362deff5-7b72-4929-ba81-972cfcfa1309')
     def test_delete_service_appliance(self):
-        """test method for delete service appliance objects"""
+        """
+        test method for delete service appliance objects
+        """
         # Create global system config
         global_system_config = self._create_global_system_config()['name']
         new_set = \
@@ -136,29 +150,35 @@
             self.service_appliances_client.delete_service_appliance(
                 new_appliance['uuid'])
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="list_service_appliance_sets")
-    @decorators.idempotent_id('c1e74da9-00b6-4c88-adda-2ce49094e570')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="list_service_appliance_sets")
+    @idempotent_id('c1e74da9-00b6-4c88-adda-2ce49094e570')
     def test_list_service_appl_sets(self):
-        """test method for list service appliance sets objects"""
+        """
+        test method for list service appliance sets objects
+        """
         with self.rbac_utils.override_role(self):
             self.service_appliances_client.list_service_appliance_sets()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="create_service_appliance_sets")
-    @decorators.idempotent_id('eb00d6cf-590f-41bf-8ee4-5be625d9cb93')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="create_service_appliance_sets")
+    @idempotent_id('eb00d6cf-590f-41bf-8ee4-5be625d9cb93')
     def test_create_service_appl_sets(self):
-        """test method for create service appliance sets objects"""
+        """
+        test method for create service appliance sets objects
+        """
         # Create global system config
         global_system_config = self._create_global_system_config()['name']
         with self.rbac_utils.override_role(self):
             self._create_service_appliance_sets(global_system_config)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="show_service_appliance_set")
-    @decorators.idempotent_id('dd35dd04-e7d9-46bb-8f36-26835f122572')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="show_service_appliance_set")
+    @idempotent_id('dd35dd04-e7d9-46bb-8f36-26835f122572')
     def test_show_service_appl_set(self):
-        """test method for show service appliance sets objects"""
+        """
+        test method for show service appliance sets objects
+        """
         # Create global system config
         global_system_config = self._create_global_system_config()['name']
         new_set = self._create_service_appliance_sets(
@@ -167,11 +187,13 @@
             self.service_appliances_client.show_service_appliance_set(
                 new_set['uuid'])
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="update_service_appliance_set")
-    @decorators.idempotent_id('952f063b-bc71-4f62-83b1-719bce5ad4ed')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="update_service_appliance_set")
+    @idempotent_id('952f063b-bc71-4f62-83b1-719bce5ad4ed')
     def test_update_service_appl_set(self):
-        """test method for update service appliance sets objects"""
+        """
+        test method for update service appliance sets objects
+        """
         # Create global system config
         global_system_config = self._create_global_system_config()['name']
         new_set = self._create_service_appliance_sets(
@@ -182,11 +204,13 @@
                 new_set['uuid'],
                 display_name=update_name)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="delete_service_appliance_set")
-    @decorators.idempotent_id('7b56ce24-da1d-4565-bd22-c58dc57d7045')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="delete_service_appliance_set")
+    @idempotent_id('7b56ce24-da1d-4565-bd22-c58dc57d7045')
     def test_delete_service_appl_set(self):
-        """test method for delete service appliance sets objects"""
+        """
+        test method for delete service appliance sets objects
+        """
         # Create global system config
         global_system_config = self._create_global_system_config()['name']
         new_set = self._create_service_appliance_sets(
diff --git a/tungsten_tempest_plugin/tests/api/contrail/test_service_clients.py b/tungsten_tempest_plugin/tests/api/contrail/test_service_clients.py
index 9587809..e629526 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_service_clients.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_service_clients.py
@@ -17,18 +17,22 @@
 Tempest test-case to test service clients objects using RBAC roles
 """
 
+from tungsten_tempest_plugin.tests.api.contrail import rbac_base
+
 from patrole_tempest_plugin import rbac_rule_validation
+
 from tempest import config
 from tempest.lib.common.utils import data_utils
-from tempest.lib import decorators
-
-from tungsten_tempest_plugin.tests.api.contrail import rbac_base
+from tempest.lib.decorators import idempotent_id
 
 CONF = config.CONF
 
 
 class ServiceClientsTest(rbac_base.BaseContrailTest):
-    """Tempest test-case to test service clients objects using RBAC roles"""
+
+    """
+    Tempest test-case to test service clients objects using RBAC roles
+    """
 
     def _create_service_template(self):
         template_name = data_utils.rand_name('test-template')
@@ -82,37 +86,45 @@
                         new_instance['uuid'])
         return new_instance
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="list_service_templates")
-    @decorators.idempotent_id('841b1d32-4308-4fb6-852a-41bdd8c56c37')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="list_service_templates")
+    @idempotent_id('841b1d32-4308-4fb6-852a-41bdd8c56c37')
     def test_list_service_templates(self):
-        """test method for list service template objects"""
+        """
+        test method for list service template objects
+        """
         with self.rbac_utils.override_role(self):
             self.service_client.list_service_templates()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="create_service_templates")
-    @decorators.idempotent_id('3f02d14a-31e2-4476-821f-87d0cc42d9fb')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="create_service_templates")
+    @idempotent_id('3f02d14a-31e2-4476-821f-87d0cc42d9fb')
     def test_create_service_templates(self):
-        """test method for create service template objects"""
+        """
+        test method for create service template objects
+        """
         with self.rbac_utils.override_role(self):
             self._create_service_template()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="show_service_template")
-    @decorators.idempotent_id('1f15d734-2cc6-4ded-916e-134286c6b87b')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="show_service_template")
+    @idempotent_id('1f15d734-2cc6-4ded-916e-134286c6b87b')
     def test_show_service_template(self):
-        """test method for show service template objects"""
+        """
+        test method for show service template objects
+        """
         new_template = self._create_service_template()
         with self.rbac_utils.override_role(self):
             self.service_client.show_service_template(
                 new_template['uuid'])
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="update_service_template")
-    @decorators.idempotent_id('3549debd-4c7a-4574-8d11-4190c8530a23')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="update_service_template")
+    @idempotent_id('3549debd-4c7a-4574-8d11-4190c8530a23')
     def test_update_service_template(self):
-        """test method for update service template objects"""
+        """
+        test method for update service template objects
+        """
         new_template = self._create_service_template()
         update_name = data_utils.rand_name('test')
         with self.rbac_utils.override_role(self):
@@ -120,47 +132,57 @@
                 new_template['uuid'],
                 display_name=update_name)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="delete_service_template")
-    @decorators.idempotent_id('e86cabd2-5b7e-4ee8-86ec-db52619b852b')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="delete_service_template")
+    @idempotent_id('e86cabd2-5b7e-4ee8-86ec-db52619b852b')
     def test_delete_service_template(self):
-        """test method for delete service template objects"""
+        """
+        test method for delete service template objects
+        """
         new_template = self._create_service_template()
         with self.rbac_utils.override_role(self):
             self.service_client.delete_service_template(
                 new_template['uuid'])
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="list_service_health_checks")
-    @decorators.idempotent_id('5210d6ca-9a38-4b6b-b5b7-f836c3846079')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="list_service_health_checks")
+    @idempotent_id('5210d6ca-9a38-4b6b-b5b7-f836c3846079')
     def test_list_service_health_checks(self):
-        """test method for list service health check objects"""
+        """
+        test method for list service health check objects
+        """
         with self.rbac_utils.override_role(self):
             self.service_client.list_service_health_checks()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="create_service_health_checks")
-    @decorators.idempotent_id('77716feb-0d05-4cfd-8a17-79cf0b19ed3c')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="create_service_health_checks")
+    @idempotent_id('77716feb-0d05-4cfd-8a17-79cf0b19ed3c')
     def test_create_service_health(self):
-        """test method for create service health check objects"""
+        """
+        test method for create service health check objects
+        """
         with self.rbac_utils.override_role(self):
             self._create_service_health_check()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="show_service_health_check")
-    @decorators.idempotent_id('80db4445-8d6c-4c8f-aa25-d4ea53d32d2c')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="show_service_health_check")
+    @idempotent_id('80db4445-8d6c-4c8f-aa25-d4ea53d32d2c')
     def test_show_service_health(self):
-        """test method for show service health check objects"""
+        """
+        test method for show service health check objects
+        """
         new_health_check = self._create_service_health_check()
         with self.rbac_utils.override_role(self):
             self.service_client.show_service_health_check(
                 new_health_check['uuid'])
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="update_service_health_check")
-    @decorators.idempotent_id('68fb1510-4b76-40cc-8979-e56e537229d2')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="update_service_health_check")
+    @idempotent_id('68fb1510-4b76-40cc-8979-e56e537229d2')
     def test_update_service_health(self):
-        """test method for update service health check objects"""
+        """
+        test method for update service health check objects
+        """
         new_health_check = self._create_service_health_check()
         update_name = data_utils.rand_name('test')
         with self.rbac_utils.override_role(self):
@@ -168,57 +190,69 @@
                 new_health_check['uuid'],
                 display_name=update_name)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="delete_service_health_check")
-    @decorators.idempotent_id('2dce3942-402a-48a4-b682-fdc425d3d935')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="delete_service_health_check")
+    @idempotent_id('2dce3942-402a-48a4-b682-fdc425d3d935')
     def test_delete_service_health(self):
-        """test method for delete service health check objects"""
+        """
+        test method for delete service health check objects
+        """
         new_health_check = self._create_service_health_check()
         with self.rbac_utils.override_role(self):
             self.service_client.delete_service_health_check(
                 new_health_check['uuid'])
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="create_service_instances")
-    @decorators.idempotent_id('1469c71e-f6f5-419f-9672-c3c67f879704')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="create_service_instances")
+    @idempotent_id('1469c71e-f6f5-419f-9672-c3c67f879704')
     def test_create_service_instances(self):
-        """test method for create service client objects"""
+        """
+        test method for create service client objects
+        """
         with self.rbac_utils.override_role(self):
             self._create_service_instance()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="show_service_instance")
-    @decorators.idempotent_id('ea5b716d-5de8-4c71-becd-f1501c22f0df')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="show_service_instance")
+    @idempotent_id('ea5b716d-5de8-4c71-becd-f1501c22f0df')
     def test_show_service_instance(self):
-        """test method for show service client objects"""
+        """
+        test method for show service client objects
+        """
         new_instance = self._create_service_instance()
         with self.rbac_utils.override_role(self):
             self.service_client.show_service_instance(
                 new_instance['uuid'])
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="delete_service_instance")
-    @decorators.idempotent_id('74934833-29cd-416b-a5a6-273f733d058a')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="delete_service_instance")
+    @idempotent_id('74934833-29cd-416b-a5a6-273f733d058a')
     def test_delete_service_instance(self):
-        """test method for delete service client objects"""
+        """
+        test method for delete service client objects
+        """
         new_instance = self._create_service_instance()
         with self.rbac_utils.override_role(self):
             self.service_client.delete_service_instance(
                 new_instance['uuid'])
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="list_service_instances")
-    @decorators.idempotent_id('da6016a3-a2a8-42a8-b064-c124c22fef6f')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="list_service_instances")
+    @idempotent_id('da6016a3-a2a8-42a8-b064-c124c22fef6f')
     def test_list_service_instances(self):
-        """test method for list service client objects"""
+        """
+        test method for list service client objects
+        """
         with self.rbac_utils.override_role(self):
             self.service_client.list_service_instances()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="update_service_instance")
-    @decorators.idempotent_id('a6237b99-336b-42db-a8eb-9604a1b08fc6')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="update_service_instance")
+    @idempotent_id('a6237b99-336b-42db-a8eb-9604a1b08fc6')
     def test_update_service_instance(self):
-        """test method for update service client objects"""
+        """
+        test method for update service client objects
+        """
         new_instance = self._create_service_instance()
         update_name = data_utils.rand_name('test')
         with self.rbac_utils.override_role(self):
diff --git a/tungsten_tempest_plugin/tests/api/contrail/test_subnet.py b/tungsten_tempest_plugin/tests/api/contrail/test_subnet.py
index 379a142..233084e 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_subnet.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_subnet.py
@@ -18,19 +18,24 @@
 """
 
 from oslo_log import log as logging
-from patrole_tempest_plugin import rbac_rule_validation
-from tempest import config
-from tempest.lib.common.utils import data_utils
-from tempest.lib import decorators
 
 from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
+from patrole_tempest_plugin import rbac_rule_validation
+
+from tempest import config
+from tempest.lib.common.utils import data_utils
+from tempest.lib.decorators import idempotent_id
+
 CONF = config.CONF
 LOG = logging.getLogger(__name__)
 
 
 class SubnetContrailTest(rbac_base.BaseContrailTest):
-    """Test class to test subnet objects using RBAC roles"""
+
+    """
+    Test class to test subnet objects using RBAC roles
+    """
 
     def _create_subnet(self):
         post_body = {
@@ -50,45 +55,55 @@
         }
         self.subnet_client.update_subnet(subnet_uuid, **put_body)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="list_subnets")
-    @decorators.idempotent_id('ddd1d9ae-cf2f-4a74-98ba-b0f481f27977')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="list_subnets")
+    @idempotent_id('ddd1d9ae-cf2f-4a74-98ba-b0f481f27977')
     def test_list_subnets(self):
-        """test method for list subnet objects"""
+        """
+        test method for list subnet objects
+        """
         with self.rbac_utils.override_role(self):
             self.subnet_client.list_subnets()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="create_subnets")
-    @decorators.idempotent_id('ee0cb904-d162-44a4-b7b0-a7451f667ed5')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="create_subnets")
+    @idempotent_id('ee0cb904-d162-44a4-b7b0-a7451f667ed5')
     def test_create_subnets(self):
-        """test method for create subnet objects"""
+        """
+        test method for create subnet objects
+        """
         with self.rbac_utils.override_role(self):
             self._create_subnet()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="show_subnet")
-    @decorators.idempotent_id('994618f2-5b40-460c-a6a8-6479bc15bf80')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="show_subnet")
+    @idempotent_id('994618f2-5b40-460c-a6a8-6479bc15bf80')
     def test_show_subnet(self):
-        """test method for show subnet objects"""
+        """
+        test method for show subnet objects
+        """
         subnet_uuid = self._create_subnet()
         with self.rbac_utils.override_role(self):
             self.subnet_client.show_subnet(subnet_uuid)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="update_subnet")
-    @decorators.idempotent_id('565e44c9-eb9b-4ae6-9ebb-db422a9751ee')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="update_subnet")
+    @idempotent_id('565e44c9-eb9b-4ae6-9ebb-db422a9751ee')
     def test_update_subnet(self):
-        """test method for update subnet objects"""
+        """
+        test method for update subnet objects
+        """
         subnet_uuid = self._create_subnet()
         with self.rbac_utils.override_role(self):
             self._update_subnet(subnet_uuid)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="delete_subnet")
-    @decorators.idempotent_id('a733b913-7a88-45d9-ac0a-d858fa3dc662')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="delete_subnet")
+    @idempotent_id('a733b913-7a88-45d9-ac0a-d858fa3dc662')
     def test_delete_subnet(self):
-        """test method for delete subnet objects"""
+        """
+        test method for delete subnet objects
+        """
         subnet_uuid = self._create_subnet()
         with self.rbac_utils.override_role(self):
             self.subnet_client.delete_subnet(subnet_uuid)
diff --git a/tungsten_tempest_plugin/tests/api/contrail/test_virtual_dns.py b/tungsten_tempest_plugin/tests/api/contrail/test_virtual_dns.py
index 0557e60..6e75327 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_virtual_dns.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_virtual_dns.py
@@ -18,20 +18,25 @@
 """
 
 from oslo_log import log as logging
-from patrole_tempest_plugin import rbac_rule_validation
-from tempest import config
-from tempest.lib.common.utils import data_utils
-from tempest.lib import decorators
 
 from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
+from patrole_tempest_plugin import rbac_rule_validation
+
+from tempest import config
+from tempest.lib.common.utils import data_utils
+from tempest.lib.decorators import idempotent_id
+
 CONF = config.CONF
 LOG = logging.getLogger(__name__)
 
 
 # noinspection PyPep8Naming
 class VirtualDNSTest(rbac_base.BaseContrailTest):
-    """Test class to test virtual dns objects using RBAC roles"""
+
+    """
+    Test class to test virtual dns objects using RBAC roles
+    """
 
     def _create_virtual_dns(self):
         parent_type = "domain"
@@ -71,47 +76,57 @@
                         dns_record['virtual-DNS-record']['uuid'])
         return dns_record
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="list_virtual_DNSs")
-    @decorators.idempotent_id('8401d690-afdf-4b6e-ad60-b9363a8cfb1d')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="list_virtual_DNSs")
+    @idempotent_id('8401d690-afdf-4b6e-ad60-b9363a8cfb1d')
     def test_list_virtual_dns(self):
-        """test method for list virtual dns objects"""
+        """
+        test method for list virtual dns objects
+        """
         with self.rbac_utils.override_role(self):
             self.virtual_dns_client.list_virtual_dns()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="create_virtual_DNSs")
-    @decorators.idempotent_id('a7dd2c9e-e1eb-4dc4-ac70-4d48a291a3bf')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="create_virtual_DNSs")
+    @idempotent_id('a7dd2c9e-e1eb-4dc4-ac70-4d48a291a3bf')
     def test_create_virtual_dns(self):
-        """test method for create virtual dns objects"""
+        """
+        test method for create virtual dns objects
+        """
         with self.rbac_utils.override_role(self):
             self._create_virtual_dns()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="show_virtual_DNS")
-    @decorators.idempotent_id('ffc0fc82-3bff-48ab-b65a-3d90b4a3154d')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="show_virtual_DNS")
+    @idempotent_id('ffc0fc82-3bff-48ab-b65a-3d90b4a3154d')
     def test_show_virtual_dns(self):
-        """test method for show virtual dns objects"""
+        """
+        test method for show virtual dns objects
+        """
         dns = self._create_virtual_dns()
         with self.rbac_utils.override_role(self):
             self.virtual_dns_client.show_virtual_dns(
                 dns['virtual-DNS']['uuid'])
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="delete_virtual_DNS")
-    @decorators.idempotent_id('4793caa1-7707-4123-b1b4-c3feae91312f')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="delete_virtual_DNS")
+    @idempotent_id('4793caa1-7707-4123-b1b4-c3feae91312f')
     def test_delete_virtual_dns(self):
-        """test method for delete virtual dns objects"""
+        """
+        test method for delete virtual dns objects
+        """
         dns = self._create_virtual_dns()
         with self.rbac_utils.override_role(self):
             self.virtual_dns_client.delete_virtual_dns(
                 dns['virtual-DNS']['uuid'])
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="update_virtual_DNS")
-    @decorators.idempotent_id('2bc43935-57c1-4bf6-9868-78ccfce164bb')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="update_virtual_DNS")
+    @idempotent_id('2bc43935-57c1-4bf6-9868-78ccfce164bb')
     def test_update_virtual_dns(self):
-        """test method for update virtual dns objects"""
+        """
+        test method for update virtual dns objects
+        """
         dns = self._create_virtual_dns()
         virtual_dns_data = {"domain_name": "default-domain",
                             "default_ttl_seconds": 0,
@@ -123,29 +138,35 @@
                 virtual_DNS_data=virtual_dns_data,
                 display_name=display_name)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="list_virtual_DNS_records")
-    @decorators.idempotent_id('e9103999-2f02-4f04-a8a0-906ca4fb394d')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="list_virtual_DNS_records")
+    @idempotent_id('e9103999-2f02-4f04-a8a0-906ca4fb394d')
     def test_list_virtual_dns_records(self):
-        """test method for list virtual dns record objects"""
+        """
+        test method for list virtual dns record objects
+        """
         with self.rbac_utils.override_role(self):
             self.virtual_dns_client.list_virtual_dns_records()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="create_virtual_DNS_records")
-    @decorators.idempotent_id('bd9f3992-0ce4-4477-97a0-1271bc8ad9ef')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="create_virtual_DNS_records")
+    @idempotent_id('bd9f3992-0ce4-4477-97a0-1271bc8ad9ef')
     def test_create_virtual_dns_records(self):
-        """test method for create virtual dns record objects"""
+        """
+        test method for create virtual dns record objects
+        """
         # A virtual DNS is needed to create a record
         dns = self._create_virtual_dns()
         with self.rbac_utils.override_role(self):
             self._create_virtual_dns_record(dns)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="show_virtual_DNS_record")
-    @decorators.idempotent_id('fa3d1a2b-d788-4623-89a4-3a9ed1db7a7d')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="show_virtual_DNS_record")
+    @idempotent_id('fa3d1a2b-d788-4623-89a4-3a9ed1db7a7d')
     def test_show_virtual_dns_record(self):
-        """test method for show virtual dns record objects"""
+        """
+        test method for show virtual dns record objects
+        """
         # A virtual DNS is needed to create a record
         dns = self._create_virtual_dns()
         dns_record = self._create_virtual_dns_record(dns)
@@ -153,11 +174,13 @@
             self.virtual_dns_client.show_virtual_dns_record(
                 dns_record['virtual-DNS-record']['uuid'])
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="delete_virtual_DNS_record")
-    @decorators.idempotent_id('de31e867-c997-4b4c-a095-43c647f5c192')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="delete_virtual_DNS_record")
+    @idempotent_id('de31e867-c997-4b4c-a095-43c647f5c192')
     def test_delete_virtual_dns_record(self):
-        """test method for delete virtual dns record objects"""
+        """
+        test method for delete virtual dns record objects
+        """
         # A virtual DNS is needed to create a record
         dns = self._create_virtual_dns()
         dns_record = self._create_virtual_dns_record(dns)
@@ -165,11 +188,13 @@
             self.virtual_dns_client.delete_virtual_dns_record(
                 dns_record['virtual-DNS-record']['uuid'])
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="update_virtual_DNS_record")
-    @decorators.idempotent_id('65acef26-646f-4b36-923c-8a1d07e90c5c')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="update_virtual_DNS_record")
+    @idempotent_id('65acef26-646f-4b36-923c-8a1d07e90c5c')
     def test_update_virtual_dns_record(self):
-        """test method for update virtual dns record objects"""
+        """
+        test method for update virtual dns record objects
+        """
         # A virtual DNS is needed to create a record
         dns = self._create_virtual_dns()
         dns_record = self._create_virtual_dns_record(dns)
diff --git a/tungsten_tempest_plugin/tests/api/contrail/test_virtual_ip.py b/tungsten_tempest_plugin/tests/api/contrail/test_virtual_ip.py
index f375f58..d8268f8 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_virtual_ip.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_virtual_ip.py
@@ -18,19 +18,24 @@
 """
 
 from oslo_log import log as logging
-from patrole_tempest_plugin import rbac_rule_validation
-from tempest import config
-from tempest.lib.common.utils import data_utils
-from tempest.lib import decorators
 
 from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
+from patrole_tempest_plugin import rbac_rule_validation
+
+from tempest import config
+from tempest.lib.common.utils import data_utils
+from tempest.lib.decorators import idempotent_id
+
 CONF = config.CONF
 LOG = logging.getLogger(__name__)
 
 
 class VirtualIPTest(rbac_base.BaseContrailTest):
-    """Test class to test virtual ip objects using RBAC roles"""
+
+    """
+    Test class to test virtual ip objects using RBAC roles
+    """
 
     def _create_virtual_ip(self):
         fq_name = data_utils.rand_name('virtual_ip')
@@ -51,45 +56,55 @@
         }
         self.virtual_ip_client.update_virtual_ip(virtual_ip_uuid, **put_body)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="list_virtual_ips")
-    @decorators.idempotent_id('92303eee-bd96-48bc-a02c-39950bd19a21')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="list_virtual_ips")
+    @idempotent_id('92303eee-bd96-48bc-a02c-39950bd19a21')
     def test_list_virtual_ips(self):
-        """test method for list virtual ip objects"""
+        """
+        test method for list virtual ip objects
+        """
         with self.rbac_utils.override_role(self):
             self.virtual_ip_client.list_virtual_ips()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="create_virtual_ips")
-    @decorators.idempotent_id('e0070888-995d-46ab-91fc-db1412eba2f7')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="create_virtual_ips")
+    @idempotent_id('e0070888-995d-46ab-91fc-db1412eba2f7')
     def test_create_virtual_ips(self):
-        """test method for create virtual ip objects"""
+        """
+        test method for create virtual ip objects
+        """
         with self.rbac_utils.override_role(self):
             self._create_virtual_ip()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="show_virtual_ip")
-    @decorators.idempotent_id('2a4b3abd-c6f7-4d82-aa31-02e53d2a8fb9')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="show_virtual_ip")
+    @idempotent_id('2a4b3abd-c6f7-4d82-aa31-02e53d2a8fb9')
     def test_show_virtual_ip(self):
-        """test method for show virtual ip objects"""
+        """
+        test method for show virtual ip objects
+        """
         virtual_ip_uuid = self._create_virtual_ip()
         with self.rbac_utils.override_role(self):
             self.virtual_ip_client.show_virtual_ip(virtual_ip_uuid)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="update_virtual_ip")
-    @decorators.idempotent_id('0e975c92-62dc-4e6e-82cc-8cf37da3c5b2')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="update_virtual_ip")
+    @idempotent_id('0e975c92-62dc-4e6e-82cc-8cf37da3c5b2')
     def test_update_virtual_ip(self):
-        """test method for update virtual ip objects"""
+        """
+        test method for update virtual ip objects
+        """
         virtual_ip_uuid = self._create_virtual_ip()
         with self.rbac_utils.override_role(self):
             self._update_virtual_ip(virtual_ip_uuid)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="delete_virtual_ip")
-    @decorators.idempotent_id('fd0b2635-36bd-4345-97b7-9c0a57372eba')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="delete_virtual_ip")
+    @idempotent_id('fd0b2635-36bd-4345-97b7-9c0a57372eba')
     def test_delete_virtual_ip(self):
-        """test method for delete virtual ip objects"""
+        """
+        test method for delete virtual ip objects
+        """
         virtual_ip_uuid = self._create_virtual_ip()
         with self.rbac_utils.override_role(self):
             self.virtual_ip_client.delete_virtual_ip(virtual_ip_uuid)
diff --git a/tungsten_tempest_plugin/tests/api/contrail/test_virtual_machines.py b/tungsten_tempest_plugin/tests/api/contrail/test_virtual_machines.py
index e58c6bf..d69a32e 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_virtual_machines.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_virtual_machines.py
@@ -18,19 +18,24 @@
 """
 
 from oslo_log import log as logging
-from patrole_tempest_plugin import rbac_rule_validation
-from tempest import config
-from tempest.lib.common.utils import data_utils
-from tempest.lib import decorators
 
 from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
+from patrole_tempest_plugin import rbac_rule_validation
+
+from tempest import config
+from tempest.lib.common.utils import data_utils
+from tempest.lib.decorators import idempotent_id
+
 LOG = logging.getLogger(__name__)
 CONF = config.CONF
 
 
 class VMContrailTest(rbac_base.BaseContrailTest):
-    """Test class to test vm objects using RBAC roles"""
+
+    """
+    Test class to test vm objects using RBAC roles
+    """
 
     @classmethod
     def resource_setup(cls):
@@ -60,10 +65,10 @@
                              'uuid': cls.ipam['uuid'],
                              'attr': {
                                  'ipam_subnets': [{'subnet': subnet_ip_prefix}]
+                                 }
                              }
-                         }
-                     ]
-                     }
+                         ]
+                    }
         body = cls.vn_client.create_virtual_networks(**post_body)
         cls.network = body['virtual-network']
 
@@ -98,46 +103,56 @@
                                  cls.ipam['uuid'])
         super(VMContrailTest, cls).resource_cleanup()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="list_virtual_machine_interfaces")
-    @decorators.idempotent_id('e27d1fae-7324-4ef3-87b1-e7f519b1e2a7')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="list_virtual_machine_interfaces")
+    @idempotent_id('e27d1fae-7324-4ef3-87b1-e7f519b1e2a7')
     def test_list_vm_interfaces(self):
-        """test method for list vm interfaces objects"""
+        """
+        test method for list vm interfaces objects
+        """
         self._create_virual_machine_interface()
         with self.rbac_utils.override_role(self):
             self.vm_client.list_virtual_machine_interfaces()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="create_virtual_machine_interfaces")
-    @decorators.idempotent_id('d8a3a524-d61b-4bcb-8146-c5d4f308df8e')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="create_virtual_machine_interfaces")
+    @idempotent_id('d8a3a524-d61b-4bcb-8146-c5d4f308df8e')
     def test_add_vm_interfaces(self):
-        """test method for add vm interfaces objects"""
+        """
+        test method for add vm interfaces objects
+        """
         with self.rbac_utils.override_role(self):
             self._create_virual_machine_interface()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="show_virtual_machine_interface")
-    @decorators.idempotent_id('3f17125a-9060-4c4a-a23f-0fe2aba2ccef')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="show_virtual_machine_interface")
+    @idempotent_id('3f17125a-9060-4c4a-a23f-0fe2aba2ccef')
     def test_show_vm_interface(self):
-        """test method for show vm interfaces objects"""
+        """
+        test method for show vm interfaces objects
+        """
         test = self._create_virual_machine_interface()
         with self.rbac_utils.override_role(self):
             self.vm_client.show_virtual_machine_interface(test['uuid'])
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="delete_virtual_machine_interface")
-    @decorators.idempotent_id('ce7f9471-ba1b-40d2-94f1-bdd0c610e22f')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="delete_virtual_machine_interface")
+    @idempotent_id('ce7f9471-ba1b-40d2-94f1-bdd0c610e22f')
     def test_delete_vm_interface(self):
-        """test method for delete vm interfaces objects"""
+        """
+        test method for delete vm interfaces objects
+        """
         body = self._create_virual_machine_interface()
         with self.rbac_utils.override_role(self):
             self.vm_client.delete_vm_interface(body['uuid'])
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="update_virtual_machine_interface")
-    @decorators.idempotent_id('7ca3046a-6245-4c15-914b-5a8ecdbeee11')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="update_virtual_machine_interface")
+    @idempotent_id('7ca3046a-6245-4c15-914b-5a8ecdbeee11')
     def test_update_vm_interface(self):
-        """test method for update vm interfaces objects"""
+        """
+        test method for update vm interfaces objects
+        """
         virtual_machine = self._create_virual_machine_interface()
         display_name = data_utils.rand_name('new-vitual-machine-inf-name')
         with self.rbac_utils.override_role(self):
diff --git a/tungsten_tempest_plugin/tests/api/contrail/test_virtual_networks.py b/tungsten_tempest_plugin/tests/api/contrail/test_virtual_networks.py
index 356f37e..4475e7b 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_virtual_networks.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_virtual_networks.py
@@ -18,19 +18,24 @@
 """
 
 from oslo_log import log as logging
-from patrole_tempest_plugin import rbac_rule_validation
-from tempest import config
-from tempest.lib.common.utils import data_utils
-from tempest.lib import decorators
 
 from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
+from patrole_tempest_plugin import rbac_rule_validation
+
+from tempest import config
+from tempest.lib.common.utils import data_utils
+from tempest.lib.decorators import idempotent_id
+
 CONF = config.CONF
 LOG = logging.getLogger(__name__)
 
 
 class NetworksTest(rbac_base.BaseContrailTest):
-    """Test class to test vm network using RBAC roles"""
+
+    """
+    Test class to test vm network using RBAC roles
+    """
 
     @classmethod
     def resource_setup(cls):
@@ -65,47 +70,57 @@
                         network['uuid'])
         return network
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="list_virtual_networks")
-    @decorators.idempotent_id('375ebc8d-dc52-4d9c-877b-85aba35b1539')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="list_virtual_networks")
+    @idempotent_id('375ebc8d-dc52-4d9c-877b-85aba35b1539')
     def test_list_virtual_networks(self):
-        """test method for list vm network objects"""
+        """
+        test method for list vm network objects
+        """
         with self.rbac_utils.override_role(self):
             self.vn_client.list_virtual_networks()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="create_virtual_networks")
-    @decorators.idempotent_id('375ebc8d-dc52-4d9c-877b-96aba35b2530')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="create_virtual_networks")
+    @idempotent_id('375ebc8d-dc52-4d9c-877b-96aba35b2530')
     def test_create_virtual_networks(self):
-        """test method for create vm network objects"""
+        """
+        test method for create vm network objects
+        """
         with self.rbac_utils.override_role(self):
             self._create_virtual_network()
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="update_virtual_network")
-    @decorators.idempotent_id('375ebc8d-dc52-4d9c-566b-150a025c1237')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="update_virtual_network")
+    @idempotent_id('375ebc8d-dc52-4d9c-566b-150a025c1237')
     def test_update_virtual_network(self):
-        """test method for update vm network objects"""
+        """
+        test method for update vm network objects
+        """
         # Create virtual network
         uuid = self._create_virtual_network()['uuid']
         with self.rbac_utils.override_role(self):
             self.vn_client.update_virtual_network(
                 uuid, router_external=False)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="delete_virtual_network")
-    @decorators.idempotent_id('375ebc8d-dc52-4d9c-877b-17bcb53c3641')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="delete_virtual_network")
+    @idempotent_id('375ebc8d-dc52-4d9c-877b-17bcb53c3641')
     def test_delete_virtual_network(self):
-        """test method for delete vm network objects"""
+        """
+        test method for delete vm network objects
+        """
         uuid = self._create_virtual_network()['uuid']
         with self.rbac_utils.override_role(self):
             self.vn_client.delete_virtual_network(uuid)
 
-    @rbac_rule_validation.action(service="Contrail",
-                                 rules="show_virtual_network")
-    @decorators.idempotent_id('375ebc8d-dc52-4d9c-877b-27c1a1242a81')
+    @rbac_rule_validation.action(service=CONF.sdn.service_name,
+                                 rule="show_virtual_network")
+    @idempotent_id('375ebc8d-dc52-4d9c-877b-27c1a1242a81')
     def test_show_virtual_network(self):
-        """test method for show vm network objects"""
+        """
+        test method for show vm network objects
+        """
         uuid = self._create_virtual_network()['uuid']
         with self.rbac_utils.override_role(self):
             self.vn_client.show_virtual_network(uuid)
