diff --git a/tox.ini b/tox.ini
index 322017c..e3d3ee0 100644
--- a/tox.ini
+++ b/tox.ini
@@ -96,7 +96,7 @@
 # multiline doc strings just don't have a natural summary
 # line. Rejecting code for this reason is wrong.
 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 d0137c2..1df4285 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 3d00cbd..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')
@@ -79,31 +75,25 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="list_api_access_lists")
-    @idempotent_id('2bfde8fd-36fe-4e69-ba59-6f2db8941e7d')
+    @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="Contrail",
                                  rules="create_api_access_lists")
-    @idempotent_id('b2b5f50c-07d8-4d79-b9a4-78187ad97353')
+    @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="Contrail",
                                  rules="show_api_access_list")
-    @idempotent_id('b82e8e6b-83b5-424d-9652-ef6a34067f4f')
+    @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(
@@ -111,11 +101,9 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="update_api_access_list")
-    @idempotent_id('edc88825-1e2e-47ff-b7b4-f68d6310fbad')
+    @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):
@@ -125,11 +113,9 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="delete_api_access_list")
-    @idempotent_id('f27d9044-95f2-4733-81ed-df9340dbd421')
+    @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(
@@ -137,21 +123,17 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="list_access_control_lists")
-    @idempotent_id('c56a1338-a9d1-4286-8aeb-3a0d60d93037')
+    @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="Contrail",
                                  rules="create_access_control_lists")
-    @idempotent_id('9f225d2b-5376-42f5-97aa-cf63be47fa19')
+    @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):
@@ -159,11 +141,9 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="show_access_control_list")
-    @idempotent_id('f0ed882b-f3de-48b7-884a-637ee0b7d6b6')
+    @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(
@@ -174,11 +154,9 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="update_access_control_list")
-    @idempotent_id('9a4b3133-dd07-4a1a-b282-f7770c372fb8')
+    @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'])
@@ -190,11 +168,9 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="delete_access_control_list")
-    @idempotent_id('36a8ace1-71ca-4c7c-8667-d8387d6f964a')
+    @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 fafe194..c2ef808 100644
--- a/tungsten_tempest_plugin/tests/api/contrail/test_alarm.py
+++ b/tungsten_tempest_plugin/tests/api/contrail/test_alarm.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 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')
@@ -89,21 +84,17 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="list_alarms")
-    @idempotent_id('dc7d19dd-dd5e-4ec8-bf0c-c6d9d83a60a8')
+    @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="Contrail",
                                  rules="create_alarms")
-    @idempotent_id('7fe55d0c-e54a-4bb7-95a6-9c53f9e9c4bf')
+    @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):
@@ -111,11 +102,9 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="show_alarm")
-    @idempotent_id('ab0ccbe4-7bfe-4176-890a-d438ee04290d')
+    @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)
@@ -124,11 +113,9 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="update_alarm")
-    @idempotent_id('ab331cca-ee53-4106-9b30-7319bfb1bea7')
+    @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)
@@ -137,11 +124,9 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="delete_alarm")
-    @idempotent_id('84fadb14-77c0-4f21-b5b2-1da7a2fd27e6')
+    @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 24fa642..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):
@@ -116,32 +113,26 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="list_alias_ips")
-    @idempotent_id('899d6824-0755-41ef-adef-03eb1858bcb0')
+    @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="Contrail",
                                  rules="create_alias_ips")
-    @idempotent_id('bc9aae29-22a8-4eed-a31f-c0ded300e3a3')
+    @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="Contrail",
                                  rules="show_alias_ip")
-    @idempotent_id('d20318b1-c204-44e7-a44c-66f6a1fbe7a0')
+    @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):
@@ -150,11 +141,9 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="update_alias_ip")
-    @idempotent_id('c237b18f-d899-4b80-8e9b-068244a24612')
+    @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')
@@ -165,11 +154,9 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="delete_alias_ip")
-    @idempotent_id('456c641c-9066-4125-8dec-d1529ad8f1ba')
+    @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):
@@ -178,31 +165,25 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="list_alias_ip_pools")
-    @idempotent_id('ffe85f35-589a-4b90-a1d3-6aed92a85954')
+    @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="Contrail",
                                  rules="create_alias_ip_pools")
-    @idempotent_id('83abd2c0-d46a-4337-87d0-31cdb86e4226')
+    @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="Contrail",
                                  rules="show_alias_ip_pool")
-    @idempotent_id('a1cbe111-ccba-4fa4-ba59-7d1ee08a15db')
+    @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(
@@ -210,11 +191,9 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="update_alias_ip_pool")
-    @idempotent_id('7f3448d7-22f1-4808-b3eb-15eeb3f079aa')
+    @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):
@@ -224,11 +203,9 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="delete_alias_ip_pool")
-    @idempotent_id('f59ea4fb-d10f-40c8-a8fa-dcd948ca89c8')
+    @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 c7dfd8d..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')
@@ -67,21 +62,17 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="list_analytics_nodes")
-    @idempotent_id('d3002e37-4b42-446d-b144-1b53f0dadfd3')
+    @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="Contrail",
                                  rules="show_analytics_node")
-    @idempotent_id('b51043fd-77ba-4312-b96f-569ed5153338')
+    @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)
@@ -90,11 +81,9 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="create_analytics_nodes")
-    @idempotent_id('c57482c9-fcb4-4f41-95b0-7f0ffeee3dc3')
+    @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):
@@ -102,11 +91,9 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="update_analytics_node")
-    @idempotent_id('ff50a2df-6283-409e-ab03-c13b63acc8a0')
+    @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)
@@ -117,11 +104,9 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="delete_analytics_node")
-    @idempotent_id('972f997a-c89f-4227-8ae9-5a2335ec0b0a')
+    @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 e61d5e8..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')
@@ -63,31 +58,25 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="list_provider_attachments")
-    @idempotent_id('961dbf54-ae4f-42e8-9d27-69fa7df39013')
+    @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="Contrail",
                                  rules="create_provider_attachments")
-    @idempotent_id('73ad032e-3e81-4dcc-be55-1987484207cd')
+    @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="Contrail",
                                  rules="show_provider_attachment")
-    @idempotent_id('7b5278bc-dd79-495a-9f74-448c04f52bd2')
+    @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(
@@ -95,11 +84,9 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="update_provider_attachment")
-    @idempotent_id('3516ff99-eddf-4932-afa4-433a43a0e5ac')
+    @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):
@@ -109,11 +96,9 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="delete_provider_attachment")
-    @idempotent_id('234d5505-2abf-418b-b43b-ea6f5a724fd3')
+    @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(
@@ -121,31 +106,25 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="list_customer_attachments")
-    @idempotent_id('3eca8fd8-ec3c-4a0e-8f62-b15d28796b7f')
+    @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="Contrail",
                                  rules="create_customer_attachments")
-    @idempotent_id('53f93053-554c-4202-b763-0230d9a0553a')
+    @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="Contrail",
                                  rules="show_customer_attachment")
-    @idempotent_id('c6671540-695c-4cba-bcee-4a5d1cddd412')
+    @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(
@@ -153,11 +132,9 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="update_customer_attachment")
-    @idempotent_id('50419cca-dd03-4d02-9c06-88446647fcba')
+    @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):
@@ -167,11 +144,9 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="delete_customer_attachment")
-    @idempotent_id('5385c275-8e86-4739-9cb6-d1e0ed522807')
+    @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 c503bb1..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')
@@ -47,31 +43,25 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="list_bgp_as_a_services")
-    @idempotent_id('d3153cd0-379e-4e62-9780-ef237e567fc5')
+    @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="Contrail",
                                  rules="create_bgp_as_a_services")
-    @idempotent_id('a039f0c4-b53a-492b-a5c5-fbdf046afcf4')
+    @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="Contrail",
                                  rules="show_bgp_as_a_service")
-    @idempotent_id('c2fae8b4-929c-4d2f-914d-76a7414a56dc')
+    @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(
@@ -79,11 +69,9 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="delete_bgp_as_a_service")
-    @idempotent_id('78c8389a-7bb5-4027-bae1-923af3d6e77c')
+    @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(
@@ -91,11 +79,9 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="update_bgp_as_a_service")
-    @idempotent_id('38ba2ecb-71e2-4a2f-be43-e82491dffa05')
+    @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 5012953..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():
@@ -61,31 +56,25 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="list_config_nodes")
-    @idempotent_id('b560e060-e4f0-45b0-93e2-55f0cb201e06')
+    @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="Contrail",
                                  rules="create_config_nodes")
-    @idempotent_id('a8d20d0d-dc5a-4cae-87c5-7f6914c3701e')
+    @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="Contrail",
                                  rules="delete_config_node")
-    @idempotent_id('16573a85-57ab-418c-bb23-5dd936e7be90')
+    @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):
@@ -94,11 +83,9 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="show_config_node")
-    @idempotent_id('a5b17108-4fa3-4d09-b861-e2857aab8f80')
+    @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):
@@ -106,11 +93,9 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="update_config_node")
-    @idempotent_id('8f70d2c0-594b-4a94-ab15-88bd8a2e62e5')
+    @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')
@@ -139,21 +121,17 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="create_config_roots")
-    @idempotent_id('291b28ea-d0d8-47cd-ac76-1f980047cb76')
+    @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="Contrail",
                                  rules="delete_config_root")
-    @idempotent_id('bd04c0fb-3deb-4904-ad2c-1a10933c30dd')
+    @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):
@@ -162,11 +140,9 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="show_config_root")
-    @idempotent_id('fba2c419-9a83-4d88-9a26-84770544bb3f')
+    @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):
@@ -174,11 +150,9 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="update_config_root")
-    @idempotent_id('bfcc074f-5e1c-4b45-8a2a-857239f8acb0')
+    @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')
@@ -188,20 +162,15 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="list_config_roots")
-    @idempotent_id('316e7425-8fb0-41b4-9080-a76697abbafa')
+    @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')
@@ -220,31 +189,25 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="list_global_system_configs")
-    @idempotent_id('d1d189a7-14c1-49c5-b180-cd42ed2ca123')
+    @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="Contrail",
                                  rules="create_global_system_configs")
-    @idempotent_id('e0ba6a20-3e28-47ac-bf95-9a848fcee49a')
+    @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="Contrail",
                                  rules="show_global_system_config")
-    @idempotent_id('4b9f9131-cb34-4b7d-9d06-c6aca85cce3a')
+    @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(
@@ -252,11 +215,9 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="update_global_system_config")
-    @idempotent_id('4f90dc83-da59-45a4-8ab6-b387bd6c2df4')
+    @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):
@@ -266,11 +227,9 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="delete_global_system_config")
-    @idempotent_id('fce1653c-e657-4a1e-8ced-7e02d297d6c9')
+    @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 9586bcc..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')
@@ -73,11 +68,9 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="list_database_nodes")
-    @idempotent_id('5ae6f965-6161-443f-b19e-dfa7b364c533')
+    @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)
@@ -86,11 +79,9 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="show_database_node")
-    @idempotent_id('4a07d9a8-7b99-43bd-b628-06c023993aab')
+    @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)
@@ -100,11 +91,9 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="create_database_nodes")
-    @idempotent_id('b9aa9c6b-9381-44f0-94fb-e4523bf2a87e')
+    @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):
@@ -112,11 +101,9 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="update_database_node")
-    @idempotent_id('6e59f393-0e55-4327-871e-7f0ad53f2e17')
+    @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)
@@ -129,11 +116,9 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="delete_database_node")
-    @idempotent_id('0cbc5a52-d7e7-4a1c-a85d-6bf44012d99b')
+    @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 ddc0eea..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')]
@@ -46,42 +44,34 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="list_discovery_service_assignments")
-    @idempotent_id('9ac1e4ca-8983-403f-b644-7758935f2f36')
+    @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="Contrail",
                                  rules="create_discovery_service_assignments")
-    @idempotent_id('40ad1208-a039-4809-8516-41b4dfcbd00c')
+    @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="Contrail",
                                  rules="show_discovery_service_assignment")
-    @idempotent_id('63660fe9-22b8-456c-a757-a7da1abfbce8')
+    @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="Contrail",
                                  rules="update_discovery_service_assignment")
-    @idempotent_id('71ce1404-965b-4670-abb7-5b6fea3b24b7')
+    @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):
@@ -92,11 +82,9 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="delete_discovery_service_assignment")
-    @idempotent_id('e7ff845d-2140-4eb0-9720-26370459723b')
+    @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 7e0e420..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')
@@ -58,53 +53,43 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="list_domains")
-    @idempotent_id('fa02e27b-f661-4186-a522-69e8fcb6abf9')
+    @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="Contrail",
                                  rules="create_domains")
-    @idempotent_id('3f18be91-c37b-4e17-bf5e-b704d993f738')
+    @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="Contrail",
                                  rules="show_domain")
-    @idempotent_id('e79f8581-ba9f-420a-aa26-f1cb51cf4bbf')
+    @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="Contrail",
                                  rules="update_domain")
-    @idempotent_id('fdf72539-20b5-4bdb-b22b-70c86fbb52a4')
+    @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="Contrail",
                                  rules="delete_domain")
-    @idempotent_id('abaad2b0-6bde-40b8-b257-20ca805c1dca')
+    @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 11f2485..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')]
@@ -62,21 +57,17 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="list_dsa_rules")
-    @idempotent_id('3227673b-96fc-4d26-ab0b-109347e9e9c2')
+    @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="Contrail",
                                  rules="show_dsa_rule")
-    @idempotent_id('0f90ea4f-c050-4c31-93a7-1e0c58df914e')
+    @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']
@@ -86,11 +77,9 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="create_dsa_rules")
-    @idempotent_id('c3774ca3-45d0-4ca8-a6b3-f895441b1d0e')
+    @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']
@@ -99,11 +88,9 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="update_dsa_rule")
-    @idempotent_id('5cfe7e8e-d91c-4183-8e6c-733e826707be')
+    @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']
@@ -115,11 +102,9 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="delete_dsa_rule")
-    @idempotent_id('d3b869db-fa49-48f0-861a-08efd9879b15')
+    @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 9427f77..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')
@@ -115,43 +107,35 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="create_floating_ip_pools")
-    @idempotent_id('a83ca5e8-be4b-4161-869c-f981a724cf82')
+    @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="Contrail",
                                  rules="list_floating_ip_pools")
-    @idempotent_id('9d20e78d-0463-4a0e-b30c-40770bee35bc')
+    @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="Contrail",
                                  rules="show_floating_ip_pool")
-    @idempotent_id('1ec3124c-c15c-4ee6-b2de-2feed9599e38')
+    @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="Contrail",
                                  rules="update_floating_ip_pool")
-    @idempotent_id('6563f2e7-ae6b-483b-8c07-0111efc86817')
+    @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(
@@ -160,21 +144,16 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="delete_floating_ip_pool")
-    @idempotent_id('c4b449ae-2f12-49cf-9dec-2b21c143aff6')
+    @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):
@@ -211,43 +190,35 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="create_floating_ips")
-    @idempotent_id('ff05f70f-9db9-43cb-a5ce-38cbbef2c430')
+    @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="Contrail",
                                  rules="list_floating_ips")
-    @idempotent_id('e56046f9-32f9-41ce-9c1b-b982997ac347')
+    @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="Contrail",
                                  rules="show_floating_ip")
-    @idempotent_id('293f2c26-4101-4a2f-86d4-feb2878bd511')
+    @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="Contrail",
                                  rules="update_floating_ip")
-    @idempotent_id('a09283c9-73d3-42f7-876d-f33040686d6d')
+    @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(
@@ -256,11 +227,9 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="delete_floating_ip")
-    @idempotent_id('a26f162f-da56-4153-aed6-bffccba92bc7')
+    @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 4dad685..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')
@@ -87,21 +82,17 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="list_forwarding_classs")
-    @idempotent_id('807a66fd-d4a4-472c-a13d-7ba590509e6e')
+    @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="Contrail",
                                  rules="show_forwarding_class")
-    @idempotent_id('8ef21f71-72a4-4de9-af93-6e759aa463c0')
+    @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
@@ -115,11 +106,9 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="create_forwarding_classs")
-    @idempotent_id('d098859c-ad36-4385-8fb0-c00934a99b6f')
+    @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
@@ -131,11 +120,9 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="update_forwarding_class")
-    @idempotent_id('589dc03d-a25d-48be-9d9c-d3f92ff2cfc6')
+    @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
@@ -150,11 +137,9 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="delete_forwarding_class")
-    @idempotent_id('a0348ffc-68c5-4d94-ba03-d08483503ced')
+    @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 d1fbabf..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):
@@ -56,21 +51,17 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="fqname_to_id")
-    @idempotent_id('1fc1350b-3146-49bc-9af5-a61a98b55541')
+    @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="Contrail",
                                  rules="id_to_fqname")
-    @idempotent_id('ecdd77d7-8508-4639-86cd-b97907b363ff')
+    @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 5732cd2..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']
 
@@ -107,43 +102,35 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="list_instance_ips")
-    @idempotent_id('31db3b3f-c40b-4f7f-bb8b-0a110f099553')
+    @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="Contrail",
                                  rules="create_instance_ips")
-    @idempotent_id('78f5cd4d-345d-4d87-8b8b-4d5d3fec4a12')
+    @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="Contrail",
                                  rules="show_instance_ip")
-    @idempotent_id('276f3838-d9cb-4432-bbb4-db31c4c1db5c')
+    @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="Contrail",
                                  rules="update_instance_ip")
-    @idempotent_id('b85975a5-176f-44b1-a615-b6f0a39a7708')
+    @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(
@@ -152,11 +139,9 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="delete_instance_ip")
-    @idempotent_id('d9c1d400-1dfb-4adb-8d97-0e8b498226b7')
+    @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 80ffdf1..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')
@@ -95,21 +90,17 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="list_physical_interfaces")
-    @idempotent_id('c496a2b4-51b2-4674-a60e-483a315baccb')
+    @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="Contrail",
                                  rules="create_physical_interfaces")
-    @idempotent_id('066f53d8-3d2a-4ad6-983f-243de7c12962')
+    @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):
@@ -117,11 +108,9 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="update_physical_interface")
-    @idempotent_id('91c4fc90-ed0f-42ec-87c6-ff6c2a9ab8de')
+    @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
@@ -137,11 +126,9 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="delete_physical_interface")
-    @idempotent_id('5d77ea76-be8c-49cc-8f08-72fbdaf9028f')
+    @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']
 
@@ -150,11 +137,9 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="show_physical_interface")
-    @idempotent_id('2c75c7e7-ef34-4e24-9c2f-5a2182db33a6')
+    @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):
@@ -162,21 +147,17 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="list_logical_interfaces")
-    @idempotent_id('43ac3727-4a43-42d7-b52f-df75018915b9')
+    @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="Contrail",
                                  rules="create_logical_interfaces")
-    @idempotent_id('503facf2-0752-47e4-a0a4-7a3103133a61')
+    @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):
@@ -184,11 +165,9 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="update_logical_interface")
-    @idempotent_id('63c991f4-6aba-454c-9c49-522dc77b3f5c')
+    @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']
@@ -205,11 +184,9 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="delete_logical_interface")
-    @idempotent_id('a36743d1-3ea1-4cf5-89d8-9c0b885fa625')
+    @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']
@@ -218,11 +195,9 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="show_logical_interface")
-    @idempotent_id('f0f7fab7-eeb9-4d29-8415-31a50180fb44')
+    @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 a739b86..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,98 +162,78 @@
 
 
 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="Contrail",
                                  rules="list_load_balancers")
-    @idempotent_id('5d840b6b-3974-4945-916f-dd53ba27e42f')
+    @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="Contrail",
                                  rules="create_load_balancers")
-    @idempotent_id('6a18d506-0794-4eb9-a945-165bf146005d')
+    @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="Contrail",
                                  rules="show_load_balancer")
-    @idempotent_id('428012aa-cd0e-4702-89d2-459046d4bd5f')
+    @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="Contrail",
                                  rules="update_load_balancer")
-    @idempotent_id('7cd3d7b2-b149-40c1-a801-a6a8a660bd24')
+    @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="Contrail",
                                  rules="delete_load_balancer")
-    @idempotent_id('b28c6b11-d1b0-45d0-8942-638b6b590702')
+    @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="Contrail",
                                  rules="list_load_balancer_health_monitors")
-    @idempotent_id('3e3d8bdc-3621-4c5e-8130-1187f445a4e6')
+    @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="Contrail",
                                  rules="create_load_balancer_health_monitors")
-    @idempotent_id('bddb93ad-d331-4bbc-bac6-2763cae4eb2c')
+    @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="Contrail",
                                  rules="show_load_balancer_health_monitor")
-    @idempotent_id('30d23994-1e3a-4a76-8f18-e00d0854412a')
+    @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(
@@ -266,22 +241,18 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="update_load_balancer_health_monitor")
-    @idempotent_id('c32ba92c-3a69-4255-867a-1423c93faa6f')
+    @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="Contrail",
                                  rules="delete_load_balancer_health_monitor")
-    @idempotent_id('b4d7ea9d-fd8c-433b-96fc-c24866b3f6a7')
+    @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,38 +260,29 @@
 
 
 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="Contrail",
                                  rules="list_load_balancer_listeners")
-    @idempotent_id('7e02882f-0eab-41c2-b48a-bf71e083b912')
+    @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="Contrail",
                                  rules="create_load_balancer_listeners")
-    @idempotent_id('0551de87-fa4c-463f-8968-ec6f2a6098d0')
+    @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="Contrail",
                                  rules="show_load_balancer_listener")
-    @idempotent_id('ade38959-9506-4262-8d3c-5ba5eb63d85f')
+    @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(
@@ -328,22 +290,18 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="update_load_balancer_listener")
-    @idempotent_id('e529e538-da31-4159-91c2-6c0a828282a4')
+    @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="Contrail",
                                  rules="delete_load_balancer_listener")
-    @idempotent_id('feaf3e9a-ffd1-4327-ad7a-35f9e9e4989b')
+    @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="Contrail",
                                  rules="list_load_balancer_pools")
-    @idempotent_id('3d177a9e-7067-4e9e-b4e8-0acc5887dff0')
+    @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="Contrail",
                                  rules="create_load_balancer_pools")
-    @idempotent_id('a52c6ec7-a996-4191-9a70-7879a211a711')
+    @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="Contrail",
                                  rules="show_load_balancer_pool")
-    @idempotent_id('7923da4e-53b1-4024-9a40-5bc91cee8e2d')
+    @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="Contrail",
                                  rules="update_load_balancer_pool")
-    @idempotent_id('391c0c5e-c218-4c98-9b58-6d2724ec4c20')
+    @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="Contrail",
                                  rules="delete_load_balancer_pool")
-    @idempotent_id('8b3617c0-4064-48f8-96b8-e2f996fce5c3')
+    @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="Contrail",
                                  rules="list_load_balancer_members")
-    @idempotent_id('b3c51463-8166-486a-a26e-0f7aeaa41e0f')
+    @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="Contrail",
                                  rules="create_load_balancer_members")
-    @idempotent_id('ad60688f-7a20-4dd5-8229-4076d85b9d55')
+    @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="Contrail",
                                  rules="show_load_balancer_member")
-    @idempotent_id('917602ff-24d5-4a07-a6a6-5e5b9539bbf1')
+    @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="Contrail",
                                  rules="update_load_balancer_member")
-    @idempotent_id('b1611005-5c77-4ac0-8fcc-4a035dfbaa84')
+    @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="Contrail",
                                  rules="delete_load_balancer_member")
-    @idempotent_id('dc21883a-a822-4d39-b815-4dfd6b505b0b')
+    @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 9a547dc..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')
@@ -59,54 +53,43 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="list_namespaces")
-    @idempotent_id('e436390d-d669-4047-9838-421ea93e94be')
+    @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="Contrail",
                                  rules="create_namespaces")
-    @idempotent_id('503ae445-7e67-4db6-989a-af0b7f9a7e95')
+    @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="Contrail",
                                  rules="show_namespace")
-    @idempotent_id('f916971a-7c07-4386-b887-8b78d8a1e528')
+    @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="Contrail",
                                  rules="update_namespace")
-    @idempotent_id('3649f65a-922a-4b8a-9b8b-520c333e192e')
+    @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="Contrail",
                                  rules="delete_namespace")
-    @idempotent_id('80e736bf-fc7d-4274-8173-a50c883776a9')
+    @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 7377863..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')
@@ -47,53 +43,43 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="list_network_ipams")
-    @idempotent_id('9ee2c4d8-3209-4ef8-86e1-0ecea2d4c5f2')
+    @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="Contrail",
                                  rules="create_network_ipams")
-    @idempotent_id('ef2415ea-0810-413a-85a0-4508c9d7af91')
+    @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="Contrail",
                                  rules="show_network_ipam")
-    @idempotent_id('527b19e5-068a-44e3-b175-b504eafeec6e')
+    @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="Contrail",
                                  rules="delete_network_ipam")
-    @idempotent_id('118c1620-efb6-4cc6-8eb5-71bf8631d365')
+    @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="Contrail",
                                  rules="update_network_ipam")
-    @idempotent_id('44cbe2d9-583d-4215-964a-1c321f5e8d92')
+    @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 150fb2e..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')
@@ -60,53 +55,43 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="list_network_policys")
-    @idempotent_id('fa2a28f3-a8bb-4908-95b9-1e11cf58b16f')
+    @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="Contrail",
                                  rules="create_network_policys")
-    @idempotent_id('a30be228-afba-40c9-8678-ae020db68d79')
+    @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="Contrail",
                                  rules="show_network_policy")
-    @idempotent_id('6cefe92e-8936-49a6-bce0-12da3396e7ab')
+    @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="Contrail",
                                  rules="update_network_policy")
-    @idempotent_id('1d470505-3ad4-4870-87d7-3f0b0f9fc635')
+    @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="Contrail",
                                  rules="delete_network_policy")
-    @idempotent_id('aae9018f-e7a2-4a75-a68e-afd6c380640e')
+    @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 f0b5f14..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):
@@ -76,42 +71,34 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="list_port_tuples")
-    @idempotent_id('3789eef8-0e80-4057-b7b0-926655144beb')
+    @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="Contrail",
                                  rules="show_port_tuple")
-    @idempotent_id('ae5a90ed-5771-4680-be6b-c7626caa3a52')
+    @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="Contrail",
                                  rules="create_port_tuples")
-    @idempotent_id('0e2283da-fe25-4204-b5b3-fef3c200d0c8')
+    @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="Contrail",
                                  rules="update_port_tuple")
-    @idempotent_id('b16f19e2-ec8e-4107-961d-561890183dd0')
+    @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):
@@ -120,11 +107,9 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="delete_port_tuple")
-    @idempotent_id('3f28e8b8-f9de-437f-a398-0a11c7fcd652')
+    @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 83293be..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')
@@ -59,53 +54,43 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="list_projects")
-    @idempotent_id('7db819fd-ceee-4a6b-9ad7-2e837c055bdd')
+    @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="Contrail",
                                  rules="create_projects")
-    @idempotent_id('38b9b7a8-1568-417d-b0a3-e7adee88e4b9')
+    @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="Contrail",
                                  rules="show_project")
-    @idempotent_id('c47e57c4-34b0-46c2-a678-83b1fe9afd25')
+    @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="Contrail",
                                  rules="update_project")
-    @idempotent_id('3d4bd416-16cc-437c-9e95-f9ceda424f8b')
+    @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="Contrail",
                                  rules="delete_project")
-    @idempotent_id('787ebe8b-b88d-4488-b157-f70554bdd783')
+    @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 29215e4..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)
@@ -54,54 +49,44 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="list_qos_configs")
-    @idempotent_id('6bc44b34-14d4-4e0e-b45d-fe3df047879f')
+    @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="Contrail",
                                  rules="create_qos_configs")
-    @idempotent_id('031b4a27-22cd-4d93-938d-ba6d0f3163ba')
+    @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="Contrail",
                                  rules="show_qos_config")
-    @idempotent_id('a9d82b49-3492-4667-b252-ef30b0ee6eb3')
+    @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="Contrail",
                                  rules="delete_qos_config")
-    @idempotent_id('d324a5e6-cc86-4444-91a2-74592283a7ec')
+    @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="Contrail",
                                  rules="update_qos_config")
-    @idempotent_id('7f1901a5-0cf0-40bd-98a5-f8a930b11cfe')
+    @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 d0c6a06..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):
@@ -74,11 +69,9 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="list_global_qos_configs")
-    @idempotent_id('74e5a7b7-f538-4be3-90a5-6862b07fb118')
+    @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)
@@ -87,11 +80,9 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="create_global_qos_configs")
-    @idempotent_id('d7da1ca0-7bf7-4d1b-982c-820cd37fe9fa')
+    @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):
@@ -99,11 +90,9 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="show_global_qos_config")
-    @idempotent_id('e3bd44e0-19a9-46e7-83d3-268dcc537ad9')
+    @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)
@@ -112,11 +101,9 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="update_global_qos_config")
-    @idempotent_id('f834c4d7-bc81-4c59-bada-c4d752219a6e')
+    @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)
@@ -128,11 +115,9 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="delete_global_qos_config")
-    @idempotent_id('78b9a3da-4eb1-4f4b-8a23-a8a2e733b515')
+    @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 f6c9ec2..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,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 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)
@@ -52,54 +47,44 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="list_qos_queues")
-    @idempotent_id('3d3a4397-2afe-4bbd-be59-56a1bcc2e49d')
+    @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="Contrail",
                                  rules="create_qos_queues")
-    @idempotent_id('d89c45f4-c83c-47b3-8720-7feffab4519c')
+    @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="Contrail",
                                  rules="show_qos_queue")
-    @idempotent_id('d2773d5c-9858-4938-8a77-62cafd5034da')
+    @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="Contrail",
                                  rules="delete_qos_queue")
-    @idempotent_id('64c828d0-6594-472b-a504-40915067c7bd')
+    @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="Contrail",
                                  rules="update_qos_queue")
-    @idempotent_id('0733ab1a-f5aa-4e70-a011-174aa203dc33')
+    @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 d9bdb14..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)
@@ -56,43 +51,35 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="list_route_tables")
-    @idempotent_id('ca5a5d42-6e49-40e4-a5ac-de07b397b775')
+    @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="Contrail",
                                  rules="show_route_table")
-    @idempotent_id('084a2759-991a-4ae2-bde4-8f9915966f6e')
+    @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="Contrail",
                                  rules="create_route_tables")
-    @idempotent_id('3fab8105-c0be-4c9e-be5f-d2dce4deb921')
+    @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="Contrail",
                                  rules="update_route_table")
-    @idempotent_id('2acee7ad-843e-40b0-b8f8-a6d90a51c6c8')
+    @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):
@@ -102,21 +89,16 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="delete_route_table")
-    @idempotent_id('20a5086c-ec9a-43e0-ae2c-4161c0f4b280')
+    @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)
@@ -137,22 +119,18 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="list_interface_route_tables")
-    @idempotent_id('b1f8f0a6-6074-4615-a439-19869a48bc49')
+    @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="Contrail",
                                  rules="show_interface_route_table")
-    @idempotent_id('94703a28-5e33-4003-b95b-6a3cc5752fd4')
+    @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(
@@ -160,21 +138,17 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="create_interface_route_tables")
-    @idempotent_id('b89ef437-4759-4c04-948b-d2ff9675ab07')
+    @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="Contrail",
                                  rules="update_interface_route_table")
-    @idempotent_id('e9346d4f-7a07-41bc-8e88-e8ae9fa309ea')
+    @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):
@@ -184,11 +158,9 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="delete_interface_route_table")
-    @idempotent_id('b00444a5-cb4c-45bc-b393-503e9e333e98')
+    @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)
@@ -220,43 +189,35 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="list_route_targets")
-    @idempotent_id('757efd07-8027-4a16-887a-1e42f16b4140')
+    @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="Contrail",
                                  rules="show_route_target")
-    @idempotent_id('76c60d98-dd5e-453a-bf0e-7854f78a1a5e')
+    @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="Contrail",
                                  rules="create_route_targets")
-    @idempotent_id('fcdb4ebc-b92d-49f2-88e9-68c93aec94be')
+    @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="Contrail",
                                  rules="update_route_target")
-    @idempotent_id('dd830a77-4bfe-4a8c-b4e9-08b6ef2af3be')
+    @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):
@@ -266,21 +227,16 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="delete_route_target")
-    @idempotent_id('dfaa58f9-ec29-4d51-a475-870fac08908d')
+    @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)
@@ -300,22 +256,18 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="list_route_aggregates")
-    @idempotent_id('15f2c30c-4404-4228-94a0-86c5ec5cf62e')
+    @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="Contrail",
                                  rules="show_route_aggregate")
-    @idempotent_id('c8edee30-81c4-44e2-8485-055bed853384')
+    @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(
@@ -323,21 +275,17 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="create_route_aggregates")
-    @idempotent_id('7553a54f-e41c-4555-b745-a858c5a70690')
+    @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="Contrail",
                                  rules="update_route_aggregate")
-    @idempotent_id('de1e6102-0bc6-4f9b-a354-48eb051ab5e4')
+    @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):
@@ -347,11 +295,9 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="delete_route_aggregate")
-    @idempotent_id('e16dbdc6-d7cf-43c7-af9d-bd76cc220200')
+    @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 20724fb..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):
@@ -143,21 +138,17 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="list_physical_routers")
-    @idempotent_id('349ac042-b922-4727-9e1b-8f363ee343f3')
+    @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="Contrail",
                                  rules="create_physical_routers")
-    @idempotent_id('d0b7449e-9037-4f9f-8c7e-9f364c95f18a')
+    @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):
@@ -165,11 +156,9 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="show_physical_router")
-    @idempotent_id('6dfc53f4-a884-46d5-b303-22ba59c116f4')
+    @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(
@@ -179,11 +168,9 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="update_physical_router")
-    @idempotent_id('c270f369-8cd7-4ee3-8ab1-4580c3138a5c')
+    @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')
@@ -196,11 +183,9 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="delete_physical_router")
-    @idempotent_id('eeded742-6a8d-4e88-bfa8-fe32db463c53')
+    @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(
@@ -210,21 +195,17 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="list_bgp_routers")
-    @idempotent_id('49bfb461-f99e-4585-b051-e20a3c937589')
+    @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="Contrail",
                                  rules="create_bgp_routers")
-    @idempotent_id('7567974c-040e-4edd-b3a1-c633aa9651cb')
+    @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):
@@ -232,11 +213,9 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="show_bgp_router")
-    @idempotent_id('0d3ad424-18c9-4d96-8708-fa1ebd45594b')
+    @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']
@@ -245,11 +224,9 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="update_bgp_router")
-    @idempotent_id('dc50e7c5-7614-4281-8a66-282c52f3c769')
+    @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')
@@ -261,11 +238,9 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="delete_bgp_router")
-    @idempotent_id('f14aee72-cad4-4c3e-8eea-7886a81abb24')
+    @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']
@@ -274,21 +249,17 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="list_global_vrouter_configs")
-    @idempotent_id('4af768d1-3cbe-4aff-bcbc-0e045cac3277')
+    @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="Contrail",
                                  rules="create_global_vrouter_configs")
-    @idempotent_id('e13d800f-9304-4a06-9bf1-ad08345a13a8')
+    @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):
@@ -296,11 +267,9 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="show_global_vrouter_config")
-    @idempotent_id('3bb6f4e1-fd3f-4338-8392-f7f80974a80e')
+    @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(
@@ -311,11 +280,9 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="update_global_vrouter_config")
-    @idempotent_id('36fcdd51-c42b-4e67-8c26-73d4cde47507')
+    @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(
@@ -329,11 +296,9 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="delete_global_vrouter_config")
-    @idempotent_id('4f3d59e8-3dac-4346-9d13-5ebe5ad8f6cf')
+    @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(
@@ -344,42 +309,34 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="list_logical_routers")
-    @idempotent_id('674bf3de-a9e5-45c2-921b-b89db73a2abe')
+    @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="Contrail",
                                  rules="create_logical_routers")
-    @idempotent_id('610f051b-8eba-4d3a-ba43-91386bfc0e52')
+    @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="Contrail",
                                  rules="show_logical_router")
-    @idempotent_id('992841d4-0d5d-4d85-b513-049b33e2a2e2')
+    @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="Contrail",
                                  rules="update_logical_router")
-    @idempotent_id('518197bf-5233-4059-9021-5d7ecc74718e')
+    @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):
@@ -389,32 +346,26 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="delete_logical_router")
-    @idempotent_id('70448b9c-4444-45e0-b307-7bff4dc075b1')
+    @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="Contrail",
                                  rules="list_virtual_routers")
-    @idempotent_id('604dc476-732e-4890-8665-a497360f5475')
+    @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="Contrail",
                                  rules="create_virtual_routers")
-    @idempotent_id('114beb14-45c0-4714-a407-d160bb102022')
+    @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):
@@ -422,11 +373,9 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="show_virtual_router")
-    @idempotent_id('258fe4e0-3e39-460f-aafa-e3b53c96e534')
+    @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(
@@ -436,11 +385,9 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="update_virtual_router")
-    @idempotent_id('d1c72191-2068-4552-a78f-038cdd4c9c1d')
+    @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')
@@ -453,11 +400,9 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="delete_virtual_router")
-    @idempotent_id('efbe25d6-8763-42d4-baf6-9f342e710144')
+    @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 8118b2b..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):
@@ -63,53 +59,43 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="list_routing_instances")
-    @idempotent_id('054c56ba-76b2-4161-a702-40301d8de085')
+    @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="Contrail",
                                  rules="create_routing_instances")
-    @idempotent_id('3d44a46b-5436-43a8-b2f7-8581f0f04dbc')
+    @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="Contrail",
                                  rules="show_routing_instance")
-    @idempotent_id('161abb37-6037-422b-b453-108a5d10caca')
+    @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="Contrail",
                                  rules="delete_routing_instance")
-    @idempotent_id('1d3af01e-01bf-4347-a9bc-633732339e0e')
+    @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="Contrail",
                                  rules="update_routing_instance")
-    @idempotent_id('ebcfd442-2a26-4954-968b-e17e414ed0d1')
+    @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 44bdea5..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')
@@ -60,53 +55,43 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="list_routing_policys")
-    @idempotent_id('fe25a306-bc4f-42b3-91ca-38df01e35345')
+    @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="Contrail",
                                  rules="create_routing_policys")
-    @idempotent_id('f8ca5e30-8bb3-410f-8618-8fdca70bda06')
+    @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="Contrail",
                                  rules="show_routing_policy")
-    @idempotent_id('3421e84e-3e2a-452a-9a26-b2caf00b1cbc')
+    @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="Contrail",
                                  rules="update_routing_policy")
-    @idempotent_id('9fc1f44f-c8e2-4f5a-8239-e9b783f55d94')
+    @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="Contrail",
                                  rules="delete_routing_policy")
-    @idempotent_id('24f1cd7a-2917-4b81-a0a3-a40ed2d40c7d')
+    @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 452a7f6..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)
@@ -56,22 +51,18 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="list_security_groups")
-    @idempotent_id('a13cc1d5-f562-4b68-b732-980deb3cddf4')
+    @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="Contrail",
                                  rules="show_security_group")
-    @idempotent_id('c7ca1781-08ae-4fa2-bd6d-1f369950c4c4')
+    @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):
@@ -79,11 +70,9 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="delete_security_group")
-    @idempotent_id('e682d7b4-deb8-4b5c-9c9b-1e1ada827b40')
+    @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):
@@ -91,21 +80,17 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="create_security_groups")
-    @idempotent_id('63a2ff14-7869-40a2-962a-d65752de5651')
+    @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="Contrail",
                                  rules="update_security_group")
-    @idempotent_id('cf9aafe2-fffb-4028-8fd7-4d6634e144e7')
+    @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 4ec7a70..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')
@@ -77,21 +73,17 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="list_service_appliances")
-    @idempotent_id('6b5fc17c-34e6-4d21-a53e-a0dfe69afd31')
+    @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="Contrail",
                                  rules="create_service_appliances")
-    @idempotent_id('0563c0c8-b986-466e-8540-aa8ad7a10367')
+    @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 = \
@@ -101,11 +93,9 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="show_service_appliance")
-    @idempotent_id('ea30dcfe-8657-4a7d-9cf1-3176d334bf27')
+    @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']
@@ -118,11 +108,9 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="update_service_appliance")
-    @idempotent_id('a54ca33a-8590-4844-96d7-b96882b59e86')
+    @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 = \
@@ -136,11 +124,9 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="delete_service_appliance")
-    @idempotent_id('362deff5-7b72-4929-ba81-972cfcfa1309')
+    @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 = \
@@ -152,21 +138,17 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="list_service_appliance_sets")
-    @idempotent_id('c1e74da9-00b6-4c88-adda-2ce49094e570')
+    @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="Contrail",
                                  rules="create_service_appliance_sets")
-    @idempotent_id('eb00d6cf-590f-41bf-8ee4-5be625d9cb93')
+    @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):
@@ -174,11 +156,9 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="show_service_appliance_set")
-    @idempotent_id('dd35dd04-e7d9-46bb-8f36-26835f122572')
+    @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(
@@ -189,11 +169,9 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="update_service_appliance_set")
-    @idempotent_id('952f063b-bc71-4f62-83b1-719bce5ad4ed')
+    @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(
@@ -206,11 +184,9 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="delete_service_appliance_set")
-    @idempotent_id('7b56ce24-da1d-4565-bd22-c58dc57d7045')
+    @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 e39fce1..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')
@@ -88,31 +84,25 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="list_service_templates")
-    @idempotent_id('841b1d32-4308-4fb6-852a-41bdd8c56c37')
+    @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="Contrail",
                                  rules="create_service_templates")
-    @idempotent_id('3f02d14a-31e2-4476-821f-87d0cc42d9fb')
+    @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="Contrail",
                                  rules="show_service_template")
-    @idempotent_id('1f15d734-2cc6-4ded-916e-134286c6b87b')
+    @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(
@@ -120,11 +110,9 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="update_service_template")
-    @idempotent_id('3549debd-4c7a-4574-8d11-4190c8530a23')
+    @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):
@@ -134,11 +122,9 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="delete_service_template")
-    @idempotent_id('e86cabd2-5b7e-4ee8-86ec-db52619b852b')
+    @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(
@@ -146,31 +132,25 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="list_service_health_checks")
-    @idempotent_id('5210d6ca-9a38-4b6b-b5b7-f836c3846079')
+    @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="Contrail",
                                  rules="create_service_health_checks")
-    @idempotent_id('77716feb-0d05-4cfd-8a17-79cf0b19ed3c')
+    @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="Contrail",
                                  rules="show_service_health_check")
-    @idempotent_id('80db4445-8d6c-4c8f-aa25-d4ea53d32d2c')
+    @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(
@@ -178,11 +158,9 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="update_service_health_check")
-    @idempotent_id('68fb1510-4b76-40cc-8979-e56e537229d2')
+    @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):
@@ -192,11 +170,9 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="delete_service_health_check")
-    @idempotent_id('2dce3942-402a-48a4-b682-fdc425d3d935')
+    @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(
@@ -204,21 +180,17 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="create_service_instances")
-    @idempotent_id('1469c71e-f6f5-419f-9672-c3c67f879704')
+    @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="Contrail",
                                  rules="show_service_instance")
-    @idempotent_id('ea5b716d-5de8-4c71-becd-f1501c22f0df')
+    @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(
@@ -226,11 +198,9 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="delete_service_instance")
-    @idempotent_id('74934833-29cd-416b-a5a6-273f733d058a')
+    @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(
@@ -238,21 +208,17 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="list_service_instances")
-    @idempotent_id('da6016a3-a2a8-42a8-b064-c124c22fef6f')
+    @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="Contrail",
                                  rules="update_service_instance")
-    @idempotent_id('a6237b99-336b-42db-a8eb-9604a1b08fc6')
+    @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 34c53f7..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 = {
@@ -57,53 +52,43 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="list_subnets")
-    @idempotent_id('ddd1d9ae-cf2f-4a74-98ba-b0f481f27977')
+    @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="Contrail",
                                  rules="create_subnets")
-    @idempotent_id('ee0cb904-d162-44a4-b7b0-a7451f667ed5')
+    @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="Contrail",
                                  rules="show_subnet")
-    @idempotent_id('994618f2-5b40-460c-a6a8-6479bc15bf80')
+    @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="Contrail",
                                  rules="update_subnet")
-    @idempotent_id('565e44c9-eb9b-4ae6-9ebb-db422a9751ee')
+    @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="Contrail",
                                  rules="delete_subnet")
-    @idempotent_id('a733b913-7a88-45d9-ac0a-d858fa3dc662')
+    @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 6b8f273..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"
@@ -78,31 +73,25 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="list_virtual_DNSs")
-    @idempotent_id('8401d690-afdf-4b6e-ad60-b9363a8cfb1d')
+    @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="Contrail",
                                  rules="create_virtual_DNSs")
-    @idempotent_id('a7dd2c9e-e1eb-4dc4-ac70-4d48a291a3bf')
+    @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="Contrail",
                                  rules="show_virtual_DNS")
-    @idempotent_id('ffc0fc82-3bff-48ab-b65a-3d90b4a3154d')
+    @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(
@@ -110,11 +99,9 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="delete_virtual_DNS")
-    @idempotent_id('4793caa1-7707-4123-b1b4-c3feae91312f')
+    @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(
@@ -122,11 +109,9 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="update_virtual_DNS")
-    @idempotent_id('2bc43935-57c1-4bf6-9868-78ccfce164bb')
+    @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,
@@ -140,21 +125,17 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="list_virtual_DNS_records")
-    @idempotent_id('e9103999-2f02-4f04-a8a0-906ca4fb394d')
+    @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="Contrail",
                                  rules="create_virtual_DNS_records")
-    @idempotent_id('bd9f3992-0ce4-4477-97a0-1271bc8ad9ef')
+    @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):
@@ -162,11 +143,9 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="show_virtual_DNS_record")
-    @idempotent_id('fa3d1a2b-d788-4623-89a4-3a9ed1db7a7d')
+    @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)
@@ -176,11 +155,9 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="delete_virtual_DNS_record")
-    @idempotent_id('de31e867-c997-4b4c-a095-43c647f5c192')
+    @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)
@@ -190,11 +167,9 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="update_virtual_DNS_record")
-    @idempotent_id('65acef26-646f-4b36-923c-8a1d07e90c5c')
+    @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 41def77..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')
@@ -58,53 +53,43 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="list_virtual_ips")
-    @idempotent_id('92303eee-bd96-48bc-a02c-39950bd19a21')
+    @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="Contrail",
                                  rules="create_virtual_ips")
-    @idempotent_id('e0070888-995d-46ab-91fc-db1412eba2f7')
+    @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="Contrail",
                                  rules="show_virtual_ip")
-    @idempotent_id('2a4b3abd-c6f7-4d82-aa31-02e53d2a8fb9')
+    @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="Contrail",
                                  rules="update_virtual_ip")
-    @idempotent_id('0e975c92-62dc-4e6e-82cc-8cf37da3c5b2')
+    @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="Contrail",
                                  rules="delete_virtual_ip")
-    @idempotent_id('fd0b2635-36bd-4345-97b7-9c0a57372eba')
+    @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 609256a..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']
 
@@ -105,54 +100,44 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="list_virtual_machine_interfaces")
-    @idempotent_id('e27d1fae-7324-4ef3-87b1-e7f519b1e2a7')
+    @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="Contrail",
                                  rules="create_virtual_machine_interfaces")
-    @idempotent_id('d8a3a524-d61b-4bcb-8146-c5d4f308df8e')
+    @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="Contrail",
                                  rules="show_virtual_machine_interface")
-    @idempotent_id('3f17125a-9060-4c4a-a23f-0fe2aba2ccef')
+    @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="Contrail",
                                  rules="delete_virtual_machine_interface")
-    @idempotent_id('ce7f9471-ba1b-40d2-94f1-bdd0c610e22f')
+    @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="Contrail",
                                  rules="update_virtual_machine_interface")
-    @idempotent_id('7ca3046a-6245-4c15-914b-5a8ecdbeee11')
+    @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 5d5d774..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):
@@ -72,31 +67,25 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="list_virtual_networks")
-    @idempotent_id('375ebc8d-dc52-4d9c-877b-85aba35b1539')
+    @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="Contrail",
                                  rules="create_virtual_networks")
-    @idempotent_id('375ebc8d-dc52-4d9c-877b-96aba35b2530')
+    @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="Contrail",
                                  rules="update_virtual_network")
-    @idempotent_id('375ebc8d-dc52-4d9c-566b-150a025c1237')
+    @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):
@@ -105,22 +94,18 @@
 
     @rbac_rule_validation.action(service="Contrail",
                                  rules="delete_virtual_network")
-    @idempotent_id('375ebc8d-dc52-4d9c-877b-17bcb53c3641')
+    @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="Contrail",
                                  rules="show_virtual_network")
-    @idempotent_id('375ebc8d-dc52-4d9c-877b-27c1a1242a81')
+    @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)
