summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorErik Olof Gunnar Andersson <eandersson@blizzard.com>2022-10-08 11:58:22 -0700
committerErik Olof Gunnar Andersson <eandersson@blizzard.com>2022-10-27 15:09:41 +0000
commit664bbb3a87086176a7c55f4f00b7bd6b4cbb272e (patch)
tree5bb8c51fc3ba485ee1863994ae610670bb300562
parent0b162a4c48ff7806ee0dda0f871a884a32374ed9 (diff)
downloaddesignate-664bbb3a87086176a7c55f4f00b7bd6b4cbb272e.tar.gz
Improved Zone Lock coverage
Change-Id: I0243a1edfeb7ae592cb77356177df85149bd3055
-rw-r--r--designate/common/decorators/lock.py4
-rw-r--r--designate/tests/unit/common/__init__.py0
-rw-r--r--designate/tests/unit/common/test_zone_lock.py110
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)], {})
+ )