diff --git a/designate_tempest_plugin/clients.py b/designate_tempest_plugin/clients.py
index 8450c5a..17df788 100644
--- a/designate_tempest_plugin/clients.py
+++ b/designate_tempest_plugin/clients.py
@@ -14,6 +14,12 @@
 from tempest import clients
 from tempest import config
 
+from designate_tempest_plugin.services.dns.v1.json.domains_client import \
+    DomainsClient
+from designate_tempest_plugin.services.dns.v1.json.records_client import \
+    RecordsClient
+from designate_tempest_plugin.services.dns.v1.json.servers_client import \
+    ServersClient
 from designate_tempest_plugin.services.dns.v2.json.zones_client import \
     ZonesClient
 from designate_tempest_plugin.services.dns.v2.json.zone_imports_client import \
@@ -36,9 +42,27 @@
 CONF = config.CONF
 
 
-class Manager(clients.Manager):
+class ManagerV1(clients.Manager):
     def __init__(self, credentials=None, service=None):
-        super(Manager, self).__init__(credentials, service)
+        super(ManagerV1, self).__init__(credentials, service)
+
+        params = {
+            'service': CONF.dns.catalog_type,
+            'region': CONF.identity.region,
+            'endpoint_type': CONF.dns.endpoint_type,
+            'build_interval': CONF.dns.build_interval,
+            'build_timeout': CONF.dns.build_timeout
+        }
+        params.update(self.default_params)
+
+        self.domains_client = DomainsClient(self.auth_provider, **params)
+        self.records_client = RecordsClient(self.auth_provider, **params)
+        self.servers_client = ServersClient(self.auth_provider, **params)
+
+
+class ManagerV2(clients.Manager):
+    def __init__(self, credentials=None, service=None):
+        super(ManagerV2, self).__init__(credentials, service)
 
         params = {
             'service': CONF.dns.catalog_type,
diff --git a/designate_tempest_plugin/config.py b/designate_tempest_plugin/config.py
index d813caa..c1dc79f 100644
--- a/designate_tempest_plugin/config.py
+++ b/designate_tempest_plugin/config.py
@@ -13,6 +13,15 @@
 # under the License.
 from oslo_config import cfg
 
+service_available_group = cfg.OptGroup(name="service_available",
+                                       title="Available OpenStack Services")
+
+ServiceAvailableGroup = [
+    cfg.BoolOpt("designate",
+                default=True,
+                help="Whether or not designate is expected to be available."),
+]
+
 dns_group = cfg.OptGroup(name='dns',
                          title='DNS service options')
 
@@ -42,3 +51,21 @@
                help="The timeout on a single dns query to a nameserver"),
 
 ]
+
+dns_feature_group = cfg.OptGroup(name='dns_feature_enabled',
+                                 title='Enabled Designate Features')
+
+DnsFeatureGroup = [
+    cfg.BoolOpt('api_v1',
+                default=True,
+                help="Is the v1 dns API enabled."),
+    cfg.BoolOpt('api_v2',
+                default=True,
+                help="Is the v2 dns API enabled."),
+    cfg.BoolOpt('api_admin',
+                default=True,
+                help="Is the admin dns API enabled."),
+    cfg.BoolOpt('api_v1_servers',
+                default=False,
+                help="Is the v1 dns servers API enabled."),
+]
diff --git a/designate_tempest_plugin/plugin.py b/designate_tempest_plugin/plugin.py
index 20f19c1..0a093ef 100644
--- a/designate_tempest_plugin/plugin.py
+++ b/designate_tempest_plugin/plugin.py
@@ -51,8 +51,12 @@
         conf (ConfigOpts): The conf object that can be used to register
         additional options on.
         """
+        config.register_opt_group(conf, project_config.service_available_group,
+                                  project_config.ServiceAvailableGroup)
         config.register_opt_group(conf, project_config.dns_group,
                                   project_config.DnsGroup)
+        config.register_opt_group(conf, project_config.dns_feature_group,
+                                  project_config.DnsFeatureGroup)
 
     def get_opt_lists(self):
         """
@@ -62,5 +66,11 @@
                             and options in that group.
         Return type: list
         """
-        return [(project_config.dns_group.name,
-                 project_config.DnsGroup)]
+        return [
+            (project_config.service_available_group.name,
+             project_config.ServiceAvailableGroup),
+            (project_config.dns_group.name,
+             project_config.DnsGroup),
+            (project_config.dns_feature_group.name,
+             project_config.DnsFeatureGroup),
+        ]
diff --git a/designate_tempest_plugin/schemas/__init__.py b/designate_tempest_plugin/schemas/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/designate_tempest_plugin/schemas/__init__.py
diff --git a/designate_tempest_plugin/schemas/v1/__init__.py b/designate_tempest_plugin/schemas/v1/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/designate_tempest_plugin/schemas/v1/__init__.py
diff --git a/designate_tempest_plugin/schemas/v1/domains_schema.py b/designate_tempest_plugin/schemas/v1/domains_schema.py
new file mode 100644
index 0000000..50247e8
--- /dev/null
+++ b/designate_tempest_plugin/schemas/v1/domains_schema.py
@@ -0,0 +1,123 @@
+# Copyright 2014 Hewlett-Packard 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.
+
+list_domains = {
+    "status_code": [200],
+    "response_body": {
+        "type": "object",
+        "properties": {
+            "domains": {
+                "type": "array",
+                "items": {
+                    "type": "object",
+                    "properties": {
+                        "created_at": {"type": "string"},
+                        "description": {
+                            "anyOf": [{'type': 'string'}, {"type": "null"}]},
+                        "email": {"type": "string"},
+                        "id": {"type": "string"},
+                        "name": {"type": "string"},
+                        "serial": {"type": "number"},
+                        "ttl": {"type": "number"},
+                        "updated_at": {
+                            "anyOf": [{'type': 'string'}, {"type": "null"}]}
+                    },
+                    'required': ['id', 'name', 'email', 'ttl']
+                }
+            }
+        },
+        'required': ['domains']
+    }
+}
+
+create_domain = {
+    "status_code": [200],
+    "response_body": {
+        "type": "object",
+        "properties": {
+            "domain": {
+                "type": "object",
+                "properties": {
+                    "created_at": {"type": "string"},
+                    "description": {
+                        "anyOf": [{'type': 'string'}, {"type": "null"}]},
+                    "email": {"type": "string"},
+                    "id": {"type": "string"},
+                    "name": {"type": "string"},
+                    "serial": {"type": "number"},
+                    "ttl": {"type": "number"},
+                    "updated_at": {"type": "null"}
+                },
+                "required": ['id', 'name', 'email', 'ttl']
+            }
+        }
+    },
+    "required": ['domain']
+}
+
+update_domain = {
+    "status_code": [200],
+    "response_body": {
+        "type": "object",
+        "properties": {
+            "domain": {
+                "type": "object",
+                "properties": {
+                    "created_at": {"type": "string"},
+                    "description": {
+                        "anyOf": [{'type': 'string'}, {"type": "null"}]},
+                    "email": {"type": "string"},
+                    "id": {"type": "string"},
+                    "name": {"type": "string"},
+                    "serial": {"type": "number"},
+                    "ttl": {"type": "number"},
+                    "updated_at": {
+                        "anyOf": [{'type': 'string'}, {"type": "null"}]}
+                },
+                "required": ['id', 'name', 'email', 'ttl']
+            }
+        }
+    },
+    "required": ['domain']
+}
+
+get_domain = {
+    "status_code": [200],
+    "response_body": {
+        "type": "object",
+        "properties": {
+            "domain": {
+                "type": "object",
+                "properties": {
+                    "created_at": {"type": "string"},
+                    "description": {
+                        "anyOf": [{'type': 'string'}, {"type": "null"}]},
+                    "email": {"type": "string"},
+                    "id": {"type": "string"},
+                    "name": {"type": "string"},
+                    "serial": {"type": "number"},
+                    "ttl": {"type": "number"},
+                    "updated_at": {
+                        "anyOf": [{'type': 'string'}, {"type": "null"}]}
+                },
+                "required": ['id', 'name', 'email', 'ttl']
+            }
+        }
+    },
+    "required": ['domain']
+}
+
+delete_domain = {
+    'status_code': [200],
+}
diff --git a/designate_tempest_plugin/schemas/v1/records_schema.py b/designate_tempest_plugin/schemas/v1/records_schema.py
new file mode 100644
index 0000000..ef81d5d
--- /dev/null
+++ b/designate_tempest_plugin/schemas/v1/records_schema.py
@@ -0,0 +1,126 @@
+# 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.
+list_records = {
+    "status_code": [200],
+    "response_body": {
+        "type": "object",
+        "properties": {
+            "records": {
+                "type": "array",
+                "items": {
+                    "type": "object",
+                    "properties": {
+                        "created_at": {"type": "string"},
+                        "data": {"type": "string"},
+                        "description": {"type": "null"},
+                        "domain_id": {"type": "string"},
+                        "id": {"type": "string"},
+                        "name": {"type": "string"},
+                        "priority": {"type": "null"},
+                        "ttl": {"type": "null"},
+                        "type": {"type": "string"},
+                        "updated_at": {
+                            "anyOf": [{'type': 'string'}, {"type": "null"}]}
+                    },
+                    'required': ['id', 'name', 'type', 'data']
+                }
+            }
+        },
+        'required': ['records']
+    }
+}
+
+create_record = {
+    "status_code": [200],
+    "response_body": {
+        "type": "object",
+        "properties": {
+            "record": {
+                "type": "object",
+                "properties": {
+                    "created_at": {"type": "string"},
+                    "data": {"type": "string"},
+                    "description": {"type": "null"},
+                    "domain_id": {"type": "string"},
+                    "id": {"type": "string"},
+                    "name": {"type": "string"},
+                    "priority": {"type": "null"},
+                    "ttl": {"type": "null"},
+                    "type": {"type": "string"},
+                    "updated_at": {"type": "null"}
+                },
+                "required": ['id', 'name', 'type', 'domain_id']
+            }
+        }
+    },
+    "required": ['record']
+}
+
+update_record = {
+    "status_code": [200],
+    "response_body": {
+        "type": "object",
+        "properties": {
+            "record": {
+                "type": "object",
+                "properties": {
+                    "created_at": {"type": "string"},
+                    "data": {"type": "string"},
+                    "description": {"type": "null"},
+                    "domain_id": {"type": "string"},
+                    "id": {"type": "string"},
+                    "name": {"type": "string"},
+                    "priority": {"type": "null"},
+                    "ttl": {"type": "null"},
+                    "type": {"type": "string"},
+                    "updated_at": {"type": "string"}
+                },
+                "required": ['id', 'name', 'type', 'domain_id']
+            }
+        }
+    },
+    "required": ['record']
+}
+
+get_record = {
+    "status_code": [200],
+    "response_body": {
+        "type": "object",
+        "properties": {
+            "record": {
+                "type": "object",
+                "properties": {
+                    "created_at": {"type": "string"},
+                    "data": {"type": "string"},
+                    "description": {"type": "null"},
+                    "domain_id": {"type": "string"},
+                    "id": {"type": "string"},
+                    "name": {"type": "string"},
+                    "priority": {"type": "null"},
+                    "ttl": {"type": "null"},
+                    "type": {"type": "string"},
+                    "updated_at": {
+                        "anyOf": [{'type': 'string'}, {"type": "null"}]}
+                },
+                "required": ['id', 'name', 'type', 'domain_id']
+            }
+        }
+    },
+    "required": ['record']
+}
+
+delete_record = {
+    'status_code': [200],
+}
diff --git a/designate_tempest_plugin/schemas/v1/servers_schema.py b/designate_tempest_plugin/schemas/v1/servers_schema.py
new file mode 100644
index 0000000..934917d
--- /dev/null
+++ b/designate_tempest_plugin/schemas/v1/servers_schema.py
@@ -0,0 +1,103 @@
+# Copyright 2014 Hewlett-Packard 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.
+
+
+list_servers = {
+    "status_code": [200],
+    "response_body": {
+        "type": "object",
+        "properties": {
+            "servers": {
+                "type": "array",
+                "items": {
+                    "type": "object",
+                    "properties": {
+                        "created_at": {"type": "string"},
+                        "id": {"type": "string"},
+                        "name": {"type": "string"},
+                        "updated_at": {
+                            "anyOf": [{'type': 'string'}, {"type": "null"}]}
+                    },
+                    'required': ['id', 'name']
+                }
+            }
+        },
+        'required': ['servers']
+    }
+}
+
+create_server = {
+    "status_code": [200],
+    "response_body": {
+        "type": "object",
+        "properties": {
+            "server": {
+                "type": "object",
+                "properties": {
+                    "created_at": {"type": "string"},
+                    "id": {"type": "string"},
+                    "name": {"type": "string"},
+                    "updated_at": {"type": "null"}
+                },
+                "required": ['id', 'name']
+            }
+        }
+    },
+    "required": ['server']
+}
+
+update_server = {
+    "status_code": [200],
+    "response_body": {
+        "type": "object",
+        "properties": {
+            "server": {
+                "type": "object",
+                "properties": {
+                    "created_at": {"type": "string"},
+                    "id": {"type": "string"},
+                    "name": {"type": "string"},
+                    "updated_at": {"type": "string"}
+                },
+                "required": ['id', 'name']
+            }
+        }
+    },
+    "required": ['server']
+}
+
+get_server = {
+    "status_code": [200],
+    "response_body": {
+        "type": "object",
+        "properties": {
+            "server": {
+                "type": "object",
+                "properties": {
+                    "created_at": {"type": "string"},
+                    "id": {"type": "string"},
+                    "name": {"type": "string"},
+                    "updated_at": {
+                        "anyOf": [{'type': 'string'}, {"type": "null"}]}
+                },
+                "required": ['id', 'name']
+            }
+        }
+    },
+    "required": ['server']
+}
+
+delete_server = {
+    'status_code': [200],
+}
diff --git a/designate_tempest_plugin/services/dns/admin/json/base.py b/designate_tempest_plugin/services/dns/admin/json/base.py
index 2714625..b9cfa1e 100644
--- a/designate_tempest_plugin/services/dns/admin/json/base.py
+++ b/designate_tempest_plugin/services/dns/admin/json/base.py
@@ -19,3 +19,10 @@
 class DnsClientAdminBase(base.DnsClientBase):
     """Base Admin API Tempest REST client for Designate API"""
     uri_prefix = 'admin'
+
+    CREATE_STATUS_CODES = [201, 202]
+    SHOW_STATUS_CODES = [200]
+    LIST_STATUS_CODES = [200]
+    PUT_STATUS_CODES = [200, 202]
+    UPDATE_STATUS_CODES = [200, 202]
+    DELETE_STATUS_CODES = [202, 204]
diff --git a/designate_tempest_plugin/services/dns/json/base.py b/designate_tempest_plugin/services/dns/json/base.py
index ef7260b..f9b1de7 100644
--- a/designate_tempest_plugin/services/dns/json/base.py
+++ b/designate_tempest_plugin/services/dns/json/base.py
@@ -49,6 +49,13 @@
 
     uri_prefix = ''
 
+    CREATE_STATUS_CODES = []
+    SHOW_STATUS_CODES = []
+    LIST_STATUS_CODES = []
+    PUT_STATUS_CODES = []
+    UPDATE_STATUS_CODES = []
+    DELETE_STATUS_CODES = []
+
     def serialize(self, object_dict):
         return json.dumps(object_dict)
 
@@ -114,7 +121,7 @@
 
         resp, body = self.post(uri, body=body, headers=headers,
                                extra_headers=extra_headers)
-        self.expected_success([201, 202], resp.status)
+        self.expected_success(self.CREATE_STATUS_CODES, resp.status)
 
         return resp, self.deserialize(resp, body)
 
@@ -130,7 +137,7 @@
 
         resp, body = self.get(uri, headers=headers)
 
-        self.expected_success(200, resp.status)
+        self.expected_success(self.SHOW_STATUS_CODES, resp.status)
 
         return resp, self.deserialize(resp, body)
 
@@ -145,7 +152,7 @@
 
         resp, body = self.get(uri)
 
-        self.expected_success(200, resp.status)
+        self.expected_success(self.LIST_STATUS_CODES, resp.status)
 
         return resp, self.deserialize(resp, body)
 
@@ -163,7 +170,7 @@
         uri = self.get_uri(resource, uuid=uuid, params=params)
         resp, body = self.put(uri, body=body)
 
-        self.expected_success([200, 202], resp.status)
+        self.expected_success(self.PUT_STATUS_CODES, resp.status)
 
         return resp, self.deserialize(resp, body)
 
@@ -182,7 +189,7 @@
 
         resp, body = self.patch(uri, body=body)
 
-        self.expected_success([200, 202], resp.status)
+        self.expected_success(self.UPDATE_STATUS_CODES, resp.status)
 
         return resp, self.deserialize(resp, body)
 
@@ -197,7 +204,7 @@
         uri = self.get_uri(resource, uuid=uuid, params=params)
 
         resp, body = self.delete(uri)
-        self.expected_success([202, 204], resp.status)
+        self.expected_success(self.DELETE_STATUS_CODES, resp.status)
         if resp.status == 202:
             body = self.deserialize(resp, body)
 
diff --git a/designate_tempest_plugin/services/dns/v1/__init__.py b/designate_tempest_plugin/services/dns/v1/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/designate_tempest_plugin/services/dns/v1/__init__.py
diff --git a/designate_tempest_plugin/services/dns/v1/json/__init__.py b/designate_tempest_plugin/services/dns/v1/json/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/designate_tempest_plugin/services/dns/v1/json/__init__.py
diff --git a/designate_tempest_plugin/services/dns/v1/json/base.py b/designate_tempest_plugin/services/dns/v1/json/base.py
new file mode 100644
index 0000000..2b1c4f3
--- /dev/null
+++ b/designate_tempest_plugin/services/dns/v1/json/base.py
@@ -0,0 +1,28 @@
+# 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.
+from designate_tempest_plugin.services.dns.json import base
+
+handle_errors = base.handle_errors
+
+
+class DnsClientV1Base(base.DnsClientBase):
+    """Base API V1 Tempest REST client for Designate API"""
+    uri_prefix = 'v1'
+
+    CREATE_STATUS_CODES = [200]
+    SHOW_STATUS_CODES = [200]
+    LIST_STATUS_CODES = [200]
+    PUT_STATUS_CODES = [200]
+    UPDATE_STATUS_CODES = []
+    DELETE_STATUS_CODES = [200]
diff --git a/designate_tempest_plugin/services/dns/v1/json/domains_client.py b/designate_tempest_plugin/services/dns/v1/json/domains_client.py
new file mode 100644
index 0000000..2b76d503
--- /dev/null
+++ b/designate_tempest_plugin/services/dns/v1/json/domains_client.py
@@ -0,0 +1,95 @@
+# 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.
+
+from tempest import config
+
+from designate_tempest_plugin.schemas.v1 import domains_schema as schema
+from designate_tempest_plugin.services.dns.v1.json import base
+
+CONF = config.CONF
+
+
+class DomainsClient(base.DnsClientV1Base):
+    @base.handle_errors
+    def list_domains(self, params=None):
+        """List all domains."""
+        resp, body = self._list_request('domains', params=params)
+
+        self.validate_response(schema.list_domains, resp, body)
+
+        return resp, body['domains']
+
+    @base.handle_errors
+    def get_domain(self, uuid, params=None):
+        """Gets a specific zone.
+        :param uuid: Unique identifier of the domain in UUID format.
+        :param params: A Python dict that represents the query paramaters to
+                       include in the request URI.
+        :return: Serialized domain as a dictionary.
+        :return: A tuple with the server response and the deserialized domain.
+        """
+        resp, body = self._show_request('domains', uuid, params=params)
+
+        self.validate_response(schema.get_domain, resp, body)
+
+        return resp, body
+
+    @base.handle_errors
+    def delete_domain(self, uuid, params=None):
+        """Delete the given domain."""
+        resp, body = self._delete_request('domains', uuid, params=params)
+
+        self.validate_response(schema.delete_domain, resp, body)
+
+        return resp, body
+
+    @base.handle_errors
+    def create_domain(self, name, email, params=None, **kwargs):
+        """Creates a domain."""
+        post_body = {
+            "name": name,
+            "email": email
+        }
+
+        for option in ['ttl', 'description']:
+            post_param = option
+            value = kwargs.get(option)
+            if value is not None:
+                post_body[post_param] = value
+
+        resp, body = self._create_request('domains', post_body, params=params)
+
+        self.validate_response(schema.create_domain, resp, body)
+
+        return resp, body
+
+    @base.handle_errors
+    def update_domain(self, uuid, params=None, **kwargs):
+        """Updates a domain."""
+        post_body = {}
+
+        for option in ['email', 'name', 'ttl', 'description']:
+            post_param = option
+            value = kwargs.get(option)
+            if value is not None:
+                post_body[post_param] = value
+
+        resp, body = self._put_request('domains', uuid, post_body,
+                                       params=params)
+
+        self.validate_response(schema.update_domain, resp, body)
+
+        return resp, body
diff --git a/designate_tempest_plugin/services/dns/v1/json/records_client.py b/designate_tempest_plugin/services/dns/v1/json/records_client.py
new file mode 100644
index 0000000..432016e
--- /dev/null
+++ b/designate_tempest_plugin/services/dns/v1/json/records_client.py
@@ -0,0 +1,102 @@
+# 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.
+
+from tempest import config
+
+from designate_tempest_plugin.schemas.v1 import records_schema as schema
+from designate_tempest_plugin.services.dns.v1.json import base
+
+CONF = config.CONF
+
+
+class RecordsClient(base.DnsClientV1Base):
+    @base.handle_errors
+    def list_records(self, domain_uuid, params=None):
+        """List all records."""
+        base_uri = 'domains/%s/records' % (domain_uuid)
+
+        resp, body = self._list_request(base_uri, params=params)
+
+        self.validate_response(schema.list_records, resp, body)
+
+        return resp, body['records']
+
+    @base.handle_errors
+    def get_record(self, domain_uuid, uuid, params=None):
+        """Get the details of a record."""
+        base_uri = 'domains/%s/records' % (domain_uuid)
+
+        resp, body = self._show_request(base_uri, uuid, params=params)
+
+        self.validate_response(schema.get_record, resp, body)
+
+        return resp, body
+
+    @base.handle_errors
+    def delete_record(self, domain_uuid, uuid, params=None):
+        """Delete the given record."""
+        base_uri = 'domains/%s/records' % (domain_uuid)
+
+        resp, body = self._delete_request(base_uri, uuid, params=params)
+
+        self.validate_response(schema.delete_record, resp, body)
+
+        return resp, body
+
+    @base.handle_errors
+    def create_record(self, domain_uuid, name, type, data, params=None,
+                      **kwargs):
+        """Creates a record."""
+        base_uri = 'domains/%s/records' % (domain_uuid)
+
+        post_body = {
+            "name": name,
+            "type": type,
+            "data": data
+        }
+
+        for option in ['ttl', 'priority', 'description']:
+            post_param = option
+            value = kwargs.get(option)
+            if value is not None:
+                post_body[post_param] = value
+
+        resp, body = self._create_request(base_uri, post_body, params=params)
+
+        self.validate_response(schema.create_record, resp, body)
+
+        return resp, body
+
+    @base.handle_errors
+    def update_record(self, domain_uuid, uuid, params=None, **kwargs):
+        """Updates a record."""
+        base_uri = 'domains/%s/records' % (domain_uuid)
+
+        post_body = {}
+
+        for option in ['name', 'type', 'data', 'ttl', 'priority',
+                       'description']:
+            post_param = option
+            value = kwargs.get(option)
+            if value is not None:
+                post_body[post_param] = value
+
+        resp, body = self._put_request(base_uri, uuid, post_body,
+                                       params=params)
+
+        self.validate_response(schema.update_record, resp, body)
+
+        return resp, body
diff --git a/designate_tempest_plugin/services/dns/v1/json/servers_client.py b/designate_tempest_plugin/services/dns/v1/json/servers_client.py
new file mode 100644
index 0000000..9268602
--- /dev/null
+++ b/designate_tempest_plugin/services/dns/v1/json/servers_client.py
@@ -0,0 +1,88 @@
+# 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.
+
+from tempest import config
+
+from designate_tempest_plugin.schemas.v1 import servers_schema as schema
+from designate_tempest_plugin.services.dns.v1.json import base
+
+CONF = config.CONF
+
+
+class ServersClient(base.DnsClientV1Base):
+    @base.handle_errors
+    def list_servers(self, params=None):
+        """List all servers."""
+        resp, body = self._list_request('servers', params=params)
+
+        self.validate_response(schema.list_servers, resp, body)
+
+        return resp, body['servers']
+
+    @base.handle_errors
+    def get_server(self, uuid, params=None):
+        """Get the details of a server."""
+        resp, body = self._show_request('servers', uuid, params=params)
+
+        self.validate_response(schema.get_server, resp, body)
+
+        return resp, body
+
+    @base.handle_errors
+    def delete_server(self, uuid, params=None):
+        """Delete the given server."""
+        resp, body = self._delete_request('servers', uuid, params=params)
+
+        self.validate_response(schema.delete_server, resp, body)
+
+        return resp, body
+
+    @base.handle_errors
+    def create_server(self, name, params=None, **kwargs):
+        """Creates a server."""
+        post_body = {
+            "name": name,
+        }
+
+        for option in ['name']:
+            value = kwargs.get(option)
+            post_param = option
+            if value is not None:
+                post_body[post_param] = value
+
+        resp, body = self._create_request('servers', post_body, params=params)
+
+        self.validate_response(schema.create_server, resp, body)
+
+        return resp, body
+
+    @base.handle_errors
+    def update_server(self, uuid, params=None, **kwargs):
+        """Updates a server."""
+        post_body = {}
+
+        for option in ['name']:
+            post_param = option
+            value = kwargs.get(option)
+            if value is not None:
+                post_body[post_param] = value
+
+        resp, body = self._put_request('servers', uuid, post_body,
+                                       params=params)
+
+        self.validate_response(schema.update_server, resp, body)
+
+        return resp, body
diff --git a/designate_tempest_plugin/services/dns/v2/json/base.py b/designate_tempest_plugin/services/dns/v2/json/base.py
index a679fd6..ad3e4d6 100644
--- a/designate_tempest_plugin/services/dns/v2/json/base.py
+++ b/designate_tempest_plugin/services/dns/v2/json/base.py
@@ -19,3 +19,10 @@
 class DnsClientV2Base(base.DnsClientBase):
     """Base API V2 Tempest REST client for Designate API"""
     uri_prefix = 'v2'
+
+    CREATE_STATUS_CODES = [201, 202]
+    SHOW_STATUS_CODES = [200]
+    LIST_STATUS_CODES = [200]
+    PUT_STATUS_CODES = [200, 202]
+    UPDATE_STATUS_CODES = [200, 202]
+    DELETE_STATUS_CODES = [202, 204]
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..5df68cb 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']
 
 
@@ -69,7 +69,7 @@
         _, body = self.admin_client.show_tld(tld['id'])
 
         LOG.info('Ensure the fetched response matches the created tld')
-        # self.assertExpected(tld, body, self.excluded_keys)
+        self.assertExpected(tld, body, self.excluded_keys)
 
     @test.attr(type='smoke')
     @test.idempotent_id('26708cb8-7126-48a7-9424-1c225e56e609')
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 91baeb0..6ee479f 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()
