Merge "Do not create network resources for API tests"
diff --git a/.zuul.yaml b/.zuul.yaml
index 0533692..64c99f4 100644
--- a/.zuul.yaml
+++ b/.zuul.yaml
@@ -1,5 +1,4 @@
 - project:
-    name: openstack/designate-tempest-plugin
     templates:
       - designate-devstack-jobs
     check:
diff --git a/designate_tempest_plugin/config.py b/designate_tempest_plugin/config.py
index 565d5c3..fea31f2 100644
--- a/designate_tempest_plugin/config.py
+++ b/designate_tempest_plugin/config.py
@@ -49,6 +49,9 @@
     cfg.IntOpt('query_timeout',
                default=1,
                help="The timeout on a single dns query to a nameserver"),
+    cfg.StrOpt('zone_id',
+               help="The target zone to test the dns recordsets "
+                    "If it is not specified, a new zone will be created ")
 
 ]
 
diff --git a/designate_tempest_plugin/tests/api/admin/test_quotas.py b/designate_tempest_plugin/tests/api/admin/test_quotas.py
index bcf2e36..c25ad0a 100644
--- a/designate_tempest_plugin/tests/api/admin/test_quotas.py
+++ b/designate_tempest_plugin/tests/api/admin/test_quotas.py
@@ -46,7 +46,7 @@
     def setup_clients(cls):
         super(QuotasAdminTest, cls).setup_clients()
 
-        cls.admin_client = cls.os_adm.quotas_client
+        cls.admin_client = cls.os_admin.quotas_client
 
     @decorators.idempotent_id('ed42f367-e5ba-40d7-a08d-366ad787d21c')
     def test_show_quotas(self):
diff --git a/designate_tempest_plugin/tests/api/v1/test_domains.py b/designate_tempest_plugin/tests/api/v1/test_domains.py
index 487e837..31d4bbd 100644
--- a/designate_tempest_plugin/tests/api/v1/test_domains.py
+++ b/designate_tempest_plugin/tests/api/v1/test_domains.py
@@ -33,7 +33,7 @@
     def setup_clients(cls):
         super(DnsDomainsTest, cls).setup_clients()
 
-        cls.client = cls.os.domains_client
+        cls.client = cls.os_primary.domains_client
 
     @classmethod
     def resource_setup(cls):
diff --git a/designate_tempest_plugin/tests/api/v1/test_records.py b/designate_tempest_plugin/tests/api/v1/test_records.py
index 7c8522e..e678c3f 100644
--- a/designate_tempest_plugin/tests/api/v1/test_records.py
+++ b/designate_tempest_plugin/tests/api/v1/test_records.py
@@ -32,7 +32,7 @@
     def setup_clients(cls):
         super(RecordsTest, cls).setup_clients()
 
-        cls.client = cls.os.records_client
+        cls.client = cls.os_primary.records_client
 
     @classmethod
     def resource_setup(cls):
@@ -42,7 +42,8 @@
         cls.setup_records = list()
         name = data_utils.rand_name('domain') + '.com.'
         email = data_utils.rand_name('dns') + '@testmail.com'
-        _, cls.domain = cls.os.domains_client.create_domain(name, email)
+        _, cls.domain = cls.os_primary.domains_client.create_domain(
+            name, email)
         # Creates a record with type as A
         r_name = 'www.' + name
         data1 = "192.0.2.3"
@@ -61,7 +62,7 @@
     def resource_cleanup(cls):
         for record in cls.setup_records:
             cls.client.delete_record(cls.domain['id'], record['id'])
-        cls.os.domains_client.delete_domain(cls.domain['id'])
+        cls.os_primary.domains_client.delete_domain(cls.domain['id'])
         super(RecordsTest, cls).resource_cleanup()
 
     def _delete_record(self, domain_id, record_id):
diff --git a/designate_tempest_plugin/tests/api/v1/test_servers.py b/designate_tempest_plugin/tests/api/v1/test_servers.py
index 0d227e1..9092b58 100644
--- a/designate_tempest_plugin/tests/api/v1/test_servers.py
+++ b/designate_tempest_plugin/tests/api/v1/test_servers.py
@@ -42,7 +42,7 @@
     def setup_clients(cls):
         super(ServersAdminTest, cls).setup_clients()
 
-        cls.client = cls.os_adm.servers_client
+        cls.client = cls.os_admin.servers_client
 
     @classmethod
     def skip_checks(cls):
diff --git a/designate_tempest_plugin/tests/api/v2/test_blacklists.py b/designate_tempest_plugin/tests/api/v2/test_blacklists.py
index 3ad5e0b..65b6dff 100644
--- a/designate_tempest_plugin/tests/api/v2/test_blacklists.py
+++ b/designate_tempest_plugin/tests/api/v2/test_blacklists.py
@@ -39,7 +39,7 @@
     @classmethod
     def setup_clients(cls):
         super(BlacklistsAdminTest, cls).setup_clients()
-        cls.admin_client = cls.os_adm.blacklists_client
+        cls.admin_client = cls.os_admin.blacklists_client
 
     @decorators.idempotent_id('3a7f7564-6bdd-446e-addc-a3475b4c3f71')
     def test_create_blacklist(self):
@@ -123,7 +123,7 @@
     @classmethod
     def setup_clients(cls):
         super(TestBlacklistNotFoundAdmin, cls).setup_clients()
-        cls.admin_client = cls.os_adm.blacklists_client
+        cls.admin_client = cls.os_admin.blacklists_client
 
     @decorators.idempotent_id('9d65b638-fe98-47a8-853f-fa9244d144cc')
     def test_show_blacklist_404(self):
@@ -166,7 +166,7 @@
     @classmethod
     def setup_clients(cls):
         super(TestBlacklistInvalidIdAdmin, cls).setup_clients()
-        cls.admin_client = cls.os_adm.blacklists_client
+        cls.admin_client = cls.os_admin.blacklists_client
 
     @decorators.idempotent_id('c7bae53f-2edc-45d8-b254-8a81482728c1')
     def test_show_blacklist_invalid_uuid(self):
diff --git a/designate_tempest_plugin/tests/api/v2/test_pool.py b/designate_tempest_plugin/tests/api/v2/test_pool.py
index f7798c0..d127006 100644
--- a/designate_tempest_plugin/tests/api/v2/test_pool.py
+++ b/designate_tempest_plugin/tests/api/v2/test_pool.py
@@ -46,7 +46,7 @@
     def setup_clients(cls):
         super(PoolAdminTest, cls).setup_clients()
 
-        cls.admin_client = cls.os_adm.pool_client
+        cls.admin_client = cls.os_admin.pool_client
 
     @decorators.idempotent_id('69257f7c-b3d5-4e1b-998e-0677ad12f125')
     def test_create_pool(self):
@@ -136,7 +136,7 @@
     @classmethod
     def setup_clients(cls):
         super(TestPoolNotFoundAdmin, cls).setup_clients()
-        cls.admin_client = cls.os_adm.pool_client
+        cls.admin_client = cls.os_admin.pool_client
 
     @decorators.idempotent_id('56281b2f-dd5a-4376-8c32-aba771062fa5')
     def test_show_pool_404(self):
@@ -179,7 +179,7 @@
     @classmethod
     def setup_clients(cls):
         super(TestPoolInvalidIdAdmin, cls).setup_clients()
-        cls.admin_client = cls.os_adm.pool_client
+        cls.admin_client = cls.os_admin.pool_client
 
     @decorators.idempotent_id('081d0188-42a7-4953-af0e-b022960715e2')
     def test_show_pool_invalid_uuid(self):
diff --git a/designate_tempest_plugin/tests/api/v2/test_quotas.py b/designate_tempest_plugin/tests/api/v2/test_quotas.py
index 6fab60d..b32591f 100644
--- a/designate_tempest_plugin/tests/api/v2/test_quotas.py
+++ b/designate_tempest_plugin/tests/api/v2/test_quotas.py
@@ -47,8 +47,8 @@
     def setup_clients(cls):
         super(QuotasV2Test, cls).setup_clients()
 
-        cls.quotas_client = cls.os.quotas_client
-        cls.admin_client = cls.os_adm.quotas_client
+        cls.quotas_client = cls.os_primary.quotas_client
+        cls.admin_client = cls.os_admin.quotas_client
 
     @decorators.idempotent_id('1dac991a-9e2e-452c-a47a-26ac37381ec5')
     def test_show_quotas(self):
diff --git a/designate_tempest_plugin/tests/api/v2/test_recordset.py b/designate_tempest_plugin/tests/api/v2/test_recordset.py
index 3c79ebb..be06b54 100644
--- a/designate_tempest_plugin/tests/api/v2/test_recordset.py
+++ b/designate_tempest_plugin/tests/api/v2/test_recordset.py
@@ -58,8 +58,8 @@
     def setup_clients(cls):
         super(RecordsetsTest, cls).setup_clients()
 
-        cls.client = cls.os.recordset_client
-        cls.zone_client = cls.os.zones_client
+        cls.client = cls.os_primary.recordset_client
+        cls.zone_client = cls.os_primary.zones_client
 
     @decorators.attr(type='smoke')
     @decorators.idempotent_id('631d74fd-6909-4684-a61b-5c4d2f92c3e7')
@@ -217,8 +217,8 @@
     def setup_clients(cls):
         super(RecordsetsNegativeTest, cls).setup_clients()
 
-        cls.client = cls.os.recordset_client
-        cls.zone_client = cls.os.zones_client
+        cls.client = cls.os_primary.recordset_client
+        cls.zone_client = cls.os_primary.zones_client
 
     @decorators.idempotent_id('98c94f8c-217a-4056-b996-b1f856d0753e')
     @ddt.file_data("recordset_data_invalid.json")
@@ -322,8 +322,8 @@
     def setup_clients(cls):
         super(RootRecordsetsTests, cls).setup_clients()
 
-        cls.client = cls.os.recordset_client
-        cls.zone_client = cls.os.zones_client
+        cls.client = cls.os_primary.recordset_client
+        cls.zone_client = cls.os_primary.zones_client
 
     @classmethod
     def skip_checks(cls):
@@ -420,8 +420,8 @@
     def setup_clients(cls):
         super(RecordsetOwnershipTest, cls).setup_clients()
 
-        cls.client = cls.os.recordset_client
-        cls.zone_client = cls.os.zones_client
+        cls.client = cls.os_primary.recordset_client
+        cls.zone_client = cls.os_primary.zones_client
         cls.alt_zone_client = cls.os_alt.zones_client
         cls.alt_client = cls.os_alt.recordset_client
 
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 1a7b5f8..e95ab4b 100644
--- a/designate_tempest_plugin/tests/api/v2/test_recordset_validation.py
+++ b/designate_tempest_plugin/tests/api/v2/test_recordset_validation.py
@@ -51,8 +51,8 @@
     def setup_clients(cls):
         super(RecordsetValidationTest, cls).setup_clients()
 
-        cls.recordset_client = cls.os.recordset_client
-        cls.zones_client = cls.os.zones_client
+        cls.recordset_client = cls.os_primary.recordset_client
+        cls.zones_client = cls.os_primary.zones_client
 
     @property
     def zone(self):
diff --git a/designate_tempest_plugin/tests/api/v2/test_tld.py b/designate_tempest_plugin/tests/api/v2/test_tld.py
index 1ee1df4..380d224 100644
--- a/designate_tempest_plugin/tests/api/v2/test_tld.py
+++ b/designate_tempest_plugin/tests/api/v2/test_tld.py
@@ -38,7 +38,7 @@
     @classmethod
     def setup_clients(cls):
         super(TldAdminTest, cls).setup_clients()
-        cls.admin_client = cls.os_adm.tld_client
+        cls.admin_client = cls.os_admin.tld_client
 
     @classmethod
     def resource_setup(cls):
@@ -134,7 +134,7 @@
     @classmethod
     def setup_clients(cls):
         super(TestTldNotFoundAdmin, cls).setup_clients()
-        cls.admin_client = cls.os_adm.tld_client
+        cls.admin_client = cls.os_admin.tld_client
 
     @decorators.idempotent_id('b237d5ee-0d76-4294-a3b6-c2f8bf4b0e30')
     def test_show_tld_404(self):
@@ -177,7 +177,7 @@
     @classmethod
     def setup_clients(cls):
         super(TestTldInvalidIdAdmin, cls).setup_clients()
-        cls.admin_client = cls.os_adm.tld_client
+        cls.admin_client = cls.os_admin.tld_client
 
     @decorators.idempotent_id('f9ec0730-57ff-4720-8d06-e11d377c7cfc')
     def test_show_tld_invalid_uuid(self):
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 08117e3..28e687f 100644
--- a/designate_tempest_plugin/tests/api/v2/test_transfer_accepts.py
+++ b/designate_tempest_plugin/tests/api/v2/test_transfer_accepts.py
@@ -35,9 +35,9 @@
     def setup_clients(cls):
         super(TransferAcceptTest, cls).setup_clients()
 
-        cls.zone_client = cls.os.zones_client
-        cls.request_client = cls.os.transfer_request_client
-        cls.client = cls.os.transfer_accept_client
+        cls.zone_client = cls.os_primary.zones_client
+        cls.request_client = cls.os_primary.transfer_request_client
+        cls.client = cls.os_primary.transfer_accept_client
 
     @decorators.idempotent_id('1c6baf97-a83e-4d2e-a5d8-9d37fb7808f3')
     def test_create_transfer_accept(self):
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 1a38e6d..80a0e4a 100644
--- a/designate_tempest_plugin/tests/api/v2/test_transfer_request.py
+++ b/designate_tempest_plugin/tests/api/v2/test_transfer_request.py
@@ -39,8 +39,8 @@
     def setup_clients(cls):
         super(TransferRequestTest, cls).setup_clients()
 
-        cls.zone_client = cls.os.zones_client
-        cls.client = cls.os.transfer_request_client
+        cls.zone_client = cls.os_primary.zones_client
+        cls.client = cls.os_primary.transfer_request_client
         cls.alt_client = cls.os_alt.transfer_request_client
 
     @decorators.idempotent_id('2381d489-ad84-403d-b0a2-8b77e4e966bf')
@@ -206,7 +206,7 @@
     @classmethod
     def setup_clients(cls):
         super(TestTransferRequestNotFound, cls).setup_clients()
-        cls.client = cls.os.transfer_request_client
+        cls.client = cls.os_primary.transfer_request_client
 
     @decorators.idempotent_id('d255f72f-ba24-43df-9dba-011ed7f4625d')
     def test_show_transfer_request_404(self):
@@ -248,7 +248,7 @@
     @classmethod
     def setup_clients(cls):
         super(TestTransferRequestInvalidId, cls).setup_clients()
-        cls.client = cls.os.transfer_request_client
+        cls.client = cls.os_primary.transfer_request_client
 
     @decorators.idempotent_id('2205dd19-ecc7-4c68-9e89-63c47d642b07')
     def test_show_transfer_request_invalid_uuid(self):
diff --git a/designate_tempest_plugin/tests/api/v2/test_tsigkey.py b/designate_tempest_plugin/tests/api/v2/test_tsigkey.py
index 5bea818..a09cabb 100644
--- a/designate_tempest_plugin/tests/api/v2/test_tsigkey.py
+++ b/designate_tempest_plugin/tests/api/v2/test_tsigkey.py
@@ -38,7 +38,7 @@
     @classmethod
     def setup_clients(cls):
         super(TsigkeyAdminTest, cls).setup_clients()
-        cls.zone_client = cls.os.zones_client
+        cls.zone_client = cls.os_primary.zones_client
         cls.admin_client = cls.os_admin.tsigkey_client
 
     @decorators.idempotent_id('e7b484e3-7ed5-4840-89d7-1e696986f8e4')
@@ -151,7 +151,7 @@
     @classmethod
     def setup_clients(cls):
         super(TestTsigkeyNotFoundAdmin, cls).setup_clients()
-        cls.admin_client = cls.os_adm.tsigkey_client
+        cls.admin_client = cls.os_admin.tsigkey_client
 
     @decorators.idempotent_id('824c9b49-edc5-4282-929e-467a158d23e4')
     def test_show_tsigkey_404(self):
@@ -194,7 +194,7 @@
     @classmethod
     def setup_clients(cls):
         super(TestTsigkeyInvalidIdAdmin, cls).setup_clients()
-        cls.admin_client = cls.os_adm.tsigkey_client
+        cls.admin_client = cls.os_admin.tsigkey_client
 
     @decorators.idempotent_id('2a8dfc75-9884-4b1c-8f1f-ed835d96f2fe')
     def test_show_tsigkey_invalid_uuid(self):
diff --git a/designate_tempest_plugin/tests/api/v2/test_unauthed.py b/designate_tempest_plugin/tests/api/v2/test_unauthed.py
index bf20de4..aaf8043 100644
--- a/designate_tempest_plugin/tests/api/v2/test_unauthed.py
+++ b/designate_tempest_plugin/tests/api/v2/test_unauthed.py
@@ -37,11 +37,11 @@
     @classmethod
     def setup_clients(cls):
         super(TestDnsUnauthed, cls).setup_clients()
-        cls.zones_client = cls.os.zones_client
-        cls.recordset_client = cls.os.recordset_client
-        cls.tld_client = cls.os.tld_client
-        cls.pool_client = cls.os.pool_client
-        cls.blacklists_client = cls.os.blacklists_client
+        cls.zones_client = cls.os_primary.zones_client
+        cls.recordset_client = cls.os_primary.recordset_client
+        cls.tld_client = cls.os_primary.tld_client
+        cls.pool_client = cls.os_primary.pool_client
+        cls.blacklists_client = cls.os_primary.blacklists_client
 
     @decorators.idempotent_id('0f7a6d20-f6f3-4937-8fe6-7a9851227d98')
     @ddt.file_data('unauthed_data.json')
diff --git a/designate_tempest_plugin/tests/api/v2/test_zones.py b/designate_tempest_plugin/tests/api/v2/test_zones.py
index 0d29392..74b297a 100644
--- a/designate_tempest_plugin/tests/api/v2/test_zones.py
+++ b/designate_tempest_plugin/tests/api/v2/test_zones.py
@@ -38,7 +38,7 @@
     def setup_clients(cls):
         super(ZonesTest, cls).setup_clients()
 
-        cls.client = cls.os.zones_client
+        cls.client = cls.os_primary.zones_client
 
     @decorators.idempotent_id('9d2e20fc-e56f-4a62-9c61-9752a9ec615c')
     def test_create_zone(self):
@@ -131,8 +131,8 @@
     def setup_clients(cls):
         super(ZonesAdminTest, cls).setup_clients()
 
-        cls.client = cls.os.zones_client
-        cls.admin_client = cls.os_adm.zones_client
+        cls.client = cls.os_primary.zones_client
+        cls.admin_client = cls.os_admin.zones_client
 
     @decorators.idempotent_id('6477f92d-70ba-46eb-bd6c-fc50c405e222')
     def test_get_other_tenant_zone(self):
@@ -161,7 +161,7 @@
     def setup_clients(cls):
         super(ZoneOwnershipTest, cls).setup_clients()
 
-        cls.client = cls.os.zones_client
+        cls.client = cls.os_primary.zones_client
         cls.alt_client = cls.os_alt.zones_client
 
     @decorators.idempotent_id('5d28580a-a012-4b57-b211-e077b1a01340')
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 2499d2a..881f15c 100644
--- a/designate_tempest_plugin/tests/api/v2/test_zones_exports.py
+++ b/designate_tempest_plugin/tests/api/v2/test_zones_exports.py
@@ -37,8 +37,8 @@
     def setup_clients(cls):
         super(ZonesExportTest, cls).setup_clients()
 
-        cls.zone_client = cls.os.zones_client
-        cls.client = cls.os.zone_exports_client
+        cls.zone_client = cls.os_primary.zones_client
+        cls.client = cls.os_primary.zone_exports_client
 
     @decorators.idempotent_id('2dd8a9a0-98a2-4bf6-bb51-286583b30f40')
     def test_create_zone_export(self):
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 c2e3674..d54551e 100644
--- a/designate_tempest_plugin/tests/api/v2/test_zones_imports.py
+++ b/designate_tempest_plugin/tests/api/v2/test_zones_imports.py
@@ -36,7 +36,7 @@
     @classmethod
     def setup_clients(cls):
         super(ZonesImportTest, cls).setup_clients()
-        cls.client = cls.os.zone_imports_client
+        cls.client = cls.os_primary.zone_imports_client
 
     @decorators.idempotent_id('2e2d907d-0609-405b-9c96-3cb2b87e3dce')
     def test_create_zone_import(self):
diff --git a/designate_tempest_plugin/tests/base.py b/designate_tempest_plugin/tests/base.py
index 8f3e83d..e411597 100644
--- a/designate_tempest_plugin/tests/base.py
+++ b/designate_tempest_plugin/tests/base.py
@@ -60,8 +60,8 @@
     # at class setup time. Credential types can be 'primary', 'alt', 'admin' or
     # a list of roles - the first element of the list being a label, and the
     # rest the actual roles.
-    # NOTE(kiall) primary will result in a manager @ cls.os, alt will have
-    # cls.os_alt, and admin will have cls.os_adm.
+    # NOTE(kiall) primary will result in a manager @ cls.os_primary, alt will
+    # have cls.os_alt, and admin will have cls.os_admin.
     # NOTE(kiall) We should default to only primary, and request additional
     # credentials in the tests that require them.
     credentials = ['primary']
diff --git a/designate_tempest_plugin/tests/scenario/v2/test_recordsets.py b/designate_tempest_plugin/tests/scenario/v2/test_recordsets.py
new file mode 100644
index 0000000..d1c90d7
--- /dev/null
+++ b/designate_tempest_plugin/tests/scenario/v2/test_recordsets.py
@@ -0,0 +1,101 @@
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# 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.common.utils import test_utils
+from tempest.lib import decorators
+from tempest.lib import exceptions as lib_exc
+import ddt
+
+from designate_tempest_plugin.tests import base
+from designate_tempest_plugin.common import waiters
+
+
+LOG = logging.getLogger(__name__)
+
+CONF = config.CONF
+
+
+@ddt.ddt
+class RecordsetsTest(base.BaseDnsV2Test):
+    @classmethod
+    def setup_clients(cls):
+        super(RecordsetsTest, cls).setup_clients()
+
+        cls.client = cls.os_primary.zones_client
+        cls.recordset_client = cls.os_primary.recordset_client
+        cls.query_client = cls.os_primary.query_client
+
+    @classmethod
+    def resource_setup(cls):
+        super(RecordsetsTest, cls).resource_setup()
+
+        zone_id = CONF.dns.zone_id
+        if zone_id:
+            LOG.info('Retrieve info from a zone')
+            _, zone = cls.client.show_zone(zone_id)
+        else:
+            LOG.info('Create a new zone')
+            _, zone = cls.client.create_zone()
+            cls.addClassResourceCleanup(
+                test_utils.call_and_ignore_notfound_exc,
+                cls.client.delete_zone, zone['id'])
+
+        LOG.info('Ensure we respond with ACTIVE')
+        waiters.wait_for_zone_status(cls.client, zone['id'], 'ACTIVE')
+
+        cls.zone = zone
+
+    @decorators.attr(type='slow')
+    @decorators.idempotent_id('4664ed66-9ff1-45f2-9e60-d4913195c505')
+    @ddt.file_data("../../api/v2/recordset_data.json")
+    def test_create_and_delete_records_on_existing_zone(self, name,
+                                                        type, records):
+        if name is not None:
+            recordset_name = name + "." + self.zone['name']
+
+        else:
+            recordset_name = self.zone['name']
+
+        recordset_data = {
+            'name': recordset_name,
+            'type': type,
+            'records': records,
+        }
+
+        LOG.info('Create a Recordset on the existing zone')
+        _, recordset = self.recordset_client.create_recordset(
+            self.zone['id'], recordset_data)
+        self.addCleanup(test_utils.call_and_ignore_notfound_exc,
+                        self.recordset_client.delete_recordset,
+                        self.zone['id'], recordset['id'])
+
+        LOG.info('Ensure we respond with PENDING')
+        self.assertEqual('PENDING', recordset['status'])
+
+        LOG.info('Wait until the recordset is active')
+        waiters.wait_for_recordset_status(self.recordset_client,
+                                          self.zone['id'], recordset['id'],
+                                          'ACTIVE')
+
+        LOG.info('Delete the recordset')
+        _, body = self.recordset_client.delete_recordset(self.zone['id'],
+                                                         recordset['id'])
+
+        LOG.info('Ensure we respond with DELETE+PENDING')
+        self.assertEqual('DELETE', body['action'])
+        self.assertEqual('PENDING', body['status'])
+
+        LOG.info('Ensure successful deletion of Recordset')
+        self.assertRaises(lib_exc.NotFound,
+                          lambda: self.recordset_client.show_recordset(
+                              self.zone['id'], recordset['id']))
diff --git a/designate_tempest_plugin/tests/scenario/v2/test_zones.py b/designate_tempest_plugin/tests/scenario/v2/test_zones.py
index 94665a8..ec7076c 100644
--- a/designate_tempest_plugin/tests/scenario/v2/test_zones.py
+++ b/designate_tempest_plugin/tests/scenario/v2/test_zones.py
@@ -29,8 +29,8 @@
     def setup_clients(cls):
         super(ZonesTest, cls).setup_clients()
 
-        cls.client = cls.os.zones_client
-        cls.query_client = cls.os.query_client
+        cls.client = cls.os_primary.zones_client
+        cls.query_client = cls.os_primary.query_client
 
     @decorators.attr(type='smoke')
     @decorators.attr(type='slow')
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 b8002de..8b9e3c3 100644
--- a/designate_tempest_plugin/tests/scenario/v2/test_zones_export.py
+++ b/designate_tempest_plugin/tests/scenario/v2/test_zones_export.py
@@ -28,8 +28,8 @@
     def setup_clients(cls):
         super(ZonesExportTest, cls).setup_clients()
 
-        cls.zones_client = cls.os.zones_client
-        cls.client = cls.os.zone_exports_client
+        cls.zones_client = cls.os_primary.zones_client
+        cls.client = cls.os_primary.zone_exports_client
 
     @decorators.attr(type='slow')
     @decorators.idempotent_id('0484c3c4-df57-458e-a6e5-6eb63e0475e0')
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 4406059..4673048 100644
--- a/designate_tempest_plugin/tests/scenario/v2/test_zones_import.py
+++ b/designate_tempest_plugin/tests/scenario/v2/test_zones_import.py
@@ -27,8 +27,8 @@
     @classmethod
     def setup_clients(cls):
         super(ZonesImportTest, cls).setup_clients()
-        cls.client = cls.os.zone_imports_client
-        cls.zones_client = cls.os.zones_client
+        cls.client = cls.os_primary.zone_imports_client
+        cls.zones_client = cls.os_primary.zones_client
 
     @decorators.attr(type='slow')
     @decorators.idempotent_id('679f38d0-2f2f-49c5-934e-8fe0c452f56e')
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 4870307..14b7003 100644
--- a/designate_tempest_plugin/tests/scenario/v2/test_zones_transfer.py
+++ b/designate_tempest_plugin/tests/scenario/v2/test_zones_transfer.py
@@ -26,11 +26,11 @@
     @classmethod
     def setup_clients(cls):
         super(ZonesTransferTest, cls).setup_clients()
-        cls.zones_client = cls.os.zones_client
+        cls.zones_client = cls.os_primary.zones_client
         cls.alt_zones_client = cls.os_alt.zones_client
-        cls.request_client = cls.os.transfer_request_client
+        cls.request_client = cls.os_primary.transfer_request_client
         cls.alt_request_client = cls.os_alt.transfer_request_client
-        cls.accept_client = cls.os.transfer_accept_client
+        cls.accept_client = cls.os_primary.transfer_accept_client
         cls.alt_accept_client = cls.os_alt.transfer_accept_client
 
     @decorators.idempotent_id('60bd80ac-c979-4686-9a03-f2f775f272ab')
diff --git a/doc/source/index.rst b/doc/source/index.rst
index b5770f2..b7053a1 100644
--- a/doc/source/index.rst
+++ b/doc/source/index.rst
@@ -166,7 +166,7 @@
        def setup_clients(cls):
            super(ZonesTest, cls).setup_clients()
 
-           cls.client = cls.os.zones_client
+           cls.client = cls.os_primary.zones_client
 
        @decorators.attr(type='smoke')
        @decorators.idempotent_id('fbabd6af-238a-462e-b923-de4d736b90a7')
@@ -200,8 +200,8 @@
        def setup_clients(cls):
            super(ZonesAdminTest, cls).setup_clients()
 
-           cls.client = cls.os.zones_client
-           cls.adm_client = cls.os_adm.zones_client
+           cls.client = cls.os_primary.zones_client
+           cls.adm_client = cls.os_admin.zones_client
 
        @decorators.idempotent_id('6477f92d-70ba-46eb-bd6c-fc50c405e222')
        def test_get_other_tenant_zone(self):
diff --git a/test-requirements.txt b/test-requirements.txt
index f3e74e0..f6c0a00 100644
--- a/test-requirements.txt
+++ b/test-requirements.txt
@@ -4,5 +4,5 @@
 
 # Hacking already pins down pep8, pyflakes and flake8
 hacking!=0.13.0,<0.14,>=0.12.0 # Apache-2.0
-openstackdocstheme>=1.17.0 # Apache-2.0
-sphinx>=1.6.2 # BSD
+openstackdocstheme>=1.18.1 # Apache-2.0
+sphinx!=1.6.6,!=1.6.7,>=1.6.2 # BSD
diff --git a/tox.ini b/tox.ini
index 3163c7d..f183956 100644
--- a/tox.ini
+++ b/tox.ini
@@ -1,6 +1,6 @@
 [tox]
 minversion = 2.0
-envlist = py35,py27,flake8
+envlist = py35,py27,pep8
 skipsdist = True
 
 [testenv]