Added additional test coverage for adapters

- Removed uncessary log line in base adapter.

Change-Id: I6e1a74fa3ecca0f82735ba36ac4336ab6cdeb56e
This commit is contained in:
Erik Olof Gunnar Andersson 2022-07-18 21:15:25 -07:00
parent ef187ddec8
commit 8beccabe4e
2 changed files with 78 additions and 23 deletions

View File

@ -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']
)

View File

@ -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'
@base.DesignateRegistry.register
class DesignateTestObject(base.DictObjectMixin, base.PersistentObjectMixin,
base.DesignateObject):
def __init__(self, *args, **kwargs):
super(DesignateTestObject, self).__init__(*args, **kwargs)
MODIFICATIONS = {
'fields': {},
'options': {}
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):