Fix SF bug 764095: Don't use network in test_httplib.

This commit is contained in:
Jeremy Hylton 2003-07-08 12:36:58 +00:00
parent a6b7d3411f
commit 121d34af19
2 changed files with 35 additions and 14 deletions

View File

@ -8,4 +8,6 @@ InvalidURL raised as expected
reply: 'HTTP/1.1 200 OK\r\n' reply: 'HTTP/1.1 200 OK\r\n'
header: Set-Cookie: Customer="WILE_E_COYOTE"; Version="1"; Path="/acme" header: Set-Cookie: Customer="WILE_E_COYOTE"; Version="1"; Path="/acme"
header: Set-Cookie: Part_Number="Rocket_Launcher_0001"; Version="1"; Path="/acme" header: Set-Cookie: Part_Number="Rocket_Launcher_0001"; Version="1"; Path="/acme"
reply: 'HTTP/1.1 200 OK\r\n'
header: Content-Length: 14432

View File

@ -1,22 +1,41 @@
from test.test_support import verify,verbose
import httplib import httplib
import StringIO import StringIO
import sys
from test.test_support import verify,verbose
class FakeSocket: class FakeSocket:
def __init__(self, text): def __init__(self, text, fileclass=StringIO.StringIO):
self.text = text self.text = text
self.fileclass = fileclass
def makefile(self, mode, bufsize=None): def makefile(self, mode, bufsize=None):
if mode != 'r' and mode != 'rb': if mode != 'r' and mode != 'rb':
raise httplib.UnimplementedFileMode() 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 # 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 # issues across platforms. Specifically, the headers will have \r\n pairs
# and some platforms will strip them from the output file. # and some platforms will strip them from the output file.
import sys
def test(): def test():
buf = StringIO.StringIO() buf = StringIO.StringIO()
_stdout = sys.stdout _stdout = sys.stdout
@ -78,17 +97,17 @@ def _test():
if cookies != hdr: if cookies != hdr:
raise AssertionError, "multiple headers not combined properly" raise AssertionError, "multiple headers not combined properly"
# test that the library doesn't attempt to read any data # Test that the library doesn't attempt to read any data
# from a head request # from a HEAD request. (Tickles SF bug #622042.)
conn = httplib.HTTPConnection("www.python.org") sock = FakeSocket(
conn.connect() 'HTTP/1.1 200 OK\r\n'
conn.request("HEAD", "/", headers={"Connection" : "keep-alive"}) 'Content-Length: 14432\r\n'
resp = conn.getresponse() '\r\n',
if resp.status != 200: NoEOFStringIO)
raise AssertionError, "Expected status 200, got %d" % resp.status resp = httplib.HTTPResponse(sock, 1, method="HEAD")
resp.begin()
if resp.read() != "": if resp.read() != "":
raise AssertionError, "Did not expect response from HEAD request" raise AssertionError, "Did not expect response from HEAD request"
resp.close() resp.close()
conn.close()
test() test()