diff options
author | Erik Olof Gunnar Andersson <eandersson@blizzard.com> | 2022-10-08 11:58:22 -0700 |
---|---|---|
committer | Erik Olof Gunnar Andersson <eandersson@blizzard.com> | 2022-10-27 15:09:41 +0000 |
commit | 664bbb3a87086176a7c55f4f00b7bd6b4cbb272e (patch) | |
tree | 5bb8c51fc3ba485ee1863994ae610670bb300562 | |
parent | 0b162a4c48ff7806ee0dda0f871a884a32374ed9 (diff) | |
download | designate-664bbb3a87086176a7c55f4f00b7bd6b4cbb272e.tar.gz |
Improved Zone Lock coverage
Change-Id: I0243a1edfeb7ae592cb77356177df85149bd3055
-rw-r--r-- | designate/common/decorators/lock.py | 4 | ||||
-rw-r--r-- | designate/tests/unit/common/__init__.py | 0 | ||||
-rw-r--r-- | designate/tests/unit/common/test_zone_lock.py | 110 |
3 files changed, 111 insertions, 3 deletions
diff --git a/designate/common/decorators/lock.py b/designate/common/decorators/lock.py index f633fa4d..97010492 100644 --- a/designate/common/decorators/lock.py +++ b/designate/common/decorators/lock.py @@ -52,7 +52,7 @@ def extract_zone_id(args, kwargs): for arg in itertools.chain(args, kwargs.values()): if not isinstance(arg, objects.DesignateObject): continue - if isinstance(arg, objects.Zone): + elif isinstance(arg, objects.Zone): zone_id = arg.id if zone_id: break @@ -68,8 +68,6 @@ def extract_zone_id(args, kwargs): arg = args[1] if isinstance(arg, str): zone_id = arg - elif isinstance(zone_id, objects.Zone): - zone_id = arg.id return zone_id diff --git a/designate/tests/unit/common/__init__.py b/designate/tests/unit/common/__init__.py new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/designate/tests/unit/common/__init__.py diff --git a/designate/tests/unit/common/test_zone_lock.py b/designate/tests/unit/common/test_zone_lock.py new file mode 100644 index 00000000..e2d7f4b1 --- /dev/null +++ b/designate/tests/unit/common/test_zone_lock.py @@ -0,0 +1,110 @@ +# 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.common.decorators import lock +from designate import objects + + +class TestExtractZoneId(oslotest.base.BaseTestCase): + def setUp(self): + super(TestExtractZoneId, self).setUp() + + def test_extract_zone_id_empty(self): + self.assertIsNone(lock.extract_zone_id([], {})) + + def test_extract_zone_id_no_valid_objects(self): + self.assertIsNone( + lock.extract_zone_id([], { + 'ptr': objects.PTRList(), 'a': objects.AList()}) + ) + + def test_extract_zone_id_kwargs(self): + self.assertEqual( + 'test', + lock.extract_zone_id([], {'zone_id': 'test'}) + ) + self.assertEqual( + 'test', + lock.extract_zone_id([], {'zone': mock.Mock(id='test')}) + ) + self.assertEqual( + 'test', + lock.extract_zone_id([], {'recordset': mock.Mock(zone_id='test')}) + ) + self.assertEqual( + 'test', + lock.extract_zone_id([], {'record': mock.Mock(zone_id='test')}) + ) + + def test_extract_zone_id_from_zone(self): + self.assertEqual( + '123', + lock.extract_zone_id(['a', 'b', 'c'], {'x': objects.Zone(id=123)}) + ) + self.assertEqual( + '123', + lock.extract_zone_id([objects.Zone(id=123)], {}) + ) + + def test_extract_zone_id_from_recordset(self): + self.assertEqual( + '123', + lock.extract_zone_id([], {'x': objects.RecordSet(zone_id=123)}) + ) + self.assertEqual( + '123', + lock.extract_zone_id([objects.RecordSet(zone_id=123)], {}) + ) + + def test_extract_zone_id_from_record(self): + self.assertEqual( + '123', + lock.extract_zone_id([], {'x': objects.Record(zone_id=123)}) + ) + self.assertEqual( + '123', + lock.extract_zone_id([objects.Record(zone_id=123)], {}) + ) + + def test_extract_zone_id_from_zone_transfer_request(self): + self.assertEqual( + '123', + lock.extract_zone_id( + [], {'x': objects.ZoneTransferRequest(zone_id=123)}) + ) + self.assertEqual( + '123', + lock.extract_zone_id( + [objects.ZoneTransferRequest(zone_id=123)], {}) + ) + + def test_extract_zone_id_from_zone_transfer_accept(self): + self.assertEqual( + '123', + lock.extract_zone_id( + [], {'x': objects.ZoneTransferAccept(zone_id=123)}) + ) + self.assertEqual( + '123', + lock.extract_zone_id([objects.ZoneTransferAccept(zone_id=123)], {}) + ) + + def test_extract_zone_id_from_second_argument(self): + self.assertEqual('456', lock.extract_zone_id(['123', '456'], {})) + + def test_extract_zone_id_when_second_argument_is_a_zone(self): + self.assertEqual( + '456', lock.extract_zone_id(['123', objects.Zone(id=456)], {}) + ) |