diff options
author | Marcel Hellkamp <marc@gsites.de> | 2013-11-01 16:20:43 +0100 |
---|---|---|
committer | Marcel Hellkamp <marc@gsites.de> | 2013-11-01 18:32:55 +0100 |
commit | 077cc46e5590c61e65620919c4bcadbf3f2616b4 (patch) | |
tree | 557fb147624520287669ab68c71211a47d9dac16 /test/test_environ.py | |
parent | 05a305563a50d817b872e0869213f891af1150b3 (diff) | |
download | bottle-077cc46e5590c61e65620919c4bcadbf3f2616b4.tar.gz |
Added (basic) support for Transfer-Encoding:chunked requests.
Diffstat (limited to 'test/test_environ.py')
-rwxr-xr-x | test/test_environ.py | 34 |
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')] |