diff options
| author | David Goetz <dpgoetz@gmail.com> | 2013-05-01 15:32:09 -0700 |
|---|---|---|
| committer | Sergey Shepelev <temotor@gmail.com> | 2013-09-05 14:18:07 +0400 |
| commit | bc796c4f650356ff27707a0443c4762b8a7a8a47 (patch) | |
| tree | 5636f2576dae1bcb75895f1d74d1d6439db7add4 /tests | |
| parent | 25bc2c402d7057f624031d49dce9fcc24781aee1 (diff) | |
| download | eventlet-bc796c4f650356ff27707a0443c4762b8a7a8a47.tar.gz | |
wsgi: Allow minimum_chunk_size to be overriden on a per request basis
The application can set environ['eventlet.minimum_write_chunk_size']
which will override the minimum_chunk_size set on server initialization
for a single request.
https://bitbucket.org/eventlet/eventlet/pull-request/37/allow-minimum_chunk_size-to-be-overriden
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/wsgi_test.py | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/tests/wsgi_test.py b/tests/wsgi_test.py index 0e10de7..00a0e3d 100644 --- a/tests/wsgi_test.py +++ b/tests/wsgi_test.py @@ -1301,6 +1301,24 @@ class TestChunkedInput(_TestBase): elif pi=="/ping": input.read() response.append("pong") + elif pi.startswith("/yield_spaces"): + if pi.endswith('override_min'): + env['eventlet.minimum_write_chunk_size'] = 1 + self.yield_next_space = False + + def response_iter(): + yield ' ' + num_sleeps = 0 + while not self.yield_next_space and num_sleeps < 200: + eventlet.sleep(.01) + num_sleeps += 1 + + yield ' ' + + start_response('200 OK', + [('Content-Type', 'text/plain'), + ('Content-Length', '2')]) + return response_iter() else: raise RuntimeError("bad path") @@ -1377,6 +1395,50 @@ class TestChunkedInput(_TestBase): fd.sendall(req) self.assertEquals(read_http(fd)[-1], 'this is chunked\nline 2\nline3') + def test_chunked_readline_wsgi_override_minimum_chunk_size(self): + + fd = self.connect() + fd.sendall("POST /yield_spaces/override_min HTTP/1.1\r\nContent-Length: 0\r\n\r\n") + + resp_so_far = '' + with eventlet.Timeout(.1): + while True: + one_byte = fd.recv(1) + resp_so_far += one_byte + if resp_so_far.endswith('\r\n\r\n'): + break + self.assertEquals(fd.recv(1), ' ') + try: + with eventlet.Timeout(.1): + fd.recv(1) + except eventlet.Timeout: + pass + else: + self.assert_(False) + self.yield_next_space = True + + with eventlet.Timeout(.1): + self.assertEquals(fd.recv(1), ' ') + + def test_chunked_readline_wsgi_not_override_minimum_chunk_size(self): + + fd = self.connect() + fd.sendall("POST /yield_spaces HTTP/1.1\r\nContent-Length: 0\r\n\r\n") + + resp_so_far = '' + try: + with eventlet.Timeout(.1): + while True: + one_byte = fd.recv(1) + resp_so_far += one_byte + if resp_so_far.endswith('\r\n\r\n'): + break + self.assertEquals(fd.recv(1), ' ') + except eventlet.Timeout: + pass + else: + self.assert_(False) + def test_close_before_finished(self): import signal |
