summaryrefslogtreecommitdiff
path: root/test/test_environ.py
diff options
context:
space:
mode:
authorMarcel Hellkamp <marc@gsites.de>2013-11-01 16:20:43 +0100
committerMarcel Hellkamp <marc@gsites.de>2013-11-01 18:32:55 +0100
commit077cc46e5590c61e65620919c4bcadbf3f2616b4 (patch)
tree557fb147624520287669ab68c71211a47d9dac16 /test/test_environ.py
parent05a305563a50d817b872e0869213f891af1150b3 (diff)
downloadbottle-077cc46e5590c61e65620919c4bcadbf3f2616b4.tar.gz
Added (basic) support for Transfer-Encoding:chunked requests.
Diffstat (limited to 'test/test_environ.py')
-rwxr-xr-xtest/test_environ.py34
1 files changed, 34 insertions, 0 deletions
diff --git a/test/test_environ.py b/test/test_environ.py
index 2bc29e3..4411229 100755
--- a/test/test_environ.py
+++ b/test/test_environ.py
@@ -279,6 +279,40 @@ class TestRequest(unittest.TestCase):
self.assertEqual(42, len(request.body.readline()))
self.assertEqual(42, len(request.body.readline(1024)))
+ def _test_chunked(self, body, expect):
+ e = {}
+ wsgiref.util.setup_testing_defaults(e)
+ e['wsgi.input'].write(tob(body))
+ e['wsgi.input'].seek(0)
+ e['HTTP_TRANSFER_ENCODING'] = 'chunked'
+ if isinstance(expect, str):
+ self.assertEquals(tob(expect), BaseRequest(e).body.read())
+ else:
+ self.assertRaises(expect, lambda: BaseRequest(e).body)
+
+ def test_chunked(self):
+ self._test_chunked('1\r\nx\r\nff\r\n' + 'y'*255 + '\r\n0\r\n',
+ 'x' + 'y'*255)
+ self._test_chunked('8\r\nxxxxxxxx\r\n0\r\n','xxxxxxxx')
+ self._test_chunked('0\r\n', '')
+
+ def test_chunked_meta_fields(self):
+ self._test_chunked('8 ; foo\r\nxxxxxxxx\r\n0\r\n','xxxxxxxx')
+ self._test_chunked('8;foo\r\nxxxxxxxx\r\n0\r\n','xxxxxxxx')
+ self._test_chunked('8;foo=bar\r\nxxxxxxxx\r\n0\r\n','xxxxxxxx')
+
+ def test_chunked_not_terminated(self):
+ self._test_chunked('1\r\nx\r\n', HTTPError)
+
+ def test_chunked_wrong_size(self):
+ self._test_chunked('2\r\nx\r\n', HTTPError)
+
+ def test_chunked_illegal_size(self):
+ self._test_chunked('x\r\nx\r\n', HTTPError)
+
+ def test_chunked_not_chunked_at_all(self):
+ self._test_chunked('abcdef', HTTPError)
+
def test_multipart(self):
""" Environ: POST (multipart files and multible values per key) """
fields = [('field1','value1'), ('field2','value2'), ('field2','value3')]