diff options
author | Erik Olof Gunnar Andersson <eandersson@blizzard.com> | 2022-08-10 22:40:16 -0700 |
---|---|---|
committer | Erik Olof Gunnar Andersson <eandersson@blizzard.com> | 2022-08-10 22:49:13 -0700 |
commit | 43428e48d0470f1e6fbd96cb51ccb97c20e12e14 (patch) | |
tree | df3cb90f2dbc68711f3711955677022d5cab1ad2 | |
parent | f3c29e8bceea832e1cb787740fa676b10a410848 (diff) | |
download | designate-43428e48d0470f1e6fbd96cb51ccb97c20e12e14.tar.gz |
Simplified backend unit tests
These tests have no dependencies on the Designate Test class
and by moving to the oslo test base class instead we reduce the
runtime of these tests from ~5s to ~150ms.
- Added some basic tests for the fake backend (aka noop)
- Switched from designate.tests.TestCase to oslotest.base.BaseTestCase
Change-Id: I5d78939eb43476e6c93235e131086bc8537b0e03
-rw-r--r-- | designate/tests/unit/backend/test_agent.py | 30 | ||||
-rw-r--r-- | designate/tests/unit/backend/test_akamai_v2.py | 12 | ||||
-rw-r--r-- | designate/tests/unit/backend/test_bind9.py | 13 | ||||
-rw-r--r-- | designate/tests/unit/backend/test_designate.py | 18 | ||||
-rw-r--r-- | designate/tests/unit/backend/test_dynect.py | 16 | ||||
-rw-r--r-- | designate/tests/unit/backend/test_fake.py | 72 | ||||
-rw-r--r-- | designate/tests/unit/backend/test_infoblox.py | 16 | ||||
-rw-r--r-- | designate/tests/unit/backend/test_ns1.py | 16 | ||||
-rw-r--r-- | designate/tests/unit/backend/test_nsd4.py | 14 | ||||
-rw-r--r-- | designate/tests/unit/backend/test_pdns4.py | 15 |
10 files changed, 181 insertions, 41 deletions
diff --git a/designate/tests/unit/backend/test_agent.py b/designate/tests/unit/backend/test_agent.py index 7d61e6d6..031bd505 100644 --- a/designate/tests/unit/backend/test_agent.py +++ b/designate/tests/unit/backend/test_agent.py @@ -11,6 +11,7 @@ # 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 unittest import mock import dns @@ -18,31 +19,42 @@ import dns.query import dns.rdataclass import dns.rdatatype +from oslo_config import cfg +from oslo_config import fixture as cfg_fixture +import oslotest.base + import designate.backend.agent as agent import designate.backend.private_codes as pcodes +from designate import context from designate import dnsutils from designate import exceptions from designate import objects -from designate import tests from designate.tests.unit import RoObject +CONF = cfg.CONF + -class AgentBackendTestCase(tests.TestCase): +class AgentBackendTestCase(oslotest.base.BaseTestCase): def setUp(self): super(AgentBackendTestCase, self).setUp() - self.CONF.set_override('poll_timeout', 1, 'service:worker') - self.CONF.set_override('poll_retry_interval', 4, - 'service:worker') - self.CONF.set_override('poll_max_retries', 5, 'service:worker') - self.CONF.set_override('poll_delay', 6, 'service:worker') + self.useFixture(cfg_fixture.Config(CONF)) + + self.context = mock.Mock() + self.admin_context = mock.Mock() + mock.patch.object( + context.DesignateContext, 'get_admin_context', + return_value=self.admin_context).start() + + CONF.set_override('poll_timeout', 1, 'service:worker') + CONF.set_override('poll_retry_interval', 4, 'service:worker') + CONF.set_override('poll_max_retries', 5, 'service:worker') + CONF.set_override('poll_delay', 6, 'service:worker') - self.context = self.get_context() self.zone = objects.Zone( id='e2bed4dc-9d01-11e4-89d3-123b93f75cba', name='example.com.', email='example@example.com', ) - self.target = { 'id': '4588652b-50e7-46b9-b688-a9bad40a873e', 'type': 'agent', diff --git a/designate/tests/unit/backend/test_akamai_v2.py b/designate/tests/unit/backend/test_akamai_v2.py index 07f7346e..3563069e 100644 --- a/designate/tests/unit/backend/test_akamai_v2.py +++ b/designate/tests/unit/backend/test_akamai_v2.py @@ -17,24 +17,30 @@ import json from unittest import mock +import oslotest.base import requests from designate.backend import impl_akamai_v2 as akamai +from designate import context from designate import exceptions from designate import objects -import designate.tests from designate.tests import fixtures -class AkamaiBackendTestCase(designate.tests.TestCase): +class AkamaiBackendTestCase(oslotest.base.BaseTestCase): def setUp(self): super(AkamaiBackendTestCase, self).setUp() + + self.admin_context = mock.Mock() + mock.patch.object( + context.DesignateContext, 'get_admin_context', + return_value=self.admin_context).start() + self.zone = objects.Zone( id='cca7908b-dad4-4c50-adba-fb67d4c556e8', name='example.com.', email='example@example.com' ) - self.target = { 'id': '4588652b-50e7-46b9-b688-a9bad40a873e', 'type': 'akamai_v2', diff --git a/designate/tests/unit/backend/test_bind9.py b/designate/tests/unit/backend/test_bind9.py index 1f68a625..b8c1a3e6 100644 --- a/designate/tests/unit/backend/test_bind9.py +++ b/designate/tests/unit/backend/test_bind9.py @@ -11,27 +11,34 @@ # 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 unittest import mock +import oslotest.base + from designate.backend import impl_bind9 +from designate import context from designate import exceptions from designate import objects -import designate.tests from designate.tests import fixtures from designate import utils import subprocess -class Bind9BackendTestCase(designate.tests.TestCase): +class Bind9BackendTestCase(oslotest.base.BaseTestCase): def setUp(self): super(Bind9BackendTestCase, self).setUp() + self.admin_context = mock.Mock() + mock.patch.object( + context.DesignateContext, 'get_admin_context', + return_value=self.admin_context).start() + self.zone = objects.Zone( id='cca7908b-dad4-4c50-adba-fb67d4c556e8', name='example.com.', email='example@example.com' ) - self.target = { 'id': '4588652b-50e7-46b9-b688-a9bad40a873e', 'type': 'bind9', diff --git a/designate/tests/unit/backend/test_designate.py b/designate/tests/unit/backend/test_designate.py index 41795a52..8b4468ab 100644 --- a/designate/tests/unit/backend/test_designate.py +++ b/designate/tests/unit/backend/test_designate.py @@ -13,32 +13,38 @@ # 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 unittest.mock import NonCallableMagicMock + +from unittest import mock from designateclient import exceptions from designateclient.v2 import client from oslo_log import log as logging +import oslotest.base from designate.backend import impl_designate +from designate import context from designate import objects -import designate.tests from designate.tests import fixtures LOG = logging.getLogger(__name__) -class DesignateBackendTestCase(designate.tests.TestCase): +class DesignateBackendTestCase(oslotest.base.BaseTestCase): def setUp(self): super(DesignateBackendTestCase, self).setUp() self.stdlog = fixtures.StandardLogging() self.useFixture(self.stdlog) + self.admin_context = mock.Mock() + mock.patch.object( + context.DesignateContext, 'get_admin_context', + return_value=self.admin_context).start() + self.zone = objects.Zone( id='e2bed4dc-9d01-11e4-89d3-123b93f75cba', name='example.com.', email='example@example.com', ) - self.target = { 'id': '4588652b-50e7-46b9-b688-a9bad40a873e', 'type': 'designate', @@ -61,8 +67,8 @@ class DesignateBackendTestCase(designate.tests.TestCase): ) # Mock client - self.client = NonCallableMagicMock() - zones = NonCallableMagicMock(spec_set=['create', 'delete']) + self.client = mock.NonCallableMagicMock() + zones = mock.NonCallableMagicMock(spec_set=['create', 'delete']) self.client.configure_mock(zones=zones) diff --git a/designate/tests/unit/backend/test_dynect.py b/designate/tests/unit/backend/test_dynect.py index 307666aa..41dd4aaf 100644 --- a/designate/tests/unit/backend/test_dynect.py +++ b/designate/tests/unit/backend/test_dynect.py @@ -13,11 +13,15 @@ # 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 unittest import mock + +import oslotest.base import requests_mock from designate.backend import impl_dynect +from designate import context from designate import objects -import designate.tests MASTERS = ["10.0.0.1"] CONTACT = 'jdoe@myco.biz' @@ -110,18 +114,22 @@ ACTIVATE_SUCCESS = { } -class DynECTTestsCase(designate.tests.TestCase): +class DynECTTestsCase(oslotest.base.BaseTestCase): def setUp(self): super(DynECTTestsCase, self).setUp() + self.context = mock.Mock() + self.admin_context = mock.Mock() + mock.patch.object( + context.DesignateContext, 'get_admin_context', + return_value=self.admin_context).start() + self.base_address = 'https://api.dynect.net:443/REST' - self.context = self.get_context() self.zone = objects.Zone( id='e2bed4dc-9d01-11e4-89d3-123b93f75cba', name='example.com.', email='example@example.com', ) - self.target = { 'id': '4588652b-50e7-46b9-b688-a9bad40a873e', 'type': 'dyndns', diff --git a/designate/tests/unit/backend/test_fake.py b/designate/tests/unit/backend/test_fake.py new file mode 100644 index 00000000..d7168958 --- /dev/null +++ b/designate/tests/unit/backend/test_fake.py @@ -0,0 +1,72 @@ +# 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 unittest import mock + +import oslotest.base + +from designate.backend import impl_fake +from designate import context +from designate import objects +from designate.tests import fixtures + + +class FakeBackendTestCase(oslotest.base.BaseTestCase): + def setUp(self): + super(FakeBackendTestCase, self).setUp() + self.stdlog = fixtures.StandardLogging() + self.useFixture(self.stdlog) + + self.admin_context = mock.Mock() + mock.patch.object( + context.DesignateContext, 'get_admin_context', + return_value=self.admin_context).start() + + self.zone = objects.Zone( + id='cca7908b-dad4-4c50-adba-fb67d4c556e8', + name='example.test.', + email='example@example.test' + ) + self.target = { + 'id': '4588652b-50e7-46b9-b688-a9bad40a873e', + 'type': 'fake', + 'masters': [ + {'host': '192.168.1.1', 'port': 53}, + {'host': '192.168.1.2', 'port': 35} + ], + 'options': [ + ], + } + + self.backend = impl_fake.FakeBackend( + objects.PoolTarget.from_dict(self.target) + ) + + def test_create_zone(self): + self.backend.create_zone(self.admin_context, self.zone) + + self.assertIn( + "Create Zone <Zone id:'cca7908b-dad4-4c50-adba-fb67d4c556e8' " + "type:'None' name:'example.test.' pool_id:'None' serial:'None' " + "action:'None' status:'None'>", + self.stdlog.logger.output + ) + + def test_delete_zone(self): + self.backend.delete_zone(self.admin_context, self.zone) + + self.assertIn( + "Delete Zone <Zone id:'cca7908b-dad4-4c50-adba-fb67d4c556e8' " + "type:'None' name:'example.test.' pool_id:'None' serial:'None' " + "action:'None' status:'None'>", + self.stdlog.logger.output + ) diff --git a/designate/tests/unit/backend/test_infoblox.py b/designate/tests/unit/backend/test_infoblox.py index a235deda..81c8351b 100644 --- a/designate/tests/unit/backend/test_infoblox.py +++ b/designate/tests/unit/backend/test_infoblox.py @@ -12,27 +12,35 @@ # 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 unittest import mock + +import oslotest.base import requests_mock from designate.backend import impl_infoblox from designate.backend.impl_infoblox import ibexceptions +from designate import context from designate import exceptions from designate import objects -import designate.tests -class InfobloxBackendTestCase(designate.tests.TestCase): +class InfobloxBackendTestCase(oslotest.base.BaseTestCase): def setUp(self): super(InfobloxBackendTestCase, self).setUp() self.base_address = 'https://localhost/wapi' - self.context = self.get_context() + self.context = mock.Mock() + self.admin_context = mock.Mock() + mock.patch.object( + context.DesignateContext, 'get_admin_context', + return_value=self.admin_context).start() + self.zone = objects.Zone( id='e2bed4dc-9d01-11e4-89d3-123b93f75cba', name='example.com.', email='example@example.com', ) - self.target = { 'id': '4588652b-50e7-46b9-b688-a9bad40a873e', 'type': 'infoblox', diff --git a/designate/tests/unit/backend/test_ns1.py b/designate/tests/unit/backend/test_ns1.py index 9b565bd9..76708c30 100644 --- a/designate/tests/unit/backend/test_ns1.py +++ b/designate/tests/unit/backend/test_ns1.py @@ -13,29 +13,37 @@ # 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 unittest import mock + +import oslotest.base import requests_mock from designate.backend import impl_ns1 +from designate import context from designate import exceptions from designate import objects -import designate.tests from designate.tests import fixtures -class NS1BackendTestCase(designate.tests.TestCase): +class NS1BackendTestCase(oslotest.base.BaseTestCase): def setUp(self): super(NS1BackendTestCase, self).setUp() self.stdlog = fixtures.StandardLogging() self.useFixture(self.stdlog) + self.context = mock.Mock() + self.admin_context = mock.Mock() + mock.patch.object( + context.DesignateContext, 'get_admin_context', + return_value=self.admin_context).start() + self.api_address = 'https://192.0.2.3/v1/zones/example.com' - self.context = self.get_context() self.zone = objects.Zone( id='e2bed4dc-9d01-11e4-89d3-123b93f75cba', name='example.com.', email='example@example.com', ) - self.target = { 'id': '4588652b-50e7-46b9-b688-a9bad40a873e', 'type': 'ns1', diff --git a/designate/tests/unit/backend/test_nsd4.py b/designate/tests/unit/backend/test_nsd4.py index 0a6b2c2b..3a1dc4bb 100644 --- a/designate/tests/unit/backend/test_nsd4.py +++ b/designate/tests/unit/backend/test_nsd4.py @@ -13,32 +13,38 @@ # 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 socket import ssl from unittest import mock import eventlet +import oslotest.base from designate.backend import impl_nsd4 +from designate import context from designate import exceptions from designate import objects -import designate.tests -class NSD4BackendTestCase(designate.tests.TestCase): +class NSD4BackendTestCase(oslotest.base.BaseTestCase): def setUp(self): super(NSD4BackendTestCase, self).setUp() + self.context = mock.Mock() + self.admin_context = mock.Mock() + mock.patch.object( + context.DesignateContext, 'get_admin_context', + return_value=self.admin_context).start() + keyfile = mock.sentinel.key certfile = mock.sentinel.cert - self.context = self.get_context() self.zone = objects.Zone( id='e2bed4dc-9d01-11e4-89d3-123b93f75cba', name='example.com.', email='example@example.com', ) - self.port = 6969 self.target = { 'id': '4588652b-50e7-46b9-b688-a9bad40a873e', diff --git a/designate/tests/unit/backend/test_pdns4.py b/designate/tests/unit/backend/test_pdns4.py index 1ee99fe0..c5d7baa9 100644 --- a/designate/tests/unit/backend/test_pdns4.py +++ b/designate/tests/unit/backend/test_pdns4.py @@ -9,29 +9,36 @@ # 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 oslotest.base import requests_mock +from unittest import mock from designate.backend import impl_pdns4 +from designate import context from designate import exceptions from designate import objects -import designate.tests from designate.tests import fixtures -class PDNS4BackendTestCase(designate.tests.TestCase): +class PDNS4BackendTestCase(oslotest.base.BaseTestCase): def setUp(self): super(PDNS4BackendTestCase, self).setUp() self.stdlog = fixtures.StandardLogging() self.useFixture(self.stdlog) + self.context = mock.Mock() + self.admin_context = mock.Mock() + mock.patch.object( + context.DesignateContext, 'get_admin_context', + return_value=self.admin_context).start() + self.base_address = 'http://localhost:8081/api/v1/servers' - self.context = self.get_context() self.zone = objects.Zone( id='e2bed4dc-9d01-11e4-89d3-123b93f75cba', name='example.com.', email='example@example.com', ) - self.target = { 'id': '4588652b-50e7-46b9-b688-a9bad40a873e', 'type': 'pdns4', |