From ba60319a78ed6be5a57d5288e0e131c4bc6c8cf8 Mon Sep 17 00:00:00 2001 From: Jeremy Hylton Date: Thu, 23 Jan 2003 18:02:20 +0000 Subject: [PATCH] Fix for SF bug 661340: test_httplib fails on the mac. The test no longer produces output with \r\n in it. --- Lib/test/output/test_httplib | 1 + Lib/test/test_httplib.py | 105 +++++++++++++++++++++-------------- 2 files changed, 65 insertions(+), 41 deletions(-) diff --git a/Lib/test/output/test_httplib b/Lib/test/output/test_httplib index d9b3fa1b4af..811e68000df 100644 --- a/Lib/test/output/test_httplib +++ b/Lib/test/output/test_httplib @@ -8,3 +8,4 @@ InvalidURL raised as expected reply: 'HTTP/1.1 200 OK\r\n' header: Set-Cookie: Customer="WILE_E_COYOTE"; Version="1"; Path="/acme" header: Set-Cookie: Part_Number="Rocket_Launcher_0001"; Version="1"; Path="/acme" + diff --git a/Lib/test/test_httplib.py b/Lib/test/test_httplib.py index 4d8dbc89976..8764455ccfd 100644 --- a/Lib/test/test_httplib.py +++ b/Lib/test/test_httplib.py @@ -11,48 +11,71 @@ class FakeSocket: raise httplib.UnimplementedFileMode() return StringIO.StringIO(self.text) -# Test HTTP status lines +# Collect output to a buffer so that we don't have to cope with line-ending +# issues across platforms. Specifically, the headers will have \r\n pairs +# and some platforms will strip them from the output file. -body = "HTTP/1.1 200 Ok\r\n\r\nText" -sock = FakeSocket(body) -resp = httplib.HTTPResponse(sock, 1) -resp.begin() -print resp.read() -resp.close() +import sys -body = "HTTP/1.1 400.100 Not Ok\r\n\r\nText" -sock = FakeSocket(body) -resp = httplib.HTTPResponse(sock, 1) -try: - resp.begin() -except httplib.BadStatusLine: - print "BadStatusLine raised as expected" -else: - print "Expect BadStatusLine" - -# Check invalid host_port - -for hp in ("www.python.org:abc", "www.python.org:"): +def test(): + buf = StringIO.StringIO() + _stdout = sys.stdout try: - h = httplib.HTTP(hp) - except httplib.InvalidURL: - print "InvalidURL raised as expected" - else: - print "Expect InvalidURL" + sys.stdout = buf + _test() + finally: + sys.stdout = _stdout -# test response with multiple message headers with the same field name. -text = ('HTTP/1.1 200 OK\r\n' - 'Set-Cookie: Customer="WILE_E_COYOTE"; Version="1"; Path="/acme"\r\n' - 'Set-Cookie: Part_Number="Rocket_Launcher_0001"; Version="1";' - ' Path="/acme"\r\n' - '\r\n' - 'No body\r\n') -hdr = ('Customer="WILE_E_COYOTE"; Version="1"; Path="/acme"' - ', ' - 'Part_Number="Rocket_Launcher_0001"; Version="1"; Path="/acme"') -s = FakeSocket(text) -r = httplib.HTTPResponse(s, 1) -r.begin() -cookies = r.getheader("Set-Cookie") -if cookies != hdr: - raise AssertionError, "multiple headers not combined properly" + # print individual lines with endings stripped + s = buf.getvalue() + for line in s.split("\n"): + print line.strip() + +def _test(): + # Test HTTP status lines + + body = "HTTP/1.1 200 Ok\r\n\r\nText" + sock = FakeSocket(body) + resp = httplib.HTTPResponse(sock, 1) + resp.begin() + print resp.read() + resp.close() + + body = "HTTP/1.1 400.100 Not Ok\r\n\r\nText" + sock = FakeSocket(body) + resp = httplib.HTTPResponse(sock, 1) + try: + resp.begin() + except httplib.BadStatusLine: + print "BadStatusLine raised as expected" + else: + print "Expect BadStatusLine" + + # Check invalid host_port + + for hp in ("www.python.org:abc", "www.python.org:"): + try: + h = httplib.HTTP(hp) + except httplib.InvalidURL: + print "InvalidURL raised as expected" + else: + print "Expect InvalidURL" + + # test response with multiple message headers with the same field name. + text = ('HTTP/1.1 200 OK\r\n' + 'Set-Cookie: Customer="WILE_E_COYOTE"; Version="1"; Path="/acme"\r\n' + 'Set-Cookie: Part_Number="Rocket_Launcher_0001"; Version="1";' + ' Path="/acme"\r\n' + '\r\n' + 'No body\r\n') + hdr = ('Customer="WILE_E_COYOTE"; Version="1"; Path="/acme"' + ', ' + 'Part_Number="Rocket_Launcher_0001"; Version="1"; Path="/acme"') + s = FakeSocket(text) + r = httplib.HTTPResponse(s, 1) + r.begin() + cookies = r.getheader("Set-Cookie") + if cookies != hdr: + raise AssertionError, "multiple headers not combined properly" + +test()