mirror of
https://github.com/python/cpython.git
synced 2025-08-04 17:08:35 +00:00
Remove special logic that closes HTTPConnection socket on EPIPE.
http://bugs.python.org/issue5542 If the socket is closed, the client has no chance to read the response from the server. EPIPE means that it isn't possible to write more data from the socket, but not that it is impossible to read. Also, various formatting changes.
This commit is contained in:
parent
7c1692d587
commit
636950f925
2 changed files with 55 additions and 36 deletions
|
@ -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):
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue