Migrate the "unauthed" tests

This migrates the tests that check for a 401 if a token is not provided
in the request headers.

Change-Id: I9752685afccee5dcd009f76b5242fd6f12f0fc37
diff --git a/designate_tempest_plugin/clients.py b/designate_tempest_plugin/clients.py
index 66db3de..5f4f728 100644
--- a/designate_tempest_plugin/clients.py
+++ b/designate_tempest_plugin/clients.py
@@ -13,6 +13,7 @@
 # under the License.
 from tempest import clients
 from tempest import config
+from tempest.lib.auth import KeystoneV2AuthProvider
 
 from designate_tempest_plugin.services.dns.v1.json.domains_client import \
     DomainsClient
@@ -49,58 +50,93 @@
 
 
 class ManagerV1(clients.Manager):
+
     def __init__(self, credentials=None, service=None):
         super(ManagerV1, self).__init__(credentials, service)
+        self._init_clients(self._get_params())
 
-        params = {
+    def _init_clients(self, params):
+        self.domains_client = DomainsClient(**params)
+        self.records_client = RecordsClient(**params)
+        self.servers_client = ServersClient(**params)
+
+    def _get_params(self):
+        params = dict(self.default_params)
+        params.update({
+            'auth_provider': self.auth_provider,
             '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)
+        })
+        return params
 
 
 class ManagerV2(clients.Manager):
+
     def __init__(self, credentials=None, service=None):
         super(ManagerV2, self).__init__(credentials, service)
+        self._init_clients(self._get_params())
 
-        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)
+    def _init_clients(self, params):
+        self.zones_client = ZonesClient(**params)
+        self.zone_imports_client = ZoneImportsClient(**params)
+        self.blacklists_client = BlacklistsClient(**params)
+        self.quotas_client = QuotasClient(**params)
+        self.zone_exports_client = ZoneExportsClient(**params)
+        self.recordset_client = RecordsetClient(**params)
+        self.pool_client = PoolClient(**params)
+        self.tld_client = TldClient(**params)
+        self.transfer_request_client = TransferRequestClient(**params)
+        self.transfer_accept_client = TransferAcceptClient(**params)
+        self.tsigkey_client = TsigkeyClient(**params)
 
-        self.zones_client = ZonesClient(self.auth_provider, **params)
-        self.zone_imports_client = ZoneImportsClient(self.auth_provider,
-                                                     **params)
-        self.blacklists_client = BlacklistsClient(self.auth_provider, **params)
-        self.quotas_client = QuotasClient(self.auth_provider, **params)
-        self.zone_exports_client = ZoneExportsClient(self.auth_provider,
-                                                     **params)
-        self.recordset_client = RecordsetClient(self.auth_provider,
-                                                **params)
-        self.pool_client = PoolClient(self.auth_provider,
-                                      **params)
-        self.tld_client = TldClient(self.auth_provider,
-                                    **params)
         self.query_client = QueryClient(
             nameservers=CONF.dns.nameservers,
             query_timeout=CONF.dns.query_timeout,
             build_interval=CONF.dns.build_interval,
             build_timeout=CONF.dns.build_timeout,
         )
-        self.transfer_request_client = TransferRequestClient(
-                                           self.auth_provider, **params)
-        self.transfer_accept_client = TransferAcceptClient(
-                                           self.auth_provider, **params)
-        self.tsigkey_client = TsigkeyClient(
-                                           self.auth_provider, **params)
+
+    def _get_params(self):
+        params = dict(self.default_params)
+        params.update({
+            'auth_provider': self.auth_provider,
+            '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
+        })
+        return params
+
+
+class ManagerV2Unauthed(ManagerV2):
+
+    def __init__(self, credentials=None, service=None):
+        super(ManagerV2Unauthed, self).__init__(credentials, service)
+        self.auth_provider = KeystoneV2UnauthedProvider(
+            credentials=self.auth_provider.credentials,
+            auth_url=self.auth_provider.auth_client.auth_url,
+            disable_ssl_certificate_validation=self.auth_provider.dscv,
+            ca_certs=self.auth_provider.ca_certs,
+            trace_requests=self.auth_provider.trace_requests,
+        )
+        self._init_clients(self._get_params())
+
+
+class KeystoneV2UnauthedProvider(KeystoneV2AuthProvider):
+    """This auth provider will ensure requests are made without a token"""
+
+    def _decorate_request(self, filters, method, url, headers=None, body=None,
+                          auth_data=None):
+        result = super(KeystoneV2UnauthedProvider, self)._decorate_request(
+            filters, method, url, headers=headers, body=body,
+            auth_data=auth_data)
+        url, headers, body = result
+        try:
+            del headers['X-Auth-Token']
+        except KeyError:
+            pass
+        return url, headers, body
diff --git a/designate_tempest_plugin/tests/api/v2/test_unauthed.py b/designate_tempest_plugin/tests/api/v2/test_unauthed.py
new file mode 100644
index 0000000..f036824
--- /dev/null
+++ b/designate_tempest_plugin/tests/api/v2/test_unauthed.py
@@ -0,0 +1,48 @@
+# Copyright 2016 Rackspace
+#
+# 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 test
+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.clients import ManagerV2Unauthed
+
+LOG = logging.getLogger(__name__)
+
+
+@ddt.ddt
+class TestDnsUnauthed(base.BaseDnsV2Test):
+
+    client_manager = ManagerV2Unauthed
+    credentials = ["primary"]
+
+    @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
+
+    @test.attr(type='smoke')
+    @decorators.idempotent_id('0f7a6d20-f6f3-4937-8fe6-7a9851227d98')
+    @ddt.file_data('unauthed_data.json')
+    def test_unauthed(self, client, method, args=None):
+        client = getattr(self, client)
+        method = getattr(client, method)
+        args = args or []
+        self.assertRaises(lib_exc.Unauthorized, method, *args)
diff --git a/designate_tempest_plugin/tests/api/v2/unauthed_data.json b/designate_tempest_plugin/tests/api/v2/unauthed_data.json
new file mode 100644
index 0000000..c4faf80
--- /dev/null
+++ b/designate_tempest_plugin/tests/api/v2/unauthed_data.json
@@ -0,0 +1,127 @@
+{
+    "list_zones": {
+        "client": "zones_client",
+        "method": "list_zones"
+    },
+    "show_zone": {
+        "client": "zones_client",
+        "method": "show_zone",
+        "args": ["6ef3b7f2-df39-43ef-9f37-ce2bc424ab90"]
+    },
+    "create_zone": {
+        "client": "zones_client",
+        "method": "create_zone",
+        "args": ["6ef3b7f2-df39-43ef-9f37-ce2bc424ab90"]
+    },
+    "update_zone": {
+        "client": "zones_client",
+        "method": "update_zone",
+        "args": ["6ef3b7f2-df39-43ef-9f37-ce2bc424ab90"]
+    },
+    "delete_zone": {
+        "client": "zones_client",
+        "method": "delete_zone",
+        "args": ["6ef3b7f2-df39-43ef-9f37-ce2bc424ab90"]
+    },
+
+    "list_recordsets": {
+        "client": "recordset_client",
+        "method": "list_recordset",
+        "args": ["6ef3b7f2-df39-43ef-9f37-ce2bc424ab90"]
+    },
+    "show_recordset": {
+        "client": "recordset_client",
+        "method": "show_recordset",
+        "args": ["6ef3b7f2-df39-43ef-9f37-ce2bc424ab90", "6ef3b7f2-df39-43ef-9f37-ce2bc424ab90"]
+    },
+    "create_recordset": {
+        "client": "recordset_client",
+        "method": "create_recordset",
+        "args": ["6ef3b7f2-df39-43ef-9f37-ce2bc424ab90", "6ef3b7f2-df39-43ef-9f37-ce2bc424ab90"]
+    },
+    "update_recordset": {
+        "client": "recordset_client",
+        "method": "update_recordset",
+        "args": ["6ef3b7f2-df39-43ef-9f37-ce2bc424ab90", "6ef3b7f2-df39-43ef-9f37-ce2bc424ab90", {}]
+    },
+    "delete_recordset": {
+        "client": "recordset_client",
+        "method": "delete_recordset",
+        "args": ["6ef3b7f2-df39-43ef-9f37-ce2bc424ab90", "6ef3b7f2-df39-43ef-9f37-ce2bc424ab90"]
+    },
+
+    "list_tlds": {
+        "client": "tld_client",
+        "method": "list_tlds"
+    },
+    "show_tld": {
+        "client": "tld_client",
+        "method": "show_tld",
+        "args": ["6ef3b7f2-df39-43ef-9f37-ce2bc424ab90"]
+    },
+    "create_tld": {
+        "client": "tld_client",
+        "method": "create_tld",
+        "args": ["6ef3b7f2-df39-43ef-9f37-ce2bc424ab90"]
+    },
+    "update_tld": {
+        "client": "tld_client",
+        "method": "update_tld",
+        "args": ["6ef3b7f2-df39-43ef-9f37-ce2bc424ab90"]
+    },
+    "delete_tld": {
+        "client": "tld_client",
+        "method": "delete_tld",
+        "args": ["6ef3b7f2-df39-43ef-9f37-ce2bc424ab90"]
+    },
+
+    "list_blacklists": {
+        "client": "blacklists_client",
+        "method": "list_blacklists"
+    },
+    "show_blacklist": {
+        "client": "blacklists_client",
+        "method": "show_blacklist",
+        "args": ["6ef3b7f2-df39-43ef-9f37-ce2bc424ab90"]
+    },
+    "create_blacklist": {
+        "client": "blacklists_client",
+        "method": "create_blacklist",
+        "args": ["6ef3b7f2-df39-43ef-9f37-ce2bc424ab90"]
+    },
+    "update_blacklist": {
+        "client": "blacklists_client",
+        "method": "update_blacklist",
+        "args": ["6ef3b7f2-df39-43ef-9f37-ce2bc424ab90"]
+    },
+    "delete_blacklist": {
+        "client": "blacklists_client",
+        "method": "delete_blacklist",
+        "args": ["6ef3b7f2-df39-43ef-9f37-ce2bc424ab90"]
+    },
+
+    "list_pools": {
+        "client": "pool_client",
+        "method": "list_pools"
+    },
+    "show_pool": {
+        "client": "pool_client",
+        "method": "show_pool",
+        "args": ["6ef3b7f2-df39-43ef-9f37-ce2bc424ab90"]
+    },
+    "create_pool": {
+        "client": "pool_client",
+        "method": "create_pool",
+        "args": ["6ef3b7f2-df39-43ef-9f37-ce2bc424ab90"]
+    },
+    "update_pool": {
+        "client": "pool_client",
+        "method": "update_pool",
+        "args": ["6ef3b7f2-df39-43ef-9f37-ce2bc424ab90"]
+    },
+    "delete_pool": {
+        "client": "pool_client",
+        "method": "delete_pool",
+        "args": ["6ef3b7f2-df39-43ef-9f37-ce2bc424ab90"]
+    }
+}