Merge "Properly quote TXT/SPF sample data"
diff --git a/designate_tempest_plugin/tests/api/v2/test_recordset.py b/designate_tempest_plugin/tests/api/v2/test_recordset.py
index 631c34e..aadb823 100644
--- a/designate_tempest_plugin/tests/api/v2/test_recordset.py
+++ b/designate_tempest_plugin/tests/api/v2/test_recordset.py
@@ -40,11 +40,11 @@
 
     @classmethod
     def resource_cleanup(cls):
-        super(BaseRecordsetsTest, cls).resource_cleanup()
-
         cls.zone_client.delete_zone(
             cls.zone['id'], ignore_errors=lib_exc.NotFound)
 
+        super(BaseRecordsetsTest, cls).resource_cleanup()
+
 
 @ddt.ddt
 class RecordsetsTest(BaseRecordsetsTest):
@@ -244,7 +244,7 @@
     def test_get_nonexistent_recordset(self):
         LOG.info('Create a zone')
         _, zone = self.zone_client.create_zone()
-        self.addCleanup(self.zone_client.delete_zone, zone['id'])
+        self.addCleanup(self.wait_zone_delete, self.zone_client, zone['id'])
 
         LOG.info('Attempt to get an invalid Recordset')
         with self.assertRaisesDns(
@@ -255,7 +255,7 @@
     def test_get_nonexistent_recordset_invalid_id(self):
         LOG.info('Create a zone')
         _, zone = self.zone_client.create_zone()
-        self.addCleanup(self.zone_client.delete_zone, zone['id'])
+        self.addCleanup(self.wait_zone_delete, self.zone_client, zone['id'])
 
         LOG.info('Attempt to get an invalid Recordset')
         with self.assertRaisesDns(lib_exc.BadRequest, 'invalid_uuid', 400):
@@ -265,7 +265,7 @@
     def test_update_nonexistent_recordset(self):
         LOG.info('Create a zone')
         _, zone = self.zone_client.create_zone()
-        self.addCleanup(self.zone_client.delete_zone, zone['id'])
+        self.addCleanup(self.wait_zone_delete, self.zone_client, zone['id'])
 
         recordset_data = data_utils.rand_recordset_data('A', zone['name'])
 
@@ -279,7 +279,7 @@
     def test_update_nonexistent_recordset_invalid_id(self):
         LOG.info('Create a zone')
         _, zone = self.zone_client.create_zone()
-        self.addCleanup(self.zone_client.delete_zone, zone['id'])
+        self.addCleanup(self.wait_zone_delete, self.zone_client, zone['id'])
 
         recordset_data = data_utils.rand_recordset_data('A', zone['name'])
 
@@ -292,7 +292,7 @@
     def test_delete_nonexistent_recordset(self):
         LOG.info('Create a zone')
         _, zone = self.zone_client.create_zone()
-        self.addCleanup(self.zone_client.delete_zone, zone['id'])
+        self.addCleanup(self.wait_zone_delete, self.zone_client, zone['id'])
 
         LOG.info('Attempt to delete an invalid Recordset')
         with self.assertRaisesDns(
@@ -304,7 +304,7 @@
     def test_delete_nonexistent_recordset_invalid_id(self):
         LOG.info('Create a zone')
         _, zone = self.zone_client.create_zone()
-        self.addCleanup(self.zone_client.delete_zone, zone['id'])
+        self.addCleanup(self.wait_zone_delete, self.zone_client, zone['id'])
 
         LOG.info('Attempt to get an invalid Recordset')
         with self.assertRaisesDns(lib_exc.BadRequest, 'invalid_uuid', 400):
@@ -363,7 +363,7 @@
 
         LOG.info('Create another zone')
         _, zone2 = self.zone_client.create_zone()
-        self.addCleanup(self.zone_client.delete_zone, zone2['id'])
+        self.addCleanup(self.wait_zone_delete, self.zone_client, zone2['id'])
 
         LOG.info('Create another Recordset')
         recordset_data = data_utils.rand_recordset_data(
@@ -392,7 +392,7 @@
     def test_list_zones_recordsets_zone_names(self):
         LOG.info('Create another zone')
         _, zone2 = self.zone_client.create_zone()
-        self.addCleanup(self.zone_client.delete_zone, zone2['id'])
+        self.addCleanup(self.wait_zone_delete, self.zone_client, zone2['id'])
 
         LOG.info('List recordsets')
         _, body = self.client.list_zones_recordsets()
@@ -443,7 +443,7 @@
 
         LOG.info('Create a zone as a default user')
         _, zone = self.zone_client.create_zone(name='a.b.' + zone_name)
-        self.addCleanup(self.zone_client.delete_zone, zone['id'])
+        self.addCleanup(self.wait_zone_delete, self.zone_client, zone['id'])
 
         rrset_data = data_utils.rand_recordset_data(
             record_type='A', zone_name=zone_name)
@@ -458,6 +458,12 @@
     def test_no_create_recordset_via_alt_domain(self):
         _, zone = self.zone_client.create_zone()
         _, alt_zone = self.alt_zone_client.create_zone()
+        self.addCleanup(self.wait_zone_delete,
+                        self.zone_client,
+                        zone['id'])
+        self.addCleanup(self.wait_zone_delete,
+                        self.alt_zone_client,
+                        alt_zone['id'])
 
         # alt attempts to create record with name A12345.{zone}
         recordset_data = data_utils.rand_recordset_data(
diff --git a/designate_tempest_plugin/tests/api/v2/test_recordset_validation.py b/designate_tempest_plugin/tests/api/v2/test_recordset_validation.py
index a155f30..36c68ff 100644
--- a/designate_tempest_plugin/tests/api/v2/test_recordset_validation.py
+++ b/designate_tempest_plugin/tests/api/v2/test_recordset_validation.py
@@ -60,7 +60,9 @@
             zone_data = data_utils.rand_zone_data()
             resp, body = self.zones_client.create_zone(**zone_data)
             self._zone = body
-            self.addCleanup(self.zones_client.delete_zone, body['id'])
+            self.addCleanup(self.wait_zone_delete,
+                            self.zones_client,
+                            body['id'])
         return self._zone
 
     def create_recordset(self, data):
diff --git a/designate_tempest_plugin/tests/api/v2/test_transfer_accepts.py b/designate_tempest_plugin/tests/api/v2/test_transfer_accepts.py
index 28e687f..70c9e30 100644
--- a/designate_tempest_plugin/tests/api/v2/test_transfer_accepts.py
+++ b/designate_tempest_plugin/tests/api/v2/test_transfer_accepts.py
@@ -43,7 +43,7 @@
     def test_create_transfer_accept(self):
         LOG.info('Create a zone')
         _, zone = self.zone_client.create_zone()
-        self.addCleanup(self.zone_client.delete_zone, zone['id'])
+        self.addCleanup(self.wait_zone_delete, self.zone_client, zone['id'])
 
         LOG.info('Create a zone transfer_request')
         _, transfer_request = self.request_client.create_transfer_request(
@@ -65,7 +65,7 @@
     def test_show_transfer_accept(self):
         LOG.info('Create a zone')
         _, zone = self.zone_client.create_zone()
-        self.addCleanup(self.zone_client.delete_zone, zone['id'])
+        self.addCleanup(self.wait_zone_delete, self.zone_client, zone['id'])
 
         LOG.info('Create a zone transfer_request')
         _, transfer_request = self.request_client.create_transfer_request(
diff --git a/designate_tempest_plugin/tests/api/v2/test_transfer_request.py b/designate_tempest_plugin/tests/api/v2/test_transfer_request.py
index 80a0e4a..bae2510 100644
--- a/designate_tempest_plugin/tests/api/v2/test_transfer_request.py
+++ b/designate_tempest_plugin/tests/api/v2/test_transfer_request.py
@@ -47,7 +47,7 @@
     def test_create_transfer_request(self):
         LOG.info('Create a zone')
         _, zone = self.zone_client.create_zone()
-        self.addCleanup(self.zone_client.delete_zone, zone['id'])
+        self.addCleanup(self.wait_zone_delete, self.zone_client, zone['id'])
 
         LOG.info('Create a zone transfer_request')
         _, transfer_request = self.client.create_transfer_request(zone['id'])
@@ -61,7 +61,7 @@
     def test_create_transfer_request_scoped(self):
         LOG.info('Create a zone')
         _, zone = self.zone_client.create_zone()
-        self.addCleanup(self.zone_client.delete_zone, zone['id'])
+        self.addCleanup(self.wait_zone_delete, self.zone_client, zone['id'])
 
         transfer_request_data = dns_data_utils.rand_transfer_request_data(
             target_project_id=self.os_alt.credentials.project_id)
@@ -79,7 +79,7 @@
     def test_create_transfer_request_empty_body(self):
         LOG.info('Create a zone')
         _, zone = self.zone_client.create_zone()
-        self.addCleanup(self.zone_client.delete_zone, zone['id'])
+        self.addCleanup(self.wait_zone_delete, self.zone_client, zone['id'])
         LOG.info('Create a zone transfer_request')
         _, transfer_request = self.client.create_transfer_request_empty_body(
             zone['id'])
@@ -93,7 +93,7 @@
     def test_show_transfer_request(self):
         LOG.info('Create a zone')
         _, zone = self.zone_client.create_zone()
-        self.addCleanup(self.zone_client.delete_zone, zone['id'])
+        self.addCleanup(self.wait_zone_delete, self.zone_client, zone['id'])
 
         LOG.info('Create a zone transfer_request')
         _, transfer_request = self.client.create_transfer_request(zone['id'])
@@ -113,7 +113,7 @@
         # the request.
         LOG.info('Create a zone')
         _, zone = self.zone_client.create_zone()
-        self.addCleanup(self.zone_client.delete_zone, zone['id'])
+        self.addCleanup(self.wait_zone_delete, self.zone_client, zone['id'])
 
         transfer_request_data = dns_data_utils.rand_transfer_request_data(
             target_project_id=self.os_alt.credentials.project_id)
@@ -137,7 +137,7 @@
     def test_delete_transfer_request(self):
         LOG.info('Create a zone')
         _, zone = self.zone_client.create_zone()
-        self.addCleanup(self.zone_client.delete_zone, zone['id'])
+        self.addCleanup(self.wait_zone_delete, self.zone_client, zone['id'])
 
         LOG.info('Create a transfer_request')
         _, transfer_request = self.client.create_transfer_request(zone['id'])
@@ -154,7 +154,7 @@
     def test_list_transfer_requests(self):
         LOG.info('Create a zone')
         _, zone = self.zone_client.create_zone()
-        self.addCleanup(self.zone_client.delete_zone, zone['id'])
+        self.addCleanup(self.wait_zone_delete, self.zone_client, zone['id'])
 
         LOG.info('Create a zone transfer_request')
         _, transfer_request = self.client.create_transfer_request(zone['id'])
@@ -170,7 +170,7 @@
     def test_update_transfer_request(self):
         LOG.info('Create a zone')
         _, zone = self.zone_client.create_zone()
-        self.addCleanup(self.zone_client.delete_zone, zone['id'])
+        self.addCleanup(self.wait_zone_delete, self.zone_client, zone['id'])
 
         LOG.info('Create a zone transfer_request')
         _, transfer_request = self.client.create_transfer_request(zone['id'])
diff --git a/designate_tempest_plugin/tests/api/v2/test_tsigkey.py b/designate_tempest_plugin/tests/api/v2/test_tsigkey.py
index a09cabb..77d3e13 100644
--- a/designate_tempest_plugin/tests/api/v2/test_tsigkey.py
+++ b/designate_tempest_plugin/tests/api/v2/test_tsigkey.py
@@ -45,7 +45,7 @@
     def test_create_tsigkey(self):
         LOG.info('Create a resource')
         _, zone = self.zone_client.create_zone()
-        self.addCleanup(self.zone_client.delete_zone, zone['id'])
+        self.addCleanup(self.wait_zone_delete, self.zone_client, zone['id'])
 
         tsigkey_data = {
                         "name": "Example tsigkey",
@@ -67,7 +67,7 @@
     def test_list_tsigkey(self):
         LOG.info('Create a resource')
         _, zone = self.zone_client.create_zone()
-        self.addCleanup(self.zone_client.delete_zone, zone['id'])
+        self.addCleanup(self.wait_zone_delete, self.zone_client, zone['id'])
         LOG.info('Create a tsigkey')
         _, tsigkey = self.admin_client.create_tsigkey(resource_id=zone['id'])
         self.addCleanup(self.admin_client.delete_tsigkey, tsigkey['id'])
@@ -78,7 +78,7 @@
     def test_show_tsigkey(self):
         LOG.info('Create a resource')
         _, zone = self.zone_client.create_zone()
-        self.addCleanup(self.zone_client.delete_zone, zone['id'])
+        self.addCleanup(self.wait_zone_delete, self.zone_client, zone['id'])
 
         LOG.info('Create a tsigkey')
         _, tsigkey = self.admin_client.create_tsigkey(resource_id=zone['id'])
@@ -94,7 +94,7 @@
     def test_update_tsigkey(self):
         LOG.info('Create a resource')
         _, zone = self.zone_client.create_zone()
-        self.addCleanup(self.zone_client.delete_zone, zone['id'])
+        self.addCleanup(self.wait_zone_delete, self.zone_client, zone['id'])
 
         LOG.info('Create a tsigkey')
         _, tsigkey = self.admin_client.create_tsigkey(resource_id=zone['id'])
@@ -119,7 +119,7 @@
     def test_delete_tsigkey(self):
         LOG.info('Create a resource')
         _, zone = self.zone_client.create_zone()
-        self.addCleanup(self.zone_client.delete_zone, zone['id'])
+        self.addCleanup(self.wait_zone_delete, self.zone_client, zone['id'])
 
         LOG.info('Create a tsigkey')
         _, tsigkey = self.admin_client.create_tsigkey(resource_id=zone['id'])
diff --git a/designate_tempest_plugin/tests/api/v2/test_zones.py b/designate_tempest_plugin/tests/api/v2/test_zones.py
index 74b297a..ee31b9b 100644
--- a/designate_tempest_plugin/tests/api/v2/test_zones.py
+++ b/designate_tempest_plugin/tests/api/v2/test_zones.py
@@ -44,7 +44,7 @@
     def test_create_zone(self):
         LOG.info('Create a zone')
         _, zone = self.client.create_zone()
-        self.addCleanup(self.client.delete_zone, zone['id'])
+        self.addCleanup(self.wait_zone_delete, self.client, zone['id'])
 
         LOG.info('Ensure we respond with CREATE+PENDING')
         self.assertEqual('CREATE', zone['action'])
@@ -54,7 +54,7 @@
     def test_show_zone(self):
         LOG.info('Create a zone')
         _, zone = self.client.create_zone()
-        self.addCleanup(self.client.delete_zone, zone['id'])
+        self.addCleanup(self.wait_zone_delete, self.client, zone['id'])
 
         LOG.info('Fetch the zone')
         _, body = self.client.show_zone(zone['id'])
@@ -67,7 +67,7 @@
     def test_delete_zone(self):
         LOG.info('Create a zone')
         _, zone = self.client.create_zone()
-        self.addCleanup(self.client.delete_zone, zone['id'],
+        self.addCleanup(self.wait_zone_delete, self.client, zone['id'],
                         ignore_errors=lib_exc.NotFound)
 
         LOG.info('Delete the zone')
@@ -81,7 +81,7 @@
     def test_list_zones(self):
         LOG.info('Create a zone')
         _, zone = self.client.create_zone()
-        self.addCleanup(self.client.delete_zone, zone['id'])
+        self.addCleanup(self.wait_zone_delete, self.client, zone['id'])
 
         LOG.info('List zones')
         _, body = self.client.list_zones()
@@ -94,7 +94,7 @@
     def test_update_zone(self):
         LOG.info('Create a zone')
         _, zone = self.client.create_zone()
-        self.addCleanup(self.client.delete_zone, zone['id'])
+        self.addCleanup(self.wait_zone_delete, self.client, zone['id'])
 
         # Generate a random description
         description = data_utils.rand_name()
@@ -138,7 +138,7 @@
     def test_get_other_tenant_zone(self):
         LOG.info('Create a zone as a user')
         _, zone = self.client.create_zone()
-        self.addCleanup(self.client.delete_zone, zone['id'])
+        self.addCleanup(self.wait_zone_delete, self.client, zone['id'])
 
         LOG.info('Fetch the zone as an admin')
         _, body = self.admin_client.show_zone(
@@ -168,7 +168,7 @@
     def test_no_create_duplicate_domain(self):
         LOG.info('Create a zone as a default user')
         _, zone = self.client.create_zone()
-        self.addCleanup(self.client.delete_zone, zone['id'])
+        self.addCleanup(self.wait_zone_delete, self.client, zone['id'])
 
         LOG.info('Create a zone as an default with existing domain')
         self.assertRaises(lib_exc.Conflict,
@@ -182,7 +182,7 @@
     def test_no_create_subdomain_by_alt_user(self):
         LOG.info('Create a zone as a default user')
         _, zone = self.client.create_zone()
-        self.addCleanup(self.client.delete_zone, zone['id'])
+        self.addCleanup(self.wait_zone_delete, self.client, zone['id'])
 
         LOG.info('Create a zone as an alt user with existing subdomain')
         self.assertRaises(lib_exc.Forbidden,
@@ -196,7 +196,7 @@
 
         LOG.info('Create a zone as a default user')
         _, zone = self.client.create_zone(name='a.b.' + zone_name)
-        self.addCleanup(self.client.delete_zone, zone['id'])
+        self.addCleanup(self.wait_zone_delete, self.client, zone['id'])
 
         LOG.info('Create a zone as an alt user with existing superdomain')
         self.assertRaises(lib_exc.Forbidden,
diff --git a/designate_tempest_plugin/tests/api/v2/test_zones_exports.py b/designate_tempest_plugin/tests/api/v2/test_zones_exports.py
index 881f15c..13cd077 100644
--- a/designate_tempest_plugin/tests/api/v2/test_zones_exports.py
+++ b/designate_tempest_plugin/tests/api/v2/test_zones_exports.py
@@ -44,10 +44,11 @@
     def test_create_zone_export(self):
         LOG.info('Create a zone')
         _, zone = self.zone_client.create_zone()
-        self.addCleanup(self.zone_client.delete_zone, zone['id'])
+        self.addCleanup(self.wait_zone_delete, self.zone_client, zone['id'])
 
         LOG.info('Create a zone export')
         _, zone_export = self.client.create_zone_export(zone['id'])
+        self.addCleanup(self.client.delete_zone_export, zone_export['id'])
 
         LOG.info('Ensure we respond with PENDING')
         self.assertEqual('PENDING', zone_export['status'])
@@ -57,10 +58,11 @@
     def test_show_zone_export(self):
         LOG.info('Create a zone')
         _, zone = self.zone_client.create_zone()
-        self.addCleanup(self.zone_client.delete_zone, zone['id'])
+        self.addCleanup(self.wait_zone_delete, self.zone_client, zone['id'])
 
         LOG.info('Create a zone export')
         resp, zone_export = self.client.create_zone_export(zone['id'])
+        self.addCleanup(self.client.delete_zone_export, zone_export['id'])
 
         LOG.info('Re-Fetch the zone export')
         _, body = self.client.show_zone_export(zone_export['id'])
@@ -72,7 +74,7 @@
     def test_delete_zone_export(self):
         LOG.info('Create a zone')
         _, zone = self.zone_client.create_zone()
-        self.addCleanup(self.zone_client.delete_zone, zone['id'],
+        self.addCleanup(self.wait_zone_delete, self.zone_client, zone['id'],
                         ignore_errors=lib_exc.NotFound)
 
         LOG.info('Create a zone export')
@@ -89,9 +91,10 @@
     def test_list_zone_exports(self):
         LOG.info('Create a zone')
         _, zone = self.zone_client.create_zone()
-        self.addCleanup(self.zone_client.delete_zone, zone['id'])
+        self.addCleanup(self.wait_zone_delete, self.zone_client, zone['id'])
 
         _, export = self.client.create_zone_export(zone['id'])
+        self.addCleanup(self.client.delete_zone_export, export['id'])
 
         LOG.info('List zone exports')
         _, body = self.client.list_zone_exports()
diff --git a/designate_tempest_plugin/tests/api/v2/test_zones_imports.py b/designate_tempest_plugin/tests/api/v2/test_zones_imports.py
index d54551e..dcbcd13 100644
--- a/designate_tempest_plugin/tests/api/v2/test_zones_imports.py
+++ b/designate_tempest_plugin/tests/api/v2/test_zones_imports.py
@@ -16,6 +16,7 @@
 from tempest.lib import decorators
 from tempest.lib import exceptions as lib_exc
 
+from designate_tempest_plugin.common import waiters
 from designate_tempest_plugin.tests import base
 
 LOG = logging.getLogger(__name__)
@@ -36,13 +37,22 @@
     @classmethod
     def setup_clients(cls):
         super(ZonesImportTest, cls).setup_clients()
+
         cls.client = cls.os_primary.zone_imports_client
+        cls.zone_client = cls.os_primary.zones_client
+
+    def clean_up_resources(self, zone_import_id):
+        waiters.wait_for_zone_import_status(self.client, zone_import_id,
+                                            "COMPLETE")
+        _, zone_import = self.client.show_zone_import(zone_import_id)
+        self.client.delete_zone_import(zone_import['id'])
+        self.wait_zone_delete(self.zone_client, zone_import['zone_id'])
 
     @decorators.idempotent_id('2e2d907d-0609-405b-9c96-3cb2b87e3dce')
     def test_create_zone_import(self):
         LOG.info('Create a zone import')
         _, zone_import = self.client.create_zone_import()
-        self.addCleanup(self.client.delete_zone_import, zone_import['id'])
+        self.addCleanup(self.clean_up_resources, zone_import['id'])
 
         LOG.info('Ensure we respond with PENDING')
         self.assertEqual('PENDING', zone_import['status'])
@@ -52,7 +62,7 @@
     def test_show_zone_import(self):
         LOG.info('Create a zone import')
         _, zone_import = self.client.create_zone_import()
-        self.addCleanup(self.client.delete_zone_import, zone_import['id'])
+        self.addCleanup(self.clean_up_resources, zone_import['id'])
 
         LOG.info('Re-Fetch the zone import')
         resp, body = self.client.show_zone_import(zone_import['id'])
@@ -64,6 +74,12 @@
     def test_delete_zone_import(self):
         LOG.info('Create a zone import')
         _, zone_import = self.client.create_zone_import()
+        waiters.wait_for_zone_import_status(self.client, zone_import['id'],
+                                            "COMPLETE")
+        _, zone_import = self.client.show_zone_import(zone_import['id'])
+        self.addCleanup(self.wait_zone_delete,
+                        self.zone_client,
+                        zone_import['zone_id'])
 
         LOG.info('Delete the zone')
         resp, body = self.client.delete_zone_import(zone_import['id'])
@@ -75,7 +91,8 @@
     @decorators.idempotent_id('9eab76af-1995-485f-a2ef-8290c1863aba')
     def test_list_zones_imports(self):
         LOG.info('Create a zone import')
-        _, zone = self.client.create_zone_import()
+        _, zone_import = self.client.create_zone_import()
+        self.addCleanup(self.clean_up_resources, zone_import['id'])
 
         LOG.info('List zones imports')
         _, body = self.client.list_zone_imports()
diff --git a/designate_tempest_plugin/tests/base.py b/designate_tempest_plugin/tests/base.py
index bef19f2..6d33d81 100644
--- a/designate_tempest_plugin/tests/base.py
+++ b/designate_tempest_plugin/tests/base.py
@@ -14,6 +14,7 @@
 import six
 from tempest import test
 from tempest import config
+from tempest.lib.common.utils import test_utils as utils
 
 from designate_tempest_plugin import clients
 
@@ -97,6 +98,18 @@
         with context:
             callable_(*args, **kwargs)
 
+    def wait_zone_delete(self, zone_client, zone_id, **kwargs):
+        zone_client.delete_zone(zone_id, **kwargs)
+        utils.call_until_true(self._check_zone_deleted,
+                              CONF.dns.build_timeout,
+                              CONF.dns.build_interval,
+                              zone_client,
+                              zone_id)
+
+    def _check_zone_deleted(self, zone_client, zone_id):
+        return utils.call_and_ignore_notfound_exc(zone_client.show_zone,
+                                                  zone_id) is None
+
 
 class BaseDnsV1Test(BaseDnsTest):
     """Base class for DNS V1 API tests."""
diff --git a/designate_tempest_plugin/tests/scenario/v2/test_zones.py b/designate_tempest_plugin/tests/scenario/v2/test_zones.py
index 393def7..4763647 100644
--- a/designate_tempest_plugin/tests/scenario/v2/test_zones.py
+++ b/designate_tempest_plugin/tests/scenario/v2/test_zones.py
@@ -38,7 +38,7 @@
     def test_create_and_delete_zone(self):
         LOG.info('Create a zone')
         _, zone = self.client.create_zone()
-        self.addCleanup(self.client.delete_zone, zone['id'],
+        self.addCleanup(self.wait_zone_delete, self.client, zone['id'],
                         ignore_errors=lib_exc.NotFound)
 
         LOG.info('Ensure we respond with CREATE+PENDING')
@@ -69,7 +69,7 @@
     def test_delete_zone_pending_create(self):
         LOG.info('Create a zone')
         _, zone = self.client.create_zone()
-        self.addCleanup(self.client.delete_zone, zone['id'],
+        self.addCleanup(self.wait_zone_delete, self.client, zone['id'],
                         ignore_errors=lib_exc.NotFound)
 
         # NOTE(kiall): This is certainly a little racey, it's entirely
@@ -94,7 +94,7 @@
     def test_zone_create_propagates_to_nameservers(self):
         LOG.info('Create a zone')
         _, zone = self.client.create_zone()
-        self.addCleanup(self.client.delete_zone, zone['id'])
+        self.addCleanup(self.wait_zone_delete, self.client, zone['id'])
 
         waiters.wait_for_zone_status(self.client, zone['id'], "ACTIVE")
         waiters.wait_for_query(self.query_client, zone['name'], "SOA")
@@ -107,7 +107,7 @@
     def test_zone_delete_propagates_to_nameservers(self):
         LOG.info('Create a zone')
         _, zone = self.client.create_zone()
-        self.addCleanup(self.client.delete_zone, zone['id'],
+        self.addCleanup(self.wait_zone_delete, self.client, zone['id'],
                         ignore_errors=lib_exc.NotFound)
 
         waiters.wait_for_zone_status(self.client, zone['id'], "ACTIVE")
diff --git a/designate_tempest_plugin/tests/scenario/v2/test_zones_export.py b/designate_tempest_plugin/tests/scenario/v2/test_zones_export.py
index 8b9e3c3..b5df2a0 100644
--- a/designate_tempest_plugin/tests/scenario/v2/test_zones_export.py
+++ b/designate_tempest_plugin/tests/scenario/v2/test_zones_export.py
@@ -36,10 +36,12 @@
     def test_create_zone_export_and_show_exported_zonefile(self):
         LOG.info('Create a zone to be exported')
         _, zone = self.zones_client.create_zone()
-        self.addCleanup(self.zones_client.delete_zone, zone['id'])
+        self.addCleanup(self.wait_zone_delete, self.zones_client, zone['id'])
 
         LOG.info('Create a zone export')
         _, zone_export = self.client.create_zone_export(zone['id'])
+        self.addCleanup(self.client.delete_zone_export, zone_export['id'])
+
         self.assertEqual('PENDING', zone_export['status'])
         self.assertEqual(zone['id'], zone_export['zone_id'])
         self.assertIsNone(zone_export['links'].get('export'))
@@ -51,6 +53,7 @@
 
         LOG.info('Check the zone export looks good')
         _, zone_export = self.client.show_zone_export(zone_export['id'])
+
         self.assertEqual('COMPLETE', zone_export['status'])
         self.assertEqual(zone['id'], zone_export['zone_id'])
         self.assertIsNotNone(zone_export['links'].get('export'))
diff --git a/designate_tempest_plugin/tests/scenario/v2/test_zones_import.py b/designate_tempest_plugin/tests/scenario/v2/test_zones_import.py
index 4673048..b08f829 100644
--- a/designate_tempest_plugin/tests/scenario/v2/test_zones_import.py
+++ b/designate_tempest_plugin/tests/scenario/v2/test_zones_import.py
@@ -27,6 +27,7 @@
     @classmethod
     def setup_clients(cls):
         super(ZonesImportTest, cls).setup_clients()
+
         cls.client = cls.os_primary.zone_imports_client
         cls.zones_client = cls.os_primary.zones_client
 
@@ -46,6 +47,10 @@
 
         LOG.info('Check the zone import looks good')
         _, zone_import = self.client.show_zone_import(zone_import['id'])
+        self.addCleanup(self.wait_zone_delete,
+                        self.zones_client,
+                        zone_import['zone_id'])
+
         self.assertEqual('COMPLETE', zone_import['status'])
         self.assertIsNotNone(zone_import['zone_id'])
         self.assertIsNotNone(zone_import['links'].get('zone'))
diff --git a/designate_tempest_plugin/tests/scenario/v2/test_zones_transfer.py b/designate_tempest_plugin/tests/scenario/v2/test_zones_transfer.py
index 14b7003..c12bd96 100644
--- a/designate_tempest_plugin/tests/scenario/v2/test_zones_transfer.py
+++ b/designate_tempest_plugin/tests/scenario/v2/test_zones_transfer.py
@@ -37,14 +37,14 @@
     def test_zone_transfer(self):
         LOG.info('Create a zone as primary tenant')
         _, zone = self.zones_client.create_zone()
-        self.addCleanup(self.zones_client.delete_zone, zone['id'],
-                        ignore_errors=lib_exc.NotFound)
-        self.addCleanup(self.alt_zones_client.delete_zone, zone['id'],
+        self.addCleanup(self.wait_zone_delete, self.zones_client, zone['id'],
                         ignore_errors=lib_exc.NotFound)
 
         LOG.info('Create a zone transfer_request for zone as primary tenant')
         _, transfer_request = \
             self.request_client.create_transfer_request_empty_body(zone['id'])
+        self.addCleanup(self.request_client.delete_transfer_request,
+                        transfer_request['id'])
 
         accept_data = {
                  "key": transfer_request['key'],
@@ -55,7 +55,10 @@
         self.alt_accept_client.create_transfer_accept(accept_data)
 
         LOG.info('Fetch the zone as alt tenant')
-        self.alt_zones_client.show_zone(zone['id'])
+        _, alt_zone = self.alt_zones_client.show_zone(zone['id'])
+        self.addCleanup(self.wait_zone_delete,
+                        self.alt_zones_client,
+                        alt_zone['id'])
 
         LOG.info('Ensure 404 when fetching the zone as primary tenant')
         self.assertRaises(lib_exc.NotFound,
diff --git a/setup.cfg b/setup.cfg
index 8e69b9a..1e21e36 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -4,7 +4,7 @@
 description-file =
     README.rst
 author = OpenStack
-author-email = openstack-dev@lists.openstack.org
+author-email = openstack-discuss@lists.openstack.org
 home-page = https://docs.openstack.org/designate-tempest-plugin/latest/
 classifier =
     Environment :: OpenStack