From ee5eb8b546aff7123699d5eb181023589a109259 Mon Sep 17 00:00:00 2001 From: Stephan Erb Date: Thu, 12 Nov 2009 21:23:10 +0100 Subject: Try to handle incomplete HTTP. See #5401. Please test. Approach: Keep filling the receive buffer until we have found enough data to extract the first HTTP header and body --- test/integration/test_xmpp_transports_nb.py | 42 ++++++++++++++--------------- 1 file changed, 21 insertions(+), 21 deletions(-) (limited to 'test/integration') diff --git a/test/integration/test_xmpp_transports_nb.py b/test/integration/test_xmpp_transports_nb.py index f6cbab510..0e42ab855 100644 --- a/test/integration/test_xmpp_transports_nb.py +++ b/test/integration/test_xmpp_transports_nb.py @@ -227,9 +227,10 @@ class TestNonBlockingHTTP(AbstractTransportTest): data = "Please don't fail!" http_message = transport.build_http_message(data) - statusline, headers, http_body = transport.parse_http_message( + statusline, headers, http_body, buffer_rest = transport.parse_http_message( http_message) + self.assertFalse(bool(buffer_rest)) self.assertTrue(statusline and isinstance(statusline, list)) self.assertTrue(headers and isinstance(headers, dict)) self.assertEqual(data, http_body, msg='Input and output are different') @@ -250,26 +251,25 @@ class TestNonBlockingHTTP(AbstractTransportTest): transport._on_receive(message) self.assertTrue(self.have_received_expected(), msg='Failed: In one go') -# FIXME: Not yet implemented. -# def test_receive_http_message_in_chunks(self): -# ''' Let _on_receive handle some chunked http messages ''' -# transport = self._get_transport(self.bosh_http_dict) -# -# header = ("HTTP/1.1 200 OK\r\nContent-Type: text/xml; charset=utf-8\r\n" + -# "Content-Length: 88\r\n\r\n") -# payload = "Please don't fail!" -# body = "%s" \ -# % payload -# message = "%s%s" % (header, body) -# -# chunk1, chunk2, chunk3 = message[:20], message[20:73], message[73:] -# nextmessage_chunk = "\r\n\r\nHTTP/1.1 200 OK\r\nContent-Type: text/x" -# chunks = (chunk1, chunk2, chunk3, nextmessage_chunk) -# -# transport.onreceive(self.expect_receive(body, msg='Failed: In chunks')) -# for chunk in chunks: -# transport._on_receive(chunk) -# self.assertTrue(self.have_received_expected(), msg='Failed: In chunks') + def test_receive_http_message_in_chunks(self): + ''' Let _on_receive handle some chunked http messages ''' + transport = self._get_transport(self.bosh_http_dict) + + header = ("HTTP/1.1 200 OK\r\nContent-Type: text/xml; charset=utf-8\r\n" + + "Content-Length: 88\r\n\r\n") + payload = "Please don't fail!" + body = "%s" \ + % payload + message = "%s%s" % (header, body) + + chunk1, chunk2, chunk3 = message[:20], message[20:73], message[73:] + nextmessage_chunk = "\r\n\r\nHTTP/1.1 200 OK\r\nContent-Type: text/x" + chunks = (chunk1, chunk2, chunk3, nextmessage_chunk) + + transport.onreceive(self.expect_receive(body, msg='Failed: In chunks')) + for chunk in chunks: + transport._on_receive(chunk) + self.assertTrue(self.have_received_expected(), msg='Failed: In chunks') if __name__ == '__main__': unittest.main() -- cgit v1.2.3