diff --git a/tox.ini b/tox.ini
index 17529a8..fc1e4d4 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
+exclude=.venv,.git,.tox,dist,doc,*lib/python*,*egg,build,tungsten_tempest_plugin/services/contrail/json/
 
 [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 6a1b6c8..54d7f2a 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/rbac_base.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/rbac_base.py
@@ -18,6 +18,10 @@
 """
 
 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
@@ -90,13 +94,6 @@
 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 36d8713..8e157e5 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_access_control.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_access_control.py
@@ -17,22 +17,18 @@
 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.decorators import idempotent_id
+from tempest.lib import decorators
+
+from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
 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')
@@ -77,45 +73,37 @@
                         new_ctrl_list['uuid'])
         return new_ctrl_list
 
-    @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_api_access_lists")
-    @idempotent_id('2bfde8fd-36fe-4e69-ba59-6f2db8941e7d')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="list_api_access_lists")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="create_api_access_lists")
-    @idempotent_id('b2b5f50c-07d8-4d79-b9a4-78187ad97353')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="create_api_access_lists")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="show_api_access_list")
-    @idempotent_id('b82e8e6b-83b5-424d-9652-ef6a34067f4f')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="show_api_access_list")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="update_api_access_list")
-    @idempotent_id('edc88825-1e2e-47ff-b7b4-f68d6310fbad')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="update_api_access_list")
+    @decorators.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):
@@ -123,47 +111,39 @@
                 new_api_list['uuid'],
                 display_name=update_name)
 
-    @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="delete_api_access_list")
-    @idempotent_id('f27d9044-95f2-4733-81ed-df9340dbd421')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="delete_api_access_list")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="list_access_control_lists")
-    @idempotent_id('c56a1338-a9d1-4286-8aeb-3a0d60d93037')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="list_access_control_lists")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="create_access_control_lists")
-    @idempotent_id('9f225d2b-5376-42f5-97aa-cf63be47fa19')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="create_access_control_lists")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="show_access_control_list")
-    @idempotent_id('f0ed882b-f3de-48b7-884a-637ee0b7d6b6')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="show_access_control_list")
+    @decorators.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(
@@ -172,13 +152,11 @@
             self.access_control_client.show_access_control_list(
                 new_ctrl_list['uuid'])
 
-    @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="update_access_control_list")
-    @idempotent_id('9a4b3133-dd07-4a1a-b282-f7770c372fb8')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="update_access_control_list")
+    @decorators.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'])
@@ -188,13 +166,11 @@
                 new_ctrl_list['uuid'],
                 display_name=update_name)
 
-    @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="delete_access_control_list")
-    @idempotent_id('36a8ace1-71ca-4c7c-8667-d8387d6f964a')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="delete_access_control_list")
+    @decorators.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 a191f45..c2ef808 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_alarm.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_alarm.py
@@ -18,25 +18,19 @@
 """
 
 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')
@@ -88,61 +82,51 @@
         }
         self.alarm_client.update_alarm(alarm_uuid, **put_body)
 
-    @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_alarms")
-    @idempotent_id('dc7d19dd-dd5e-4ec8-bf0c-c6d9d83a60a8')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="list_alarms")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="create_alarms")
-    @idempotent_id('7fe55d0c-e54a-4bb7-95a6-9c53f9e9c4bf')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="create_alarms")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="show_alarm")
-    @idempotent_id('ab0ccbe4-7bfe-4176-890a-d438ee04290d')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="show_alarm")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="update_alarm")
-    @idempotent_id('ab331cca-ee53-4106-9b30-7319bfb1bea7')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="update_alarm")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="delete_alarm")
-    @idempotent_id('84fadb14-77c0-4f21-b5b2-1da7a2fd27e6')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="delete_alarm")
+    @decorators.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 69da2d3..2418333 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_alias_ip.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_alias_ip.py
@@ -17,21 +17,18 @@
 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.decorators import idempotent_id
+from tempest.lib import decorators
+
+from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
 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):
@@ -114,47 +111,39 @@
                         new_alias_ip['uuid'])
         return new_alias_ip
 
-    @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_alias_ips")
-    @idempotent_id('899d6824-0755-41ef-adef-03eb1858bcb0')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="list_alias_ips")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="create_alias_ips")
-    @idempotent_id('bc9aae29-22a8-4eed-a31f-c0ded300e3a3')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="create_alias_ips")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="show_alias_ip")
-    @idempotent_id('d20318b1-c204-44e7-a44c-66f6a1fbe7a0')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="show_alias_ip")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="update_alias_ip")
-    @idempotent_id('c237b18f-d899-4b80-8e9b-068244a24612')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="update_alias_ip")
+    @decorators.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')
@@ -163,58 +152,48 @@
                 new_alias_ip['uuid'],
                 display_name=update_name)
 
-    @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="delete_alias_ip")
-    @idempotent_id('456c641c-9066-4125-8dec-d1529ad8f1ba')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="delete_alias_ip")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="list_alias_ip_pools")
-    @idempotent_id('ffe85f35-589a-4b90-a1d3-6aed92a85954')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="list_alias_ip_pools")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="create_alias_ip_pools")
-    @idempotent_id('83abd2c0-d46a-4337-87d0-31cdb86e4226')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="create_alias_ip_pools")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="show_alias_ip_pool")
-    @idempotent_id('a1cbe111-ccba-4fa4-ba59-7d1ee08a15db')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="show_alias_ip_pool")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="update_alias_ip_pool")
-    @idempotent_id('7f3448d7-22f1-4808-b3eb-15eeb3f079aa')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="update_alias_ip_pool")
+    @decorators.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):
@@ -222,13 +201,11 @@
                 new_alias_ip_pool['uuid'],
                 display_name=update_name)
 
-    @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="delete_alias_ip_pool")
-    @idempotent_id('f59ea4fb-d10f-40c8-a8fa-dcd948ca89c8')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="delete_alias_ip_pool")
+    @decorators.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 9d94dba..23b1fcc 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_analytics_node.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_analytics_node.py
@@ -18,24 +18,19 @@
 """
 
 from oslo_log import log as logging
-
-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
+from tempest.lib import decorators
+
+from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
 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')
@@ -65,48 +60,40 @@
                         new_node['uuid'])
         return new_node
 
-    @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_analytics_nodes")
-    @idempotent_id('d3002e37-4b42-446d-b144-1b53f0dadfd3')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="list_analytics_nodes")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="show_analytics_node")
-    @idempotent_id('b51043fd-77ba-4312-b96f-569ed5153338')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="show_analytics_node")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="create_analytics_nodes")
-    @idempotent_id('c57482c9-fcb4-4f41-95b0-7f0ffeee3dc3')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="create_analytics_nodes")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="update_analytics_node")
-    @idempotent_id('ff50a2df-6283-409e-ab03-c13b63acc8a0')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="update_analytics_node")
+    @decorators.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)
@@ -115,13 +102,11 @@
             self.analytics_node_client.update_analytics_node(
                 new_node['uuid'], display_name=update_name)
 
-    @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="delete_analytics_node")
-    @idempotent_id('972f997a-c89f-4227-8ae9-5a2335ec0b0a')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="delete_analytics_node")
+    @decorators.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 950af4c..d13fcf4 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_attachments_client.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_attachments_client.py
@@ -17,23 +17,18 @@
 Tempest test-case to test attachment 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.decorators import idempotent_id
+from tempest.lib import decorators
+
+from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
 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')
@@ -61,45 +56,37 @@
                         new_customer['uuid'])
         return new_customer
 
-    @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_provider_attachments")
-    @idempotent_id('961dbf54-ae4f-42e8-9d27-69fa7df39013')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="list_provider_attachments")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="create_provider_attachments")
-    @idempotent_id('73ad032e-3e81-4dcc-be55-1987484207cd')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="create_provider_attachments")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="show_provider_attachment")
-    @idempotent_id('7b5278bc-dd79-495a-9f74-448c04f52bd2')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="show_provider_attachment")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="update_provider_attachment")
-    @idempotent_id('3516ff99-eddf-4932-afa4-433a43a0e5ac')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="update_provider_attachment")
+    @decorators.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):
@@ -107,57 +94,47 @@
                 new_provider['uuid'],
                 display_name=update_name)
 
-    @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="delete_provider_attachment")
-    @idempotent_id('234d5505-2abf-418b-b43b-ea6f5a724fd3')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="delete_provider_attachment")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="list_customer_attachments")
-    @idempotent_id('3eca8fd8-ec3c-4a0e-8f62-b15d28796b7f')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="list_customer_attachments")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="create_customer_attachments")
-    @idempotent_id('53f93053-554c-4202-b763-0230d9a0553a')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="create_customer_attachments")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="show_customer_attachment")
-    @idempotent_id('c6671540-695c-4cba-bcee-4a5d1cddd412')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="show_customer_attachment")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="update_customer_attachment")
-    @idempotent_id('50419cca-dd03-4d02-9c06-88446647fcba')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="update_customer_attachment")
+    @decorators.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):
@@ -165,13 +142,11 @@
                 new_customer['uuid'],
                 display_name=update_name)
 
-    @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="delete_customer_attachment")
-    @idempotent_id('5385c275-8e86-4739-9cb6-d1e0ed522807')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="delete_customer_attachment")
+    @decorators.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 900d563..40b9fe0 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,22 +17,18 @@
 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.decorators import idempotent_id
+from tempest.lib import decorators
+
+from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
 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')
@@ -45,57 +41,47 @@
                         new_bgp['uuid'])
         return new_bgp
 
-    @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_bgp_as_a_services")
-    @idempotent_id('d3153cd0-379e-4e62-9780-ef237e567fc5')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="list_bgp_as_a_services")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="create_bgp_as_a_services")
-    @idempotent_id('a039f0c4-b53a-492b-a5c5-fbdf046afcf4')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="create_bgp_as_a_services")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="show_bgp_as_a_service")
-    @idempotent_id('c2fae8b4-929c-4d2f-914d-76a7414a56dc')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="show_bgp_as_a_service")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="delete_bgp_as_a_service")
-    @idempotent_id('78c8389a-7bb5-4027-bae1-923af3d6e77c')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="delete_bgp_as_a_service")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="update_bgp_as_a_service")
-    @idempotent_id('38ba2ecb-71e2-4a2f-be43-e82491dffa05')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="update_bgp_as_a_service")
+    @decorators.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 051138b..d5aa1fb 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_config_client.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_config_client.py
@@ -20,24 +20,19 @@
 import random
 
 from oslo_log import log as logging
-
-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
+from tempest.lib import decorators
+
+from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
 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():
@@ -48,7 +43,7 @@
     def _create_config_node(self):
         config_node_ip_address = self._random_ip_generator()
         display_name = data_utils.rand_name('config_node')
-        fq_name = ["default-global-system-config", display_name]
+        fq_name = [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)
@@ -59,58 +54,48 @@
                             config_node_id)
         return config_node
 
-    @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_config_nodes")
-    @idempotent_id('b560e060-e4f0-45b0-93e2-55f0cb201e06')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="list_config_nodes")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="create_config_nodes")
-    @idempotent_id('a8d20d0d-dc5a-4cae-87c5-7f6914c3701e')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="create_config_nodes")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="delete_config_node")
-    @idempotent_id('16573a85-57ab-418c-bb23-5dd936e7be90')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="delete_config_node")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="show_config_node")
-    @idempotent_id('a5b17108-4fa3-4d09-b861-e2857aab8f80')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="show_config_node")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="update_config_node")
-    @idempotent_id('8f70d2c0-594b-4a94-ab15-88bd8a2e62e5')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="update_config_node")
+    @decorators.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')
@@ -120,10 +105,7 @@
 
 
 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')
@@ -137,48 +119,40 @@
                             config_root_uuid)
         return config_root
 
-    @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="create_config_roots")
-    @idempotent_id('291b28ea-d0d8-47cd-ac76-1f980047cb76')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="create_config_roots")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="delete_config_root")
-    @idempotent_id('bd04c0fb-3deb-4904-ad2c-1a10933c30dd')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="delete_config_root")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="show_config_root")
-    @idempotent_id('fba2c419-9a83-4d88-9a26-84770544bb3f')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="show_config_root")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="update_config_root")
-    @idempotent_id('bfcc074f-5e1c-4b45-8a2a-857239f8acb0')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="update_config_root")
+    @decorators.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')
@@ -186,22 +160,17 @@
             self.config_client.update_config_root(
                 config_root_uuid, display_name=updated_name)
 
-    @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_config_roots")
-    @idempotent_id('316e7425-8fb0-41b4-9080-a76697abbafa')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="list_config_roots")
+    @decorators.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')
@@ -218,45 +187,37 @@
                         new_config['uuid'])
         return new_config
 
-    @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_global_system_configs")
-    @idempotent_id('d1d189a7-14c1-49c5-b180-cd42ed2ca123')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="list_global_system_configs")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="create_global_system_configs")
-    @idempotent_id('e0ba6a20-3e28-47ac-bf95-9a848fcee49a')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="create_global_system_configs")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="show_global_system_config")
-    @idempotent_id('4b9f9131-cb34-4b7d-9d06-c6aca85cce3a')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="show_global_system_config")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="update_global_system_config")
-    @idempotent_id('4f90dc83-da59-45a4-8ab6-b387bd6c2df4')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="update_global_system_config")
+    @decorators.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):
@@ -264,13 +225,11 @@
                 new_config['uuid'],
                 display_name=update_name)
 
-    @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="delete_global_system_config")
-    @idempotent_id('fce1653c-e657-4a1e-8ced-7e02d297d6c9')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="delete_global_system_config")
+    @decorators.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 97cadc7..502eacb 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_database.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_database.py
@@ -18,24 +18,19 @@
 """
 
 from oslo_log import log as logging
-
-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
+from tempest.lib import decorators
+
+from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
 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')
@@ -71,26 +66,22 @@
                         db_node['uuid'])
         return db_node
 
-    @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_database_nodes")
-    @idempotent_id('5ae6f965-6161-443f-b19e-dfa7b364c533')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="list_database_nodes")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="show_database_node")
-    @idempotent_id('4a07d9a8-7b99-43bd-b628-06c023993aab')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="show_database_node")
+    @decorators.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)
@@ -98,25 +89,21 @@
         with self.rbac_utils.override_role(self):
             self.db_client.show_database_node(db_node_id)
 
-    @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="create_database_nodes")
-    @idempotent_id('b9aa9c6b-9381-44f0-94fb-e4523bf2a87e')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="create_database_nodes")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="update_database_node")
-    @idempotent_id('6e59f393-0e55-4327-871e-7f0ad53f2e17')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="update_database_node")
+    @decorators.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)
@@ -127,13 +114,11 @@
                 db_node_id=db_node_id,
                 display_name=display_name)
 
-    @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="delete_database_node")
-    @idempotent_id('0cbc5a52-d7e7-4a1c-a85d-6bf44012d99b')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="delete_database_node")
+    @decorators.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 f8209e0..9063003 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,22 +17,20 @@
 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.decorators import idempotent_id
+from tempest.lib import decorators
+
+from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
 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')]
@@ -44,44 +42,36 @@
                         new_dsa['uuid'])
         return new_dsa
 
-    @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_discovery_service_assignments")
-    @idempotent_id('9ac1e4ca-8983-403f-b644-7758935f2f36')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="list_discovery_service_assignments")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="create_discovery_service_assignments")
-    @idempotent_id('40ad1208-a039-4809-8516-41b4dfcbd00c')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="create_discovery_service_assignments")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="show_discovery_service_assignment")
-    @idempotent_id('63660fe9-22b8-456c-a757-a7da1abfbce8')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="show_discovery_service_assignment")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="update_discovery_service_assignment")
-    @idempotent_id('71ce1404-965b-4670-abb7-5b6fea3b24b7')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="update_discovery_service_assignment")
+    @decorators.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):
@@ -90,13 +80,11 @@
                 fq_name=new_dsa['fq_name'],
                 display_name=update_name)
 
-    @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="delete_discovery_service_assignment")
-    @idempotent_id('e7ff845d-2140-4eb0-9720-26370459723b')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="delete_discovery_service_assignment")
+    @decorators.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 8e74adf..d550bfb 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_domain.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_domain.py
@@ -18,24 +18,19 @@
 """
 
 from oslo_log import log as logging
-
-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
+from tempest.lib import decorators
+
+from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
 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')
@@ -56,55 +51,45 @@
         }
         self.domain_client.update_domain(domain_uuid, **put_body)
 
-    @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_domains")
-    @idempotent_id('fa02e27b-f661-4186-a522-69e8fcb6abf9')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="list_domains")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="create_domains")
-    @idempotent_id('3f18be91-c37b-4e17-bf5e-b704d993f738')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="create_domains")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="show_domain")
-    @idempotent_id('e79f8581-ba9f-420a-aa26-f1cb51cf4bbf')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="show_domain")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="update_domain")
-    @idempotent_id('fdf72539-20b5-4bdb-b22b-70c86fbb52a4')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="update_domain")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="delete_domain")
-    @idempotent_id('abaad2b0-6bde-40b8-b257-20ca805c1dca')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="delete_domain")
+    @decorators.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 95ed9a9..af3cab2 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_dsa_rule.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_dsa_rule.py
@@ -18,24 +18,19 @@
 """
 
 from oslo_log import log as logging
-
-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
+from tempest.lib import decorators
+
+from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
 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')]
@@ -60,23 +55,19 @@
                         new_rule['uuid'])
         return new_rule
 
-    @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_dsa_rules")
-    @idempotent_id('3227673b-96fc-4d26-ab0b-109347e9e9c2')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="list_dsa_rules")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="show_dsa_rule")
-    @idempotent_id('0f90ea4f-c050-4c31-93a7-1e0c58df914e')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="show_dsa_rule")
+    @decorators.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']
@@ -84,26 +75,22 @@
         with self.rbac_utils.override_role(self):
             self.dsa_rule_client.show_dsa_rule(new_rule['uuid'])
 
-    @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="create_dsa_rules")
-    @idempotent_id('c3774ca3-45d0-4ca8-a6b3-f895441b1d0e')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="create_dsa_rules")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="update_dsa_rule")
-    @idempotent_id('5cfe7e8e-d91c-4183-8e6c-733e826707be')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="update_dsa_rule")
+    @decorators.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']
@@ -113,13 +100,11 @@
             self.dsa_rule_client.update_dsa_rule(
                 new_rule['uuid'], display_name=update_name)
 
-    @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="delete_dsa_rule")
-    @idempotent_id('d3b869db-fa49-48f0-861a-08efd9879b15')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="delete_dsa_rule")
+    @decorators.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 ee325bc..a3c5752 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_floating_ip.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_floating_ip.py
@@ -18,24 +18,19 @@
 """
 
 from oslo_log import log as logging
-
-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
+from tempest.lib import decorators
+
+from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
 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):
@@ -70,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']
 
@@ -90,10 +85,7 @@
 
 
 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')
@@ -113,68 +105,55 @@
 
         return fip_pool
 
-    @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="create_floating_ip_pools")
-    @idempotent_id('a83ca5e8-be4b-4161-869c-f981a724cf82')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="create_floating_ip_pools")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="list_floating_ip_pools")
-    @idempotent_id('9d20e78d-0463-4a0e-b30c-40770bee35bc')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="list_floating_ip_pools")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="show_floating_ip_pool")
-    @idempotent_id('1ec3124c-c15c-4ee6-b2de-2feed9599e38')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="show_floating_ip_pool")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="update_floating_ip_pool")
-    @idempotent_id('6563f2e7-ae6b-483b-8c07-0111efc86817')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="update_floating_ip_pool")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="delete_floating_ip_pool")
-    @idempotent_id('c4b449ae-2f12-49cf-9dec-2b21c143aff6')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="delete_floating_ip_pool")
+    @decorators.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):
@@ -209,58 +188,48 @@
                         fip['uuid'])
         return fip
 
-    @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="create_floating_ips")
-    @idempotent_id('ff05f70f-9db9-43cb-a5ce-38cbbef2c430')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="create_floating_ips")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="list_floating_ips")
-    @idempotent_id('e56046f9-32f9-41ce-9c1b-b982997ac347')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="list_floating_ips")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="show_floating_ip")
-    @idempotent_id('293f2c26-4101-4a2f-86d4-feb2878bd511')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="show_floating_ip")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="update_floating_ip")
-    @idempotent_id('a09283c9-73d3-42f7-876d-f33040686d6d')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="update_floating_ip")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="delete_floating_ip")
-    @idempotent_id('a26f162f-da56-4153-aed6-bffccba92bc7')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="delete_floating_ip")
+    @decorators.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 6f642f9..5ca5831 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_forwarding_class.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_forwarding_class.py
@@ -18,24 +18,19 @@
 """
 
 from oslo_log import log as logging
-
-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
+from tempest.lib import decorators
+
+from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
 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')
@@ -85,23 +80,19 @@
                         new_fclass['uuid'])
         return new_fclass
 
-    @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_forwarding_classs")
-    @idempotent_id('807a66fd-d4a4-472c-a13d-7ba590509e6e')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="list_forwarding_classs")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="show_forwarding_class")
-    @idempotent_id('8ef21f71-72a4-4de9-af93-6e759aa463c0')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="show_forwarding_class")
+    @decorators.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
@@ -113,13 +104,11 @@
             self.forwarding_class_client.show_forwarding_class(
                 new_fclass['uuid'])
 
-    @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="create_forwarding_classs")
-    @idempotent_id('d098859c-ad36-4385-8fb0-c00934a99b6f')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="create_forwarding_classs")
+    @decorators.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
@@ -129,13 +118,11 @@
             self._create_forwarding_class(global_system_config,
                                           global_qos_config)
 
-    @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="update_forwarding_class")
-    @idempotent_id('589dc03d-a25d-48be-9d9c-d3f92ff2cfc6')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="update_forwarding_class")
+    @decorators.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
@@ -148,13 +135,11 @@
             self.forwarding_class_client.update_forwarding_class(
                 new_fclass['uuid'], display_name=update_name)
 
-    @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="delete_forwarding_class")
-    @idempotent_id('a0348ffc-68c5-4d94-ba03-d08483503ced')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="delete_forwarding_class")
+    @decorators.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 e8c8a3c..bedd059 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_fqname_id.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_fqname_id.py
@@ -18,24 +18,19 @@
 """
 
 from oslo_log import log as logging
-
-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
+from tempest.lib import decorators
+
+from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
 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):
@@ -54,23 +49,19 @@
                                  cls.network['uuid'])
         super(FqnameIdTest, cls).resource_cleanup()
 
-    @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="fqname_to_id")
-    @idempotent_id('1fc1350b-3146-49bc-9af5-a61a98b55541')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="fqname_to_id")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="id_to_fqname")
-    @idempotent_id('ecdd77d7-8508-4639-86cd-b97907b363ff')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="id_to_fqname")
+    @decorators.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 d242ffd..4b0b453 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_instance_ip.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_instance_ip.py
@@ -18,24 +18,19 @@
 """
 
 from oslo_log import log as logging
-
-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
+from tempest.lib import decorators
+
+from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
 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):
@@ -65,13 +60,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']
 
@@ -105,58 +100,48 @@
                         iip['uuid'])
         return iip
 
-    @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_instance_ips")
-    @idempotent_id('31db3b3f-c40b-4f7f-bb8b-0a110f099553')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="list_instance_ips")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="create_instance_ips")
-    @idempotent_id('78f5cd4d-345d-4d87-8b8b-4d5d3fec4a12')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="create_instance_ips")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="show_instance_ip")
-    @idempotent_id('276f3838-d9cb-4432-bbb4-db31c4c1db5c')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="show_instance_ip")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="update_instance_ip")
-    @idempotent_id('b85975a5-176f-44b1-a615-b6f0a39a7708')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="update_instance_ip")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="delete_instance_ip")
-    @idempotent_id('d9c1d400-1dfb-4adb-8d97-0e8b498226b7')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="delete_instance_ip")
+    @decorators.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 9115fc2..d14a878 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_interfaces.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_interfaces.py
@@ -18,24 +18,19 @@
 """
 
 from oslo_log import log as logging
-
-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
+from tempest.lib import decorators
+
+from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
 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')
@@ -93,35 +88,29 @@
                         logical_if['uuid'])
         return logical_if
 
-    @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_physical_interfaces")
-    @idempotent_id('c496a2b4-51b2-4674-a60e-483a315baccb')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="list_physical_interfaces")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="create_physical_interfaces")
-    @idempotent_id('066f53d8-3d2a-4ad6-983f-243de7c12962')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="create_physical_interfaces")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="update_physical_interface")
-    @idempotent_id('91c4fc90-ed0f-42ec-87c6-ff6c2a9ab8de')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="update_physical_interface")
+    @decorators.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
@@ -135,60 +124,50 @@
             self.interface_client.update_physical_interface(
                 uuid, **body)
 
-    @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="delete_physical_interface")
-    @idempotent_id('5d77ea76-be8c-49cc-8f08-72fbdaf9028f')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="delete_physical_interface")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="show_physical_interface")
-    @idempotent_id('2c75c7e7-ef34-4e24-9c2f-5a2182db33a6')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="show_physical_interface")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="list_logical_interfaces")
-    @idempotent_id('43ac3727-4a43-42d7-b52f-df75018915b9')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="list_logical_interfaces")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="create_logical_interfaces")
-    @idempotent_id('503facf2-0752-47e4-a0a4-7a3103133a61')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="create_logical_interfaces")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="update_logical_interface")
-    @idempotent_id('63c991f4-6aba-454c-9c49-522dc77b3f5c')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="update_logical_interface")
+    @decorators.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']
@@ -203,26 +182,22 @@
             self.interface_client.update_logical_interface(
                 uuid, **body)
 
-    @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="delete_logical_interface")
-    @idempotent_id('a36743d1-3ea1-4cf5-89d8-9c0b885fa625')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="delete_logical_interface")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="show_logical_interface")
-    @idempotent_id('f0f7fab7-eeb9-4d29-8415-31a50180fb44')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="show_logical_interface")
+    @decorators.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 647f053..568c7ff 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_load_balancer.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_load_balancer.py
@@ -18,24 +18,19 @@
 """
 
 from oslo_log import log as logging
-
-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
+from tempest.lib import decorators
+
+from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
 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')
@@ -167,121 +162,97 @@
 
 
 class LoadBalancerContrailTest(BaseLoadBalancerTest):
+    """Test class to test load balancer objects using RBAC roles"""
 
-    """
-    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')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="list_load_balancers")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="create_load_balancers")
-    @idempotent_id('6a18d506-0794-4eb9-a945-165bf146005d')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="create_load_balancers")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="show_load_balancer")
-    @idempotent_id('428012aa-cd0e-4702-89d2-459046d4bd5f')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="show_load_balancer")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="update_load_balancer")
-    @idempotent_id('7cd3d7b2-b149-40c1-a801-a6a8a660bd24')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="update_load_balancer")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="delete_load_balancer")
-    @idempotent_id('b28c6b11-d1b0-45d0-8942-638b6b590702')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="delete_load_balancer")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="list_load_balancer_health_monitors")
-    @idempotent_id('3e3d8bdc-3621-4c5e-8130-1187f445a4e6')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="list_load_balancer_health_monitors")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="create_load_balancer_health_monitors")
-    @idempotent_id('bddb93ad-d331-4bbc-bac6-2763cae4eb2c')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="create_load_balancer_health_monitors")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="show_load_balancer_health_monitor")
-    @idempotent_id('30d23994-1e3a-4a76-8f18-e00d0854412a')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="show_load_balancer_health_monitor")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="update_load_balancer_health_monitor")
-    @idempotent_id('c32ba92c-3a69-4255-867a-1423c93faa6f')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="update_load_balancer_health_monitor")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="delete_load_balancer_health_monitor")
-    @idempotent_id('b4d7ea9d-fd8c-433b-96fc-c24866b3f6a7')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="delete_load_balancer_health_monitor")
+    @decorators.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(
@@ -289,61 +260,48 @@
 
 
 class LoadBalancerListenerContrailTest(BaseLoadBalancerTest):
+    """Base class to test load balancer Listener objects using RBAC roles"""
 
-    """
-    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')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="list_load_balancer_listeners")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="create_load_balancer_listeners")
-    @idempotent_id('0551de87-fa4c-463f-8968-ec6f2a6098d0')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="create_load_balancer_listeners")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="show_load_balancer_listener")
-    @idempotent_id('ade38959-9506-4262-8d3c-5ba5eb63d85f')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="show_load_balancer_listener")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="update_load_balancer_listener")
-    @idempotent_id('e529e538-da31-4159-91c2-6c0a828282a4')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="update_load_balancer_listener")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="delete_load_balancer_listener")
-    @idempotent_id('feaf3e9a-ffd1-4327-ad7a-35f9e9e4989b')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="delete_load_balancer_listener")
+    @decorators.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(
@@ -351,120 +309,94 @@
 
 
 class LoadBalancerPoolContrailTest(BaseLoadBalancerTest):
+    """Base class to test load balancer Pool objects using RBAC roles"""
 
-    """
-    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')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="list_load_balancer_pools")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="create_load_balancer_pools")
-    @idempotent_id('a52c6ec7-a996-4191-9a70-7879a211a711')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="create_load_balancer_pools")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="show_load_balancer_pool")
-    @idempotent_id('7923da4e-53b1-4024-9a40-5bc91cee8e2d')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="show_load_balancer_pool")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="update_load_balancer_pool")
-    @idempotent_id('391c0c5e-c218-4c98-9b58-6d2724ec4c20')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="update_load_balancer_pool")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="delete_load_balancer_pool")
-    @idempotent_id('8b3617c0-4064-48f8-96b8-e2f996fce5c3')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="delete_load_balancer_pool")
+    @decorators.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"""
 
-    """
-    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')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="list_load_balancer_members")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="create_load_balancer_members")
-    @idempotent_id('ad60688f-7a20-4dd5-8229-4076d85b9d55')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="create_load_balancer_members")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="show_load_balancer_member")
-    @idempotent_id('917602ff-24d5-4a07-a6a6-5e5b9539bbf1')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="show_load_balancer_member")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="update_load_balancer_member")
-    @idempotent_id('b1611005-5c77-4ac0-8fcc-4a035dfbaa84')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="update_load_balancer_member")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="delete_load_balancer_member")
-    @idempotent_id('dc21883a-a822-4d39-b815-4dfd6b505b0b')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="delete_load_balancer_member")
+    @decorators.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 a3b18ec..7d19d8a 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_namespace.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_namespace.py
@@ -17,26 +17,20 @@
 Tempest test-case to test namespace objects using RBAC roles
 """
 
-
 from oslo_log import log as logging
-
-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
+from tempest.lib import decorators
+
+from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
 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')
@@ -57,55 +51,45 @@
         }
         self.namespace_client.update_namespace(namespace_uuid, **put_body)
 
-    @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_namespaces")
-    @idempotent_id('e436390d-d669-4047-9838-421ea93e94be')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="list_namespaces")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="create_namespaces")
-    @idempotent_id('503ae445-7e67-4db6-989a-af0b7f9a7e95')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="create_namespaces")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="show_namespace")
-    @idempotent_id('f916971a-7c07-4386-b887-8b78d8a1e528')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="show_namespace")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="update_namespace")
-    @idempotent_id('3649f65a-922a-4b8a-9b8b-520c333e192e')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="update_namespace")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="delete_namespace")
-    @idempotent_id('80e736bf-fc7d-4274-8173-a50c883776a9')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="delete_namespace")
+    @decorators.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 d8e72a4..c0ede87 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_network_ipams.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_network_ipams.py
@@ -17,22 +17,18 @@
 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.decorators import idempotent_id
+from tempest.lib import decorators
+
+from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
 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')
@@ -45,55 +41,45 @@
                         new_ipam['uuid'])
         return new_ipam
 
-    @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_network_ipams")
-    @idempotent_id('9ee2c4d8-3209-4ef8-86e1-0ecea2d4c5f2')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="list_network_ipams")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="create_network_ipams")
-    @idempotent_id('ef2415ea-0810-413a-85a0-4508c9d7af91')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="create_network_ipams")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="show_network_ipam")
-    @idempotent_id('527b19e5-068a-44e3-b175-b504eafeec6e')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="show_network_ipam")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="delete_network_ipam")
-    @idempotent_id('118c1620-efb6-4cc6-8eb5-71bf8631d365')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="delete_network_ipam")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="update_network_ipam")
-    @idempotent_id('44cbe2d9-583d-4215-964a-1c321f5e8d92')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="update_network_ipam")
+    @decorators.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 572c145..1dc9b40 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_network_policy.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_network_policy.py
@@ -18,24 +18,19 @@
 """
 
 from oslo_log import log as logging
-
-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
+from tempest.lib import decorators
+
+from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
 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')
@@ -58,55 +53,45 @@
         self.network_policy_client.update_network_policy(network_policy_uuid,
                                                          **put_body)
 
-    @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_network_policys")
-    @idempotent_id('fa2a28f3-a8bb-4908-95b9-1e11cf58b16f')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="list_network_policys")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="create_network_policys")
-    @idempotent_id('a30be228-afba-40c9-8678-ae020db68d79')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="create_network_policys")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="show_network_policy")
-    @idempotent_id('6cefe92e-8936-49a6-bce0-12da3396e7ab')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="show_network_policy")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="update_network_policy")
-    @idempotent_id('1d470505-3ad4-4870-87d7-3f0b0f9fc635')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="update_network_policy")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="delete_network_policy")
-    @idempotent_id('aae9018f-e7a2-4a75-a68e-afd6c380640e')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="delete_network_policy")
+    @decorators.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 82285a1..e276c9b 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_port_tuple.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_port_tuple.py
@@ -18,24 +18,19 @@
 """
 
 from oslo_log import log as logging
-
-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
+from tempest.lib import decorators
+
+from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
 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):
@@ -74,57 +69,47 @@
                         new_tuple['uuid'])
         return new_tuple
 
-    @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_port_tuples")
-    @idempotent_id('3789eef8-0e80-4057-b7b0-926655144beb')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="list_port_tuples")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="show_port_tuple")
-    @idempotent_id('ae5a90ed-5771-4680-be6b-c7626caa3a52')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="show_port_tuple")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="create_port_tuples")
-    @idempotent_id('0e2283da-fe25-4204-b5b3-fef3c200d0c8')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="create_port_tuples")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="update_port_tuple")
-    @idempotent_id('b16f19e2-ec8e-4107-961d-561890183dd0')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="update_port_tuple")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="delete_port_tuple")
-    @idempotent_id('3f28e8b8-f9de-437f-a398-0a11c7fcd652')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="delete_port_tuple")
+    @decorators.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 ea6d045..e5a773f 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_project.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_project.py
@@ -18,24 +18,19 @@
 """
 
 from oslo_log import log as logging
-
-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
+from tempest.lib import decorators
+
+from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
 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')
@@ -57,55 +52,45 @@
         }
         self.project_client.update_project(project_uuid, **put_body)
 
-    @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_projects")
-    @idempotent_id('7db819fd-ceee-4a6b-9ad7-2e837c055bdd')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="list_projects")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="create_projects")
-    @idempotent_id('38b9b7a8-1568-417d-b0a3-e7adee88e4b9')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="create_projects")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="show_project")
-    @idempotent_id('c47e57c4-34b0-46c2-a678-83b1fe9afd25')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="show_project")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="update_project")
-    @idempotent_id('3d4bd416-16cc-437c-9e95-f9ceda424f8b')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="update_project")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="delete_project")
-    @idempotent_id('787ebe8b-b88d-4488-b157-f70554bdd783')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="delete_project")
+    @decorators.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 fb1abde..4ea40a3 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_qos_config.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_qos_config.py
@@ -18,24 +18,19 @@
 """
 
 from oslo_log import log as logging
-
-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
+from tempest.lib import decorators
+
+from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
 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)
@@ -52,56 +47,46 @@
                         qos_config['uuid'])
         return qos_config
 
-    @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_qos_configs")
-    @idempotent_id('6bc44b34-14d4-4e0e-b45d-fe3df047879f')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="list_qos_configs")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="create_qos_configs")
-    @idempotent_id('031b4a27-22cd-4d93-938d-ba6d0f3163ba')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="create_qos_configs")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="show_qos_config")
-    @idempotent_id('a9d82b49-3492-4667-b252-ef30b0ee6eb3')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="show_qos_config")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="delete_qos_config")
-    @idempotent_id('d324a5e6-cc86-4444-91a2-74592283a7ec')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="delete_qos_config")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="update_qos_config")
-    @idempotent_id('7f1901a5-0cf0-40bd-98a5-f8a930b11cfe')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="update_qos_config")
+    @decorators.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 1325ab9..7f26b9a 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,24 +18,19 @@
 """
 
 from oslo_log import log as logging
-
-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
+from tempest.lib import decorators
+
+from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
 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):
@@ -72,51 +67,43 @@
                         qos_global_config['uuid'])
         return qos_global_config
 
-    @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_global_qos_configs")
-    @idempotent_id('74e5a7b7-f538-4be3-90a5-6862b07fb118')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="list_global_qos_configs")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="create_global_qos_configs")
-    @idempotent_id('d7da1ca0-7bf7-4d1b-982c-820cd37fe9fa')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="create_global_qos_configs")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="show_global_qos_config")
-    @idempotent_id('e3bd44e0-19a9-46e7-83d3-268dcc537ad9')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="show_global_qos_config")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="update_global_qos_config")
-    @idempotent_id('f834c4d7-bc81-4c59-bada-c4d752219a6e')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="update_global_qos_config")
+    @decorators.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)
@@ -126,13 +113,11 @@
                 instance_id=qos['uuid'],
                 display_name=display_name)
 
-    @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="delete_global_qos_config")
-    @idempotent_id('78b9a3da-4eb1-4f4b-8a23-a8a2e733b515')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="delete_global_qos_config")
+    @decorators.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 229811a..8f56fb2 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_qos_queue.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_qos_queue.py
@@ -18,32 +18,26 @@
 """
 
 from oslo_log import log as logging
-
-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
+from tempest.lib import decorators
+
+from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
 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 = ["default-global-system-config", "default-global-qos-config",
-                   name]
+        fq_name = [name]
         qos_queue = self.qos_client.create_qos_queues(
             fq_name=fq_name)['qos-queue']
         self.addCleanup(self._try_delete_resource,
@@ -51,56 +45,46 @@
                         qos_queue['uuid'])
         return qos_queue
 
-    @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_qos_queues")
-    @idempotent_id('3d3a4397-2afe-4bbd-be59-56a1bcc2e49d')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="list_qos_queues")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="create_qos_queues")
-    @idempotent_id('d89c45f4-c83c-47b3-8720-7feffab4519c')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="create_qos_queues")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="show_qos_queue")
-    @idempotent_id('d2773d5c-9858-4938-8a77-62cafd5034da')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="show_qos_queue")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="delete_qos_queue")
-    @idempotent_id('64c828d0-6594-472b-a504-40915067c7bd')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="delete_qos_queue")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="update_qos_queue")
-    @idempotent_id('0733ab1a-f5aa-4e70-a011-174aa203dc33')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="update_qos_queue")
+    @decorators.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 06257c8..1f389d3 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_route.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_route.py
@@ -20,24 +20,19 @@
 import random
 
 from oslo_log import log as logging
-
-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
+from tempest.lib import decorators
+
+from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
 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)
@@ -54,45 +49,37 @@
                         route_table['uuid'])
         return route_table
 
-    @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_route_tables")
-    @idempotent_id('ca5a5d42-6e49-40e4-a5ac-de07b397b775')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="list_route_tables")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="show_route_table")
-    @idempotent_id('084a2759-991a-4ae2-bde4-8f9915966f6e')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="show_route_table")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="create_route_tables")
-    @idempotent_id('3fab8105-c0be-4c9e-be5f-d2dce4deb921')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="create_route_tables")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="update_route_table")
-    @idempotent_id('2acee7ad-843e-40b0-b8f8-a6d90a51c6c8')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="update_route_table")
+    @decorators.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):
@@ -100,23 +87,18 @@
                 route_id=route_table['uuid'],
                 display_name=display_name)
 
-    @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="delete_route_table")
-    @idempotent_id('20a5086c-ec9a-43e0-ae2c-4161c0f4b280')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="delete_route_table")
+    @decorators.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)
@@ -135,46 +117,38 @@
                         interface_route_table['uuid'])
         return interface_route_table
 
-    @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_interface_route_tables")
-    @idempotent_id('b1f8f0a6-6074-4615-a439-19869a48bc49')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="list_interface_route_tables")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="show_interface_route_table")
-    @idempotent_id('94703a28-5e33-4003-b95b-6a3cc5752fd4')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="show_interface_route_table")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="create_interface_route_tables")
-    @idempotent_id('b89ef437-4759-4c04-948b-d2ff9675ab07')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="create_interface_route_tables")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="update_interface_route_table")
-    @idempotent_id('e9346d4f-7a07-41bc-8e88-e8ae9fa309ea')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="update_interface_route_table")
+    @decorators.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):
@@ -182,13 +156,11 @@
                 interface_route_id=interface_rte_table['uuid'],
                 display_name=display_name)
 
-    @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="delete_interface_route_table")
-    @idempotent_id('b00444a5-cb4c-45bc-b393-503e9e333e98')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="delete_interface_route_table")
+    @decorators.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(
@@ -196,10 +168,7 @@
 
 
 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)
@@ -218,45 +187,37 @@
                         route_target['uuid'])
         return route_target
 
-    @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_route_targets")
-    @idempotent_id('757efd07-8027-4a16-887a-1e42f16b4140')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="list_route_targets")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="show_route_target")
-    @idempotent_id('76c60d98-dd5e-453a-bf0e-7854f78a1a5e')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="show_route_target")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="create_route_targets")
-    @idempotent_id('fcdb4ebc-b92d-49f2-88e9-68c93aec94be')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="create_route_targets")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="update_route_target")
-    @idempotent_id('dd830a77-4bfe-4a8c-b4e9-08b6ef2af3be')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="update_route_target")
+    @decorators.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):
@@ -264,23 +225,18 @@
                 route_target_id=target['uuid'],
                 display_name=display_name)
 
-    @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="delete_route_target")
-    @idempotent_id('dfaa58f9-ec29-4d51-a475-870fac08908d')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="delete_route_target")
+    @decorators.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)
@@ -298,46 +254,38 @@
                         route_aggr['uuid'])
         return route_aggr
 
-    @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_route_aggregates")
-    @idempotent_id('15f2c30c-4404-4228-94a0-86c5ec5cf62e')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="list_route_aggregates")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="show_route_aggregate")
-    @idempotent_id('c8edee30-81c4-44e2-8485-055bed853384')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="show_route_aggregate")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="create_route_aggregates")
-    @idempotent_id('7553a54f-e41c-4555-b745-a858c5a70690')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="create_route_aggregates")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="update_route_aggregate")
-    @idempotent_id('de1e6102-0bc6-4f9b-a354-48eb051ab5e4')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="update_route_aggregate")
+    @decorators.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):
@@ -345,13 +293,11 @@
                 route_aggr_id=route_aggr['uuid'],
                 display_name=display_name)
 
-    @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="delete_route_aggregate")
-    @idempotent_id('e16dbdc6-d7cf-43c7-af9d-bd76cc220200')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="delete_route_aggregate")
+    @decorators.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 65133b2..53a439e 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_routers.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_routers.py
@@ -18,24 +18,19 @@
 """
 
 from oslo_log import log as logging
-
-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
+from tempest.lib import decorators
+
+from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
 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):
@@ -141,35 +136,29 @@
                         router['uuid'])
         return router
 
-    @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_physical_routers")
-    @idempotent_id('349ac042-b922-4727-9e1b-8f363ee343f3')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="list_physical_routers")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="create_physical_routers")
-    @idempotent_id('d0b7449e-9037-4f9f-8c7e-9f364c95f18a')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="create_physical_routers")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="show_physical_router")
-    @idempotent_id('6dfc53f4-a884-46d5-b303-22ba59c116f4')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="show_physical_router")
+    @decorators.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(
@@ -177,13 +166,11 @@
         with self.rbac_utils.override_role(self):
             self.router_client.show_physical_router(physical_router_uuid)
 
-    @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="update_physical_router")
-    @idempotent_id('c270f369-8cd7-4ee3-8ab1-4580c3138a5c')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="update_physical_router")
+    @decorators.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')
@@ -194,13 +181,11 @@
                 physical_router_uuid,
                 display_name=updated_fq_name)
 
-    @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="delete_physical_router")
-    @idempotent_id('eeded742-6a8d-4e88-bfa8-fe32db463c53')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="delete_physical_router")
+    @decorators.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(
@@ -208,48 +193,40 @@
         with self.rbac_utils.override_role(self):
             self.router_client.delete_physical_router(physical_router_uuid)
 
-    @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_bgp_routers")
-    @idempotent_id('49bfb461-f99e-4585-b051-e20a3c937589')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="list_bgp_routers")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="create_bgp_routers")
-    @idempotent_id('7567974c-040e-4edd-b3a1-c633aa9651cb')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="create_bgp_routers")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="show_bgp_router")
-    @idempotent_id('0d3ad424-18c9-4d96-8708-fa1ebd45594b')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="show_bgp_router")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="update_bgp_router")
-    @idempotent_id('dc50e7c5-7614-4281-8a66-282c52f3c769')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="update_bgp_router")
+    @decorators.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')
@@ -259,48 +236,40 @@
                 bgp_router_uuid,
                 display_name=updated_fq_name)
 
-    @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="delete_bgp_router")
-    @idempotent_id('f14aee72-cad4-4c3e-8eea-7886a81abb24')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="delete_bgp_router")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="list_global_vrouter_configs")
-    @idempotent_id('4af768d1-3cbe-4aff-bcbc-0e045cac3277')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="list_global_vrouter_configs")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="create_global_vrouter_configs")
-    @idempotent_id('e13d800f-9304-4a06-9bf1-ad08345a13a8')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="create_global_vrouter_configs")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="show_global_vrouter_config")
-    @idempotent_id('3bb6f4e1-fd3f-4338-8392-f7f80974a80e')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="show_global_vrouter_config")
+    @decorators.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(
@@ -309,13 +278,11 @@
             self.router_client.show_global_vrouter_config(
                 global_vrouter_config_uuid)
 
-    @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="update_global_vrouter_config")
-    @idempotent_id('36fcdd51-c42b-4e67-8c26-73d4cde47507')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="update_global_vrouter_config")
+    @decorators.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(
@@ -327,13 +294,11 @@
                 global_vrouter_config_uuid,
                 display_name=updated_fq_name)
 
-    @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="delete_global_vrouter_config")
-    @idempotent_id('4f3d59e8-3dac-4346-9d13-5ebe5ad8f6cf')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="delete_global_vrouter_config")
+    @decorators.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(
@@ -342,44 +307,36 @@
             self.router_client.delete_global_vrouter_config(
                 global_vrouter_config_uuid)
 
-    @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_logical_routers")
-    @idempotent_id('674bf3de-a9e5-45c2-921b-b89db73a2abe')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="list_logical_routers")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="create_logical_routers")
-    @idempotent_id('610f051b-8eba-4d3a-ba43-91386bfc0e52')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="create_logical_routers")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="show_logical_router")
-    @idempotent_id('992841d4-0d5d-4d85-b513-049b33e2a2e2')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="show_logical_router")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="update_logical_router")
-    @idempotent_id('518197bf-5233-4059-9021-5d7ecc74718e')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="update_logical_router")
+    @decorators.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):
@@ -387,46 +344,38 @@
                 logical_router_uuid,
                 display_name=updated_fq_name)
 
-    @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="delete_logical_router")
-    @idempotent_id('70448b9c-4444-45e0-b307-7bff4dc075b1')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="delete_logical_router")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="list_virtual_routers")
-    @idempotent_id('604dc476-732e-4890-8665-a497360f5475')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="list_virtual_routers")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="create_virtual_routers")
-    @idempotent_id('114beb14-45c0-4714-a407-d160bb102022')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="create_virtual_routers")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="show_virtual_router")
-    @idempotent_id('258fe4e0-3e39-460f-aafa-e3b53c96e534')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="show_virtual_router")
+    @decorators.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(
@@ -434,13 +383,11 @@
         with self.rbac_utils.override_role(self):
             self.router_client.show_virtual_router(virtual_router_uuid)
 
-    @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="update_virtual_router")
-    @idempotent_id('d1c72191-2068-4552-a78f-038cdd4c9c1d')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="update_virtual_router")
+    @decorators.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')
@@ -451,13 +398,11 @@
                 virtual_router_uuid,
                 display_name=updated_fq_name)
 
-    @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="delete_virtual_router")
-    @idempotent_id('efbe25d6-8763-42d4-baf6-9f342e710144')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="delete_virtual_router")
+    @decorators.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 b3f80dd..a6554f8 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_routing.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_routing.py
@@ -17,22 +17,18 @@
 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.decorators import idempotent_id
+from tempest.lib import decorators
+
+from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
 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):
@@ -61,55 +57,45 @@
                         new_instance['uuid'])
         return new_instance
 
-    @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_routing_instances")
-    @idempotent_id('054c56ba-76b2-4161-a702-40301d8de085')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="list_routing_instances")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="create_routing_instances")
-    @idempotent_id('3d44a46b-5436-43a8-b2f7-8581f0f04dbc')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="create_routing_instances")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="show_routing_instance")
-    @idempotent_id('161abb37-6037-422b-b453-108a5d10caca')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="show_routing_instance")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="delete_routing_instance")
-    @idempotent_id('1d3af01e-01bf-4347-a9bc-633732339e0e')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="delete_routing_instance")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="update_routing_instance")
-    @idempotent_id('ebcfd442-2a26-4954-968b-e17e414ed0d1')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="update_routing_instance")
+    @decorators.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 9b1dde9..eb873a1 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_routing_policy.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_routing_policy.py
@@ -18,24 +18,19 @@
 """
 
 from oslo_log import log as logging
-
-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
+from tempest.lib import decorators
+
+from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
 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')
@@ -58,55 +53,45 @@
         self.routing_policy_client.update_routing_policy(routing_policy_uuid,
                                                          **put_body)
 
-    @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_routing_policys")
-    @idempotent_id('fe25a306-bc4f-42b3-91ca-38df01e35345')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="list_routing_policys")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="create_routing_policys")
-    @idempotent_id('f8ca5e30-8bb3-410f-8618-8fdca70bda06')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="create_routing_policys")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="show_routing_policy")
-    @idempotent_id('3421e84e-3e2a-452a-9a26-b2caf00b1cbc')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="show_routing_policy")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="update_routing_policy")
-    @idempotent_id('9fc1f44f-c8e2-4f5a-8239-e9b783f55d94')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="update_routing_policy")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="delete_routing_policy")
-    @idempotent_id('24f1cd7a-2917-4b81-a0a3-a40ed2d40c7d')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="delete_routing_policy")
+    @decorators.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 8a14b03..af65578 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_security_group.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_security_group.py
@@ -17,24 +17,19 @@
 Tempest test-case to test service group objects using RBAC roles
 """
 from oslo_log import log as logging
-
-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
+from tempest.lib import decorators
+
+from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
 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)
@@ -54,58 +49,48 @@
                         sec_grp['uuid'])
         return sec_grp
 
-    @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_security_groups")
-    @idempotent_id('a13cc1d5-f562-4b68-b732-980deb3cddf4')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="list_security_groups")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="show_security_group")
-    @idempotent_id('c7ca1781-08ae-4fa2-bd6d-1f369950c4c4')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="show_security_group")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="delete_security_group")
-    @idempotent_id('e682d7b4-deb8-4b5c-9c9b-1e1ada827b40')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="delete_security_group")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="create_security_groups")
-    @idempotent_id('63a2ff14-7869-40a2-962a-d65752de5651')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="create_security_groups")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="update_security_group")
-    @idempotent_id('cf9aafe2-fffb-4028-8fd7-4d6634e144e7')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="update_security_group")
+    @decorators.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 7abe131..b1eab41 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_service_appliances.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_service_appliances.py
@@ -17,22 +17,18 @@
 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.decorators import idempotent_id
+from tempest.lib import decorators
+
+from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
 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')
@@ -75,23 +71,19 @@
                         new_appliance['uuid'])
         return new_appliance
 
-    @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_service_appliances")
-    @idempotent_id('6b5fc17c-34e6-4d21-a53e-a0dfe69afd31')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="list_service_appliances")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="create_service_appliances")
-    @idempotent_id('0563c0c8-b986-466e-8540-aa8ad7a10367')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="create_service_appliances")
+    @decorators.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 = \
@@ -99,13 +91,11 @@
         with self.rbac_utils.override_role(self):
             self._create_service_appliances(new_set)
 
-    @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="show_service_appliance")
-    @idempotent_id('ea30dcfe-8657-4a7d-9cf1-3176d334bf27')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="show_service_appliance")
+    @decorators.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']
@@ -116,13 +106,11 @@
             self.service_appliances_client.show_service_appliance(
                 new_appliance['uuid'])
 
-    @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="update_service_appliance")
-    @idempotent_id('a54ca33a-8590-4844-96d7-b96882b59e86')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="update_service_appliance")
+    @decorators.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 = \
@@ -134,13 +122,11 @@
                 new_appliance['uuid'],
                 display_name=update_name)
 
-    @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="delete_service_appliance")
-    @idempotent_id('362deff5-7b72-4929-ba81-972cfcfa1309')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="delete_service_appliance")
+    @decorators.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 = \
@@ -150,35 +136,29 @@
             self.service_appliances_client.delete_service_appliance(
                 new_appliance['uuid'])
 
-    @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_service_appliance_sets")
-    @idempotent_id('c1e74da9-00b6-4c88-adda-2ce49094e570')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="list_service_appliance_sets")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="create_service_appliance_sets")
-    @idempotent_id('eb00d6cf-590f-41bf-8ee4-5be625d9cb93')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="create_service_appliance_sets")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="show_service_appliance_set")
-    @idempotent_id('dd35dd04-e7d9-46bb-8f36-26835f122572')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="show_service_appliance_set")
+    @decorators.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(
@@ -187,13 +167,11 @@
             self.service_appliances_client.show_service_appliance_set(
                 new_set['uuid'])
 
-    @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="update_service_appliance_set")
-    @idempotent_id('952f063b-bc71-4f62-83b1-719bce5ad4ed')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="update_service_appliance_set")
+    @decorators.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(
@@ -204,13 +182,11 @@
                 new_set['uuid'],
                 display_name=update_name)
 
-    @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="delete_service_appliance_set")
-    @idempotent_id('7b56ce24-da1d-4565-bd22-c58dc57d7045')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="delete_service_appliance_set")
+    @decorators.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 e629526..9587809 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_service_clients.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_service_clients.py
@@ -17,22 +17,18 @@
 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.decorators import idempotent_id
+from tempest.lib import decorators
+
+from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
 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')
@@ -86,45 +82,37 @@
                         new_instance['uuid'])
         return new_instance
 
-    @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_service_templates")
-    @idempotent_id('841b1d32-4308-4fb6-852a-41bdd8c56c37')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="list_service_templates")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="create_service_templates")
-    @idempotent_id('3f02d14a-31e2-4476-821f-87d0cc42d9fb')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="create_service_templates")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="show_service_template")
-    @idempotent_id('1f15d734-2cc6-4ded-916e-134286c6b87b')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="show_service_template")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="update_service_template")
-    @idempotent_id('3549debd-4c7a-4574-8d11-4190c8530a23')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="update_service_template")
+    @decorators.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):
@@ -132,57 +120,47 @@
                 new_template['uuid'],
                 display_name=update_name)
 
-    @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="delete_service_template")
-    @idempotent_id('e86cabd2-5b7e-4ee8-86ec-db52619b852b')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="delete_service_template")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="list_service_health_checks")
-    @idempotent_id('5210d6ca-9a38-4b6b-b5b7-f836c3846079')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="list_service_health_checks")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="create_service_health_checks")
-    @idempotent_id('77716feb-0d05-4cfd-8a17-79cf0b19ed3c')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="create_service_health_checks")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="show_service_health_check")
-    @idempotent_id('80db4445-8d6c-4c8f-aa25-d4ea53d32d2c')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="show_service_health_check")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="update_service_health_check")
-    @idempotent_id('68fb1510-4b76-40cc-8979-e56e537229d2')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="update_service_health_check")
+    @decorators.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):
@@ -190,69 +168,57 @@
                 new_health_check['uuid'],
                 display_name=update_name)
 
-    @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="delete_service_health_check")
-    @idempotent_id('2dce3942-402a-48a4-b682-fdc425d3d935')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="delete_service_health_check")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="create_service_instances")
-    @idempotent_id('1469c71e-f6f5-419f-9672-c3c67f879704')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="create_service_instances")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="show_service_instance")
-    @idempotent_id('ea5b716d-5de8-4c71-becd-f1501c22f0df')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="show_service_instance")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="delete_service_instance")
-    @idempotent_id('74934833-29cd-416b-a5a6-273f733d058a')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="delete_service_instance")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="list_service_instances")
-    @idempotent_id('da6016a3-a2a8-42a8-b064-c124c22fef6f')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="list_service_instances")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="update_service_instance")
-    @idempotent_id('a6237b99-336b-42db-a8eb-9604a1b08fc6')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="update_service_instance")
+    @decorators.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 233084e..379a142 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_subnet.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_subnet.py
@@ -18,24 +18,19 @@
 """
 
 from oslo_log import log as logging
-
-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
+from tempest.lib import decorators
+
+from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
 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 = {
@@ -55,55 +50,45 @@
         }
         self.subnet_client.update_subnet(subnet_uuid, **put_body)
 
-    @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_subnets")
-    @idempotent_id('ddd1d9ae-cf2f-4a74-98ba-b0f481f27977')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="list_subnets")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="create_subnets")
-    @idempotent_id('ee0cb904-d162-44a4-b7b0-a7451f667ed5')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="create_subnets")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="show_subnet")
-    @idempotent_id('994618f2-5b40-460c-a6a8-6479bc15bf80')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="show_subnet")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="update_subnet")
-    @idempotent_id('565e44c9-eb9b-4ae6-9ebb-db422a9751ee')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="update_subnet")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="delete_subnet")
-    @idempotent_id('a733b913-7a88-45d9-ac0a-d858fa3dc662')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="delete_subnet")
+    @decorators.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 6e75327..0557e60 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_virtual_dns.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_virtual_dns.py
@@ -18,14 +18,12 @@
 """
 
 from oslo_log import log as logging
-
-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
+from tempest.lib import decorators
+
+from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
 CONF = config.CONF
 LOG = logging.getLogger(__name__)
@@ -33,10 +31,7 @@
 
 # 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"
@@ -76,57 +71,47 @@
                         dns_record['virtual-DNS-record']['uuid'])
         return dns_record
 
-    @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_virtual_DNSs")
-    @idempotent_id('8401d690-afdf-4b6e-ad60-b9363a8cfb1d')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="list_virtual_DNSs")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="create_virtual_DNSs")
-    @idempotent_id('a7dd2c9e-e1eb-4dc4-ac70-4d48a291a3bf')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="create_virtual_DNSs")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="show_virtual_DNS")
-    @idempotent_id('ffc0fc82-3bff-48ab-b65a-3d90b4a3154d')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="show_virtual_DNS")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="delete_virtual_DNS")
-    @idempotent_id('4793caa1-7707-4123-b1b4-c3feae91312f')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="delete_virtual_DNS")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="update_virtual_DNS")
-    @idempotent_id('2bc43935-57c1-4bf6-9868-78ccfce164bb')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="update_virtual_DNS")
+    @decorators.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,
@@ -138,35 +123,29 @@
                 virtual_DNS_data=virtual_dns_data,
                 display_name=display_name)
 
-    @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_virtual_DNS_records")
-    @idempotent_id('e9103999-2f02-4f04-a8a0-906ca4fb394d')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="list_virtual_DNS_records")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="create_virtual_DNS_records")
-    @idempotent_id('bd9f3992-0ce4-4477-97a0-1271bc8ad9ef')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="create_virtual_DNS_records")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="show_virtual_DNS_record")
-    @idempotent_id('fa3d1a2b-d788-4623-89a4-3a9ed1db7a7d')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="show_virtual_DNS_record")
+    @decorators.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)
@@ -174,13 +153,11 @@
             self.virtual_dns_client.show_virtual_dns_record(
                 dns_record['virtual-DNS-record']['uuid'])
 
-    @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="delete_virtual_DNS_record")
-    @idempotent_id('de31e867-c997-4b4c-a095-43c647f5c192')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="delete_virtual_DNS_record")
+    @decorators.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)
@@ -188,13 +165,11 @@
             self.virtual_dns_client.delete_virtual_dns_record(
                 dns_record['virtual-DNS-record']['uuid'])
 
-    @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="update_virtual_DNS_record")
-    @idempotent_id('65acef26-646f-4b36-923c-8a1d07e90c5c')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="update_virtual_DNS_record")
+    @decorators.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 d8268f8..f375f58 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_virtual_ip.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_virtual_ip.py
@@ -18,24 +18,19 @@
 """
 
 from oslo_log import log as logging
-
-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
+from tempest.lib import decorators
+
+from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
 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')
@@ -56,55 +51,45 @@
         }
         self.virtual_ip_client.update_virtual_ip(virtual_ip_uuid, **put_body)
 
-    @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_virtual_ips")
-    @idempotent_id('92303eee-bd96-48bc-a02c-39950bd19a21')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="list_virtual_ips")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="create_virtual_ips")
-    @idempotent_id('e0070888-995d-46ab-91fc-db1412eba2f7')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="create_virtual_ips")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="show_virtual_ip")
-    @idempotent_id('2a4b3abd-c6f7-4d82-aa31-02e53d2a8fb9')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="show_virtual_ip")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="update_virtual_ip")
-    @idempotent_id('0e975c92-62dc-4e6e-82cc-8cf37da3c5b2')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="update_virtual_ip")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="delete_virtual_ip")
-    @idempotent_id('fd0b2635-36bd-4345-97b7-9c0a57372eba')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="delete_virtual_ip")
+    @decorators.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 d69a32e..e58c6bf 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_virtual_machines.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_virtual_machines.py
@@ -18,24 +18,19 @@
 """
 
 from oslo_log import log as logging
-
-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
+from tempest.lib import decorators
+
+from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
 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):
@@ -65,10 +60,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']
 
@@ -103,56 +98,46 @@
                                  cls.ipam['uuid'])
         super(VMContrailTest, cls).resource_cleanup()
 
-    @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_virtual_machine_interfaces")
-    @idempotent_id('e27d1fae-7324-4ef3-87b1-e7f519b1e2a7')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="list_virtual_machine_interfaces")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="create_virtual_machine_interfaces")
-    @idempotent_id('d8a3a524-d61b-4bcb-8146-c5d4f308df8e')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="create_virtual_machine_interfaces")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="show_virtual_machine_interface")
-    @idempotent_id('3f17125a-9060-4c4a-a23f-0fe2aba2ccef')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="show_virtual_machine_interface")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="delete_virtual_machine_interface")
-    @idempotent_id('ce7f9471-ba1b-40d2-94f1-bdd0c610e22f')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="delete_virtual_machine_interface")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="update_virtual_machine_interface")
-    @idempotent_id('7ca3046a-6245-4c15-914b-5a8ecdbeee11')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="update_virtual_machine_interface")
+    @decorators.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 4475e7b..356f37e 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_virtual_networks.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_virtual_networks.py
@@ -18,24 +18,19 @@
 """
 
 from oslo_log import log as logging
-
-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
+from tempest.lib import decorators
+
+from tungsten_tempest_plugin.tests.api.contrail import rbac_base
 
 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):
@@ -70,57 +65,47 @@
                         network['uuid'])
         return network
 
-    @rbac_rule_validation.action(service=CONF.sdn.service_name,
-                                 rule="list_virtual_networks")
-    @idempotent_id('375ebc8d-dc52-4d9c-877b-85aba35b1539')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="list_virtual_networks")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="create_virtual_networks")
-    @idempotent_id('375ebc8d-dc52-4d9c-877b-96aba35b2530')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="create_virtual_networks")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="update_virtual_network")
-    @idempotent_id('375ebc8d-dc52-4d9c-566b-150a025c1237')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="update_virtual_network")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="delete_virtual_network")
-    @idempotent_id('375ebc8d-dc52-4d9c-877b-17bcb53c3641')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="delete_virtual_network")
+    @decorators.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=CONF.sdn.service_name,
-                                 rule="show_virtual_network")
-    @idempotent_id('375ebc8d-dc52-4d9c-877b-27c1a1242a81')
+    @rbac_rule_validation.action(service="Contrail",
+                                 rules="show_virtual_network")
+    @decorators.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)
