Merge "Re-enable test_admin_sets_invalid_quota_values"
diff --git a/.zuul.yaml b/.zuul.yaml
index 73a92ad..d40d786 100644
--- a/.zuul.yaml
+++ b/.zuul.yaml
@@ -26,5 +26,4 @@
         - designate-bind9-stable-xena
         - designate-bind9-stable-wallaby
         - neutron-tempest-plugin-designate-scenario
-    gate:
-      queue: designate
+    queue: designate
diff --git a/designate_tempest_plugin/config.py b/designate_tempest_plugin/config.py
index 989acb8..c244b12 100644
--- a/designate_tempest_plugin/config.py
+++ b/designate_tempest_plugin/config.py
@@ -53,8 +53,8 @@
                help="The target zone to test the dns recordsets "
                     "If it is not specified, a new zone will be created "),
     cfg.StrOpt('tld_suffix',
-               default='com',
-               help="TLD suffix that used in all tests (if not overridden)")
+               default='test',
+               help="TLD suffix that used in all tests (if not overridden).")
 ]
 
 dns_feature_group = cfg.OptGroup(name='dns_feature_enabled',
diff --git a/designate_tempest_plugin/services/dns/v2/json/transfer_accepts_client.py b/designate_tempest_plugin/services/dns/v2/json/transfer_accepts_client.py
index e09f775..753ffc2 100644
--- a/designate_tempest_plugin/services/dns/v2/json/transfer_accepts_client.py
+++ b/designate_tempest_plugin/services/dns/v2/json/transfer_accepts_client.py
@@ -19,20 +19,25 @@
 
     @base.handle_errors
     def create_transfer_accept(self, transfer_accept_data,
-                               params=None, headers=None):
+                               params=None, headers=None, extra_headers=None):
         """Create a zone transfer_accept.
         :param transfer_accept_data: A python dictionary representing
                                 data for the zone transfer accept.
         :param params: A Python dict that represents the query paramaters to
                        include in the accept URI.
         :param headers (dict): The headers to use for the request.
+        :param extra_headers (bool): Boolean value than indicates if the
+                                     headers returned by the get_headers()
+                                     method are to be used but additional
+                                     headers are needed in the request
+                                     pass them in as a dict.
         :return: Serialized accepted zone transfer as a dictionary.
         """
 
         transfer_accept_uri = 'zones/tasks/transfer_accepts'
         resp, body = self._create_request(
             transfer_accept_uri, transfer_accept_data,
-            params=params, headers=headers)
+            params=params, headers=headers, extra_headers=extra_headers)
 
         # Create Transfer accept should Return a HTTP 201
         self.expected_success(201, resp.status)
diff --git a/designate_tempest_plugin/tests/api/v2/test_ptrs.py b/designate_tempest_plugin/tests/api/v2/test_ptrs.py
index 0b0cddf..a72b61a 100644
--- a/designate_tempest_plugin/tests/api/v2/test_ptrs.py
+++ b/designate_tempest_plugin/tests/api/v2/test_ptrs.py
@@ -28,13 +28,34 @@
 CONF = config.CONF
 LOG = logging.getLogger(__name__)
 
-TLD = dns_data_utils.rand_string(3)
-
 
 class BasePtrTest(base.BaseDnsV2Test):
     excluded_keys = ['created_at', 'updated_at', 'version', 'links',
                      'status', 'action']
 
+    @classmethod
+    def setup_clients(cls):
+        super(BasePtrTest, cls).setup_clients()
+
+        if CONF.enforce_scope.designate:
+            cls.admin_tld_client = cls.os_system_admin.dns_v2.TldClient()
+        else:
+            cls.admin_tld_client = cls.os_admin.dns_v2.TldClient()
+
+    @classmethod
+    def resource_setup(cls):
+        super(BasePtrTest, cls).resource_setup()
+
+        # Make sure we have an allowed TLD available
+        tld_name = dns_data_utils.rand_zone_name(name='BasePtrTest')
+        cls.tld_name = tld_name[:-1]
+        cls.class_tld = cls.admin_tld_client.create_tld(tld_name=tld_name[:-1])
+
+    @classmethod
+    def resource_cleanup(cls):
+        cls.admin_tld_client.delete_tld(cls.class_tld[1]['id'])
+        super(BasePtrTest, cls).resource_cleanup()
+
 
 class DesignatePtrRecord(BasePtrTest, tempest.test.BaseTestCase):
 
@@ -56,8 +77,24 @@
         cls.primary_ptr_client = cls.os_primary.dns_v2.PtrClient()
         cls.primary_floating_ip_client = cls.os_primary.floating_ips_client
 
+    @classmethod
+    def resource_setup(cls):
+        super(DesignatePtrRecord, cls).resource_setup()
+
+        # The 'arpa' TLD is a special case as the negative test class also
+        # needs to use this space. To stop test class concurrency conflicts,
+        # let each class manage different TLDs for the reverse namespace.
+        cls.arpa_tld = cls.admin_tld_client.create_tld(tld_name='arpa')
+
+    @classmethod
+    def resource_cleanup(cls):
+        cls.admin_tld_client.delete_tld(cls.arpa_tld[1]['id'])
+        super(DesignatePtrRecord, cls).resource_cleanup()
+
     def _set_ptr(self, ptr_name=None, ttl=None, description=None,
-                 headers=None, tld=TLD, fip_id=None):
+                 headers=None, tld=None, fip_id=None):
+        if not tld:
+            tld = self.tld_name
         if not fip_id:
             fip = self.primary_floating_ip_client.create_floatingip(
                 floating_network_id=CONF.network.public_network_id)[
@@ -148,7 +185,7 @@
 
 class DesignatePtrRecordNegative(BasePtrTest, tempest.test.BaseTestCase):
 
-    credentials = ['primary', 'admin']
+    credentials = ['primary', 'admin', 'system_admin']
 
     @classmethod
     def setup_credentials(cls):
@@ -163,8 +200,25 @@
         cls.primary_floating_ip_client = cls.os_primary.floating_ips_client
         cls.admin_ptr_client = cls.os_admin.dns_v2.PtrClient()
 
+    @classmethod
+    def resource_setup(cls):
+        super(DesignatePtrRecordNegative, cls).resource_setup()
+
+        # The 'arpa' TLD is a special case as the positive test class also
+        # needs to use this space. To stop test class concurrency conflicts,
+        # let each class manage different TLDs for the reverse namespace.
+        cls.in_addr_arpa_tld = cls.admin_tld_client.create_tld(
+            tld_name='in-addr.arpa')
+
+    @classmethod
+    def resource_cleanup(cls):
+        cls.admin_tld_client.delete_tld(cls.in_addr_arpa_tld[1]['id'])
+        super(DesignatePtrRecordNegative, cls).resource_cleanup()
+
     def _set_ptr(self, ptr_name=None, ttl=None, description=None,
-                 headers=None, tld=TLD, fip_id=None):
+                 headers=None, tld=None, fip_id=None):
+        if not tld:
+            tld = self.tld_name
         if not fip_id:
             fip = self.primary_floating_ip_client.create_floatingip(
                 floating_network_id=CONF.network.public_network_id)[
diff --git a/designate_tempest_plugin/tests/api/v2/test_quotas.py b/designate_tempest_plugin/tests/api/v2/test_quotas.py
index 3f06cfd..31a5c7e 100644
--- a/designate_tempest_plugin/tests/api/v2/test_quotas.py
+++ b/designate_tempest_plugin/tests/api/v2/test_quotas.py
@@ -15,7 +15,7 @@
 from tempest import config
 from tempest.lib import decorators
 from tempest.lib import exceptions as lib_exc
-from tempest.lib.common.utils import data_utils as tempest_data_utils
+from tempest.lib.common.utils import data_utils
 
 from designate_tempest_plugin.tests import base
 from designate_tempest_plugin import data_utils as dns_data_utils
@@ -284,7 +284,7 @@
 
         for item in quotas_types:
             quota = dns_data_utils.rand_quotas()
-            quota[item] = tempest_data_utils.rand_name()
+            quota[item] = data_utils.rand_name()
             self.assertRaises(
                 lib_exc.BadRequest, self.admin_client.set_quotas,
                 project_id=primary_project_id,
@@ -297,7 +297,7 @@
         LOG.info('Try to set quota using not existing quota type in its body')
         primary_project_id = self.quotas_client.project_id
         quota = dns_data_utils.rand_quotas()
-        quota[tempest_data_utils.rand_name()] = 777
+        quota[data_utils.rand_name()] = 777
 
         with self.assertRaisesDns(
                 lib_exc.BadRequest, 'invalid_object', 400):
diff --git a/designate_tempest_plugin/tests/api/v2/test_recordset.py b/designate_tempest_plugin/tests/api/v2/test_recordset.py
index f6e9a4a..079782f 100644
--- a/designate_tempest_plugin/tests/api/v2/test_recordset.py
+++ b/designate_tempest_plugin/tests/api/v2/test_recordset.py
@@ -15,14 +15,14 @@
 from tempest import config
 from tempest.lib import decorators
 from tempest.lib import exceptions as lib_exc
-from tempest.lib.common.utils import data_utils as lib_data_utils
+from tempest.lib.common.utils import data_utils
 import ddt
 
 from designate_tempest_plugin.tests import base
 from designate_tempest_plugin.common import constants as const
 
 from designate_tempest_plugin.common import waiters
-from designate_tempest_plugin import data_utils
+from designate_tempest_plugin import data_utils as dns_data_utils
 
 CONF = config.CONF
 LOG = logging.getLogger(__name__)
@@ -33,18 +33,33 @@
                      'type']
 
     @classmethod
+    def setup_clients(cls):
+        super(BaseRecordsetsTest, cls).setup_clients()
+        if CONF.enforce_scope.designate:
+            cls.admin_tld_client = cls.os_system_admin.dns_v2.TldClient()
+        else:
+            cls.admin_tld_client = cls.os_admin.dns_v2.TldClient()
+
+    @classmethod
     def resource_setup(cls):
         super(BaseRecordsetsTest, cls).resource_setup()
 
+        # Make sure we have an allowed TLD available
+        tld_name = dns_data_utils.rand_zone_name(name="BaseRecordsetsTest")
+        cls.tld_name = f".{tld_name}"
+        cls.class_tld = cls.admin_tld_client.create_tld(tld_name=tld_name[:-1])
+
         # All the recordset tests need a zone, create one to share
-        LOG.info('Create a zone')
-        cls.zone = cls.zone_client.create_zone()[1]
+        zone_name = dns_data_utils.rand_zone_name(name="TestZone",
+                                              suffix=cls.tld_name)
+        LOG.info('Create a zone: %s', zone_name)
+        cls.zone = cls.zone_client.create_zone(name=zone_name)[1]
 
     @classmethod
     def resource_cleanup(cls):
         cls.zone_client.delete_zone(
             cls.zone['id'], ignore_errors=lib_exc.NotFound)
-
+        cls.admin_tld_client.delete_tld(cls.class_tld[1]['id'])
         super(BaseRecordsetsTest, cls).resource_cleanup()
 
 
@@ -76,7 +91,7 @@
     @decorators.attr(type='smoke')
     @decorators.idempotent_id('631d74fd-6909-4684-a61b-5c4d2f92c3e7')
     def test_create_recordset(self):
-        recordset_data = data_utils.rand_recordset_data(
+        recordset_data = dns_data_utils.rand_recordset_data(
             record_type='A', zone_name=self.zone['name'])
 
         LOG.info('Create a Recordset')
@@ -128,17 +143,17 @@
     def test_create_recordset_type_SRV_TCP(self):
         self._test_create_recordset_type(
             "_sip._tcp", "SRV", [
-                "10 60 5060 server1.example.{}.".format(self.tld_suffix),
-                "20 60 5060 server2.example.{}.".format(self.tld_suffix),
-                "20 30 5060 server3.example.{}.".format(self.tld_suffix)])
+                "10 60 5060 server1.example{}".format(self.tld_name),
+                "20 60 5060 server2.example{}".format(self.tld_name),
+                "20 30 5060 server3.example{}".format(self.tld_name)])
 
     @decorators.idempotent_id('59c1aa42-278e-4f7b-a6a1-4320d5daf1fd')
     def test_create_recordset_type_SRV_UDP(self):
         self._test_create_recordset_type(
             "_sip._udp", "SRV", [
-                "10 60 5060 server1.example.{}.".format(self.tld_suffix),
-                "10 60 5060 server2.example.{}.".format(self.tld_suffix),
-                "20 30 5060 server3.example.{}.".format(self.tld_suffix)])
+                "10 60 5060 server1.example{}".format(self.tld_name),
+                "10 60 5060 server2.example{}".format(self.tld_name),
+                "20 30 5060 server3.example{}".format(self.tld_name)])
 
     @decorators.idempotent_id('1ac46f94-f03a-4f85-b84f-826a2660b927')
     def test_create_recordset_type_CNAME(self):
@@ -192,7 +207,7 @@
 
     @decorators.idempotent_id('5964f730-5546-46e6-9105-5030e9c492b2')
     def test_list_recordsets(self):
-        recordset_data = data_utils.rand_recordset_data(
+        recordset_data = dns_data_utils.rand_recordset_data(
             record_type='A', zone_name=self.zone['name'])
 
         LOG.info('Create a Recordset')
@@ -209,7 +224,7 @@
 
     @decorators.idempotent_id('84c13cb2-9020-4c1e-aeb0-c348d9a70caa')
     def test_show_recordsets(self):
-        recordset_data = data_utils.rand_recordset_data(
+        recordset_data = dns_data_utils.rand_recordset_data(
             record_type='A', zone_name=self.zone['name'])
 
         LOG.info('Create a Recordset')
@@ -227,7 +242,7 @@
 
     @decorators.idempotent_id('855399c1-8806-4ae5-aa31-cb8a6f35e218')
     def test_delete_recordset(self):
-        recordset_data = data_utils.rand_recordset_data(
+        recordset_data = dns_data_utils.rand_recordset_data(
             record_type='A', zone_name=self.zone['name'])
 
         LOG.info('Create a Recordset')
@@ -246,7 +261,7 @@
 
     @decorators.idempotent_id('8d41c85f-09f9-48be-a202-92d1bdf5c796')
     def test_update_recordset(self):
-        recordset_data = data_utils.rand_recordset_data(
+        recordset_data = dns_data_utils.rand_recordset_data(
             record_type='A', zone_name=self.zone['name'])
 
         LOG.info('Create a recordset')
@@ -256,7 +271,7 @@
             self.wait_recordset_delete, self.client,
             self.zone['id'], record['id'])
 
-        recordset_data = data_utils.rand_recordset_data(
+        recordset_data = dns_data_utils.rand_recordset_data(
             record_type='A', zone_name=self.zone['name'], name=record['name'])
 
         LOG.info('Update the recordset')
@@ -268,7 +283,7 @@
 
     @decorators.idempotent_id('60904cc5-148b-4e3b-a0c6-35656dc8d44c')
     def test_update_recordset_one_field(self):
-        recordset_data = data_utils.rand_recordset_data(
+        recordset_data = dns_data_utils.rand_recordset_data(
             record_type='A', zone_name=self.zone['name'])
 
         LOG.info('Create a recordset')
@@ -279,7 +294,7 @@
             self.zone['id'], record['id'])
 
         recordset_data = {
-            'ttl': data_utils.rand_ttl(start=record['ttl'] + 1)
+            'ttl': dns_data_utils.rand_ttl(start=record['ttl'] + 1)
         }
 
         LOG.info('Update the recordset')
@@ -295,7 +310,7 @@
     def test_show_recordsets_impersonate_another_project(self):
 
         LOG.info('Create a Recordset')
-        recordset_data = data_utils.rand_recordset_data(
+        recordset_data = dns_data_utils.rand_recordset_data(
             record_type='A', zone_name=self.zone['name'])
         resp, body = self.client.create_recordset(
             self.zone['id'], recordset_data)
@@ -335,7 +350,7 @@
     def test_admin_list_all_recordsets_for_a_project(self):
 
         LOG.info('Create a Recordset as Primary tenant')
-        recordset_data_primary_1 = data_utils.rand_recordset_data(
+        recordset_data_primary_1 = dns_data_utils.rand_recordset_data(
             record_type='A', zone_name=self.zone['name'])
         body_pr_1 = self.client.create_recordset(
             self.zone['id'], recordset_data_primary_1)[1]
@@ -344,7 +359,7 @@
             self.zone['id'], body_pr_1['id'])
         self.assertEqual(const.PENDING, body_pr_1['status'],
                          'Failed, expected status is PENDING')
-        recordset_data_primary_2 = data_utils.rand_recordset_data(
+        recordset_data_primary_2 = dns_data_utils.rand_recordset_data(
             record_type='A', zone_name=self.zone['name'])
         body_pr_2 = self.client.create_recordset(
             self.zone['id'], recordset_data_primary_2)[1]
@@ -387,9 +402,9 @@
     @decorators.idempotent_id('48013b7c-f526-11eb-b04f-74e5f9e2a801')
     def test_create_A_recordset_multiply_ips(self):
         LOG.info('Create A type Recordset using a list of random IPs')
-        recordset_data = data_utils.rand_a_recordset(
+        recordset_data = dns_data_utils.rand_a_recordset(
             zone_name=self.zone['name'],
-            ips=[data_utils.rand_ip() for _ in range(10)])
+            ips=[dns_data_utils.rand_ip() for _ in range(10)])
         resp, body = self.client.create_recordset(
             self.zone['id'], recordset_data)
         self.addCleanup(
@@ -406,11 +421,14 @@
     def test_delete_zone_with_existing_recordset(self):
 
         LOG.info('Create a Zone')
-        zone = self.zone_client.create_zone(wait_until=const.ACTIVE)[1]
+        zone_name = dns_data_utils.rand_zone_name(name="TestZone",
+                                              suffix=self.tld_name)
+        zone = self.zone_client.create_zone(name=zone_name,
+                                            wait_until=const.ACTIVE)[1]
         self.addCleanup(self.wait_zone_delete, self.zone_client, zone['id'])
 
         LOG.info('Create a Recordset')
-        recordset_data = data_utils.rand_recordset_data(
+        recordset_data = dns_data_utils.rand_recordset_data(
             record_type='A', zone_name=zone['name'])
         record = self.client.create_recordset(
             zone['id'], recordset_data, wait_until=const.ACTIVE)[1]
@@ -432,7 +450,7 @@
 @ddt.ddt
 class RecordsetsNegativeTest(BaseRecordsetsTest):
 
-    credentials = ["primary", "alt"]
+    credentials = ["admin", "system_admin", "primary", "alt"]
 
     @classmethod
     def setup_credentials(cls):
@@ -469,79 +487,58 @@
 
     @decorators.idempotent_id('b6dad57e-5ce9-4fa5-8d66-aebbcd23b4ad')
     def test_get_nonexistent_recordset(self):
-        LOG.info('Create a zone')
-        zone = self.zone_client.create_zone()[1]
-        self.addCleanup(self.wait_zone_delete, self.zone_client, zone['id'])
-
         LOG.info('Attempt to get an invalid Recordset')
         with self.assertRaisesDns(
                 lib_exc.NotFound, 'recordset_not_found', 404):
-            self.client.show_recordset(zone['id'], lib_data_utils.rand_uuid())
+            self.client.show_recordset(self.zone['id'],
+                                       data_utils.rand_uuid())
 
     @decorators.idempotent_id('93d744a8-0dfd-4650-bcef-1e6ad632ad72')
     def test_get_nonexistent_recordset_invalid_id(self):
-        LOG.info('Create a zone')
-        zone = self.zone_client.create_zone()[1]
-        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):
-            self.client.show_recordset(zone['id'], 'invalid')
+            self.client.show_recordset(self.zone['id'], 'invalid')
 
     @decorators.idempotent_id('da08f19a-7f10-47cc-8b41-994507190812')
     def test_update_nonexistent_recordset(self):
-        LOG.info('Create a zone')
-        zone = self.zone_client.create_zone()[1]
-        self.addCleanup(self.wait_zone_delete, self.zone_client, zone['id'])
-
-        recordset_data = data_utils.rand_recordset_data('A', zone['name'])
+        recordset_data = dns_data_utils.rand_recordset_data(
+            'A', self.zone['name'])
 
         LOG.info('Attempt to update an invalid Recordset')
         with self.assertRaisesDns(
                 lib_exc.NotFound, 'recordset_not_found', 404):
             self.client.update_recordset(
-                zone['id'], lib_data_utils.rand_uuid(), recordset_data)
+                self.zone['id'], data_utils.rand_uuid(), recordset_data)
 
     @decorators.idempotent_id('158340a1-3f69-4aaa-9968-956190563768')
     def test_update_nonexistent_recordset_invalid_id(self):
-        LOG.info('Create a zone')
-        zone = self.zone_client.create_zone()[1]
-        self.addCleanup(self.wait_zone_delete, self.zone_client, zone['id'])
-
-        recordset_data = data_utils.rand_recordset_data('A', zone['name'])
+        recordset_data = dns_data_utils.rand_recordset_data(
+            'A', self.zone['name'])
 
         LOG.info('Attempt to update an invalid Recordset')
         with self.assertRaisesDns(lib_exc.BadRequest, 'invalid_uuid', 400):
             self.client.update_recordset(
-                zone['id'], 'invalid', recordset_data)
+                self.zone['id'], 'invalid', recordset_data)
 
     @decorators.idempotent_id('64bd94d4-54bd-4bee-b6fd-92ede063234e')
     def test_delete_nonexistent_recordset(self):
-        LOG.info('Create a zone')
-        zone = self.zone_client.create_zone()[1]
-        self.addCleanup(self.wait_zone_delete, self.zone_client, zone['id'])
-
         LOG.info('Attempt to delete an invalid Recordset')
         with self.assertRaisesDns(
                 lib_exc.NotFound, 'recordset_not_found', 404):
             self.client.delete_recordset(
-                zone['id'], lib_data_utils.rand_uuid())
+                self.zone['id'], data_utils.rand_uuid())
 
     @decorators.idempotent_id('5948b599-a332-4dcb-840b-afc825075ba3')
     def test_delete_nonexistent_recordset_invalid_id(self):
-        LOG.info('Create a zone')
-        zone = self.zone_client.create_zone()[1]
-        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):
-            self.client.delete_recordset(zone['id'], 'invalid')
+            self.client.delete_recordset(self.zone['id'], 'invalid')
 
     @decorators.idempotent_id('64e01dc4-a2a8-11eb-aad4-74e5f9e2a801')
     def test_show_recordsets_invalid_ids(self):
 
         LOG.info('Create a Recordset')
-        recordset_data = data_utils.rand_recordset_data(
+        recordset_data = dns_data_utils.rand_recordset_data(
             record_type='A', zone_name=self.zone['name'])
         resp, body = self.client.create_recordset(
             self.zone['id'], recordset_data)
@@ -560,18 +557,18 @@
         self.assertRaises(
             lib_exc.NotFound, lambda: self.client.show_recordset(
                 zone_uuid=self.zone['id'],
-                recordset_uuid=lib_data_utils.rand_uuid()))
+                recordset_uuid=data_utils.rand_uuid()))
 
         LOG.info('Ensure 404 NotFound status code is received if '
                  'zone ID is invalid.')
         self.assertRaises(
             lib_exc.NotFound, lambda: self.client.show_recordset(
-                zone_uuid=lib_data_utils.rand_uuid(),
+                zone_uuid=data_utils.rand_uuid(),
                 recordset_uuid=body['id']))
 
     @decorators.idempotent_id('c1d9f046-a2b1-11eb-aad4-74e5f9e2a801')
     def test_create_recordset_for_other_tenant(self):
-        recordset_data = data_utils.rand_recordset_data(
+        recordset_data = dns_data_utils.rand_recordset_data(
             record_type='A', zone_name=self.zone['name'])
 
         LOG.info('Create a Recordset as Alt tenant for a zone created by '
@@ -582,6 +579,8 @@
 
 
 class RootRecordsetsTests(BaseRecordsetsTest):
+    credentials = ["admin", "primary", "system_admin", "alt"]
+
     @classmethod
     def setup_credentials(cls):
         # Do not create network resources for these test.
@@ -612,7 +611,7 @@
 
     @decorators.idempotent_id('65ec0495-81d9-4cfb-8007-9d93b32ae883')
     def test_get_single_zones_recordsets(self):
-        recordset_data = data_utils.rand_recordset_data(
+        recordset_data = dns_data_utils.rand_recordset_data(
             record_type='A', zone_name=self.zone['name'], records=['10.1.0.2'])
 
         LOG.info('Create a Recordset')
@@ -626,7 +625,7 @@
 
     @decorators.idempotent_id('a8e41020-65be-453b-a8c1-2497d539c345')
     def test_list_filter_zones_recordsets(self):
-        recordset_data = data_utils.rand_recordset_data(
+        recordset_data = dns_data_utils.rand_recordset_data(
             record_type='A', zone_name=self.zone['name'], records=['10.0.1.2'])
 
         LOG.info('Create a Recordset')
@@ -637,11 +636,13 @@
             self.zone['id'], zone_recordset['id'])
 
         LOG.info('Create another zone')
-        zone2 = self.zone_client.create_zone()[1]
+        zone_name = dns_data_utils.rand_zone_name(name="list-filter",
+                                              suffix=self.tld_name)
+        zone2 = self.zone_client.create_zone(name=zone_name)[1]
         self.addCleanup(self.wait_zone_delete, self.zone_client, zone2['id'])
 
         LOG.info('Create another Recordset')
-        recordset_data = data_utils.rand_recordset_data(
+        recordset_data = dns_data_utils.rand_recordset_data(
             record_type='A', zone_name=zone2['name'],
             records=['10.0.1.3'])
         resp, zone_recordset2 = self.client.create_recordset(
@@ -668,11 +669,15 @@
 
     @decorators.idempotent_id('7f4970bf-9aeb-4a3c-9afd-02f5a7178d35')
     def test_list_zones_recordsets_zone_names(self):
-        LOG.info('Create another zone')
-        zone2 = self.zone_client.create_zone()[1]
-        self.addCleanup(self.wait_zone_delete, self.zone_client, zone2['id'])
-
         LOG.info('List recordsets')
+        zone_name = dns_data_utils.rand_zone_name(name="zone_names",
+                                              suffix=self.tld_name)
+        alt_zone = self.zone_client.create_zone(
+            name=zone_name, wait_until=const.ACTIVE)[1]
+        self.addCleanup(self.wait_zone_delete,
+                        self.zone_client,
+                        alt_zone['id'])
+
         body = self.client.list_zones_recordsets()[1]
 
         recordsets = body['recordsets']
@@ -714,7 +719,9 @@
         for client in clients_list:
             if client == 'primary':
                 # Create a zone and wait till it's ACTIVE
-                zone = self.zone_client.create_zone()[1]
+                zone_name = dns_data_utils.rand_zone_name(name="primary",
+                                                      suffix=self.tld_name)
+                zone = self.zone_client.create_zone(name=zone_name)[1]
                 self.addCleanup(self.wait_zone_delete,
                                 self.zone_client,
                                 zone['id'])
@@ -722,7 +729,7 @@
                     self.zone_client, zone['id'], const.ACTIVE)
 
                 # Create a recordset and wait till it's ACTIVE
-                recordset_data = data_utils.rand_recordset_data(
+                recordset_data = dns_data_utils.rand_recordset_data(
                     record_type='A', zone_name=zone['name'])
                 resp, body = self.client.create_recordset(
                     zone['id'], recordset_data)
@@ -744,7 +751,9 @@
 
             if client == 'alt':
                 # Create a zone and wait till it's ACTIVE
-                alt_zone = self.alt_zone_client.create_zone()[1]
+                zone_name = dns_data_utils.rand_zone_name(name="alt",
+                                                      suffix=self.tld_name)
+                alt_zone = self.alt_zone_client.create_zone(name=zone_name)[1]
                 self.addCleanup(self.wait_zone_delete,
                                 self.alt_zone_client,
                                 alt_zone['id'])
@@ -752,7 +761,7 @@
                     self.alt_zone_client, alt_zone['id'], const.ACTIVE)
 
                 # Create a recordset and wait till it's ACTIVE
-                recordset_data = data_utils.rand_recordset_data(
+                recordset_data = dns_data_utils.rand_recordset_data(
                     record_type='A', zone_name=alt_zone['name'])
                 resp, body = self.alt_client.create_recordset(
                     alt_zone['id'], recordset_data)
@@ -778,7 +787,7 @@
     @decorators.idempotent_id('9c0f58ad-1b31-4899-b184-5380720604e5')
     def test_no_create_recordset_by_alt_tenant(self):
         # try with name=A123456.zone.com.
-        recordset_data = data_utils.rand_recordset_data(
+        recordset_data = dns_data_utils.rand_recordset_data(
             record_type='A', zone_name=self.zone['name'])
         resp, rrset = self.client.create_recordset(
             self.zone['id'], recordset_data)
@@ -793,13 +802,13 @@
 
     @decorators.idempotent_id('d4a9aad9-c778-429b-9a0c-4cd2b61a0a01')
     def test_no_create_super_recordsets(self):
-        zone_name = data_utils.rand_zone_name()
+        zone_name = dns_data_utils.rand_zone_name(suffix=self.tld_name)
 
         LOG.info('Create a zone as a default user')
         zone = self.zone_client.create_zone(name='a.b.' + zone_name)[1]
         self.addCleanup(self.wait_zone_delete, self.zone_client, zone['id'])
 
-        rrset_data = data_utils.rand_recordset_data(
+        rrset_data = dns_data_utils.rand_recordset_data(
             record_type='A', zone_name=zone_name)
 
         LOG.info('Create a zone as an alt user with existing superdomain')
@@ -810,23 +819,21 @@
 
     @decorators.idempotent_id('3dbe244d-fa85-4afc-869b-0306388d8746')
     def test_no_create_recordset_via_alt_domain(self):
-        zone = self.zone_client.create_zone()[1]
-        alt_zone = self.alt_zone_client.create_zone()[1]
-        self.addCleanup(self.wait_zone_delete,
-                        self.zone_client,
-                        zone['id'])
+        zone_name = dns_data_utils.rand_zone_name(name="alt-domain",
+                                              suffix=self.tld_name)
+        alt_zone = self.alt_zone_client.create_zone(name=zone_name)[1]
         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(
-            record_type='A', zone_name=zone['name'])
+        recordset_data = dns_data_utils.rand_recordset_data(
+            record_type='A', zone_name=self.zone['name'])
 
         self.assertRaises(
             lib_exc.RestClientException,
             lambda: self.alt_client.create_recordset(
-                zone['id'],
+                self.zone['id'],
                 recordset_data
             )
         )
@@ -924,7 +931,10 @@
         sudo_managed_headers.update(managed_records_header)
 
         LOG.info('Primary user creates a Zone')
+        zone_name = dns_data_utils.rand_zone_name(name="update_soa_ns",
+                                              suffix=self.tld_name)
         zone = self.zone_client.create_zone(
+            name=zone_name,
             description='Zone for "managed recordsets update" test',
             wait_until=const.ACTIVE)[1]
         self.addCleanup(self.wait_zone_delete, self.zone_client, zone['id'])
@@ -939,7 +949,7 @@
                     lib_exc.BadRequest, 'bad_request', 400,
                     self.admin_client.update_recordset,
                     zone['id'], recordset['id'],
-                    recordet_data=data_utils.rand_ns_records(),
+                    recordet_data=dns_data_utils.rand_ns_records(),
                     headers=sudo_managed_headers, extra_headers=True)
 
             if recordset['type'] == 'SOA':
@@ -947,5 +957,6 @@
                     lib_exc.BadRequest, 'bad_request', 400,
                     self.admin_client.update_recordset,
                     zone['id'], recordset['id'],
-                    recordet_data=data_utils.rand_soa_recordset(zone['name']),
+                    recordet_data=dns_data_utils.rand_soa_recordset(
+                        zone['name']),
                     headers=sudo_managed_headers, extra_headers=True)
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 a7efe31..a708f6d 100644
--- a/designate_tempest_plugin/tests/api/v2/test_recordset_validation.py
+++ b/designate_tempest_plugin/tests/api/v2/test_recordset_validation.py
@@ -14,14 +14,17 @@
 limitations under the License.
 """
 import ddt
-from tempest.lib import exceptions
+
+from tempest import config
 from tempest.lib import decorators
+from tempest.lib import exceptions
 
 from designate_tempest_plugin.tests import base
 from designate_tempest_plugin.common import waiters
-from designate_tempest_plugin import data_utils
+from designate_tempest_plugin import data_utils as dns_data_utils
 
 
+CONF = config.CONF
 RECORDSETS_DATASET = [
     'A',
     'AAAA',
@@ -37,6 +40,8 @@
 @ddt.ddt
 class RecordsetValidationTest(base.BaseDnsV2Test):
 
+    credentials = ["admin", "primary", "system_admin"]
+
     def setUp(self):
         super(RecordsetValidationTest, self).setUp()
         self._zone = None
@@ -51,13 +56,23 @@
     def setup_clients(cls):
         super(RecordsetValidationTest, cls).setup_clients()
 
+        if CONF.enforce_scope.designate:
+            cls.admin_tld_client = cls.os_system_admin.dns_v2.TldClient()
+        else:
+            cls.admin_tld_client = cls.os_admin.dns_v2.TldClient()
         cls.recordset_client = cls.os_primary.dns_v2.RecordsetClient()
         cls.zones_client = cls.os_primary.dns_v2.ZonesClient()
 
     @property
     def zone(self):
         if self._zone is None:
-            zone_data = data_utils.rand_zone_data()
+            tld_name = dns_data_utils.rand_zone_name(
+                name="recordsetvalidation")
+            self.class_tld = self.admin_tld_client.create_tld(
+                tld_name=tld_name[:-1])
+            zone_name = dns_data_utils.rand_zone_name(name="TestZone",
+                                                  suffix=f'.{tld_name}')
+            zone_data = dns_data_utils.rand_zone_data(name=zone_name)
             resp, body = self.zones_client.create_zone(**zone_data)
             self._zone = body
             self.addCleanup(self.wait_zone_delete,
@@ -77,7 +92,8 @@
         data = ["b0rk"]
 
         for i in data:
-            model = data_utils.make_rand_recordset(self.zone['name'], rtype)
+            model = dns_data_utils.make_rand_recordset(
+                self.zone['name'], rtype)
             model['data'] = i
 
             self.assertRaisesDns(
@@ -91,11 +107,13 @@
     def test_update_invalid(self, rtype):
         data = ["b0rk"]
 
-        post_model = data_utils.make_rand_recordset(self.zone['name'], rtype)
+        post_model = dns_data_utils.make_rand_recordset(
+            self.zone['name'], rtype)
         recordset = self.create_recordset(post_model)
 
         for i in data:
-            model = data_utils.make_rand_recordset(self.zone['name'], rtype)
+            model = dns_data_utils.make_rand_recordset(
+                self.zone['name'], rtype)
             model['data'] = i
             self.assertRaisesDns(
                 exceptions.BadRequest, 'invalid_object', 400,
@@ -105,7 +123,7 @@
 
     @decorators.idempotent_id('61da1015-291f-43d1-a1a8-345cff12d201')
     def test_cannot_create_wildcard_NS_recordset(self):
-        model = data_utils.wildcard_ns_recordset(self.zone['name'])
+        model = dns_data_utils.wildcard_ns_recordset(self.zone['name'])
         self.assertRaisesDns(
             exceptions.BadRequest, 'invalid_object', 400,
             self.recordset_client.create_recordset, self.zone['id'], model
@@ -113,7 +131,7 @@
 
     @decorators.idempotent_id('92f681aa-d953-4d18-b12e-81a9149ccfd9')
     def test_cname_recordsets_cannot_have_more_than_one_record(self):
-        post_model = data_utils.rand_cname_recordset(
+        post_model = dns_data_utils.rand_cname_recordset(
             zone_name=self.zone['name'])
 
         post_model['records'] = [
@@ -130,7 +148,7 @@
     @decorators.idempotent_id('22a9544b-2382-4ed2-ba12-4dbaedb8e880')
     @ddt.file_data("invalid_txt_dataset.json")
     def test_cannot_create_TXT_with(self, data):
-        post_model = data_utils.rand_txt_recordset(self.zone['name'], data)
+        post_model = dns_data_utils.rand_txt_recordset(self.zone['name'], data)
         self.assertRaisesDns(
             exceptions.BadRequest, 'invalid_object', 400,
             self.recordset_client.create_recordset,
@@ -140,7 +158,7 @@
     @decorators.idempotent_id('03e4f811-0c37-4ce2-8b16-662c824f8f18')
     @ddt.file_data("valid_txt_dataset.json")
     def test_create_TXT_with(self, data):
-        post_model = data_utils.rand_txt_recordset(self.zone['name'], data)
+        post_model = dns_data_utils.rand_txt_recordset(self.zone['name'], data)
         recordset = self.create_recordset(post_model)
 
         waiters.wait_for_recordset_status(
@@ -149,7 +167,7 @@
     @decorators.idempotent_id('775b3db5-ec60-4dd7-85d2-f05a9c544978')
     @ddt.file_data("valid_txt_dataset.json")
     def test_create_SPF_with(self, data):
-        post_model = data_utils.rand_spf_recordset(self.zone['name'], data)
+        post_model = dns_data_utils.rand_spf_recordset(self.zone['name'], data)
         recordset = self.create_recordset(post_model)
 
         waiters.wait_for_recordset_status(
@@ -158,7 +176,7 @@
     @decorators.idempotent_id('7fa7783f-1624-4122-bfb2-6cfbf7a5b49b')
     @ddt.file_data("invalid_mx_dataset.json")
     def test_cannot_create_MX_with(self, pref):
-        post_model = data_utils.rand_mx_recordset(
+        post_model = dns_data_utils.rand_mx_recordset(
             self.zone['name'], pref=pref
         )
 
@@ -171,7 +189,7 @@
     @decorators.idempotent_id('3016f998-4e4a-4712-b15a-4e8dfbc5a60b')
     @ddt.data("invalid_sshfp_dataset.json")
     def test_cannot_create_SSHFP_with(self, algo=None, finger=None):
-        post_model = data_utils.rand_sshfp_recordset(
+        post_model = dns_data_utils.rand_sshfp_recordset(
             zone_name=self.zone['name'],
             algorithm_number=algo,
             fingerprint_type=finger,
diff --git a/designate_tempest_plugin/tests/api/v2/test_tld.py b/designate_tempest_plugin/tests/api/v2/test_tld.py
index 11882a3..d5d584c 100644
--- a/designate_tempest_plugin/tests/api/v2/test_tld.py
+++ b/designate_tempest_plugin/tests/api/v2/test_tld.py
@@ -31,6 +31,9 @@
 class TldAdminTest(BaseTldTest):
     credentials = ["admin", "system_admin", "primary"]
 
+    # Use a TLD suffix unique to this test class.
+    local_tld_suffix = '.'.join(["tldadmintest", CONF.dns.tld_suffix])
+
     @classmethod
     def setup_credentials(cls):
         # Do not create network resources for these test.
@@ -48,40 +51,33 @@
         cls.primary_zone_client = cls.os_primary.dns_v2.ZonesClient()
 
     @classmethod
-    def resource_setup(cls):
-        super(TldAdminTest, cls).resource_setup()
-        cls.tld = cls.admin_client.create_tld(
-            tld_name=cls.tld_suffix, ignore_errors=lib_exc.Conflict
-        )
-
-    @classmethod
-    def resource_cleanup(cls):
-        cls.admin_client.delete_tld(cls.tld[1]['id'])
-        super(TldAdminTest, cls).resource_cleanup()
+    def _generate_tld_name(cls, test_name):
+        return '.'.join([data_utils.rand_name(name=test_name),
+                         cls.local_tld_suffix])
 
     @decorators.idempotent_id('52a4bb4b-4eff-4591-9dd3-ad98316806c3')
     def test_create_tld(self):
-        tld_data = {
-                     "name": "org",
-                     "description": "sample tld"}
+        tld_name = self._generate_tld_name("test_create_tld")
+        tld_data = {"name": tld_name, "description": "sample tld"}
 
         LOG.info('Create a tld')
         tld = self.admin_client.create_tld(tld_data['name'],
-                                        tld_data['description'])[1]
+                                           tld_data['description'])[1]
         self.addCleanup(self.admin_client.delete_tld, tld['id'])
 
-        self.assertEqual(tld_data["name"], tld['name'])
+        self.assertEqual(tld_name, tld['name'])
 
     @decorators.idempotent_id('961bd2e8-d4d0-11eb-b8ee-74e5f9e2a801')
     def test_create_duplicated_tlds(self):
-        tld_data = {
-            "name": "org", "description": "test_create_duplicated_tlds"}
+        tld_name = self._generate_tld_name("test_create_duplicated_tlds")
+        tld_data = {"name": tld_name,
+                    "description": "test_create_duplicated_tlds"}
 
         LOG.info('Create a first "org" TLD')
         tld = self.admin_client.create_tld(
             tld_data['name'], tld_data['description'])[1]
         self.addCleanup(self.admin_client.delete_tld, tld['id'])
-        self.assertEqual(tld_data["name"], tld['name'])
+        self.assertEqual(tld_name, tld['name'])
 
         LOG.info('Try to create a second "org" TLD')
         self.assertRaises(
@@ -91,15 +87,15 @@
 
     @decorators.idempotent_id('0c0ab92e-d4db-11eb-b8ee-74e5f9e2a801')
     def test_create_multiply_tlds(self):
-        tlds = ['abc', 'def', 'gih']
-        for tld_name in tlds:
-            tld_data = {
-                "name": tld_name, "description": "test_create_multiply_tlds"}
+        for _dummy in range(0, 2):
+            tld_name = self._generate_tld_name("test_create_multiply_tlds")
+            tld_data = {"name": tld_name,
+                        "description": "test_create_multiply_tlds"}
             LOG.info('Create a "{}" TLD'.format(tld_name))
             tld = self.admin_client.create_tld(
                 tld_data['name'], tld_data['description'])[1]
             self.addCleanup(self.admin_client.delete_tld, tld['id'])
-            self.assertEqual(tld_data["name"], tld['name'])
+            self.assertEqual(tld_name, tld['name'])
 
     @decorators.idempotent_id('52a4bb4b-4eff-4591-9dd3-ad98316806c3')
     def test_create_invalid_tld(self):
@@ -127,13 +123,14 @@
 
     @decorators.idempotent_id('271af08c-2603-4f61-8eb1-05887b74e25a')
     def test_show_tld(self):
+        tld_name = self._generate_tld_name("test_show_tld")
         tld_data = {
-                     "name": "org",
+                     "name": tld_name,
                      "description": "sample tld"}
 
         LOG.info('Create a tld')
         tld = self.admin_client.create_tld(tld_data['name'],
-                                        tld_data['description'])[1]
+                                           tld_data['description'])[1]
         self.addCleanup(self.admin_client.delete_tld, tld['id'])
 
         LOG.info('Fetch the tld')
@@ -145,7 +142,8 @@
     @decorators.idempotent_id('26708cb8-7126-48a7-9424-1c225e56e609')
     def test_delete_tld(self):
         LOG.info('Create a tld')
-        tld = self.admin_client.create_tld()[1]
+        tld_name = self._generate_tld_name("test_delete_tld")
+        tld = self.admin_client.create_tld(tld_name)[1]
         self.addCleanup(self.admin_client.delete_tld, tld['id'],
                         ignore_errors=lib_exc.NotFound)
 
@@ -158,17 +156,25 @@
     @decorators.idempotent_id('95b13759-c85c-4791-829b-9591ca15779d')
     def test_list_tlds(self):
         LOG.info('List tlds')
+        tld_name = self._generate_tld_name("test_list_tlds")
+        tld = self.admin_client.create_tld(tld_name)[1]
+        self.addCleanup(self.admin_client.delete_tld, tld['id'],
+                        ignore_errors=lib_exc.NotFound)
+
         body = self.admin_client.list_tlds()[1]
 
         self.assertGreater(len(body['tlds']), 0)
 
     @decorators.idempotent_id('1a233812-48d9-4d15-af5e-9961744286ff')
     def test_update_tld(self):
-        tld = self.admin_client.create_tld()[1]
+        tld_name = self._generate_tld_name("test_update_tld")
+        tld = self.admin_client.create_tld(tld_name)[1]
         self.addCleanup(self.admin_client.delete_tld, tld['id'])
 
+        tld_name_2 = self._generate_tld_name("test_update_tld")
+
         tld_data = {
-                     "name": "org",
+                     "name": tld_name_2,
                      "description": "Updated description"
         }
 
@@ -176,7 +182,7 @@
         patch_tld = self.admin_client.update_tld(tld['id'],
                        tld_data['name'], tld_data['description'])[1]
 
-        self.assertEqual(tld_data["name"], patch_tld["name"])
+        self.assertEqual(tld_name_2, patch_tld["name"])
         self.assertEqual(tld_data["description"], patch_tld["description"])
 
     @decorators.idempotent_id('8116dcf5-a329-47d1-90be-5ff32f299c53')
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 616431c..87f359d 100644
--- a/designate_tempest_plugin/tests/api/v2/test_transfer_accepts.py
+++ b/designate_tempest_plugin/tests/api/v2/test_transfer_accepts.py
@@ -18,6 +18,7 @@
 from tempest.lib import exceptions as lib_exc
 
 from designate_tempest_plugin.tests import base
+from designate_tempest_plugin import data_utils as dns_data_utils
 
 CONF = config.CONF
 LOG = logging.getLogger(__name__)
@@ -27,6 +28,29 @@
     excluded_keys = ['created_at', 'updated_at', 'key', 'links',
                     'zone_name']
 
+    @classmethod
+    def setup_clients(cls):
+        super(BaseTransferAcceptTest, cls).setup_clients()
+
+        if CONF.enforce_scope.designate:
+            cls.admin_tld_client = cls.os_system_admin.dns_v2.TldClient()
+        else:
+            cls.admin_tld_client = cls.os_admin.dns_v2.TldClient()
+
+    @classmethod
+    def resource_setup(cls):
+        super(BaseTransferAcceptTest, cls).resource_setup()
+
+        # Make sure we have an allowed TLD available
+        tld_name = dns_data_utils.rand_zone_name(name="BaseTransferAcceptTest")
+        cls.tld_name = f".{tld_name}"
+        cls.class_tld = cls.admin_tld_client.create_tld(tld_name=tld_name[:-1])
+
+    @classmethod
+    def resource_cleanup(cls):
+        cls.admin_tld_client.delete_tld(cls.class_tld[1]['id'])
+        super(BaseTransferAcceptTest, cls).resource_cleanup()
+
 
 class TransferAcceptTest(BaseTransferAcceptTest):
     credentials = ["primary", "alt", "admin", "system_admin"]
@@ -68,7 +92,10 @@
     @decorators.idempotent_id('1c6baf97-a83e-4d2e-a5d8-9d37fb7808f3')
     def test_create_transfer_accept(self):
         LOG.info('Create a zone')
-        _, zone = self.prm_zone_client.create_zone(wait_until='ACTIVE')
+        zone_name = dns_data_utils.rand_zone_name(
+            name="create_transfer_accept", suffix=self.tld_name)
+        zone = self.prm_zone_client.create_zone(name=zone_name,
+                                                wait_until='ACTIVE')[1]
         self.addCleanup(
             self.wait_zone_delete, self.admin_zone_client, zone['id'],
             headers=self.all_projects_header,
@@ -97,7 +124,10 @@
     @decorators.idempotent_id('37c6afbb-3ea3-4fd8-94ea-a426244f019a')
     def test_show_transfer_accept(self):
         LOG.info('Create a zone')
-        _, zone = self.prm_zone_client.create_zone(wait_until='ACTIVE')
+        zone_name = dns_data_utils.rand_zone_name(name="show_transfer_accept",
+                                              suffix=self.tld_name)
+        zone = self.prm_zone_client.create_zone(name=zone_name,
+                                                wait_until='ACTIVE')[1]
         self.addCleanup(
             self.wait_zone_delete, self.admin_zone_client, zone['id'],
             headers=self.all_projects_header,
@@ -133,7 +163,10 @@
     def test_ownership_transferred_zone(self):
 
         LOG.info('Create a Primary zone')
-        zone = self.prm_zone_client.create_zone(wait_until='ACTIVE')[1]
+        zone_name = dns_data_utils.rand_zone_name(
+            name="ownership_transferred_zone", suffix=self.tld_name)
+        zone = self.prm_zone_client.create_zone(name=zone_name,
+                                                wait_until='ACTIVE')[1]
         self.addCleanup(
             self.wait_zone_delete, self.admin_zone_client, zone['id'],
             headers=self.all_projects_header,
@@ -178,7 +211,10 @@
         for _ in range(number_of_zones_to_transfer):
 
             LOG.info('Create a Primary zone')
-            zone = self.prm_zone_client.create_zone(wait_until='ACTIVE')[1]
+            zone_name = dns_data_utils.rand_zone_name(
+                name="list_transfer_accepts", suffix=self.tld_name)
+            zone = self.prm_zone_client.create_zone(name=zone_name,
+                                                    wait_until='ACTIVE')[1]
             self.addCleanup(
                 self.wait_zone_delete, self.admin_zone_client, zone['id'],
                 headers=self.all_projects_header,
@@ -255,7 +291,10 @@
     @decorators.idempotent_id('b6ac770e-a1d3-11eb-b534-74e5f9e2a801')
     def test_show_transfer_accept_impersonate_another_project(self):
         LOG.info('Create a zone as primary tenant')
-        zone = self.prm_zone_client.create_zone(wait_until='ACTIVE')[1]
+        zone_name = dns_data_utils.rand_zone_name(
+            name="show_transfer_accept_impersonate", suffix=self.tld_name)
+        zone = self.prm_zone_client.create_zone(name=zone_name,
+                                                wait_until='ACTIVE')[1]
 
         # In case when something goes wrong with the test and E2E
         # scenario fails for some reason, we'll use Admin tenant
@@ -323,7 +362,10 @@
     @decorators.idempotent_id('324a3e80-a1cc-11eb-b534-74e5f9e2a801')
     def test_create_transfer_accept_using_invalid_key(self):
         LOG.info('Create a zone')
-        zone = self.zone_client.create_zone(wait_until='ACTIVE')[1]
+        zone_name = dns_data_utils.rand_zone_name(
+            name="create_transfer_accept_invalid_key", suffix=self.tld_name)
+        zone = self.zone_client.create_zone(name=zone_name,
+                                            wait_until='ACTIVE')[1]
         self.addCleanup(self.wait_zone_delete, self.zone_client, zone['id'])
 
         LOG.info('Create a zone transfer_request')
@@ -335,7 +377,8 @@
             transfer_request['id']
         )
 
-        data = {"key": data_utils.rand_password(len(transfer_request['key'])),
+        data = {"key": data_utils.rand_password(
+                len(transfer_request['key'])),
                 "zone_transfer_request_id": transfer_request['id']}
 
         LOG.info('Create a zone transfer_accept using invalid key')
@@ -346,7 +389,10 @@
     @decorators.idempotent_id('23afb948-a1ce-11eb-b534-74e5f9e2a801')
     def test_create_transfer_accept_using_deleted_transfer_request_id(self):
         LOG.info('Create a zone')
-        zone = self.zone_client.create_zone(wait_until='ACTIVE')[1]
+        zone_name = dns_data_utils.rand_zone_name(
+            name="create_transfer_accept_deleted_id", suffix=self.tld_name)
+        zone = self.zone_client.create_zone(name=zone_name,
+                                            wait_until='ACTIVE')[1]
         self.addCleanup(self.wait_zone_delete, self.zone_client, zone['id'])
 
         LOG.info('Create a zone 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 6c8ed07..c53d6d9 100644
--- a/designate_tempest_plugin/tests/api/v2/test_transfer_request.py
+++ b/designate_tempest_plugin/tests/api/v2/test_transfer_request.py
@@ -27,6 +27,30 @@
 class BaseTransferRequestTest(base.BaseDnsV2Test):
     excluded_keys = ['created_at', 'updated_at', 'key', 'links']
 
+    @classmethod
+    def setup_clients(cls):
+        super(BaseTransferRequestTest, cls).setup_clients()
+
+        if CONF.enforce_scope.designate:
+            cls.admin_tld_client = cls.os_system_admin.dns_v2.TldClient()
+        else:
+            cls.admin_tld_client = cls.os_admin.dns_v2.TldClient()
+
+    @classmethod
+    def resource_setup(cls):
+        super(BaseTransferRequestTest, cls).resource_setup()
+
+        # Make sure we have an allowed TLD available
+        tld_name = dns_data_utils.rand_zone_name(
+            name="BaseTransferRequestTest")
+        cls.tld_name = f".{tld_name}"
+        cls.class_tld = cls.admin_tld_client.create_tld(tld_name=tld_name[:-1])
+
+    @classmethod
+    def resource_cleanup(cls):
+        cls.admin_tld_client.delete_tld(cls.class_tld[1]['id'])
+        super(BaseTransferRequestTest, cls).resource_cleanup()
+
 
 class TransferRequestTest(BaseTransferRequestTest):
     credentials = ["primary", "alt", "admin", "system_admin"]
@@ -54,11 +78,13 @@
     @decorators.idempotent_id('2381d489-ad84-403d-b0a2-8b77e4e966bf')
     def test_create_transfer_request(self):
         LOG.info('Create a zone')
-        _, zone = self.zone_client.create_zone()
+        zone_name = dns_data_utils.rand_zone_name(
+            name="create_transfer_request", suffix=self.tld_name)
+        zone = self.zone_client.create_zone(name=zone_name)[1]
         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'])
+        transfer_request = self.client.create_transfer_request(zone['id'])[1]
         self.addCleanup(self.client.delete_transfer_request,
                         transfer_request['id'])
 
@@ -68,15 +94,17 @@
     @decorators.idempotent_id('5deae1ac-7c14-42dc-b14e-4e4b2725beb7')
     def test_create_transfer_request_scoped(self):
         LOG.info('Create a zone')
-        _, zone = self.zone_client.create_zone()
+        zone_name = dns_data_utils.rand_zone_name(
+            name="create_transfer_request_scoped", suffix=self.tld_name)
+        zone = self.zone_client.create_zone(name=zone_name)[1]
         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)
 
         LOG.info('Create a scoped zone transfer_request')
-        _, transfer_request = self.client.create_transfer_request(
-            zone['id'], transfer_request_data)
+        transfer_request = self.client.create_transfer_request(
+            zone['id'], transfer_request_data)[1]
         self.addCleanup(self.client.delete_transfer_request,
                         transfer_request['id'])
 
@@ -86,11 +114,13 @@
     @decorators.idempotent_id('4505152f-0a9c-4f02-b385-2216c914a0be')
     def test_create_transfer_request_empty_body(self):
         LOG.info('Create a zone')
-        _, zone = self.zone_client.create_zone()
+        zone_name = dns_data_utils.rand_zone_name(
+            name="create_transfer_request_empty", suffix=self.tld_name)
+        zone = self.zone_client.create_zone(name=zone_name)[1]
         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'])
+        transfer_request = self.client.create_transfer_request_empty_body(
+            zone['id'])[1]
         self.addCleanup(self.client.delete_transfer_request,
                         transfer_request['id'])
 
@@ -100,16 +130,18 @@
     @decorators.idempotent_id('64a7be9f-8371-4ce1-a242-c1190de7c985')
     def test_show_transfer_request(self):
         LOG.info('Create a zone')
-        _, zone = self.zone_client.create_zone()
+        zone_name = dns_data_utils.rand_zone_name(
+            name="show_transfer_request", suffix=self.tld_name)
+        zone = self.zone_client.create_zone(name=zone_name)[1]
         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'])
+        transfer_request = self.client.create_transfer_request(zone['id'])[1]
         self.addCleanup(self.client.delete_transfer_request,
                         transfer_request['id'])
 
         LOG.info('Fetch the transfer_request')
-        _, body = self.client.show_transfer_request(transfer_request['id'])
+        body = self.client.show_transfer_request(transfer_request['id'])[1]
 
         LOG.info('Ensure the fetched response matches the '
                  'created transfer_request')
@@ -119,7 +151,9 @@
     @decorators.skip_because(bug="1926572")
     def test_show_transfer_request_impersonate_another_project(self):
         LOG.info('Create a zone')
-        zone = self.zone_client.create_zone()[1]
+        zone_name = dns_data_utils.rand_zone_name(
+            name="show_transfer_request_impersonate", suffix=self.tld_name)
+        zone = self.zone_client.create_zone(name=zone_name)[1]
         self.addCleanup(self.wait_zone_delete, self.zone_client, zone['id'])
 
         LOG.info('Create a zone transfer_request')
@@ -148,20 +182,22 @@
         # Checks the target of a scoped transfer request can see
         # the request.
         LOG.info('Create a zone')
-        _, zone = self.zone_client.create_zone()
+        zone_name = dns_data_utils.rand_zone_name(
+            name="create_transfer_request_as_target", suffix=self.tld_name)
+        zone = self.zone_client.create_zone(name=zone_name)[1]
         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)
 
         LOG.info('Create a scoped zone transfer_request')
-        _, transfer_request = self.client.create_transfer_request(
-            zone['id'], transfer_request_data)
+        transfer_request = self.client.create_transfer_request(
+            zone['id'], transfer_request_data)[1]
         self.addCleanup(self.client.delete_transfer_request,
                         transfer_request['id'])
 
         LOG.info('Fetch the transfer_request as the target')
-        _, body = self.alt_client.show_transfer_request(transfer_request['id'])
+        body = self.alt_client.show_transfer_request(transfer_request['id'])[1]
 
         LOG.info('Ensure the fetched response matches the '
                  'created transfer_request')
@@ -172,24 +208,28 @@
     @decorators.idempotent_id('7d81c487-aa15-44c4-b3e5-424ab9e6a3e5')
     def test_delete_transfer_request(self):
         LOG.info('Create a zone')
-        _, zone = self.zone_client.create_zone()
+        zone_name = dns_data_utils.rand_zone_name(
+            name="delete_transfer_request", suffix=self.tld_name)
+        zone = self.zone_client.create_zone(name=zone_name)[1]
         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'])
+        transfer_request = self.client.create_transfer_request(zone['id'])[1]
         self.addCleanup(self.client.delete_transfer_request,
                         transfer_request['id'],
                         ignore_errors=lib_exc.NotFound)
 
         LOG.info('Delete the transfer_request')
-        _, body = self.client.delete_transfer_request(transfer_request['id'])
+        self.client.delete_transfer_request(transfer_request['id'])
         self.assertRaises(lib_exc.NotFound,
             lambda: self.client.show_transfer_request(transfer_request['id']))
 
     @decorators.idempotent_id('ddd42a19-1768-428c-846e-32f9d6493011')
     def test_list_transfer_requests(self):
         LOG.info('Create a zone')
-        _, zone = self.zone_client.create_zone()
+        zone_name = dns_data_utils.rand_zone_name(
+            name="list_transfer_request", suffix=self.tld_name)
+        zone = self.zone_client.create_zone(name=zone_name)[1]
         self.addCleanup(self.wait_zone_delete, self.zone_client, zone['id'])
 
         LOG.info('Create a zone transfer_request')
@@ -205,12 +245,17 @@
     @decorators.idempotent_id('db985892-9d02-11eb-a160-74e5f9e2a801')
     def test_list_transfer_requests_all_projects(self):
         LOG.info('Create a Primary zone')
-        primary_zone = self.zone_client.create_zone()[1]
+        zone_name = dns_data_utils.rand_zone_name(
+            name="list_transfer_request_all_projects", suffix=self.tld_name)
+        primary_zone = self.zone_client.create_zone(name=zone_name)[1]
         self.addCleanup(self.wait_zone_delete,
                         self.zone_client, primary_zone['id'])
 
         LOG.info('Create an Alt zone')
-        alt_zone = self.alt_zone_client.create_zone()[1]
+        alt_zone_name = dns_data_utils.rand_zone_name(
+            name="list_transfer_request_all_projects_alt",
+            suffix=self.tld_name)
+        alt_zone = self.alt_zone_client.create_zone(name=alt_zone_name)[1]
         self.addCleanup(self.wait_zone_delete,
                         self.alt_zone_client, alt_zone['id'])
 
@@ -251,12 +296,16 @@
     @decorators.idempotent_id('bee42f38-e666-4b85-a710-01f40ea1e56a')
     def test_list_transfer_requests_impersonate_another_project(self):
         LOG.info('Create a Primary zone')
-        primary_zone = self.zone_client.create_zone()[1]
+        zone_name = dns_data_utils.rand_zone_name(
+            name="list_transfer_request_impersonate", suffix=self.tld_name)
+        primary_zone = self.zone_client.create_zone(name=zone_name)[1]
         self.addCleanup(self.wait_zone_delete,
                         self.zone_client, primary_zone['id'])
 
         LOG.info('Create an Alt zone')
-        alt_zone = self.alt_zone_client.create_zone()[1]
+        alt_zone_name = dns_data_utils.rand_zone_name(
+            name="list_transfer_request_impersonate_alt", suffix=self.tld_name)
+        alt_zone = self.alt_zone_client.create_zone(name=alt_zone_name)[1]
         self.addCleanup(self.wait_zone_delete,
                         self.alt_zone_client, alt_zone['id'])
 
@@ -282,7 +331,9 @@
     @decorators.idempotent_id('de5e9d32-c723-4518-84e5-58da9722cc13')
     def test_update_transfer_request(self):
         LOG.info('Create a zone')
-        _, zone = self.zone_client.create_zone()
+        zone_name = dns_data_utils.rand_zone_name(
+            name="update_transfer_request", suffix=self.tld_name)
+        zone = self.zone_client.create_zone(name=zone_name)[1]
         self.addCleanup(self.wait_zone_delete, self.zone_client, zone['id'])
 
         LOG.info('Create a zone transfer_request')
@@ -309,6 +360,7 @@
 
 
 class TestTransferRequestNotFound(BaseTransferRequestTest):
+    credentials = ["admin", "primary", "system_admin"]
 
     @classmethod
     def setup_credentials(cls):
@@ -351,6 +403,7 @@
 
 
 class TestTransferRequestInvalidId(BaseTransferRequestTest):
+    credentials = ["admin", "primary", "system_admin"]
 
     @classmethod
     def setup_credentials(cls):
diff --git a/designate_tempest_plugin/tests/api/v2/test_tsigkey.py b/designate_tempest_plugin/tests/api/v2/test_tsigkey.py
index 69e537f..ceba12e 100644
--- a/designate_tempest_plugin/tests/api/v2/test_tsigkey.py
+++ b/designate_tempest_plugin/tests/api/v2/test_tsigkey.py
@@ -28,6 +28,29 @@
 class BaseTsigkeyTest(base.BaseDnsV2Test):
     excluded_keys = ['created_at', 'updated_at', 'links']
 
+    @classmethod
+    def setup_clients(cls):
+        super(BaseTsigkeyTest, cls).setup_clients()
+
+        if CONF.enforce_scope.designate:
+            cls.admin_tld_client = cls.os_system_admin.dns_v2.TldClient()
+        else:
+            cls.admin_tld_client = cls.os_admin.dns_v2.TldClient()
+
+    @classmethod
+    def resource_setup(cls):
+        super(BaseTsigkeyTest, cls).resource_setup()
+
+        # Make sure we have an allowed TLD available
+        tld_name = dns_data_utils.rand_zone_name(name="BaseTsigkeyTest")
+        cls.tld_name = f".{tld_name}"
+        cls.class_tld = cls.admin_tld_client.create_tld(tld_name=tld_name[:-1])
+
+    @classmethod
+    def resource_cleanup(cls):
+        cls.admin_tld_client.delete_tld(cls.class_tld[1]['id'])
+        super(BaseTsigkeyTest, cls).resource_cleanup()
+
 
 class TsigkeyAdminTest(BaseTsigkeyTest):
     credentials = ["primary", "admin", "system_admin"]
@@ -54,7 +77,9 @@
     @decorators.idempotent_id('e7b484e3-7ed5-4840-89d7-1e696986f8e4')
     def test_create_tsigkey_for_zone(self):
         LOG.info('Create a resource')
-        zone = self.zone_client.create_zone()[1]
+        zone_name = dns_data_utils.rand_zone_name(
+            name="create_tsigkey_for_zone", suffix=self.tld_name)
+        zone = self.zone_client.create_zone(name=zone_name)[1]
         self.addCleanup(self.wait_zone_delete, self.zone_client, zone['id'])
 
         tsigkey_data = {
@@ -98,7 +123,9 @@
     @decorators.idempotent_id('d46e5e86-a18c-4315-aa0c-95a00e816fbf')
     def test_list_tsigkey(self):
         LOG.info('Create a resource')
-        zone = self.zone_client.create_zone()[1]
+        zone_name = dns_data_utils.rand_zone_name(
+            name="list_tsigkey", suffix=self.tld_name)
+        zone = self.zone_client.create_zone(name=zone_name)[1]
         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'])[1]
@@ -110,7 +137,9 @@
     def test_list_tsigkeys_limit_results(self):
         for i in range(3):
             LOG.info('As Primary user create a zone: {} '.format(i))
-            zone = self.zone_client.create_zone()[1]
+            zone_name = dns_data_utils.rand_zone_name(
+                name="list_tsigkey_limit", suffix=self.tld_name)
+            zone = self.zone_client.create_zone(name=zone_name)[1]
             self.addCleanup(
                 self.wait_zone_delete, self.zone_client, zone['id'])
             LOG.info('As Admin user create a tsigkey: {} '.format(i))
@@ -132,7 +161,9 @@
         for name in test_tsigkeys_names:
             LOG.info('As Primary user create a zone to be used '
                      'for {}'.format(name))
-            zone = self.zone_client.create_zone()[1]
+            zone_name = dns_data_utils.rand_zone_name(
+                name="list_tsigkey_marker", suffix=self.tld_name)
+            zone = self.zone_client.create_zone(name=zone_name)[1]
             self.addCleanup(
                 self.wait_zone_delete, self.zone_client, zone['id'])
             LOG.info('As Admin user create "{}" tsigkey'.format(name))
@@ -180,7 +211,9 @@
         created_tsigkey_ids = []
         for name in names_to_create:
             LOG.info('As Primary user create a zone for: {} '.format(name))
-            zone = self.zone_client.create_zone()[1]
+            zone_name = dns_data_utils.rand_zone_name(
+                name="list_tsigkey_sort", suffix=self.tld_name)
+            zone = self.zone_client.create_zone(name=zone_name)[1]
             self.addCleanup(
                 self.wait_zone_delete, self.zone_client, zone['id'])
             LOG.info('As Admin user create a tsigkey: {} '.format(name))
@@ -234,7 +267,9 @@
     def test_list_tsigkey_filter_by_name(self):
         tsigkey_name = data_utils.rand_name('ddd_tsgikey')
         LOG.info('As Primary user create a zone for: {} '.format(tsigkey_name))
-        zone = self.zone_client.create_zone()[1]
+        zone_name = dns_data_utils.rand_zone_name(
+            name="list_tsigkey_filter_name", suffix=self.tld_name)
+        zone = self.zone_client.create_zone(name=zone_name)[1]
         self.addCleanup(self.wait_zone_delete, self.zone_client, zone['id'])
         LOG.info('As Admin user create a tsigkey: {} '.format(tsigkey_name))
         tsigkey = self.admin_client.create_tsigkey(
@@ -271,7 +306,9 @@
         self.addCleanup(self.admin_client.delete_tsigkey, pool_tsigkey['id'])
 
         LOG.info('Create tsigkey for a zone')
-        zone = self.zone_client.create_zone()[1]
+        zone_name = dns_data_utils.rand_zone_name(
+            name="list_tsigkey_filter_scope", suffix=self.tld_name)
+        zone = self.zone_client.create_zone(name=zone_name)[1]
         self.addCleanup(self.wait_zone_delete, self.zone_client, zone['id'])
         zone_tsigkey = self.admin_client.create_tsigkey(
             resource_id=zone['id'], scope='ZONE')[1]
@@ -337,7 +374,9 @@
     @decorators.idempotent_id('c5d7facf-0f05-47a2-a4fb-87f203860880')
     def test_show_tsigkey(self):
         LOG.info('Create a resource')
-        zone = self.zone_client.create_zone()[1]
+        zone_name = dns_data_utils.rand_zone_name(
+            name="show_tsigkey", suffix=self.tld_name)
+        zone = self.zone_client.create_zone(name=zone_name)[1]
         self.addCleanup(self.wait_zone_delete, self.zone_client, zone['id'])
 
         LOG.info('Create a tsigkey')
@@ -353,7 +392,9 @@
     @decorators.idempotent_id('d09dc0dd-dd72-41ee-9085-2afb2bf35459')
     def test_update_tsigkey(self):
         LOG.info('Create a resource')
-        zone = self.zone_client.create_zone()[1]
+        zone_name = dns_data_utils.rand_zone_name(
+            name="update_tsigkey", suffix=self.tld_name)
+        zone = self.zone_client.create_zone(name=zone_name)[1]
         self.addCleanup(self.wait_zone_delete, self.zone_client, zone['id'])
 
         LOG.info('Create a tsigkey')
@@ -375,7 +416,9 @@
     @decorators.idempotent_id('9cdffbd2-bc67-4a25-8eb7-4be8635c88a3')
     def test_delete_tsigkey(self):
         LOG.info('Create a resource')
-        zone = self.zone_client.create_zone()[1]
+        zone_name = dns_data_utils.rand_zone_name(
+            name="delete_tsigkey", suffix=self.tld_name)
+        zone = self.zone_client.create_zone(name=zone_name)[1]
         self.addCleanup(self.wait_zone_delete, self.zone_client, zone['id'])
 
         LOG.info('Create a tsigkey')
@@ -492,7 +535,9 @@
 
     @decorators.idempotent_id('f94af13a-d743-11eb-beba-74e5f9e2a801')
     def test_create_tsigkey_for_zone_invalid_algorithm(self):
-        zone = self.zone_client.create_zone()[1]
+        zone_name = dns_data_utils.rand_zone_name(
+            name="create_tsigkey_invalid_algo", suffix=self.tld_name)
+        zone = self.zone_client.create_zone(name=zone_name)[1]
         self.addCleanup(self.wait_zone_delete, self.zone_client, zone['id'])
         tsigkey_data = {
                         "name": dns_data_utils.rand_zone_name('Example_Key'),
@@ -510,7 +555,9 @@
     @decorators.idempotent_id('4df903d8-d745-11eb-beba-74e5f9e2a801')
     def test_create_tsigkey_for_zone_invalid_name(self):
         LOG.info('Create a zone resource')
-        zone = self.zone_client.create_zone()[1]
+        zone_name = dns_data_utils.rand_zone_name(
+            name="create_tsigkey_invalid_name", suffix=self.tld_name)
+        zone = self.zone_client.create_zone(name=zone_name)[1]
         self.addCleanup(self.wait_zone_delete, self.zone_client, zone['id'])
         tsigkey_data = {
                         "name": dns_data_utils.rand_zone_name(
@@ -530,7 +577,9 @@
     @decorators.skip_because(bug="1933760")
     def test_create_tsigkey_for_zone_empty_secret(self):
         LOG.info('Create a zone resource')
-        zone = self.zone_client.create_zone()[1]
+        zone_name = dns_data_utils.rand_zone_name(
+            name="create_tsigkey_empty_secret", suffix=self.tld_name)
+        zone = self.zone_client.create_zone(name=zone_name)[1]
         self.addCleanup(self.wait_zone_delete, self.zone_client, zone['id'])
         tsigkey_data = {
                         "name": dns_data_utils.rand_zone_name('Example_Key'),
@@ -548,7 +597,9 @@
     @decorators.idempotent_id('dfca9268-d745-11eb-beba-74e5f9e2a801')
     def test_create_tsigkey_for_zone_invalid_scope(self):
         LOG.info('Create a zone resource')
-        zone = self.zone_client.create_zone()[1]
+        zone_name = dns_data_utils.rand_zone_name(
+            name="create_tsigkey_invalid_scope", suffix=self.tld_name)
+        zone = self.zone_client.create_zone(name=zone_name)[1]
         self.addCleanup(self.wait_zone_delete, self.zone_client, zone['id'])
         tsigkey_data = {
                         "name": dns_data_utils.rand_zone_name('Example_Key'),
@@ -566,7 +617,9 @@
     @decorators.idempotent_id('57255858-d74a-11eb-beba-74e5f9e2a801')
     def test_create_tsigkey_for_zone_invalid_zone_id(self):
         LOG.info('Create a resource')
-        zone = self.zone_client.create_zone()[1]
+        zone_name = dns_data_utils.rand_zone_name(
+            name="create_tsigkey_invalide_zone_id", suffix=self.tld_name)
+        zone = self.zone_client.create_zone(name=zone_name)[1]
         self.addCleanup(self.wait_zone_delete, self.zone_client, zone['id'])
         tsigkey_data = {
                         "name": dns_data_utils.rand_zone_name('Example_Key'),
diff --git a/designate_tempest_plugin/tests/api/v2/test_zone_tasks.py b/designate_tempest_plugin/tests/api/v2/test_zone_tasks.py
index bbeea75..db6541e 100644
--- a/designate_tempest_plugin/tests/api/v2/test_zone_tasks.py
+++ b/designate_tempest_plugin/tests/api/v2/test_zone_tasks.py
@@ -22,6 +22,7 @@
 
 from designate_tempest_plugin.common import constants as const
 from designate_tempest_plugin.common import waiters
+from designate_tempest_plugin import data_utils as dns_data_utils
 from designate_tempest_plugin.tests import base
 
 from designate_tempest_plugin.services.dns.query.query_client \
@@ -35,6 +36,29 @@
     excluded_keys = ['created_at', 'updated_at', 'version', 'links',
                     'status', 'action']
 
+    @classmethod
+    def setup_clients(cls):
+        super(BaseZonesTest, cls).setup_clients()
+
+        if CONF.enforce_scope.designate:
+            cls.admin_tld_client = cls.os_system_admin.dns_v2.TldClient()
+        else:
+            cls.admin_tld_client = cls.os_admin.dns_v2.TldClient()
+
+    @classmethod
+    def resource_setup(cls):
+        super(BaseZonesTest, cls).resource_setup()
+
+        # Make sure we have an allowed TLD available
+        tld_name = dns_data_utils.rand_zone_name(name="BaseZonesTest")
+        cls.tld_name = f".{tld_name}"
+        cls.class_tld = cls.admin_tld_client.create_tld(tld_name=tld_name[:-1])
+
+    @classmethod
+    def resource_cleanup(cls):
+        cls.admin_tld_client.delete_tld(cls.class_tld[1]['id'])
+        super(BaseZonesTest, cls).resource_cleanup()
+
 
 class ZoneTasks(BaseZonesTest):
     credentials = ["primary", "alt", "admin", "system_admin"]
@@ -58,7 +82,9 @@
     @decorators.idempotent_id('287e2cd0-a0e7-11eb-b962-74e5f9e2a801')
     def test_zone_abandon(self):
         LOG.info('Create a PRIMARY zone')
-        pr_zone = self.client.create_zone()[1]
+        zone_name = dns_data_utils.rand_zone_name(
+            name="zone_abandon", suffix=self.tld_name)
+        pr_zone = self.client.create_zone(name=zone_name)[1]
         self.addCleanup(self.wait_zone_delete, self.client, pr_zone['id'])
         waiters.wait_for_zone_status(self.client, pr_zone['id'], 'ACTIVE')
 
@@ -88,7 +114,9 @@
     def test_zone_abandon_forbidden(self):
 
         LOG.info('Create a PRIMARY zone and add to the cleanup')
-        pr_zone = self.client.create_zone()[1]
+        zone_name = dns_data_utils.rand_zone_name(
+            name="zone_abandon_forbidden", suffix=self.tld_name)
+        pr_zone = self.client.create_zone(name=zone_name)[1]
         self.addCleanup(self.wait_zone_delete, self.client, pr_zone['id'])
         waiters.wait_for_zone_status(self.client, pr_zone['id'], 'ACTIVE')
 
@@ -144,7 +172,9 @@
     def test_manually_trigger_update_secondary_zone_negative(self):
         # Create a PRIMARY zone
         LOG.info('Create a PRIMARY zone')
-        pr_zone = self.client.create_zone()[1]
+        zone_name = dns_data_utils.rand_zone_name(
+            name="manually_trigger_update_primary", suffix=self.tld_name)
+        pr_zone = self.client.create_zone(name=zone_name)[1]
         self.addCleanup(self.wait_zone_delete, self.client, pr_zone['id'])
         waiters.wait_for_zone_status(self.client, pr_zone['id'], 'ACTIVE')
 
@@ -170,7 +200,9 @@
 
         # Create a SECONDARY zone
         LOG.info('Create a SECONDARY zone')
-        sec_zone = self.client.create_zone(
+        zone_name = dns_data_utils.rand_zone_name(
+            name="manually_trigger_update_secondary", suffix=self.tld_name)
+        sec_zone = self.client.create_zone(name=zone_name,
             zone_type=const.SECONDARY_ZONE_TYPE, primaries=nameservers)[1]
         self.addCleanup(self.wait_zone_delete, self.client, sec_zone['id'])
         LOG.info('Ensure we respond with CREATE+PENDING')
diff --git a/designate_tempest_plugin/tests/api/v2/test_zones.py b/designate_tempest_plugin/tests/api/v2/test_zones.py
index f2faa88..aac3bda 100644
--- a/designate_tempest_plugin/tests/api/v2/test_zones.py
+++ b/designate_tempest_plugin/tests/api/v2/test_zones.py
@@ -32,6 +32,29 @@
     excluded_keys = ['created_at', 'updated_at', 'version', 'links',
                     'status', 'action']
 
+    @classmethod
+    def setup_clients(cls):
+        super(BaseZonesTest, cls).setup_clients()
+
+        if CONF.enforce_scope.designate:
+            cls.admin_tld_client = cls.os_system_admin.dns_v2.TldClient()
+        else:
+            cls.admin_tld_client = cls.os_admin.dns_v2.TldClient()
+
+    @classmethod
+    def resource_setup(cls):
+        super(BaseZonesTest, cls).resource_setup()
+
+        # Make sure we have an allowed TLD available
+        tld_name = dns_data_utils.rand_zone_name(name="BaseZonesTest")
+        cls.tld_name = f".{tld_name}"
+        cls.class_tld = cls.admin_tld_client.create_tld(tld_name=tld_name[:-1])
+
+    @classmethod
+    def resource_cleanup(cls):
+        cls.admin_tld_client.delete_tld(cls.class_tld[1]['id'])
+        super(BaseZonesTest, cls).resource_cleanup()
+
 
 class ZonesTest(BaseZonesTest):
     credentials = ["admin", "system_admin", "primary"]
@@ -56,7 +79,9 @@
     def test_create_zones(self):
         # Create a PRIMARY zone
         LOG.info('Create a PRIMARY zone')
-        zone = self.client.create_zone()[1]
+        zone_name = dns_data_utils.rand_zone_name(
+            name="create_zones_primary", suffix=self.tld_name)
+        zone = self.client.create_zone(name=zone_name)[1]
         self.addCleanup(self.wait_zone_delete, self.client, zone['id'])
 
         LOG.info('Ensure we respond with CREATE+PENDING')
@@ -69,8 +94,11 @@
 
         # Create a SECONDARY zone
         LOG.info('Create a SECONDARY zone')
+        zone_name = dns_data_utils.rand_zone_name(
+            name="create_zones_secondary", suffix=self.tld_name)
         zone = self.client.create_zone(
-            zone_type=const.SECONDARY_ZONE_TYPE, primaries=nameservers)[1]
+            name=zone_name, zone_type=const.SECONDARY_ZONE_TYPE,
+            primaries=nameservers)[1]
         self.addCleanup(self.wait_zone_delete, self.client, zone['id'])
 
         LOG.info('Ensure we respond with CREATE+PENDING')
@@ -81,7 +109,10 @@
     def test_create_zone_validate_recordsets_created(self):
         # Create a PRIMARY zone and wait till it's Active
         LOG.info('Create a PRIMARY zone')
-        zone = self.client.create_zone(wait_until=const.ACTIVE)[1]
+        zone_name = dns_data_utils.rand_zone_name(
+            name="create_zone_validate_recordsets", suffix=self.tld_name)
+        zone = self.client.create_zone(name=zone_name,
+                                       wait_until=const.ACTIVE)[1]
         self.addCleanup(self.wait_zone_delete, self.client, zone['id'])
 
         LOG.info('Ensure we respond with CREATE+PENDING')
@@ -102,11 +133,13 @@
     @decorators.idempotent_id('02ca5d6a-86ce-4f02-9d94-9e5db55c3055')
     def test_show_zone(self):
         LOG.info('Create a zone')
-        _, zone = self.client.create_zone()
+        zone_name = dns_data_utils.rand_zone_name(
+            name="show_zones", suffix=self.tld_name)
+        zone = self.client.create_zone(name=zone_name)[1]
         self.addCleanup(self.wait_zone_delete, self.client, zone['id'])
 
         LOG.info('Fetch the zone')
-        _, body = self.client.show_zone(zone['id'])
+        body = self.client.show_zone(zone['id'])[1]
 
         LOG.info('Ensure the fetched response matches the created zone')
         self.assertExpected(zone, body, self.excluded_keys)
@@ -127,12 +160,14 @@
     @decorators.idempotent_id('a4791906-6cd6-4d27-9f15-32273db8bb3d')
     def test_delete_zone(self):
         LOG.info('Create a zone')
-        _, zone = self.client.create_zone()
+        zone_name = dns_data_utils.rand_zone_name(
+            name="delete_zones", suffix=self.tld_name)
+        zone = self.client.create_zone(name=zone_name)[1]
         self.addCleanup(self.wait_zone_delete, self.client, zone['id'],
                         ignore_errors=lib_exc.NotFound)
 
         LOG.info('Delete the zone')
-        _, body = self.client.delete_zone(zone['id'])
+        body = self.client.delete_zone(zone['id'])[1]
 
         LOG.info('Ensure we respond with DELETE+PENDING')
         self.assertEqual(const.DELETE, body['action'])
@@ -147,7 +182,9 @@
     @decorators.idempotent_id('5bfa3cfe-5bc8-443b-bf48-cfba44cbb247')
     def test_list_zones(self):
         LOG.info('Create a zone')
-        _, zone = self.client.create_zone()
+        zone_name = dns_data_utils.rand_zone_name(
+            name="list_zones", suffix=self.tld_name)
+        zone = self.client.create_zone(name=zone_name)[1]
         self.addCleanup(self.wait_zone_delete, self.client, zone['id'])
 
         LOG.info('List zones')
@@ -160,15 +197,17 @@
     @decorators.idempotent_id('123f51cb-19d5-48a9-aacc-476742c02141')
     def test_update_zone(self):
         LOG.info('Create a zone')
-        _, zone = self.client.create_zone()
+        zone_name = dns_data_utils.rand_zone_name(
+            name="update_zone", suffix=self.tld_name)
+        zone = self.client.create_zone(name=zone_name)[1]
         self.addCleanup(self.wait_zone_delete, self.client, zone['id'])
 
         # Generate a random description
         description = data_utils.rand_name()
 
         LOG.info('Update the zone')
-        _, zone = self.client.update_zone(
-            zone['id'], description=description)
+        zone = self.client.update_zone(
+            zone['id'], description=description)[1]
 
         LOG.info('Ensure we respond with UPDATE+PENDING')
         self.assertEqual(const.UPDATE, zone['action'])
@@ -181,7 +220,10 @@
     @decorators.skip_because(bug="1960487")
     def test_serial_changes_on_update(self):
         LOG.info('Create a zone')
-        zone = self.client.create_zone(wait_until=const.ACTIVE)[1]
+        zone_name = dns_data_utils.rand_zone_name(
+            name="serial_changes_on_update", suffix=self.tld_name)
+        zone = self.client.create_zone(name=zone_name,
+                                       wait_until=const.ACTIVE)[1]
         self.addCleanup(self.wait_zone_delete, self.client, zone['id'])
 
         LOG.info("Update Zone's email")
@@ -236,7 +278,9 @@
     def test_get_primary_zone_nameservers(self):
         # Create a zone and get the associated "pool_id"
         LOG.info('Create a zone')
-        zone = self.client.create_zone()[1]
+        zone_name = dns_data_utils.rand_zone_name(
+            name="get_primary_nameservers", suffix=self.tld_name)
+        zone = self.client.create_zone(name=zone_name)[1]
         self.addCleanup(self.wait_zone_delete, self.client, zone['id'])
         zone_pool_id = zone['pool_id']
 
@@ -281,7 +325,9 @@
     @decorators.idempotent_id('f6fe8cce-8b04-11eb-a861-74e5f9e2a801')
     def test_show_zone_impersonate_another_project(self):
         LOG.info('Create zone "A" using primary client')
-        zone = self.client.create_zone()[1]
+        zone_name = dns_data_utils.rand_zone_name(
+            name="show_zone_impersonate", suffix=self.tld_name)
+        zone = self.client.create_zone(name=zone_name)[1]
         self.addCleanup(self.wait_zone_delete, self.client, zone['id'])
 
         LOG.info('As Alt tenant show zone created by Primary tenant. '
@@ -316,18 +362,27 @@
     def test_list_all_projects_zones(self):
 
         LOG.info('Create zone "A" using Primary client')
-        primary_zone = self.client.create_zone(wait_until=const.ACTIVE)[1]
+        zone_name = dns_data_utils.rand_zone_name(
+            name="list_zone_all_projects_A", suffix=self.tld_name)
+        primary_zone = self.client.create_zone(name=zone_name,
+                                               wait_until=const.ACTIVE)[1]
         self.addCleanup(
             self.wait_zone_delete, self.client, primary_zone['id'])
 
         LOG.info('Create zone "B" using Alt client')
-        alt_zone = self.alt_client.create_zone(wait_until=const.ACTIVE)[1]
+        zone_name = dns_data_utils.rand_zone_name(
+            name="list_zone_all_projects_B", suffix=self.tld_name)
+        alt_zone = self.alt_client.create_zone(name=zone_name,
+                                               wait_until=const.ACTIVE)[1]
         self.addCleanup(
             self.wait_zone_delete, self.alt_client, alt_zone['id'])
 
         LOG.info('Create zone "C" using Admin client')
+        zone_name = dns_data_utils.rand_zone_name(
+            name="list_zone_all_projects_C", suffix=self.tld_name)
         admin_zone = self.admin_client.create_zone(
-            project_id="FakeProjectID", wait_until=const.ACTIVE)[1]
+            name=zone_name, project_id="FakeProjectID",
+            wait_until=const.ACTIVE)[1]
         self.addCleanup(
             self.wait_zone_delete, self.admin_client, admin_zone['id'],
             headers=self.all_projects_header)
@@ -352,7 +407,7 @@
 
 
 class ZoneOwnershipTest(BaseZonesTest):
-    credentials = ["primary", "alt"]
+    credentials = ["primary", "alt", "admin", "system_admin"]
 
     @classmethod
     def setup_credentials(cls):
@@ -369,7 +424,9 @@
     @decorators.idempotent_id('5d28580a-a012-4b57-b211-e077b1a01340')
     def test_no_create_duplicate_domain(self):
         LOG.info('Create a zone as a default user')
-        _, zone = self.client.create_zone()
+        zone_name = dns_data_utils.rand_zone_name(
+            name="no_create_duplicate", suffix=self.tld_name)
+        zone = self.client.create_zone(name=zone_name)[1]
         self.addCleanup(self.wait_zone_delete, self.client, zone['id'])
 
         LOG.info('Create a zone as an default with existing domain')
@@ -383,7 +440,9 @@
     @decorators.idempotent_id('a48776fd-b1aa-4a25-9f09-d1d34cfbb175')
     def test_no_create_subdomain_by_alt_user(self):
         LOG.info('Create a zone as a default user')
-        _, zone = self.client.create_zone()
+        zone_name = dns_data_utils.rand_zone_name(
+            name="no_create_subdomain_by_alt", suffix=self.tld_name)
+        zone = self.client.create_zone(name=zone_name)[1]
         self.addCleanup(self.wait_zone_delete, self.client, zone['id'])
 
         LOG.info('Create a zone as an alt user with existing subdomain')
@@ -394,10 +453,11 @@
 
     @decorators.idempotent_id('f1723d48-c082-43cd-94bf-ebeb5b8c9458')
     def test_no_create_superdomain_by_alt_user(self):
-        zone_name = dns_data_utils.rand_zone_name()
+        zone_name = dns_data_utils.rand_zone_name(
+            name="no_create_superdomain_by_alt", suffix=self.tld_name)
 
         LOG.info('Create a zone as a default user')
-        _, zone = self.client.create_zone(name='a.b.' + zone_name)
+        zone = self.client.create_zone(name='a.b.' + zone_name)[1]
         self.addCleanup(self.wait_zone_delete, self.client, zone['id'])
 
         LOG.info('Create a zone as an alt user with existing superdomain')
@@ -406,6 +466,8 @@
 
 
 class ZonesNegativeTest(BaseZonesTest):
+    credentials = ["admin", "primary", "system_admin"]
+
     @classmethod
     def setup_credentials(cls):
         # Do not create network resources for these test.
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 31da506..4dab500 100644
--- a/designate_tempest_plugin/tests/api/v2/test_zones_exports.py
+++ b/designate_tempest_plugin/tests/api/v2/test_zones_exports.py
@@ -21,6 +21,7 @@
 from designate_tempest_plugin.tests import base
 from designate_tempest_plugin.common import waiters
 from designate_tempest_plugin.common import constants as const
+from designate_tempest_plugin import data_utils as dns_data_utils
 
 CONF = config.CONF
 LOG = logging.getLogger(__name__)
@@ -30,6 +31,29 @@
     excluded_keys = ['created_at', 'updated_at', 'version', 'links',
                      'status', 'location']
 
+    @classmethod
+    def setup_clients(cls):
+        super(BaseZoneExportsTest, cls).setup_clients()
+
+        if CONF.enforce_scope.designate:
+            cls.admin_tld_client = cls.os_system_admin.dns_v2.TldClient()
+        else:
+            cls.admin_tld_client = cls.os_admin.dns_v2.TldClient()
+
+    @classmethod
+    def resource_setup(cls):
+        super(BaseZoneExportsTest, cls).resource_setup()
+
+        # Make sure we have an allowed TLD available
+        tld_name = dns_data_utils.rand_zone_name(name="BaseZoneExportsTest")
+        cls.tld_name = f".{tld_name}"
+        cls.class_tld = cls.admin_tld_client.create_tld(tld_name=tld_name[:-1])
+
+    @classmethod
+    def resource_cleanup(cls):
+        cls.admin_tld_client.delete_tld(cls.class_tld[1]['id'])
+        super(BaseZoneExportsTest, cls).resource_cleanup()
+
 
 class ZonesExportTest(BaseZoneExportsTest):
     credentials = ["primary", "admin", "system_admin", "alt"]
@@ -52,9 +76,11 @@
         cls.client = cls.os_primary.dns_v2.ZoneExportsClient()
         cls.alt_client = cls.os_alt.dns_v2.ZoneExportsClient()
 
-    def _create_zone_export(self):
+    def _create_zone_export(self, test_name):
         LOG.info('Create a zone')
-        zone = self.zone_client.create_zone()[1]
+        zone_name = dns_data_utils.rand_zone_name(
+            name=test_name, suffix=self.tld_name)
+        zone = self.zone_client.create_zone(name=zone_name)[1]
         self.addCleanup(self.wait_zone_delete, self.zone_client, zone['id'])
 
         LOG.info('Create a zone export')
@@ -66,7 +92,7 @@
 
     @decorators.idempotent_id('2dd8a9a0-98a2-4bf6-bb51-286583b30f40')
     def test_create_zone_export(self):
-        zone_export = self._create_zone_export()[1]
+        zone_export = self._create_zone_export('create_zone_export')[1]
 
         LOG.info('Ensure we respond with PENDING')
         self.assertEqual(const.PENDING, zone_export['status'])
@@ -74,7 +100,7 @@
     @decorators.attr(type='smoke')
     @decorators.idempotent_id('2d29a2a9-1941-4b7e-9d8a-ad6c2140ea68')
     def test_show_zone_export(self):
-        zone_export = self._create_zone_export()[1]
+        zone_export = self._create_zone_export('show_zone_export')[1]
 
         LOG.info('Re-Fetch the zone export')
         body = self.client.show_zone_export(zone_export['id'])[1]
@@ -85,7 +111,9 @@
     @decorators.idempotent_id('fb04507c-9600-11eb-b1cd-74e5f9e2a801')
     def test_show_zone_export_impersonate_another_project(self):
         LOG.info('Create a zone')
-        zone = self.zone_client.create_zone()[1]
+        zone_name = dns_data_utils.rand_zone_name(
+            name='show_zone_export_impersonate', suffix=self.tld_name)
+        zone = self.zone_client.create_zone(name=zone_name)[1]
         self.addCleanup(self.wait_zone_delete, self.zone_client, zone['id'])
 
         LOG.info('Create a zone export using primary client')
@@ -108,7 +136,9 @@
     @decorators.idempotent_id('97234f00-8bcb-43f8-84dd-874f8bc4a80e')
     def test_delete_zone_export(self):
         LOG.info('Create a zone')
-        _, zone = self.zone_client.create_zone()
+        zone_name = dns_data_utils.rand_zone_name(
+            name='delete_zone_export', suffix=self.tld_name)
+        zone = self.zone_client.create_zone(name=zone_name)[1]
         self.addCleanup(self.wait_zone_delete, self.zone_client, zone['id'],
                         ignore_errors=lib_exc.NotFound)
 
@@ -125,7 +155,7 @@
 
     @decorators.idempotent_id('476bfdfe-58c8-46e2-b376-8403c0fff440')
     def test_list_zone_exports(self):
-        self._create_zone_export()[1]
+        self._create_zone_export('list_zone_exports')[1]
 
         LOG.info('List zone exports')
         body = self.client.list_zone_exports()[1]
@@ -135,14 +165,18 @@
     @decorators.idempotent_id('f34e7f34-9613-11eb-b1cd-74e5f9e2a801')
     def test_list_zone_exports_all_projects(self):
         LOG.info('Create a primary zone and its export')
-        primary_zone = self.zone_client.create_zone()[1]
+        zone_name = dns_data_utils.rand_zone_name(
+            name='list_zone_exports_all_projects', suffix=self.tld_name)
+        primary_zone = self.zone_client.create_zone(name=zone_name)[1]
         self.addCleanup(
             self.wait_zone_delete, self.zone_client, primary_zone['id'])
         primary_export = self.client.create_zone_export(primary_zone['id'])[1]
         self.addCleanup(self.client.delete_zone_export, primary_export['id'])
 
         LOG.info('Create an alt zone and its export')
-        alt_zone = self.alt_zone_client.create_zone()[1]
+        alt_zone_name = dns_data_utils.rand_zone_name(
+            name='list_zone_exports_all_projects_alt', suffix=self.tld_name)
+        alt_zone = self.alt_zone_client.create_zone(name=alt_zone_name)[1]
         self.addCleanup(
             self.wait_zone_delete, self.alt_zone_client, alt_zone['id'])
         alt_export = self.alt_client.create_zone_export(alt_zone['id'])[1]
@@ -169,14 +203,18 @@
     def test_list_zone_exports_filter_results(self):
 
         LOG.info('Create a primary zone and its export')
-        primary_zone = self.zone_client.create_zone()[1]
+        zone_name = dns_data_utils.rand_zone_name(
+            name='list_zone_exports_filter', suffix=self.tld_name)
+        primary_zone = self.zone_client.create_zone(name=zone_name)[1]
         self.addCleanup(
             self.wait_zone_delete, self.zone_client, primary_zone['id'])
         primary_export = self.client.create_zone_export(primary_zone['id'])[1]
         self.addCleanup(self.client.delete_zone_export, primary_export['id'])
 
         LOG.info('Create an alt zone, its export and delete it')
-        alt_zone = self.alt_zone_client.create_zone()[1]
+        zone_name = dns_data_utils.rand_zone_name(
+            name='list_zone_exports_filter_alt', suffix=self.tld_name)
+        alt_zone = self.alt_zone_client.create_zone(name=zone_name)[1]
         self.addCleanup(
             self.wait_zone_delete, self.alt_zone_client, alt_zone['id'])
         alt_export = self.alt_client.create_zone_export(alt_zone['id'])[1]
@@ -222,7 +260,7 @@
 
 
 class ZonesExportTestNegative(BaseZoneExportsTest):
-    credentials = ["primary", "alt"]
+    credentials = ["primary", "alt", "admin", "system_admin"]
 
     @classmethod
     def setup_credentials(cls):
@@ -237,9 +275,11 @@
         cls.client = cls.os_primary.dns_v2.ZoneExportsClient()
         cls.alt_client = cls.os_alt.dns_v2.ZoneExportsClient()
 
-    def _create_zone_export(self):
+    def _create_zone_export(self, test_name):
         LOG.info('Create a zone')
-        zone = self.zone_client.create_zone()[1]
+        zone_name = dns_data_utils.rand_zone_name(name=test_name,
+                                                  suffix=self.tld_name)
+        zone = self.zone_client.create_zone(name=zone_name)[1]
         self.addCleanup(self.wait_zone_delete, self.zone_client, zone['id'])
 
         LOG.info('Create a zone export')
@@ -258,7 +298,9 @@
     @decorators.idempotent_id('943dad4a-9617-11eb-b1cd-74e5f9e2a801')
     def test_export_not_your_zone(self):
         LOG.info('Create a primary zone.')
-        primary_zone = self.zone_client.create_zone()[1]
+        zone_name = dns_data_utils.rand_zone_name(name='export_not_your_zone',
+                                                  suffix=self.tld_name)
+        primary_zone = self.zone_client.create_zone(name=zone_name)[1]
         self.addCleanup(
             self.wait_zone_delete, self.zone_client, primary_zone['id'])
 
@@ -270,7 +312,9 @@
     @decorators.idempotent_id('518dc308-9604-11eb-b1cd-74e5f9e2a801')
     def test_create_zone_export_using_deleted_zone(self):
         LOG.info('Create a zone')
-        zone = self.zone_client.create_zone()[1]
+        zone_name = dns_data_utils.rand_zone_name(name='export_deleted_zone',
+                                                  suffix=self.tld_name)
+        zone = self.zone_client.create_zone(name=zone_name)[1]
         self.addCleanup(self.wait_zone_delete, self.zone_client, zone['id'],
                         ignore_errors=lib_exc.NotFound)
         LOG.info("Delete the zone and wait till it's done.")
@@ -290,7 +334,8 @@
 
     @decorators.idempotent_id('52a1fee0-c338-4ed9-b9f9-41ee7fd73375')
     def test_show_zonefile_not_supported_accept_value(self):
-        zone, zone_export = self._create_zone_export()
+        zone, zone_export = self._create_zone_export(
+            'show_zonefile_bad_accept')
         # Tempest-lib _error_checker will raise UnexpectedResponseCode
         e = self.assertRaises(
             lib_exc.UnexpectedResponseCode, self.client.show_exported_zonefile,
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 510708d..09ff4af 100644
--- a/designate_tempest_plugin/tests/api/v2/test_zones_imports.py
+++ b/designate_tempest_plugin/tests/api/v2/test_zones_imports.py
@@ -30,6 +30,29 @@
     excluded_keys = ['created_at', 'updated_at', 'version', 'links',
                      'status', 'message', 'zone_id']
 
+    @classmethod
+    def setup_clients(cls):
+        super(BaseZonesImportTest, cls).setup_clients()
+
+        if CONF.enforce_scope.designate:
+            cls.admin_tld_client = cls.os_system_admin.dns_v2.TldClient()
+        else:
+            cls.admin_tld_client = cls.os_admin.dns_v2.TldClient()
+
+    @classmethod
+    def resource_setup(cls):
+        super(BaseZonesImportTest, cls).resource_setup()
+
+        # Make sure we have an allowed TLD available
+        tld_name = dns_data_utils.rand_zone_name(name="BaseZonesImportTest")
+        cls.tld_name = f".{tld_name}"
+        cls.class_tld = cls.admin_tld_client.create_tld(tld_name=tld_name[:-1])
+
+    @classmethod
+    def resource_cleanup(cls):
+        cls.admin_tld_client.delete_tld(cls.class_tld[1]['id'])
+        super(BaseZonesImportTest, cls).resource_cleanup()
+
 
 class ZonesImportTest(BaseZonesImportTest):
     credentials = ["primary", "admin", "system_admin", "alt"]
@@ -64,7 +87,11 @@
     @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()
+        zone_name = dns_data_utils.rand_zone_name(
+            name="create_zone_import", suffix=self.tld_name)
+        zone_data = dns_data_utils.rand_zonefile_data(name=zone_name)
+        zone_import = self.client.create_zone_import(
+            zonefile_data=zone_data)[1]
         self.addCleanup(self.clean_up_resources, zone_import['id'])
         # Make sure we complete the import and have the zone_id for cleanup
         waiters.wait_for_zone_import_status(
@@ -73,8 +100,12 @@
     @decorators.idempotent_id('31eaf25a-9532-11eb-a55d-74e5f9e2a801')
     def test_create_zone_import_invalid_ttl(self):
         LOG.info('Try to create a zone import using invalid TTL value')
+        zone_name = dns_data_utils.rand_zone_name(
+            name="create_zone_import_invalid_ttl", suffix=self.tld_name)
+        zone_data = dns_data_utils.rand_zonefile_data(name=zone_name,
+                                                      ttl='zahlabut')
         zone_import = self.client.create_zone_import(
-            zonefile_data=dns_data_utils.rand_zonefile_data(ttl='zahlabut'))[1]
+            zonefile_data=zone_data)[1]
         self.addCleanup(self.clean_up_resources, zone_import['id'])
         waiters.wait_for_zone_import_status(
             self.client, zone_import['id'], "ERROR")
@@ -92,7 +123,11 @@
     @decorators.idempotent_id('c8909558-0dc6-478a-9e91-eb97b52e59e0')
     def test_show_zone_import(self):
         LOG.info('Create a zone import')
-        _, zone_import = self.client.create_zone_import()
+        zone_name = dns_data_utils.rand_zone_name(
+            name="show_zone_import", suffix=self.tld_name)
+        zone_data = dns_data_utils.rand_zonefile_data(name=zone_name)
+        zone_import = self.client.create_zone_import(
+            zonefile_data=zone_data)[1]
         self.addCleanup(self.clean_up_resources, zone_import['id'])
         # Make sure we complete the import and have the zone_id for cleanup
         waiters.wait_for_zone_import_status(
@@ -107,10 +142,14 @@
     @decorators.idempotent_id('56a16e68-b241-4e41-bc5c-c40747fa68e3')
     def test_delete_zone_import(self):
         LOG.info('Create a zone import')
-        _, zone_import = self.client.create_zone_import()
+        zone_name = dns_data_utils.rand_zone_name(
+            name="delete_zone_import", suffix=self.tld_name)
+        zone_data = dns_data_utils.rand_zonefile_data(name=zone_name)
+        zone_import = self.client.create_zone_import(
+            zonefile_data=zone_data)[1]
         waiters.wait_for_zone_import_status(self.client, zone_import['id'],
                                             const.COMPLETE)
-        _, zone_import = self.client.show_zone_import(zone_import['id'])
+        zone_import = self.client.show_zone_import(zone_import['id'])[1]
         self.addCleanup(self.wait_zone_delete,
                         self.zone_client,
                         zone_import['zone_id'])
@@ -125,14 +164,18 @@
     @decorators.idempotent_id('9eab76af-1995-485f-a2ef-8290c1863aba')
     def test_list_zones_imports(self):
         LOG.info('Create a zone import')
-        _, zone_import = self.client.create_zone_import()
+        zone_name = dns_data_utils.rand_zone_name(
+            name="list_zone_imports", suffix=self.tld_name)
+        zone_data = dns_data_utils.rand_zonefile_data(name=zone_name)
+        zone_import = self.client.create_zone_import(
+            zonefile_data=zone_data)[1]
         self.addCleanup(self.clean_up_resources, zone_import['id'])
         # Make sure we complete the import and have the zone_id for cleanup
         waiters.wait_for_zone_import_status(
             self.client, zone_import['id'], const.COMPLETE)
 
         LOG.info('List zones imports')
-        _, body = self.client.list_zone_imports()
+        body = self.client.list_zone_imports()[1]
 
         self.assertGreater(len(body['imports']), 0)
 
@@ -140,7 +183,11 @@
     def test_show_import_impersonate_another_project(self):
 
         LOG.info('Import zone "A" using primary client')
-        zone_import = self.client.create_zone_import()[1]
+        zone_name = dns_data_utils.rand_zone_name(
+            name="show_zone_import_impersonate", suffix=self.tld_name)
+        zone_data = dns_data_utils.rand_zonefile_data(name=zone_name)
+        zone_import = self.client.create_zone_import(
+            zonefile_data=zone_data)[1]
         self.addCleanup(self.clean_up_resources, zone_import['id'])
 
         # Make sure we complete the import and have the zone_id for cleanup
@@ -182,7 +229,11 @@
     @decorators.idempotent_id('7bd06ec6-9556-11eb-a55d-74e5f9e2a801')
     def test_list_import_zones_all_projects(self):
         LOG.info('Create import zone "A" using primary client')
-        zone_import = self.client.create_zone_import()[1]
+        zone_name = dns_data_utils.rand_zone_name(
+            name="_zone_imports_all_projects", suffix=self.tld_name)
+        zone_data = dns_data_utils.rand_zonefile_data(name=zone_name)
+        zone_import = self.client.create_zone_import(
+            zonefile_data=zone_data)[1]
         self.addCleanup(self.clean_up_resources, zone_import['id'])
         # Make sure we complete the import and have the zone_id for cleanup
         waiters.wait_for_zone_import_status(
diff --git a/designate_tempest_plugin/tests/base.py b/designate_tempest_plugin/tests/base.py
index 28b43cb..e251ac8 100644
--- a/designate_tempest_plugin/tests/base.py
+++ b/designate_tempest_plugin/tests/base.py
@@ -163,7 +163,6 @@
     """Base class for DNS V2 API tests."""
 
     all_projects_header = {'X-Auth-All-Projects': True}
-    tld_suffix = CONF.dns.tld_suffix
 
     @classmethod
     def skip_checks(cls):
diff --git a/designate_tempest_plugin/tests/scenario/v2/test_blacklists.py b/designate_tempest_plugin/tests/scenario/v2/test_blacklists.py
index 27b3f7f..a7455de 100644
--- a/designate_tempest_plugin/tests/scenario/v2/test_blacklists.py
+++ b/designate_tempest_plugin/tests/scenario/v2/test_blacklists.py
@@ -27,6 +27,29 @@
 class BaseBlacklistsTest(base.BaseDnsV2Test):
     excluded_keys = ['created_at', 'updated_at', 'links']
 
+    @classmethod
+    def setup_clients(cls):
+        super(BaseBlacklistsTest, cls).setup_clients()
+
+        if CONF.enforce_scope.designate:
+            cls.admin_tld_client = cls.os_system_admin.dns_v2.TldClient()
+        else:
+            cls.admin_tld_client = cls.os_admin.dns_v2.TldClient()
+
+    @classmethod
+    def resource_setup(cls):
+        super(BaseBlacklistsTest, cls).resource_setup()
+
+        # Make sure we have an allowed TLD available
+        tld_name = dns_data_utils.rand_zone_name(name="BaseBlacklistsTest")
+        cls.tld_name = f".{tld_name}"
+        cls.class_tld = cls.admin_tld_client.create_tld(tld_name=tld_name[:-1])
+
+    @classmethod
+    def resource_cleanup(cls):
+        cls.admin_tld_client.delete_tld(cls.class_tld[1]['id'])
+        super(BaseBlacklistsTest, cls).resource_cleanup()
+
 
 class BlacklistE2E(BaseBlacklistsTest):
 
@@ -86,7 +109,8 @@
     @decorators.idempotent_id('de030088-d97e-11eb-8ab8-74e5f9e2a801')
     def test_admin_creates_zone_matches_blacklist_name_or_regex(self):
         LOG.info('Create a blacklists using: regex and exact string(name)')
-        zone_name = 'blacklistnameregextest1' + dns_data_utils.rand_zone_name()
+        zone_name = dns_data_utils.rand_zone_name(
+            name="admin_creates_zone_matches_blacklist1", suffix=self.tld_name)
         blacklists = [
             {'pattern': '^blacklistnameregextest2.*',
              'description': 'Zone starts with "a" char'},
@@ -99,9 +123,10 @@
 
         LOG.info('As Admin user try to create zones that are '
                  'supposed to be blocked')
+        zone_name2 = dns_data_utils.rand_zone_name(
+            name="admin_creates_zone_matches_blacklist2", suffix=self.tld_name)
         zone = self.admin_zone_client.create_zone(
-            name='blacklistnameregextest2' +
-                 dns_data_utils.rand_zone_name(),
+            name=zone_name2,
             project_id=self.primary_zone_client.project_id)[1]
         self.addCleanup(
             self.wait_zone_delete, self.admin_zone_client, zone['id'])
diff --git a/designate_tempest_plugin/tests/scenario/v2/test_quotas.py b/designate_tempest_plugin/tests/scenario/v2/test_quotas.py
index 0c20b3d..c5725ed 100644
--- a/designate_tempest_plugin/tests/scenario/v2/test_quotas.py
+++ b/designate_tempest_plugin/tests/scenario/v2/test_quotas.py
@@ -49,12 +49,28 @@
         super(QuotasV2Test, cls).setup_clients()
         if CONF.enforce_scope.designate:
             cls.admin_client = cls.os_system_admin.dns_v2.QuotasClient()
+            cls.admin_tld_client = cls.os_system_admin.dns_v2.TldClient()
         else:
             cls.admin_client = cls.os_admin.dns_v2.QuotasClient()
+            cls.admin_tld_client = cls.os_admin.dns_v2.TldClient()
         cls.quotas_client = cls.os_primary.dns_v2.QuotasClient()
         cls.alt_client = cls.os_alt.dns_v2.QuotasClient()
         cls.alt_zone_client = cls.os_alt.dns_v2.ZonesClient()
 
+    @classmethod
+    def resource_setup(cls):
+        super(QuotasV2Test, cls).resource_setup()
+
+        # Make sure we have an allowed TLD available
+        tld_name = dns_data_utils.rand_zone_name(name="QuotasV2Test")
+        cls.tld_name = f".{tld_name}"
+        cls.class_tld = cls.admin_tld_client.create_tld(tld_name=tld_name[:-1])
+
+    @classmethod
+    def resource_cleanup(cls):
+        cls.admin_tld_client.delete_tld(cls.class_tld[1]['id'])
+        super(QuotasV2Test, cls).resource_cleanup()
+
     @decorators.idempotent_id('6987953a-dccf-11eb-903e-74e5f9e2a801')
     def test_alt_reaches_zones_quota(self):
 
@@ -78,7 +94,9 @@
             attempt_number += 1
             LOG.info('Attempt No:{} '.format(attempt_number))
             try:
-                zone = self.alt_zone_client.create_zone()[1]
+                zone_name = dns_data_utils.rand_zone_name(
+                    name="alt_reaches_zones_quota", suffix=self.tld_name)
+                zone = self.alt_zone_client.create_zone(name=zone_name)[1]
                 self.addCleanup(
                     self.wait_zone_delete, self.alt_zone_client, zone['id'])
             except Exception as err:
diff --git a/designate_tempest_plugin/tests/scenario/v2/test_recordsets.py b/designate_tempest_plugin/tests/scenario/v2/test_recordsets.py
index 4c40c28..e58a54c 100644
--- a/designate_tempest_plugin/tests/scenario/v2/test_recordsets.py
+++ b/designate_tempest_plugin/tests/scenario/v2/test_recordsets.py
@@ -17,6 +17,7 @@
 import ddt
 
 from designate_tempest_plugin.tests import base
+from designate_tempest_plugin import data_utils as dns_data_utils
 from designate_tempest_plugin.common import waiters
 
 
@@ -35,8 +36,10 @@
         super(RecordsetsTest, cls).setup_clients()
         if CONF.enforce_scope.designate:
             cls.admin_client = cls.os_system_admin.dns_v2.RecordsetClient()
+            cls.admin_tld_client = cls.os_system_admin.dns_v2.TldClient()
         else:
             cls.admin_client = cls.os_admin.dns_v2.RecordsetClient()
+            cls.admin_tld_client = cls.os_admin.dns_v2.TldClient()
         cls.client = cls.os_primary.dns_v2.ZonesClient()
         cls.recordset_client = cls.os_primary.dns_v2.RecordsetClient()
 
@@ -49,8 +52,15 @@
             LOG.info('Retrieve info from a zone')
             _, zone = cls.client.show_zone(zone_id)
         else:
+            # Make sure we have an allowed TLD available
+            tld_name = dns_data_utils.rand_zone_name(name="RecordsetsTest")
+            cls.tld_name = f".{tld_name}"
+            cls.class_tld = cls.admin_tld_client.create_tld(
+                tld_name=tld_name[:-1])
             LOG.info('Create a new zone')
-            _, zone = cls.client.create_zone()
+            zone_name = dns_data_utils.rand_zone_name(
+                name="recordsets_test_setup", suffix=cls.tld_name)
+            zone = cls.client.create_zone(name=zone_name)[1]
             cls.addClassResourceCleanup(
                 test_utils.call_and_ignore_notfound_exc,
                 cls.client.delete_zone, zone['id'])
@@ -60,6 +70,11 @@
 
         cls.zone = zone
 
+    @classmethod
+    def resource_cleanup(cls):
+        cls.admin_tld_client.delete_tld(cls.class_tld[1]['id'])
+        super(RecordsetsTest, cls).resource_cleanup()
+
     @decorators.attr(type='slow')
     @decorators.idempotent_id('4664ed66-9ff1-45f2-9e60-d4913195c505')
     @ddt.file_data("recordset_data.json")
diff --git a/designate_tempest_plugin/tests/scenario/v2/test_tld.py b/designate_tempest_plugin/tests/scenario/v2/test_tld.py
index 9c048a1..8dc6d70 100644
--- a/designate_tempest_plugin/tests/scenario/v2/test_tld.py
+++ b/designate_tempest_plugin/tests/scenario/v2/test_tld.py
@@ -27,6 +27,7 @@
 
 class TldZoneTest(base.BaseDnsV2Test):
     credentials = ["admin", "system_admin", "primary"]
+    tld_suffix = '.'.join(["TldZoneTest", CONF.dns.tld_suffix])
 
     @classmethod
     def setup_credentials(cls):
@@ -47,13 +48,12 @@
     @classmethod
     def resource_setup(cls):
         super(TldZoneTest, cls).resource_setup()
-        cls.tld = cls.admin_tld_client.create_tld(
-            tld_name=cls.tld_suffix, ignore_errors=lib_exc.Conflict
-        )
+        cls.class_tld = cls.admin_tld_client.create_tld(
+            tld_name=cls.tld_suffix)
 
     @classmethod
     def resource_cleanup(cls):
-        cls.admin_tld_client.delete_tld(cls.tld[1]['id'])
+        cls.admin_tld_client.delete_tld(cls.class_tld[1]['id'])
         super(TldZoneTest, cls).resource_cleanup()
 
     @decorators.idempotent_id('68b3e7cc-bf0e-11ec-b803-201e8823901f')
diff --git a/designate_tempest_plugin/tests/scenario/v2/test_zones.py b/designate_tempest_plugin/tests/scenario/v2/test_zones.py
index 7b8d68a..2c89c20 100644
--- a/designate_tempest_plugin/tests/scenario/v2/test_zones.py
+++ b/designate_tempest_plugin/tests/scenario/v2/test_zones.py
@@ -22,21 +22,44 @@
 from designate_tempest_plugin.common import constants as const
 from designate_tempest_plugin.common import waiters
 
+CONF = config.CONF
 LOG = logging.getLogger(__name__)
 
 
 class ZonesTest(base.BaseDnsV2Test):
+    credentials = ["primary", "admin", "system_admin"]
+
     @classmethod
     def setup_clients(cls):
         super(ZonesTest, cls).setup_clients()
+        if CONF.enforce_scope.designate:
+            cls.admin_tld_client = cls.os_system_admin.dns_v2.TldClient()
+        else:
+            cls.admin_tld_client = cls.os_admin.dns_v2.TldClient()
         cls.client = cls.os_primary.dns_v2.ZonesClient()
 
+    @classmethod
+    def resource_setup(cls):
+        super(ZonesTest, cls).resource_setup()
+
+        # Make sure we have an allowed TLD available
+        tld_name = dns_data_utils.rand_zone_name(name="ZonesTest")
+        cls.tld_name = f".{tld_name}"
+        cls.class_tld = cls.admin_tld_client.create_tld(tld_name=tld_name[:-1])
+
+    @classmethod
+    def resource_cleanup(cls):
+        cls.admin_tld_client.delete_tld(cls.class_tld[1]['id'])
+        super(ZonesTest, cls).resource_cleanup()
+
     @decorators.attr(type='smoke')
     @decorators.attr(type='slow')
     @decorators.idempotent_id('d0648f53-4114-45bd-8792-462a82f69d32')
     def test_create_and_delete_zone(self):
         LOG.info('Create a zone')
-        zone = self.client.create_zone()[1]
+        zone_name = dns_data_utils.rand_zone_name(
+            name="create_and_delete_zone", suffix=self.tld_name)
+        zone = self.client.create_zone(name=zone_name)[1]
         self.addCleanup(self.wait_zone_delete, self.client, zone['id'],
                         ignore_errors=lib_exc.NotFound)
 
@@ -70,7 +93,10 @@
         LOG.info('Create a zone and wait until it becomes ACTIVE')
         orig_ttl = 666
         orig_description = 'test_create_and_update_zone: org description'
+        zone_name = dns_data_utils.rand_zone_name(
+            name="create_and_update_zone", suffix=self.tld_name)
         zone = self.client.create_zone(
+            name=zone_name,
             ttl=orig_ttl, description=orig_description,
             wait_until=const.ACTIVE)[1]
         self.addCleanup(self.wait_zone_delete, self.client, zone['id'],
@@ -100,7 +126,9 @@
     @decorators.idempotent_id('c9838adf-14dc-4097-9130-e5cea3727abb')
     def test_delete_zone_pending_create(self):
         LOG.info('Create a zone')
-        zone = self.client.create_zone()[1]
+        zone_name = dns_data_utils.rand_zone_name(
+            name="delete_zone_pending_create", suffix=self.tld_name)
+        zone = self.client.create_zone(name=zone_name)[1]
         self.addCleanup(self.wait_zone_delete, self.client, zone['id'],
                         ignore_errors=lib_exc.NotFound)
 
@@ -125,7 +153,9 @@
         "Config option dns.nameservers is missing or empty")
     def test_zone_create_propagates_to_nameservers(self):
         LOG.info('Create a zone')
-        zone = self.client.create_zone()[1]
+        zone_name = dns_data_utils.rand_zone_name(
+            name="zone_create_propagates", suffix=self.tld_name)
+        zone = self.client.create_zone(name=zone_name)[1]
         self.addCleanup(self.wait_zone_delete, self.client, zone['id'])
 
         waiters.wait_for_zone_status(self.client, zone['id'], const.ACTIVE)
@@ -138,7 +168,9 @@
         "Config option dns.nameservers is missing or empty")
     def test_zone_delete_propagates_to_nameservers(self):
         LOG.info('Create a zone')
-        zone = self.client.create_zone()[1]
+        zone_name = dns_data_utils.rand_zone_name(
+            name="zone_delete_propagates", suffix=self.tld_name)
+        zone = self.client.create_zone(name=zone_name)[1]
         self.addCleanup(self.wait_zone_delete, self.client, zone['id'],
                         ignore_errors=lib_exc.NotFound)
 
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 f094498..565461d 100644
--- a/designate_tempest_plugin/tests/scenario/v2/test_zones_export.py
+++ b/designate_tempest_plugin/tests/scenario/v2/test_zones_export.py
@@ -14,13 +14,16 @@
 
 import json
 import os
+
 from oslo_log import log as logging
 from tempest import config
 from tempest.lib import decorators
+
+from designate_tempest_plugin.common import constants as const
 from designate_tempest_plugin.common import waiters
+from designate_tempest_plugin import data_utils as dns_data_utils
 from designate_tempest_plugin.tests.api.v2.test_zones_exports import \
     BaseZoneExportsTest
-from designate_tempest_plugin.common import constants as const
 
 CONF = config.CONF
 LOG = logging.getLogger(__name__)
@@ -46,9 +49,11 @@
         cls.zones_client = cls.os_primary.dns_v2.ZonesClient()
         cls.recordset_client = cls.os_primary.dns_v2.RecordsetClient()
 
-    def _create_zone_export(self):
+    def _create_zone_export(self, test_name):
         LOG.info('Create a zone')
-        zone = self.zones_client.create_zone()[1]
+        zone_name = dns_data_utils.rand_zone_name(
+            name=test_name, suffix=self.tld_name)
+        zone = self.zones_client.create_zone(name=zone_name)[1]
         self.addCleanup(self.wait_zone_delete, self.zones_client, zone['id'])
 
         LOG.info('Create a zone export')
@@ -60,7 +65,8 @@
 
     @decorators.idempotent_id('0484c3c4-df57-458e-a6e5-6eb63e0475e0')
     def test_create_zone_export_and_show_exported_zonefile(self):
-        zone, zone_export = self._create_zone_export()
+        zone, zone_export = self._create_zone_export(
+            'create_zone_export_and_show_exported_zonefile')
 
         self.assertEqual(const.PENDING, zone_export['status'])
         self.assertEqual(zone['id'], zone_export['zone_id'])
@@ -82,7 +88,8 @@
 
     @decorators.idempotent_id('56b8f30e-cd45-4c7a-bc0c-bbf92d7dc697')
     def test_show_exported_zonefile_impersonate_another_project(self):
-        zone, zone_export = self._create_zone_export()
+        zone, zone_export = self._create_zone_export(
+            'show_exported_zonefile_impersonate')
 
         LOG.info('As Admin impersonate "primary" client,'
                  ' to show exported zone file')
@@ -94,7 +101,8 @@
 
     @decorators.idempotent_id('c2e55514-ff2e-41d9-a3cc-9e78873254c9')
     def test_show_exported_zonefile_all_projects(self):
-        zone, zone_export = self._create_zone_export()
+        zone, zone_export = self._create_zone_export(
+            'show_exported_zonefile_all_projects')
         resp_headers, resp_data = self.admin_client.show_exported_zonefile(
             zone_export['id'], headers={
                 'x-auth-all-projects': True
@@ -104,7 +112,8 @@
 
     @decorators.idempotent_id('9746b7f2-2df4-448c-8a85-5ab6bf74f1fe')
     def test_show_exported_zonefile_any_mime_type(self):
-        zone, zone_export = self._create_zone_export()
+        zone, zone_export = self._create_zone_export(
+            'show_exported_zonefile_any_mime_type')
         resp_headers, resp_data = self.client.show_exported_zonefile(
             zone_export['id'], headers={'Accept': '*/*'})
 
@@ -119,7 +128,8 @@
 
     @decorators.idempotent_id('dc7a9dde-d287-4e22-9788-26578f0d3bf0')
     def test_missing_accept_headers(self):
-        zone, zone_export = self._create_zone_export()
+        zone, zone_export = self._create_zone_export(
+            'missing_accept_headers')
         resp_headers, resp_data = self.client.show_exported_zonefile(
             zone_export['id'], headers={})
         LOG.info('Ensure Content-Type: text/dns')
@@ -146,7 +156,10 @@
         file.close()
 
         LOG.info('Create a zone')
-        zone = self.zones_client.create_zone(wait_until=const.ACTIVE)[1]
+        zone_name = dns_data_utils.rand_zone_name(
+            name="all_recordset_types_exist", suffix=self.tld_name)
+        zone = self.zones_client.create_zone(name=zone_name,
+                                             wait_until=const.ACTIVE)[1]
         self.addCleanup(self.wait_zone_delete, self.zones_client, zone['id'])
 
         created_records = []
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 e92feee..29db239 100644
--- a/designate_tempest_plugin/tests/scenario/v2/test_zones_import.py
+++ b/designate_tempest_plugin/tests/scenario/v2/test_zones_import.py
@@ -24,6 +24,8 @@
 
 class ZonesImportTest(BaseZonesImportTest):
 
+    credentials = ["primary", "admin", "system_admin"]
+
     @classmethod
     def setup_clients(cls):
         super(ZonesImportTest, cls).setup_clients()
@@ -34,10 +36,11 @@
     @decorators.attr(type='slow')
     @decorators.idempotent_id('679f38d0-2f2f-49c5-934e-8fe0c452f56e')
     def test_create_zone_import_and_wait_for_zone(self):
-        name = dns_data_utils.rand_zone_name('testimport')
-        zonefile = dns_data_utils.rand_zonefile_data(name=name)
+        zone_name = dns_data_utils.rand_zone_name(
+            name="create_zone_import_and_wait_for_zone", suffix=self.tld_name)
+        zonefile = dns_data_utils.rand_zonefile_data(name=zone_name)
 
-        LOG.info('Import zone %r', name)
+        LOG.info('Import zone %r', zone_name)
         _, zone_import = self.client.create_zone_import(zonefile)
         self.addCleanup(self.client.delete_zone_import, zone_import['id'])
 
@@ -63,4 +66,4 @@
         _, zone = self.zones_client.show_zone(zone_import['zone_id'])
         self.assertEqual('NONE', zone['action'])
         self.assertEqual('ACTIVE', zone['status'])
-        self.assertEqual(name, zone['name'])
+        self.assertEqual(zone_name, zone['name'])
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 3437c33..b29262a 100644
--- a/designate_tempest_plugin/tests/scenario/v2/test_zones_transfer.py
+++ b/designate_tempest_plugin/tests/scenario/v2/test_zones_transfer.py
@@ -12,40 +12,67 @@
 # License for the specific language governing permissions and limitations
 # under the License.
 from oslo_log import log as logging
+from tempest import config
 from tempest.lib import decorators
 from tempest.lib import exceptions as lib_exc
 
 from designate_tempest_plugin.tests import base
 from designate_tempest_plugin import data_utils as dns_data_utils
 
+CONF = config.CONF
 LOG = logging.getLogger(__name__)
 
 
 class ZonesTransferTest(base.BaseDnsV2Test):
-    credentials = ['primary', 'alt', 'admin']
+    credentials = ['primary', 'alt', 'admin', 'system_admin']
 
     @classmethod
     def setup_clients(cls):
         super(ZonesTransferTest, cls).setup_clients()
+        if CONF.enforce_scope.designate:
+            cls.admin_zones_client = cls.os_system_admin.dns_v2.ZonesClient()
+            cls.admin_accept_client = (
+                cls.os_system_admin.dns_v2.TransferAcceptClient())
+            cls.admin_tld_client = cls.os_system_admin.dns_v2.TldClient()
+        else:
+            cls.admin_zones_client = cls.os_admin.dns_v2.ZonesClient()
+            cls.admin_accept_client = (
+                cls.os_admin.dns_v2.TransferAcceptClient())
+            cls.admin_tld_client = cls.os_admin.dns_v2.TldClient()
         cls.zones_client = cls.os_primary.dns_v2.ZonesClient()
         cls.alt_zones_client = cls.os_alt.dns_v2.ZonesClient()
-        cls.admin_zones_client = cls.os_admin.dns_v2.ZonesClient()
         cls.request_client = cls.os_primary.dns_v2.TransferRequestClient()
         cls.alt_request_client = cls.os_alt.dns_v2.TransferRequestClient()
         cls.accept_client = cls.os_primary.dns_v2.TransferAcceptClient()
         cls.alt_accept_client = cls.os_alt.dns_v2.TransferAcceptClient()
-        cls.admin_accept_client = cls.os_admin.dns_v2.TransferAcceptClient()
+
+    @classmethod
+    def resource_setup(cls):
+        super(ZonesTransferTest, cls).resource_setup()
+
+        # Make sure we have an allowed TLD available
+        tld_name = dns_data_utils.rand_zone_name(name="ZonesTransferTest")
+        cls.tld_name = f".{tld_name}"
+        cls.class_tld = cls.admin_tld_client.create_tld(tld_name=tld_name[:-1])
+
+    @classmethod
+    def resource_cleanup(cls):
+        cls.admin_tld_client.delete_tld(cls.class_tld[1]['id'])
+        super(ZonesTransferTest, cls).resource_cleanup()
 
     @decorators.idempotent_id('60bd80ac-c979-4686-9a03-f2f775f272ab')
     def test_zone_transfer(self):
         LOG.info('Create a zone as primary tenant')
-        _, zone = self.zones_client.create_zone()
+        zone_name = dns_data_utils.rand_zone_name(
+            name="zone_transfer", suffix=self.tld_name)
+        zone = self.zones_client.create_zone(name=zone_name)[1]
         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'])
+        transfer_request = (
+            self.request_client.create_transfer_request_empty_body(
+                zone['id'])[1])
         self.addCleanup(self.request_client.delete_transfer_request,
                         transfer_request['id'])
 
@@ -58,7 +85,7 @@
         self.alt_accept_client.create_transfer_accept(accept_data)
 
         LOG.info('Fetch the zone as alt tenant')
-        _, alt_zone = self.alt_zones_client.show_zone(zone['id'])
+        alt_zone = self.alt_zones_client.show_zone(zone['id'])[1]
         self.addCleanup(self.wait_zone_delete,
                         self.alt_zones_client,
                         alt_zone['id'])
@@ -76,7 +103,9 @@
     @decorators.idempotent_id('5855b772-a036-11eb-9973-74e5f9e2a801')
     def test_zone_transfer_target_project(self):
         LOG.info('Create a zone as "primary" tenant')
-        zone = self.zones_client.create_zone()[1]
+        zone_name = dns_data_utils.rand_zone_name(
+            name="zone_transfer_target_project", suffix=self.tld_name)
+        zone = self.zones_client.create_zone(name=zone_name)[1]
 
         LOG.info('Create transfer_request with target project set to '
                  '"Admin" tenant')
@@ -100,9 +129,14 @@
             transfer_accept_data=accept_data)
 
         LOG.info('Accept the request as "Admin" tenant, Expected: should work')
-        self.admin_accept_client.create_transfer_accept(accept_data)
+        self.admin_accept_client.create_transfer_accept(
+            accept_data, headers={'x-auth-sudo-project-id':
+                                  self.os_admin.credentials.project_id},
+            extra_headers=True)
         LOG.info('Fetch the zone as "Admin" tenant')
-        admin_zone = self.admin_zones_client.show_zone(zone['id'])[1]
+        admin_zone = self.admin_zones_client.show_zone(
+            zone['id'], headers={'x-auth-sudo-project-id':
+                                 self.os_admin.credentials.project_id})[1]
         self.addCleanup(self.wait_zone_delete,
                         self.admin_zones_client,
                         admin_zone['id'])
diff --git a/tox.ini b/tox.ini
index a413aeb..545cdca 100644
--- a/tox.ini
+++ b/tox.ini
@@ -15,7 +15,7 @@
 setenv =
     VIRTUAL_ENV={envdir}
   PYTHONDONTWRITEBYTECODE=1
-whitelist_externals = sh
+allowlist_externals = sh
                       find
                       rm
 commands =
@@ -43,14 +43,14 @@
 
 [testenv:releasenotes]
 deps = {[testenv:docs]deps}
-whitelist_externals = rm
+allowlist_externals = rm
 commands =
   rm -rf releasenotes/build
   sphinx-build -a -E -W -d releasenotes/build/doctrees -b html releasenotes/source releasenotes/build/html
 
 [testenv:bashate]
 deps = bashate
-whitelist_externals = bash
+allowlist_externals = bash
 commands = bash -c "find {toxinidir}/devstack         \
          -not \( -type d -name .?\* -prune \)         \
          -not \( -type d -name doc -prune \)          \