diff options
author | Dolph Mathews <dolph.mathews@gmail.com> | 2012-02-10 14:52:13 -0600 |
---|---|---|
committer | Dolph Mathews <dolph.mathews@gmail.com> | 2012-02-27 09:58:04 -0600 |
commit | 212489084fac8de20718bfccad2f77cbfa7ea3e2 (patch) | |
tree | 4cfada718772bb13e93be1f6c8f3b932064eb7ab /tests/test_serializer.py | |
parent | e23ecc6893db337671f75b6cc069d96a183940e8 (diff) | |
download | keystone-212489084fac8de20718bfccad2f77cbfa7ea3e2.tar.gz keystone-212489084fac8de20718bfccad2f77cbfa7ea3e2.tar.xz keystone-212489084fac8de20718bfccad2f77cbfa7ea3e2.zip |
XML de/serialization (bug 928058)
Middleware rewrites incoming XML requests as JSON, and outgoing JSON as
XML, per Accept and Content-Type headers.
Tests assert that core API methods support WADL/XSD specs, and cover
JSON content as well.
Change-Id: I6897971dd745766cbc472fd6e5346b1b34d933b0
Diffstat (limited to 'tests/test_serializer.py')
-rw-r--r-- | tests/test_serializer.py | 155 |
1 files changed, 155 insertions, 0 deletions
diff --git a/tests/test_serializer.py b/tests/test_serializer.py new file mode 100644 index 00000000..0be5ca4c --- /dev/null +++ b/tests/test_serializer.py @@ -0,0 +1,155 @@ +# vim: tabstop=4 shiftwidth=4 softtabstop=4 + +import re + +from keystone import test +from keystone.common import serializer + + +class XmlSerializerTestCase(test.TestCase): + def assertEqualIgnoreWhitespace(self, a, b): + """Splits two strings into lists and compares them. + + This provides easy-to-read failures from nose. + + """ + try: + self.assertEqual(a, b) + except: + a = re.sub('[ \n]+', ' ', a).strip().split() + b = re.sub('[ \n]+', ' ', b).strip().split() + self.assertEqual(a, b) + + def assertSerializeDeserialize(self, d, xml, xmlns=None): + self.assertEqualIgnoreWhitespace(serializer.to_xml(d, xmlns), xml) + self.assertEqual(serializer.from_xml(xml), d) + + # operations should be invertable + self.assertEqual( + serializer.from_xml(serializer.to_xml(d, xmlns)), + d) + self.assertEqualIgnoreWhitespace( + serializer.to_xml(serializer.from_xml(xml), xmlns), + xml) + + def test_none(self): + d = None + xml = None + + self.assertSerializeDeserialize(d, xml) + + def test_auth_request(self): + d = { + "auth": { + "passwordCredentials": { + "username": "test_user", + "password": "mypass" + }, + "tenantName": "customer-x" + } + } + + xml = """ + <?xml version="1.0" encoding="UTF-8"?> + <auth xmlns="http://docs.openstack.org/identity/api/v2.0" + tenantName="customer-x"> + <passwordCredentials + username="test_user" + password="mypass"/> + </auth> + """ + + self.assertSerializeDeserialize(d, xml) + + def test_role_crud(self): + d = { + "role": { + "id": "123", + "name": "Guest", + "description": "Guest Access" + } + } + + # TODO(dolph): examples show this description as an attribute? + xml = """ + <?xml version="1.0" encoding="UTF-8"?> + <role xmlns="http://docs.openstack.org/identity/api/v2.0" + id="123" + name="Guest"> + <description>Guest Access</description> + </role> + """ + + self.assertSerializeDeserialize(d, xml) + + def test_service_crud(self): + xmlns = "http://docs.openstack.org/identity/api/ext/OS-KSADM/v1.0" + + d = { + # FIXME(dolph): should be... + # "OS-KSADM:service": { + "service": { + "id": "123", + "name": "nova", + "type": "compute", + "description": "OpenStack Compute Service" + } + } + + # TODO(dolph): examples show this description as an attribute? + xml = """ + <?xml version="1.0" encoding="UTF-8"?> + <service + xmlns="%(xmlns)s" + type="compute" + id="123" + name="nova"> + <description>OpenStack Compute Service</description> + </service> + """ % {'xmlns': xmlns} + + self.assertSerializeDeserialize(d, xml, xmlns=xmlns) + + def test_tenant_crud(self): + d = { + "tenant": { + "id": "1234", + "name": "ACME corp", + "description": "A description...", + "enabled": True + } + } + + xml = """ + <?xml version="1.0" encoding="UTF-8"?> + <tenant + xmlns="http://docs.openstack.org/identity/api/v2.0" + enabled="true" + id="1234" + name="ACME corp"> + <description>A description...</description> + </tenant> + """ + + self.assertSerializeDeserialize(d, xml) + + def test_values_list(self): + d = { + "objects": { + "values": [{ + "attribute": "value1", + }, { + "attribute": "value2", + }] + } + } + + xml = """ + <?xml version="1.0" encoding="UTF-8"?> + <objects xmlns="http://docs.openstack.org/identity/api/v2.0"> + <object attribute="value1"/> + <object attribute="value2"/> + </objects> + """ + + self.assertEqualIgnoreWhitespace(serializer.to_xml(d), xml) |