class ResourceTestCase(base.BaseTestCase):
- def test_unmapped_quantum_error(self):
+ def test_unmapped_quantum_error_with_json(self):
+ msg = u'\u7f51\u7edc'
+
+ class TestException(q_exc.QuantumException):
+ message = msg
+ expected_res = {'body': {'QuantumError': msg}}
controller = mock.MagicMock()
- controller.test.side_effect = q_exc.QuantumException()
+ controller.test.side_effect = TestException()
resource = webtest.TestApp(wsgi_resource.Resource(controller))
- environ = {'wsgiorg.routing_args': (None, {'action': 'test'})}
+ environ = {'wsgiorg.routing_args': (None, {'action': 'test',
+ 'format': 'json'})}
res = resource.get('', extra_environ=environ, expect_errors=True)
self.assertEqual(res.status_int, exc.HTTPInternalServerError.code)
+ self.assertEqual(wsgi.JSONDeserializer().deserialize(res.body),
+ expected_res)
- def test_mapped_quantum_error(self):
+ def test_unmapped_quantum_error_with_xml(self):
+ msg = u'\u7f51\u7edc'
+
+ class TestException(q_exc.QuantumException):
+ message = msg
+ expected_res = {'body': {'QuantumError': msg}}
controller = mock.MagicMock()
- controller.test.side_effect = q_exc.QuantumException()
+ controller.test.side_effect = TestException()
+
+ resource = webtest.TestApp(wsgi_resource.Resource(controller))
+
+ environ = {'wsgiorg.routing_args': (None, {'action': 'test',
+ 'format': 'xml'})}
+ res = resource.get('', extra_environ=environ, expect_errors=True)
+ self.assertEqual(res.status_int, exc.HTTPInternalServerError.code)
+ self.assertEqual(wsgi.XMLDeserializer().deserialize(res.body),
+ expected_res)
- faults = {q_exc.QuantumException: exc.HTTPGatewayTimeout}
+ def test_mapped_quantum_error_with_json(self):
+ msg = u'\u7f51\u7edc'
+
+ class TestException(q_exc.QuantumException):
+ message = msg
+ expected_res = {'body': {'QuantumError': msg}}
+ controller = mock.MagicMock()
+ controller.test.side_effect = TestException()
+
+ faults = {TestException: exc.HTTPGatewayTimeout}
resource = webtest.TestApp(wsgi_resource.Resource(controller,
faults=faults))
- environ = {'wsgiorg.routing_args': (None, {'action': 'test'})}
+ environ = {'wsgiorg.routing_args': (None, {'action': 'test',
+ 'format': 'json'})}
+ res = resource.get('', extra_environ=environ, expect_errors=True)
+ self.assertEqual(res.status_int, exc.HTTPGatewayTimeout.code)
+ self.assertEqual(wsgi.JSONDeserializer().deserialize(res.body),
+ expected_res)
+
+ def test_mapped_quantum_error_with_xml(self):
+ msg = u'\u7f51\u7edc'
+
+ class TestException(q_exc.QuantumException):
+ message = msg
+ expected_res = {'body': {'QuantumError': msg}}
+ controller = mock.MagicMock()
+ controller.test.side_effect = TestException()
+
+ faults = {TestException: exc.HTTPGatewayTimeout}
+ resource = webtest.TestApp(wsgi_resource.Resource(controller,
+ faults=faults))
+
+ environ = {'wsgiorg.routing_args': (None, {'action': 'test',
+ 'format': 'xml'})}
res = resource.get('', extra_environ=environ, expect_errors=True)
self.assertEqual(res.status_int, exc.HTTPGatewayTimeout.code)
+ self.assertEqual(wsgi.XMLDeserializer().deserialize(res.body),
+ expected_res)
def test_http_error(self):
controller = mock.MagicMock()
res = resource.get('', extra_environ=environ, expect_errors=True)
self.assertEqual(res.status_int, exc.HTTPGatewayTimeout.code)
- def test_unhandled_error(self):
+ def test_unhandled_error_with_json(self):
+ expected_res = {'body': {'QuantumError':
+ _('Request Failed: internal server error '
+ 'while processing your request.')}}
controller = mock.MagicMock()
controller.test.side_effect = Exception()
resource = webtest.TestApp(wsgi_resource.Resource(controller))
- environ = {'wsgiorg.routing_args': (None, {'action': 'test'})}
+ environ = {'wsgiorg.routing_args': (None, {'action': 'test',
+ 'format': 'json'})}
+ res = resource.get('', extra_environ=environ, expect_errors=True)
+ self.assertEqual(res.status_int, exc.HTTPInternalServerError.code)
+ self.assertEqual(wsgi.JSONDeserializer().deserialize(res.body),
+ expected_res)
+
+ def test_unhandled_error_with_xml(self):
+ expected_res = {'body': {'QuantumError':
+ _('Request Failed: internal server error '
+ 'while processing your request.')}}
+ controller = mock.MagicMock()
+ controller.test.side_effect = Exception()
+
+ resource = webtest.TestApp(wsgi_resource.Resource(controller))
+
+ environ = {'wsgiorg.routing_args': (None, {'action': 'test',
+ 'format': 'xml'})}
res = resource.get('', extra_environ=environ, expect_errors=True)
self.assertEqual(res.status_int, exc.HTTPInternalServerError.code)
+ self.assertEqual(wsgi.XMLDeserializer().deserialize(res.body),
+ expected_res)
def test_status_200(self):
controller = mock.MagicMock()
self.assertEqual(result, expected_json)
+ def test_json_with_utf8(self):
+ input_dict = dict(servers=dict(a=(2, '\xe7\xbd\x91\xe7\xbb\x9c')))
+ expected_json = '{"servers":{"a":[2,"\\u7f51\\u7edc"]}}'
+ serializer = wsgi.JSONDictSerializer()
+ result = serializer.serialize(input_dict)
+ result = result.replace('\n', '').replace(' ', '')
+
+ self.assertEqual(result, expected_json)
+
+ def test_json_with_unicode(self):
+ input_dict = dict(servers=dict(a=(2, u'\u7f51\u7edc')))
+ expected_json = '{"servers":{"a":[2,"\\u7f51\\u7edc"]}}'
+ serializer = wsgi.JSONDictSerializer()
+ result = serializer.serialize(input_dict)
+ result = result.replace('\n', '').replace(' ', '')
+
+ self.assertEqual(result, expected_json)
+
class TextDeserializerTest(base.BaseTestCase):
self.assertRaises(
exception.MalformedRequestBody, deserializer.default, data_string)
+ def test_json_with_utf8(self):
+ data = '{"a": "\xe7\xbd\x91\xe7\xbb\x9c"}'
+ as_dict = {'body': {'a': u'\u7f51\u7edc'}}
+ deserializer = wsgi.JSONDeserializer()
+ self.assertEqual(
+ deserializer.deserialize(data), as_dict)
+
+ def test_json_with_unicode(self):
+ data = '{"a": "\u7f51\u7edc"}'
+ as_dict = {'body': {'a': u'\u7f51\u7edc'}}
+ deserializer = wsgi.JSONDeserializer()
+ self.assertEqual(
+ deserializer.deserialize(data), as_dict)
+
class XMLDeserializerTest(base.BaseTestCase):
def test_xml_empty(self):
self.assertRaises(
exception.MalformedRequestBody, deserializer.default, data_string)
+ def test_xml_with_utf8(self):
+ xml = '<a>\xe7\xbd\x91\xe7\xbb\x9c</a>'
+ as_dict = {'body': {'a': u'\u7f51\u7edc'}}
+ deserializer = wsgi.XMLDeserializer()
+
+ self.assertEqual(
+ deserializer.deserialize(xml), as_dict)
+
class RequestHeadersDeserializerTest(base.BaseTestCase):
result = result.replace('\n', '').replace(' ', '')
self.assertEqual(expected, result)
+ def test_xml_with_utf8(self):
+ data = {'servers': '\xe7\xbd\x91\xe7\xbb\x9c'}
+ serializer = wsgi.XMLDictSerializer()
+ expected = (
+ '<?xmlversion=\'1.0\'encoding=\'UTF-8\'?>'
+ '<serversxmlns="http://openstack.org/quantum/api/v2.0"'
+ 'xmlns:quantum="http://openstack.org/quantum/api/v2.0"'
+ 'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">'
+ '\xe7\xbd\x91\xe7\xbb\x9c</servers>'
+ )
+ result = serializer(data)
+ result = result.replace('\n', '').replace(' ', '')
+ self.assertEqual(expected, result)
+
+ def test_xml_with_unicode(self):
+ data = {'servers': u'\u7f51\u7edc'}
+ serializer = wsgi.XMLDictSerializer()
+ expected = (
+ '<?xmlversion=\'1.0\'encoding=\'UTF-8\'?>'
+ '<serversxmlns="http://openstack.org/quantum/api/v2.0"'
+ 'xmlns:quantum="http://openstack.org/quantum/api/v2.0"'
+ 'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">'
+ '\xe7\xbd\x91\xe7\xbb\x9c</servers>'
+ )
+ result = serializer(data)
+ result = result.replace('\n', '').replace(' ', '')
+ self.assertEqual(expected, result)
+
class TestWSGIServerWithSSL(base.BaseTestCase):
"""WSGI server tests."""