summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorErik Olof Gunnar Andersson <eandersson@blizzard.com>2022-07-18 21:15:25 -0700
committerErik Olof Gunnar Andersson <eandersson@blizzard.com>2022-08-06 03:28:23 +0000
commit8beccabe4eb78f7da60748cec84df66946d423e7 (patch)
tree55f57bae3ff09599653085f15327c42f3a5a7993
parentef187ddec8599c2833909049f77e53d90cf4eea4 (diff)
downloaddesignate-8beccabe4eb78f7da60748cec84df66946d423e7.tar.gz
Added additional test coverage for adapters
- Removed uncessary log line in base adapter. Change-Id: I6e1a74fa3ecca0f82735ba36ac4336ab6cdeb56e
-rw-r--r--designate/objects/adapters/base.py4
-rw-r--r--designate/tests/unit/objects/test_adapters.py99
2 files changed, 79 insertions, 24 deletions
diff --git a/designate/objects/adapters/base.py b/designate/objects/adapters/base.py
index 9ba825fb..b2f65c78 100644
--- a/designate/objects/adapters/base.py
+++ b/designate/objects/adapters/base.py
@@ -169,8 +169,6 @@ class DesignateAdapter(object, metaclass=DesignateObjectAdapterMetaclass):
'Creating %s object with values %r',
output_object.obj_name(), values
)
- LOG.debug(output_object)
-
try:
adapter = cls.get_object_adapter(output_object, obj_format)
if isinstance(output_object, objects.ListObjectMixin):
@@ -285,7 +283,7 @@ class DesignateAdapter(object, metaclass=DesignateObjectAdapterMetaclass):
if error_keys:
raise exceptions.InvalidObject(
- 'Provided object does not match schema. Keys {0} are not '
+ 'Provided object does not match schema. Keys {0} are not '
'valid for {1}'.format(
error_keys, cls.MODIFICATIONS['options']['resource_name']
)
diff --git a/designate/tests/unit/objects/test_adapters.py b/designate/tests/unit/objects/test_adapters.py
index 8a094864..e6e96747 100644
--- a/designate/tests/unit/objects/test_adapters.py
+++ b/designate/tests/unit/objects/test_adapters.py
@@ -20,68 +20,125 @@ from oslo_log import log as logging
from oslo_utils import timeutils
import oslotest.base
+from designate import exceptions
from designate import objects
from designate.objects import adapters
from designate.objects import base
+from designate.objects import fields
LOG = logging.getLogger(__name__)
-class DesignateTestAdapter(adapters.DesignateAdapter):
- ADAPTER_OBJECT = objects.DesignateObject
- ADAPTER_FORMAT = 'TEST_API'
-
- MODIFICATIONS = {
- 'fields': {},
- 'options': {}
+@base.DesignateRegistry.register
+class DesignateTestObject(base.DictObjectMixin, base.PersistentObjectMixin,
+ base.DesignateObject):
+ def __init__(self, *args, **kwargs):
+ super(DesignateTestObject, self).__init__(*args, **kwargs)
+
+ fields = {
+ 'name': fields.StringFields(maxLength=255),
+ 'description': fields.StringFields(nullable=True, maxLength=255)
}
+ STRING_KEYS = [
+ 'id', 'name'
+ ]
+
@base.DesignateRegistry.register
-class DesignateTestPersistentObject(objects.DesignateObject,
- objects.base.PersistentObjectMixin):
+class DesignateTestPersistentObject(objects.base.PersistentObjectMixin,
+ objects.DesignateObject):
pass
+class DesignateTestAdapter(adapters.DesignateAdapter):
+ ADAPTER_OBJECT = DesignateTestObject
+ ADAPTER_FORMAT = 'TEST_API'
+
+ MODIFICATIONS = {
+ 'fields': {
+ 'id': {},
+ 'name': {
+ 'read_only': False
+ },
+ 'description': {
+ 'read_only': False
+ },
+ 'created_at': {},
+ 'updated_at': {},
+ },
+ 'options': {
+ 'links': True,
+ 'resource_name': 'test_obj',
+ 'collection_name': 'test_obj',
+ }
+ }
+
+
class DesignateDateTimeAdaptor(adapters.DesignateAdapter):
ADAPTER_OBJECT = DesignateTestPersistentObject
ADAPTER_FORMAT = 'TEST_API'
MODIFICATIONS = {
'fields': {
- "id": {},
- "created_at": {},
- "updated_at": {},
+ 'id': {},
+ 'created_at': {},
+ 'updated_at': {},
},
'options': {}
}
class DesignateAdapterTest(oslotest.base.BaseTestCase):
+ def test_parse(self):
+ test_obj = adapters.DesignateAdapter.parse(
+ 'TEST_API', {'name': 'example.test.'}, DesignateTestObject()
+ )
+
+ self.assertIsInstance(test_obj, DesignateTestObject)
+ self.assertEqual('example.test.', test_obj.name)
+
+ def test_parse_schema_does_not_match(self):
+ self.assertRaisesRegex(
+ exceptions.InvalidObject,
+ 'Provided object does not match schema. '
+ 'Keys \\[\'address\'\\] are not valid for test_obj',
+ adapters.DesignateAdapter.parse,
+ 'TEST_API', {'address': '192.168.0.1'}, DesignateTestObject(),
+ )
+
def test_get_object_adapter(self):
adapter = adapters.DesignateAdapter.get_object_adapter(
- objects.DesignateObject(), 'TEST_API'
+ DesignateTestObject(), 'TEST_API'
)
+
self.assertIsInstance(adapter(), DesignateTestAdapter)
def test_object_render(self):
- test_obj = adapters.DesignateAdapter.render('TEST_API',
- objects.DesignateObject())
- self.assertEqual(dict(), test_obj)
+ test_obj = adapters.DesignateAdapter.render(
+ 'TEST_API', DesignateTestObject()
+ )
+
+ self.assertEqual(
+ sorted([
+ 'created_at', 'description', 'id', 'name', 'updated_at',
+ ]),
+ sorted(test_obj)
+ )
def test_datetime_format(self):
now = timeutils.utcnow()
test_obj = DesignateTestPersistentObject()
test_obj.created_at = now
-
test_dict = adapters.DesignateAdapter.render('TEST_API', test_obj)
- datetime.datetime.strptime(
- test_dict['created_at'], '%Y-%m-%dT%H:%M:%S.%f'
+ self.assertEqual(
+ datetime.datetime.strptime(
+ test_dict['created_at'], '%Y-%m-%dT%H:%M:%S.%f'
+ ),
+ test_obj.created_at
)
- self.assertEqual(now, test_obj.created_at)
-
class RecordSetAPIv2AdapterTest(oslotest.base.BaseTestCase):
def test_get_path(self):