diff options
author | Jeremy Hylton <jeremy@alum.mit.edu> | 2003-07-08 12:36:58 (GMT) |
---|---|---|
committer | Jeremy Hylton <jeremy@alum.mit.edu> | 2003-07-08 12:36:58 (GMT) |
commit | 121d34af198b2d051eec158fd1be7aa19a224c28 (patch) | |
tree | b07880cabfcc0907480eba53a8f4121ac18020b7 /Lib/test/test_httplib.py | |
parent | a6b7d3411fe324b42c2a53b37bee911364413594 (diff) | |
download | cpython-121d34af198b2d051eec158fd1be7aa19a224c28.zip cpython-121d34af198b2d051eec158fd1be7aa19a224c28.tar.gz cpython-121d34af198b2d051eec158fd1be7aa19a224c28.tar.bz2 |
Fix SF bug 764095: Don't use network in test_httplib.
Diffstat (limited to 'Lib/test/test_httplib.py')
-rw-r--r-- | Lib/test/test_httplib.py | 47 |
1 files changed, 33 insertions, 14 deletions
diff --git a/Lib/test/test_httplib.py b/Lib/test/test_httplib.py index 29f4503..c57793d 100644 --- a/Lib/test/test_httplib.py +++ b/Lib/test/test_httplib.py @@ -1,22 +1,41 @@ -from test.test_support import verify,verbose import httplib import StringIO +import sys + +from test.test_support import verify,verbose class FakeSocket: - def __init__(self, text): + def __init__(self, text, fileclass=StringIO.StringIO): self.text = text + self.fileclass = fileclass def makefile(self, mode, bufsize=None): if mode != 'r' and mode != 'rb': raise httplib.UnimplementedFileMode() - return StringIO.StringIO(self.text) + return self.fileclass(self.text) + +class NoEOFStringIO(StringIO.StringIO): + """Like StringIO, but raises AssertionError on EOF. + + This is used below to test that httplib doesn't try to read + more from the underlying file than it should. + """ + def read(self, n=-1): + data = StringIO.StringIO.read(self, n) + if data == '': + raise AssertionError('caller tried to read past EOF') + return data + + def readline(self, length=None): + data = StringIO.StringIO.readline(self, length) + if data == '': + raise AssertionError('caller tried to read past EOF') + return data # 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. -import sys - def test(): buf = StringIO.StringIO() _stdout = sys.stdout @@ -78,17 +97,17 @@ def _test(): if cookies != hdr: raise AssertionError, "multiple headers not combined properly" - # test that the library doesn't attempt to read any data - # from a head request - conn = httplib.HTTPConnection("www.python.org") - conn.connect() - conn.request("HEAD", "/", headers={"Connection" : "keep-alive"}) - resp = conn.getresponse() - if resp.status != 200: - raise AssertionError, "Expected status 200, got %d" % resp.status + # Test that the library doesn't attempt to read any data + # from a HEAD request. (Tickles SF bug #622042.) + sock = FakeSocket( + 'HTTP/1.1 200 OK\r\n' + 'Content-Length: 14432\r\n' + '\r\n', + NoEOFStringIO) + resp = httplib.HTTPResponse(sock, 1, method="HEAD") + resp.begin() if resp.read() != "": raise AssertionError, "Did not expect response from HEAD request" resp.close() - conn.close() test() |