@@ -199,6 +199,19 @@ def test_partial_reads_no_content_length(self):
199199 self .assertEqual (resp .read (1 ), b'' )
200200 self .assertTrue (resp .isclosed ())
201201
202+ def test_partial_reads_incomplete_body (self ):
203+ # if the server shuts down the connection before the whole
204+ # content-length is delivered, the socket is gracefully closed
205+ body = "HTTP/1.1 200 Ok\r \n Content-Length: 10\r \n \r \n Text"
206+ sock = FakeSocket (body )
207+ resp = client .HTTPResponse (sock )
208+ resp .begin ()
209+ self .assertEqual (resp .read (2 ), b'Te' )
210+ self .assertFalse (resp .isclosed ())
211+ self .assertEqual (resp .read (2 ), b'xt' )
212+ self .assertEqual (resp .read (1 ), b'' )
213+ self .assertTrue (resp .isclosed ())
214+
202215 def test_host_port (self ):
203216 # Check invalid host_port
204217
@@ -349,7 +362,7 @@ def test_negative_content_length(self):
349362 resp = client .HTTPResponse (sock , method = "GET" )
350363 resp .begin ()
351364 self .assertEqual (resp .read (), b'Hello\r \n ' )
352- resp .close ( )
365+ self . assertTrue ( resp .isclosed () )
353366
354367 def test_incomplete_read (self ):
355368 sock = FakeSocket ('HTTP/1.1 200 OK\r \n Content-Length: 10\r \n \r \n Hello\r \n ' )
@@ -363,10 +376,9 @@ def test_incomplete_read(self):
363376 "IncompleteRead(7 bytes read, 3 more expected)" )
364377 self .assertEqual (str (i ),
365378 "IncompleteRead(7 bytes read, 3 more expected)" )
379+ self .assertTrue (resp .isclosed ())
366380 else :
367381 self .fail ('IncompleteRead expected' )
368- finally :
369- resp .close ()
370382
371383 def test_epipe (self ):
372384 sock = EPipeSocket (
0 commit comments