summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_httplib.py
diff options
context:
space:
mode:
authorJeremy Hylton <jeremy@alum.mit.edu>2003-07-08 12:36:58 (GMT)
committerJeremy Hylton <jeremy@alum.mit.edu>2003-07-08 12:36:58 (GMT)
commit121d34af198b2d051eec158fd1be7aa19a224c28 (patch)
treeb07880cabfcc0907480eba53a8f4121ac18020b7 /Lib/test/test_httplib.py
parenta6b7d3411fe324b42c2a53b37bee911364413594 (diff)
downloadcpython-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.py47
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()