Merge "Add tests for core middleware" into redux

This commit is contained in:
Jenkins 2012-02-10 19:52:02 +00:00 committed by Gerrit Code Review
commit 82d53b03dc
2 changed files with 83 additions and 3 deletions

View File

@ -80,10 +80,11 @@ class JsonBodyMiddleware(wsgi.Middleware):
an underscore.
"""
def process_request(self, request):
#if 'json' not in request.params:
# return
# Ignore unrecognized content types. Empty string indicates
# the client did not explicitly set the header
if not request.content_type in ('application/json', ''):
return
params_json = request.body
if not params_json:
@ -92,6 +93,9 @@ class JsonBodyMiddleware(wsgi.Middleware):
params_parsed = {}
try:
params_parsed = json.loads(params_json)
except ValueError:
msg = "Malformed json in request body"
raise webob.exc.HTTPBadRequest(explanation=msg)
finally:
if not params_parsed:
params_parsed = {}

76
tests/test_middleware.py Normal file
View File

@ -0,0 +1,76 @@
# vim: tabstop=4 shiftwidth=4 softtabstop=4
import webob
from keystone import config
from keystone import middleware
from keystone import test
CONF = config.CONF
def make_request(**kwargs):
return webob.Request.blank('/', **kwargs)
class TokenAuthMiddlewareTest(test.TestCase):
def test_request(self):
req = make_request()
req.headers[middleware.AUTH_TOKEN_HEADER] = 'MAGIC'
middleware.TokenAuthMiddleware(None).process_request(req)
context = req.environ[middleware.CONTEXT_ENV]
self.assertEqual(context['token_id'], 'MAGIC')
class AdminTokenAuthMiddlewareTest(test.TestCase):
def test_request_admin(self):
req = make_request()
req.headers[middleware.AUTH_TOKEN_HEADER] = CONF.admin_token
middleware.AdminTokenAuthMiddleware(None).process_request(req)
context = req.environ[middleware.CONTEXT_ENV]
self.assertTrue(context['is_admin'])
def test_request_non_admin(self):
req = make_request()
req.headers[middleware.AUTH_TOKEN_HEADER] = 'NOT-ADMIN'
middleware.AdminTokenAuthMiddleware(None).process_request(req)
context = req.environ[middleware.CONTEXT_ENV]
self.assertFalse(context['is_admin'])
class PostParamsMiddlewareTest(test.TestCase):
def test_request_with_params(self):
req = make_request(POST={"arg1": "one"})
middleware.PostParamsMiddleware(None).process_request(req)
params = req.environ[middleware.PARAMS_ENV]
self.assertEqual(params, {"arg1": "one"})
class JsonBodyMiddlewareTest(test.TestCase):
def test_request_with_params(self):
req = make_request(body='{"arg1": "one", "arg2": ["a"]}',
content_type='application/json')
middleware.JsonBodyMiddleware(None).process_request(req)
params = req.environ[middleware.PARAMS_ENV]
self.assertEqual(params, {"arg1": "one", "arg2": ["a"]})
def test_malformed_json(self):
req = make_request(body='{"arg1": "on',
content_type='application/json')
_middleware = middleware.JsonBodyMiddleware(None)
self.assertRaises(webob.exc.HTTPBadRequest,
_middleware.process_request, req)
def test_no_content_type(self):
req = make_request(body='{"arg1": "one", "arg2": ["a"]}')
middleware.JsonBodyMiddleware(None).process_request(req)
params = req.environ[middleware.PARAMS_ENV]
self.assertEqual(params, {"arg1": "one", "arg2": ["a"]})
def test_unrecognized_content_type(self):
req = make_request(body='{"arg1": "one", "arg2": ["a"]}',
content_type='text/plain')
middleware.JsonBodyMiddleware(None).process_request(req)
params = req.environ.get(middleware.PARAMS_ENV, {})
self.assertEqual(params, {})