]> granicus.if.org Git - python/commitdiff
Fix SF bug 764095: Don't use network in test_httplib.
authorJeremy Hylton <jeremy@alum.mit.edu>
Tue, 8 Jul 2003 12:36:58 +0000 (12:36 +0000)
committerJeremy Hylton <jeremy@alum.mit.edu>
Tue, 8 Jul 2003 12:36:58 +0000 (12:36 +0000)
Lib/test/output/test_httplib
Lib/test/test_httplib.py

index 811e68000df14c9960053ec9fc4531edf7173ed4..302b876d7d26d468d8d04097e9691a07d8be6565 100644 (file)
@@ -8,4 +8,6 @@ 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"
+reply: 'HTTP/1.1 200 OK\r\n'
+header: Content-Length: 14432
 
index 29f4503d47cb9cd90760b5c8de3052613f30f1b4..c57793ded2f14b276c5f32826ac9d2d45770bcbe 100644 (file)
@@ -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()