Test for infinite loop in wsgi, based on redbo's repro.
This commit is contained in:
@@ -11,6 +11,7 @@ from unittest import main
|
|||||||
from eventlet import api
|
from eventlet import api
|
||||||
from eventlet import util
|
from eventlet import util
|
||||||
from eventlet import greenio
|
from eventlet import greenio
|
||||||
|
from eventlet import event
|
||||||
from eventlet.green import socket as greensocket
|
from eventlet.green import socket as greensocket
|
||||||
from eventlet import wsgi
|
from eventlet import wsgi
|
||||||
from eventlet.support import get_errno
|
from eventlet.support import get_errno
|
||||||
@@ -833,6 +834,28 @@ class TestHttpd(_TestBase):
|
|||||||
# (one terminates the chunk, one terminates the body)
|
# (one terminates the chunk, one terminates the body)
|
||||||
self.assertEqual(response, ['0', '', ''])
|
self.assertEqual(response, ['0', '', ''])
|
||||||
|
|
||||||
|
def test_aborted_chunked_post(self):
|
||||||
|
read_content = event.Event()
|
||||||
|
def chunk_reader(env, start_response):
|
||||||
|
content = env['wsgi.input'].read(1024)
|
||||||
|
read_content.send(content)
|
||||||
|
start_response('200 OK', [('Content-Type', 'text/plain')])
|
||||||
|
return [content]
|
||||||
|
self.site.application = chunk_reader
|
||||||
|
expected_body = 'a bunch of stuff'
|
||||||
|
data = "\r\n".join(['PUT /somefile HTTP/1.0',
|
||||||
|
'Transfer-Encoding: chunked',
|
||||||
|
'',
|
||||||
|
'def',
|
||||||
|
expected_body])
|
||||||
|
# start PUT-ing some chunked data but close prematurely
|
||||||
|
sock = eventlet.connect(('127.0.0.1', self.port))
|
||||||
|
sock.sendall(data)
|
||||||
|
sock.close()
|
||||||
|
# the test passes if we successfully get here, and read all the data
|
||||||
|
# in spite of the early close
|
||||||
|
self.assertEqual(read_content.wait(), expected_body)
|
||||||
|
|
||||||
def read_headers(sock):
|
def read_headers(sock):
|
||||||
fd = sock.makefile()
|
fd = sock.makefile()
|
||||||
try:
|
try:
|
||||||
|
Reference in New Issue
Block a user