sizelimit: port to Python 3

In the tests, use bytes for the request body, since that is what is used by
webob in Python 3.

In RequestBodySizeLimiter.__call__(), do not compare NoneType to an integer: it
is forbidden in Python 3. Instead, properly handle the fact that
req.content_lenght might be None.

Change-Id: I179997789b9e2fcd3f3326e4d724e547c807f195
This commit is contained in:
Cyril Roelandt 2014-03-14 03:10:41 +01:00
parent db7390dc7b
commit 75ee27a1d1
3 changed files with 6 additions and 4 deletions

View File

@ -71,7 +71,8 @@ class RequestBodySizeLimiter(base.Middleware):
@webob.dec.wsgify
def __call__(self, req):
if req.content_length > CONF.max_request_body_size:
if (req.content_length is not None and
req.content_length > CONF.max_request_body_size):
msg = _("Request is too large.")
raise webob.exc.HTTPRequestEntityTooLarge(explanation=msg)
if req.content_length is None and req.is_body_readable:

View File

@ -82,18 +82,18 @@ class TestRequestBodySizeLimiter(test.BaseTestCase):
def test_content_length_acceptable(self):
self.request.headers['Content-Length'] = self.MAX_REQUEST_BODY_SIZE
self.request.body = "0" * self.MAX_REQUEST_BODY_SIZE
self.request.body = b"0" * self.MAX_REQUEST_BODY_SIZE
response = self.request.get_response(self.middleware)
self.assertEqual(response.status_int, 200)
def test_content_length_too_large(self):
self.request.headers['Content-Length'] = self.MAX_REQUEST_BODY_SIZE + 1
self.request.body = "0" * (self.MAX_REQUEST_BODY_SIZE + 1)
self.request.body = b"0" * (self.MAX_REQUEST_BODY_SIZE + 1)
response = self.request.get_response(self.middleware)
self.assertEqual(response.status_int, 413)
def test_request_too_large_no_content_length(self):
self.request.body = "0" * (self.MAX_REQUEST_BODY_SIZE + 1)
self.request.body = b"0" * (self.MAX_REQUEST_BODY_SIZE + 1)
self.request.headers['Content-Length'] = None
response = self.request.get_response(self.middleware)
self.assertEqual(response.status_int, 413)

View File

@ -72,6 +72,7 @@ commands =
tests/unit/middleware/test_correlation_id.py \
tests/unit/middleware/test_notifier.py \
tests/unit/middleware/test_request_id.py \
tests/unit/middleware/test_sizelimit.py \
tests/unit/rpc/test_dispatcher.py \
tests/unit/scheduler/test_base_filter.py \
tests/unit/scheduler/test_host_filters.py \