diff --git a/designate_tempest_plugin/tests/api/admin/test_quotas.py b/designate_tempest_plugin/tests/api/admin/test_quotas.py
index e2d89af..ba77711 100644
--- a/designate_tempest_plugin/tests/api/admin/test_quotas.py
+++ b/designate_tempest_plugin/tests/api/admin/test_quotas.py
@@ -20,7 +20,7 @@
 LOG = logging.getLogger(__name__)
 
 
-class BaseQuotasTest(base.BaseDnsTest):
+class BaseQuotasTest(base.BaseDnsAdminTest):
     # see: https://bugs.launchpad.net/designate/+bug/1573141
     excluded_keys = ['api_expected_size']
 
diff --git a/designate_tempest_plugin/tests/api/v1/__init__.py b/designate_tempest_plugin/tests/api/v1/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/designate_tempest_plugin/tests/api/v1/__init__.py
diff --git a/designate_tempest_plugin/tests/api/v1/test_domains.py b/designate_tempest_plugin/tests/api/v1/test_domains.py
new file mode 100644
index 0000000..132df39
--- /dev/null
+++ b/designate_tempest_plugin/tests/api/v1/test_domains.py
@@ -0,0 +1,82 @@
+# Copyright 2014 Hewlett-Packard Development Company, L.P
+# All Rights Reserved.
+# Copyright 2016 Hewlett Packard Enterprise Development Company, L.P.
+#
+#    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.
+
+import six
+from tempest.common.utils import data_utils
+from tempest.lib import exceptions as lib_exc
+from tempest import test
+
+from designate_tempest_plugin.tests import base
+
+
+class DnsDomainsTest(base.BaseDnsV1Test):
+    @classmethod
+    def setup_clients(cls):
+        super(DnsDomainsTest, cls).setup_clients()
+
+        cls.client = cls.os.domains_client
+
+    @classmethod
+    def setUpClass(cls):
+        super(DnsDomainsTest, cls).setUpClass()
+        cls.setup_domains = list()
+        for i in range(2):
+            name = data_utils.rand_name('domain') + '.com.'
+            email = data_utils.rand_name('dns') + '@testmail.com'
+            _, domain = cls.client.create_domain(name, email)
+            cls.setup_domains.append(domain)
+
+    @classmethod
+    def tearDownClass(cls):
+        for domain in cls.setup_domains:
+            cls.client.delete_domain(domain['id'])
+        super(DnsDomainsTest, cls).tearDownClass()
+
+    def _delete_domain(self, domain_id):
+        self.client.delete_domain(domain_id)
+        self.assertRaises(lib_exc.NotFound,
+                          self.client.get_domain, domain_id)
+
+    @test.attr(type='smoke')
+    @test.idempotent_id('a78a4a6a-77a6-4dab-a61a-17df9731bca8')
+    def test_list_domains(self):
+        # Get a list of domains
+        _, domains = self.client.list_domains()
+        # Verify domains created in setup class are in the list
+        for domain in self.setup_domains:
+            self.assertIn(domain['id'],
+                          six.moves.map(lambda x: x['id'], domains))
+
+    @test.attr(type='smoke')
+    @test.idempotent_id('29f76dd4-2456-4e42-b0ca-bbffcc6bbf59')
+    def test_create_update_get_domain(self):
+        # Create Domain
+        d_name = data_utils.rand_name('domain') + '.com.'
+        d_email = data_utils.rand_name('dns') + '@testmail.com'
+        _, domain = self.client.create_domain(name=d_name, email=d_email)
+        self.addCleanup(self._delete_domain, domain['id'])
+        self.assertEqual(d_name, domain['name'])
+        self.assertEqual(d_email, domain['email'])
+        # Update Domain with  ttl
+        d_ttl = 3600
+        _, update_domain = self.client.update_domain(domain['id'],
+                                                   ttl=d_ttl)
+        self.assertEqual(d_ttl, update_domain['ttl'])
+        # Get the details of Domain
+        _, get_domain = self.client.get_domain(domain['id'])
+        self.assertEqual(update_domain['name'], get_domain['name'])
+        self.assertEqual(update_domain['email'], get_domain['email'])
+        self.assertEqual(update_domain['ttl'], get_domain['ttl'])
diff --git a/designate_tempest_plugin/tests/api/v1/test_records.py b/designate_tempest_plugin/tests/api/v1/test_records.py
new file mode 100644
index 0000000..21bffa4
--- /dev/null
+++ b/designate_tempest_plugin/tests/api/v1/test_records.py
@@ -0,0 +1,111 @@
+# Copyright 2014 Hewlett-Packard Development Company, L.P
+# All Rights Reserved.
+# Copyright 2016 Hewlett Packard Enterprise Development Company, L.P.
+#
+#    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.
+
+import six
+from tempest.common.utils import data_utils
+from tempest import test
+
+from designate_tempest_plugin.tests import base
+
+
+class RecordsTest(base.BaseDnsV1Test):
+    @classmethod
+    def setup_clients(cls):
+        super(RecordsTest, cls).setup_clients()
+
+        cls.client = cls.os.records_client
+
+    @classmethod
+    def setUpClass(cls):
+        super(RecordsTest, cls).setUpClass()
+
+        # Creates domains and Records for testcase
+        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)
+        # Creates a record with type as A
+        r_name = 'www.' + name
+        data1 = "192.0.2.3"
+        _, record = cls.client.create_record(
+            cls.domain['id'], name=r_name, data=data1,
+            type='A')
+        cls.setup_records.append(record)
+        # Creates a record with type AAAA
+        data2 = "2001:db8:0:1234:0:5678:9:12"
+        _, record = cls.client.create_record(
+            cls.domain['id'], name=r_name,
+            data=data2, type='AAAA')
+        cls.setup_records.append(record)
+
+    @classmethod
+    def tearDownClass(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'])
+
+    def _delete_record(self, domain_id, record_id):
+        self.client.delete_record(domain_id, record_id)
+        # TODO(kiall): Records in v1 should 404 immediatly after deletion.
+        # self.assertRaises(lib_exc.NotFound,
+        #                   self.client.get_record, domain_id, record_id)
+
+    @test.attr(type='smoke')
+    @test.idempotent_id('4c7bee47-68a4-4668-81f9-fa973ddfa1f1')
+    def test_list_records_for_domain(self):
+        # Get a list of records for a domain
+        _, records = self.client.list_records(self.domain['id'])
+        # Verify records created in setup class are in the list
+        for record in self.setup_records:
+            self.assertIn(record['id'],
+                          six.moves.map(lambda x: x['id'], records))
+
+    @test.attr(type='smoke')
+    @test.idempotent_id('1714fe3a-8a29-420e-a7dc-8209c7c174de')
+    def test_create_update_get_delete_record(self):
+        # Create Domain
+        name = data_utils.rand_name('domain') + '.com.'
+        email = data_utils.rand_name('dns') + '@testmail.com'
+        _, domain = self.os.domains_client.create_domain(name, email)
+        self.addCleanup(self.os.domains_client.delete_domain, domain['id'])
+        # Create Record
+        r_name = 'www.' + name
+        r_data = "192.0.2.4"
+        _, record = self.client.create_record(domain['id'],
+                                              name=r_name, data=r_data,
+                                              type='A')
+        self.addCleanup(self._delete_record, domain['id'], record['id'])
+        self.assertIsNotNone(record['id'])
+        self.assertEqual(domain['id'], record['domain_id'])
+        self.assertEqual(r_name, record['name'])
+        self.assertEqual(r_data, record['data'])
+        self.assertEqual('A', record['type'])
+        # Update Record with data and ttl
+        r_data1 = "192.0.2.5"
+        r_ttl = 3600
+        _, update_record = self.client.update_record(domain['id'],
+                                                     record['id'],
+                                                     name=r_name, type='A',
+                                                     data=r_data1, ttl=r_ttl)
+        self.assertEqual(r_data1, update_record['data'])
+        self.assertEqual(r_ttl, update_record['ttl'])
+        # GET record
+        _, get_record = self.client.get_record(domain['id'], record['id'])
+        self.assertEqual(update_record['data'], get_record['data'])
+        self.assertEqual(update_record['name'], get_record['name'])
+        self.assertEqual(update_record['type'], get_record['type'])
+        self.assertEqual(update_record['ttl'], get_record['ttl'])
+        self.assertEqual(update_record['domain_id'], get_record['domain_id'])
diff --git a/designate_tempest_plugin/tests/api/v1/test_servers.py b/designate_tempest_plugin/tests/api/v1/test_servers.py
new file mode 100644
index 0000000..a2ac54c
--- /dev/null
+++ b/designate_tempest_plugin/tests/api/v1/test_servers.py
@@ -0,0 +1,97 @@
+# Copyright 2014 Hewlett-Packard Development Company, L.P.
+# Copyright 2016 Hewlett Packard Enterprise Development Company, L.P.
+#
+#    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.
+
+import six
+from tempest.common.utils import data_utils
+from tempest.lib import exceptions as lib_exc
+from tempest import test
+from tempest import config
+
+from designate_tempest_plugin.tests import base
+
+
+CONF = config.CONF
+
+
+class ServersAdminTest(base.BaseDnsV1Test):
+    """
+    Tests Servers API Create, Get, List and Delete
+    that require admin privileges
+    """
+    credentials = ['admin']
+
+    @classmethod
+    def setup_clients(cls):
+        super(ServersAdminTest, cls).setup_clients()
+
+        cls.client = cls.os_adm.servers_client
+
+    @classmethod
+    def skip_checks(cls):
+        super(ServersAdminTest, cls).skip_checks()
+
+        if not CONF.dns_feature_enabled.api_v1_servers:
+            skip_msg = ("%s skipped as designate V1 servers API is not "
+                        "available" % cls.__name__)
+            raise cls.skipException(skip_msg)
+
+    @classmethod
+    def setUpClass(cls):
+        super(ServersAdminTest, cls).setUpClass()
+
+        cls.setup_servers = list()
+        for i in range(2):
+            name = data_utils.rand_name('dns-server') + '.com.'
+            _, server = cls.client.create_server(name)
+            cls.setup_servers.append(server)
+
+    @classmethod
+    def tearDownClass(cls):
+        for server in cls.setup_servers:
+            cls.client.delete_server(server['id'])
+        super(ServersAdminTest, cls).tearDownClass()
+
+    def _delete_server(self, server_id):
+        self.client.delete_server(server_id)
+        self.assertRaises(lib_exc.NotFound,
+                          self.client.get_server, server_id)
+
+    @test.attr(type='smoke')
+    @test.idempotent_id('0296fb0c-f400-4b52-9be4-a24f37646e3f')
+    def test_list_servers(self):
+        # Get a list of servers
+        _, servers = self.client.list_servers()
+        # Verify servers created in setup class are in the list
+        for server in self.setup_servers:
+            self.assertIn(server['id'],
+                          six.moves.map(lambda x: x['id'], servers))
+
+    @test.attr(type='smoke')
+    @test.idempotent_id('7d18fdfc-3959-4c3f-9855-0bf2f8c9ade2')
+    def test_create_update_get_delete_server(self):
+        # Create Dns Server
+        s_name1 = data_utils.rand_name('dns-server') + '.com.'
+        _, server = self.client.create_server(s_name1)
+        self.addCleanup(self._delete_server, server['id'])
+        self.assertEqual(s_name1, server['name'])
+        self.assertIsNotNone(server['id'])
+        # Update Dns Server
+        s_name2 = data_utils.rand_name('update-dns-server') + '.com.'
+        _, update_server = self.client.update_server(server['id'],
+                                                     name=s_name2)
+        self.assertEqual(s_name2, update_server['name'])
+        # Get the details of Server
+        _, get_server = self.client.get_server(server['id'])
+        self.assertEqual(update_server['name'], get_server['name'])
diff --git a/designate_tempest_plugin/tests/api/v2/test_blacklists.py b/designate_tempest_plugin/tests/api/v2/test_blacklists.py
index 791a22c..81178cf 100644
--- a/designate_tempest_plugin/tests/api/v2/test_blacklists.py
+++ b/designate_tempest_plugin/tests/api/v2/test_blacklists.py
@@ -22,7 +22,7 @@
 LOG = logging.getLogger(__name__)
 
 
-class BaseBlacklistsTest(base.BaseDnsTest):
+class BaseBlacklistsTest(base.BaseDnsV2Test):
     excluded_keys = ['created_at', 'updated_at', 'links']
 
 
diff --git a/designate_tempest_plugin/tests/api/v2/test_pool.py b/designate_tempest_plugin/tests/api/v2/test_pool.py
index 47e3324..a5c6e66 100644
--- a/designate_tempest_plugin/tests/api/v2/test_pool.py
+++ b/designate_tempest_plugin/tests/api/v2/test_pool.py
@@ -23,7 +23,7 @@
 LOG = logging.getLogger(__name__)
 
 
-class BasePoolTest(base.BaseDnsTest):
+class BasePoolTest(base.BaseDnsV2Test):
     excluded_keys = ['created_at', 'updated_at', 'links', 'ns_records']
 
     def _assertExpectedNSRecords(self, expected, actual, expected_key):
diff --git a/designate_tempest_plugin/tests/api/v2/test_recordset.py b/designate_tempest_plugin/tests/api/v2/test_recordset.py
index 1c9d87d..4e0f0fb 100644
--- a/designate_tempest_plugin/tests/api/v2/test_recordset.py
+++ b/designate_tempest_plugin/tests/api/v2/test_recordset.py
@@ -21,7 +21,7 @@
 LOG = logging.getLogger(__name__)
 
 
-class BaseRecordsetsTest(base.BaseDnsTest):
+class BaseRecordsetsTest(base.BaseDnsV2Test):
     excluded_keys = ['created_at', 'updated_at', 'version', 'links',
                      'type']
 
diff --git a/designate_tempest_plugin/tests/api/v2/test_tld.py b/designate_tempest_plugin/tests/api/v2/test_tld.py
index 46e5b48..bdec93e 100644
--- a/designate_tempest_plugin/tests/api/v2/test_tld.py
+++ b/designate_tempest_plugin/tests/api/v2/test_tld.py
@@ -21,7 +21,7 @@
 LOG = logging.getLogger(__name__)
 
 
-class BaseTldTest(base.BaseDnsTest):
+class BaseTldTest(base.BaseDnsV2Test):
     excluded_keys = ['created_at', 'updated_at', 'links']
 
 
diff --git a/designate_tempest_plugin/tests/api/v2/test_zones.py b/designate_tempest_plugin/tests/api/v2/test_zones.py
index f97e256..62f188e 100644
--- a/designate_tempest_plugin/tests/api/v2/test_zones.py
+++ b/designate_tempest_plugin/tests/api/v2/test_zones.py
@@ -22,7 +22,7 @@
 LOG = logging.getLogger(__name__)
 
 
-class BaseZonesTest(base.BaseDnsTest):
+class BaseZonesTest(base.BaseDnsV2Test):
     excluded_keys = ['created_at', 'updated_at', 'version', 'links',
                     'status', 'action']
 
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 d11bb64..c9350e6 100644
--- a/designate_tempest_plugin/tests/api/v2/test_zones_exports.py
+++ b/designate_tempest_plugin/tests/api/v2/test_zones_exports.py
@@ -21,7 +21,7 @@
 LOG = logging.getLogger(__name__)
 
 
-class BaseZoneExportsTest(base.BaseDnsTest):
+class BaseZoneExportsTest(base.BaseDnsV2Test):
     excluded_keys = ['created_at', 'updated_at', 'version', 'links',
                      'status', 'location']
 
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 c2b5585..ff2d5ef 100644
--- a/designate_tempest_plugin/tests/api/v2/test_zones_imports.py
+++ b/designate_tempest_plugin/tests/api/v2/test_zones_imports.py
@@ -21,7 +21,7 @@
 LOG = logging.getLogger(__name__)
 
 
-class BaseZonesImportTest(base.BaseDnsTest):
+class BaseZonesImportTest(base.BaseDnsV2Test):
     excluded_keys = ['created_at', 'updated_at', 'version', 'links',
                      'status', 'message']
 
diff --git a/designate_tempest_plugin/tests/base.py b/designate_tempest_plugin/tests/base.py
index 6519a4f..9f24d62 100644
--- a/designate_tempest_plugin/tests/base.py
+++ b/designate_tempest_plugin/tests/base.py
@@ -13,16 +13,17 @@
 # under the License.
 import six
 from tempest import test
+from tempest import config
 
 from designate_tempest_plugin import clients
 
 
+CONF = config.CONF
+
+
 class BaseDnsTest(test.BaseTestCase):
     """Base class for DNS tests."""
 
-    # Use the Designate Client Manager
-    client_manager = clients.Manager
-
     # NOTE(andreaf) credentials holds a list of the credentials to be allocated
     # 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
@@ -33,8 +34,64 @@
     # credentials in the tests that require them.
     credentials = ['primary']
 
+    @classmethod
+    def skip_checks(cls):
+        super(BaseDnsTest, cls).skip_checks()
+
+        if not CONF.service_available.designate:
+            skip_msg = ("%s skipped as designate is not available"
+                        % cls.__name__)
+            raise cls.skipException(skip_msg)
+
     def assertExpected(self, expected, actual, excluded_keys):
         for key, value in six.iteritems(expected):
             if key not in excluded_keys:
                 self.assertIn(key, actual)
                 self.assertEqual(value, actual[key], key)
+
+
+class BaseDnsV1Test(BaseDnsTest):
+    """Base class for DNS V1 API tests."""
+
+    # Use the Designate V1 Client Manager
+    client_manager = clients.ManagerV1
+
+    @classmethod
+    def skip_checks(cls):
+        super(BaseDnsV1Test, cls).skip_checks()
+
+        if not CONF.dns_feature_enabled.api_v1:
+            skip_msg = ("%s skipped as designate v1 API is not available"
+                        % cls.__name__)
+            raise cls.skipException(skip_msg)
+
+
+class BaseDnsV2Test(BaseDnsTest):
+    """Base class for DNS V2 API tests."""
+
+    # Use the Designate V2 Client Manager
+    client_manager = clients.ManagerV2
+
+    @classmethod
+    def skip_checks(cls):
+        super(BaseDnsV2Test, cls).skip_checks()
+
+        if not CONF.dns_feature_enabled.api_v2:
+            skip_msg = ("%s skipped as designate v2 API is not available"
+                        % cls.__name__)
+            raise cls.skipException(skip_msg)
+
+
+class BaseDnsAdminTest(BaseDnsTest):
+    """Base class for DNS Admin API tests."""
+
+    # Use the Designate V2 Client Manager
+    client_manager = clients.ManagerV2
+
+    @classmethod
+    def skip_checks(cls):
+        super(BaseDnsAdminTest, cls).skip_checks()
+        if not CONF.dns_feature_enabled.api_admin:
+            skip_msg = ("%s skipped as designate admin API is not available"
+                        % cls.__name__)
+            raise cls.skipException(skip_msg)
diff --git a/designate_tempest_plugin/tests/scenario/v2/test_zones.py b/designate_tempest_plugin/tests/scenario/v2/test_zones.py
index ea807d8..afd5b40 100644
--- a/designate_tempest_plugin/tests/scenario/v2/test_zones.py
+++ b/designate_tempest_plugin/tests/scenario/v2/test_zones.py
@@ -21,7 +21,7 @@
 LOG = logging.getLogger(__name__)
 
 
-class ZonesTest(base.BaseDnsTest):
+class ZonesTest(base.BaseDnsV2Test):
     @classmethod
     def setup_clients(cls):
         super(ZonesTest, cls).setup_clients()
