diff options
Diffstat (limited to 'Lib/test/test_httplib.py')
-rw-r--r-- | Lib/test/test_httplib.py | 32 |
1 files changed, 31 insertions, 1 deletions
diff --git a/Lib/test/test_httplib.py b/Lib/test/test_httplib.py index 89413a5e0c1..d43c82d40fa 100644 --- a/Lib/test/test_httplib.py +++ b/Lib/test/test_httplib.py @@ -1,3 +1,4 @@ +import errno from http import client import io import socket @@ -24,6 +25,21 @@ class FakeSocket: raise client.UnimplementedFileMode() return self.fileclass(self.text) +class EPipeSocket(FakeSocket): + + def __init__(self, text, pipe_trigger): + # When sendall() is called with pipe_trigger, raise EPIPE. + FakeSocket.__init__(self, text) + self.pipe_trigger = pipe_trigger + + def sendall(self, data): + if self.pipe_trigger in data: + raise socket.error(errno.EPIPE, "gotcha") + self.data += data + + def close(self): + pass + class NoEOFStringIO(io.BytesIO): """Like StringIO, but raises AssertionError on EOF. @@ -213,6 +229,20 @@ class BasicTest(TestCase): finally: resp.close() + def test_epipe(self): + sock = EPipeSocket( + "HTTP/1.0 401 Authorization Required\r\n" + "Content-type: text/html\r\n" + "WWW-Authenticate: Basic realm=\"example\"\r\n", + b"Content-Length") + conn = client.HTTPConnection("example.com") + conn.sock = sock + self.assertRaises(socket.error, + lambda: conn.request("PUT", "/url", "body")) + resp = conn.getresponse() + self.assertEqual(401, resp.status) + self.assertEqual("Basic realm=\"example\"", + resp.getheader("www-authenticate")) class OfflineTest(TestCase): def test_responses(self): @@ -277,7 +307,7 @@ class RequestBodyTest(TestCase): def setUp(self): self.conn = client.HTTPConnection('example.com') - self.sock = FakeSocket("") + self.conn.sock = self.sock = FakeSocket("") self.conn.sock = self.sock def get_headers_and_fp(self): |