Merge "Use Tempest decorators in tempest.common.utils"
diff --git a/patrole_tempest_plugin/tests/api/identity/rbac_base.py b/patrole_tempest_plugin/tests/api/identity/rbac_base.py
index 8273022..a99365d 100644
--- a/patrole_tempest_plugin/tests/api/identity/rbac_base.py
+++ b/patrole_tempest_plugin/tests/api/identity/rbac_base.py
@@ -41,34 +41,6 @@
         cls.rbac_utils = rbac_utils.RbacUtils(cls)
 
     @classmethod
-    def resource_setup(cls):
-        super(BaseIdentityRbacTest, cls).resource_setup()
-        cls.endpoints = []
-        cls.roles = []
-        cls.services = []
-        cls.users = []
-
-    @classmethod
-    def resource_cleanup(cls):
-        for endpoint in cls.endpoints:
-            test_utils.call_and_ignore_notfound_exc(
-                cls.endpoints_client.delete_endpoint, endpoint['id'])
-
-        for role in cls.roles:
-            test_utils.call_and_ignore_notfound_exc(
-                cls.roles_client.delete_role, role['id'])
-
-        for service in cls.services:
-            test_utils.call_and_ignore_notfound_exc(
-                cls.services_client.delete_service, service['id'])
-
-        for user in cls.users:
-            test_utils.call_and_ignore_notfound_exc(
-                cls.users_client.delete_user, user['id'])
-
-        super(BaseIdentityRbacTest, cls).resource_cleanup()
-
-    @classmethod
     def setup_test_endpoint(cls, service=None):
         """Creates a service and an endpoint for test."""
         interface = 'public'
@@ -89,7 +61,9 @@
             params['url'] = url
 
         endpoint = cls.endpoints_client.create_endpoint(**params)['endpoint']
-        cls.endpoints.append(endpoint)
+        cls.addClassResourceCleanup(
+            test_utils.call_and_ignore_notfound_exc,
+            cls.endpoints_client.delete_endpoint, endpoint['id'])
 
         return endpoint
 
@@ -98,7 +72,9 @@
         """Set up a test role."""
         name = data_utils.rand_name(cls.__name__ + '-test_role')
         role = cls.roles_client.create_role(name=name)['role']
-        cls.roles.append(role)
+        cls.addClassResourceCleanup(
+            test_utils.call_and_ignore_notfound_exc,
+            cls.roles_client.delete_role, role['id'])
 
         return role
 
@@ -119,7 +95,9 @@
         elif cls.identity_version == 'v3':
             service = service['service']
 
-        cls.services.append(service)
+        cls.addClassResourceCleanup(
+            test_utils.call_and_ignore_notfound_exc,
+            cls.services_client.delete_service, service['id'])
 
         return service
 
@@ -134,7 +112,9 @@
             email=email,
             password=password,
             **kwargs)['user']
-        cls.users.append(user)
+        cls.addClassResourceCleanup(
+            test_utils.call_and_ignore_notfound_exc,
+            cls.users_client.delete_user, user['id'])
 
         return user
 
diff --git a/patrole_tempest_plugin/tests/api/image/test_image_resource_types_rbac.py b/patrole_tempest_plugin/tests/api/image/test_image_resource_types_rbac.py
index 456e10b..701e345 100644
--- a/patrole_tempest_plugin/tests/api/image/test_image_resource_types_rbac.py
+++ b/patrole_tempest_plugin/tests/api/image/test_image_resource_types_rbac.py
@@ -31,13 +31,9 @@
         cls.namespaces_client.create_namespace(
             namespace=cls.namespace_name,
             protected=False)
-
-    @classmethod
-    def resource_cleanup(cls):
-        test_utils.call_and_ignore_notfound_exc(
-            cls.namespaces_client.delete_namespace,
-            cls.namespace_name)
-        super(ImageResourceTypesRbacTest, cls).resource_cleanup()
+        cls.addClassResourceCleanup(
+            test_utils.call_and_ignore_notfound_exc,
+            cls.namespaces_client.delete_namespace, cls.namespace_name)
 
     @rbac_rule_validation.action(service="glance",
                                  rule="list_metadef_resource_types")
diff --git a/patrole_tempest_plugin/tests/api/network/test_floating_ips_rbac.py b/patrole_tempest_plugin/tests/api/network/test_floating_ips_rbac.py
index 67b32a2..dc674d1 100644
--- a/patrole_tempest_plugin/tests/api/network/test_floating_ips_rbac.py
+++ b/patrole_tempest_plugin/tests/api/network/test_floating_ips_rbac.py
@@ -30,10 +30,15 @@
     @classmethod
     def resource_setup(cls):
         super(FloatingIpsRbacTest, cls).resource_setup()
-
-        # Create an external network for floating ip creation
+        # Create an external network for floating ip creation.
         cls.fip_extnet = cls.create_network(**{'router:external': True})
+        # Update router:external attribute to False for proper subnet resource
+        # cleanup by base class.
         cls.fip_extnet_id = cls.fip_extnet['id']
+        cls.addClassResourceCleanup(
+            test_utils.call_and_ignore_notfound_exc,
+            cls.networks_client.update_network, cls.fip_extnet_id,
+            **{'router:external': False})
 
         # Create a subnet for the external network
         cls.cidr = netaddr.IPNetwork(CONF.network.project_network_cidr)
@@ -41,14 +46,6 @@
                           cidr=cls.cidr,
                           mask_bits=24)
 
-    @classmethod
-    def resource_cleanup(cls):
-        # Update router:external attribute to False for proper subnet resource
-        # cleanup by base class
-        cls.networks_client.update_network(cls.fip_extnet_id,
-                                           **{'router:external': False})
-        super(FloatingIpsRbacTest, cls).resource_cleanup()
-
     def _create_floatingip(self, floating_ip_address=None):
         if floating_ip_address is not None:
             body = self.floating_ips_client.create_floatingip(
diff --git a/patrole_tempest_plugin/tests/api/network/test_metering_label_rules_rbac.py b/patrole_tempest_plugin/tests/api/network/test_metering_label_rules_rbac.py
index d213b9e..5ffc966 100644
--- a/patrole_tempest_plugin/tests/api/network/test_metering_label_rules_rbac.py
+++ b/patrole_tempest_plugin/tests/api/network/test_metering_label_rules_rbac.py
@@ -44,15 +44,11 @@
     @classmethod
     def resource_setup(cls):
         super(MeteringLabelRulesRbacTest, cls).resource_setup()
-
         body = cls.metering_labels_client.create_metering_label(
             name=data_utils.rand_name(cls.__name__))
         cls.label = body['metering_label']
-
-    @classmethod
-    def resource_cleanup(cls):
-        cls.metering_labels_client.delete_metering_label(cls.label['id'])
-        super(MeteringLabelRulesRbacTest, cls).resource_cleanup()
+        cls.addClassResourceCleanup(
+            cls.metering_labels_client.delete_metering_label, cls.label['id'])
 
     def _create_metering_label_rule(self, label):
         body = self.metering_label_rules_client.create_metering_label_rule(
diff --git a/patrole_tempest_plugin/tests/api/network/test_security_groups_rbac.py b/patrole_tempest_plugin/tests/api/network/test_security_groups_rbac.py
index 3a8b7bd..3ed23fd 100644
--- a/patrole_tempest_plugin/tests/api/network/test_security_groups_rbac.py
+++ b/patrole_tempest_plugin/tests/api/network/test_security_groups_rbac.py
@@ -37,14 +37,9 @@
         secgroup_name = data_utils.rand_name(cls.__name__ + '-secgroup')
         cls.secgroup = cls.security_groups_client.create_security_group(
             name=secgroup_name)['security_group']
-
-    @classmethod
-    def resource_cleanup(cls):
-        # Clean up security group
-        test_utils.call_and_ignore_notfound_exc(
+        cls.addClassResourceCleanup(
             cls.security_groups_client.delete_security_group,
             cls.secgroup['id'])
-        super(SecGroupRbacTest, cls).resource_cleanup()
 
     def _create_security_group(self):
         # Create a security group