Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 15 additions & 6 deletions Lib/test/test_urllib.py
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ def FancyURLopener():
return urllib.request.FancyURLopener()


def fakehttp(fakedata):
def fakehttp(fakedata, mock_close=False):
class FakeSocket(io.BytesIO):
io_refs = 1

Expand Down Expand Up @@ -90,15 +90,24 @@ class FakeHTTPConnection(http.client.HTTPConnection):
def connect(self):
self.sock = FakeSocket(self.fakedata)
type(self).fakesock = self.sock

if mock_close:
# bpo-36918: HTTPConnection destructor calls close() which calls
# flush(). Problem: flush() calls self.fp.flush() which raises
# "ValueError: I/O operation on closed file" which is logged as an
# "Exception ignored in". Override close() to silence this error.
def close(self):
pass
FakeHTTPConnection.fakedata = fakedata

return FakeHTTPConnection


class FakeHTTPMixin(object):
def fakehttp(self, fakedata):
def fakehttp(self, fakedata, mock_close=False):
fake_http_class = fakehttp(fakedata, mock_close=mock_close)
self._connection_class = http.client.HTTPConnection
http.client.HTTPConnection = fakehttp(fakedata)
http.client.HTTPConnection = fake_http_class

def unfakehttp(self):
http.client.HTTPConnection = self._connection_class
Expand Down Expand Up @@ -400,7 +409,7 @@ def test_read_bogus(self):
Server: Apache/1.3.33 (Debian GNU/Linux) mod_ssl/2.8.22 OpenSSL/0.9.7e
Connection: close
Content-Type: text/html; charset=iso-8859-1
''')
''', mock_close=True)
try:
self.assertRaises(OSError, urlopen, "http://python.org/")
finally:
Expand All @@ -414,7 +423,7 @@ def test_invalid_redirect(self):
Location: file://guidocomputer.athome.com:/python/license
Connection: close
Content-Type: text/html; charset=iso-8859-1
''')
''', mock_close=True)
try:
msg = "Redirection to url 'file:"
with self.assertRaisesRegex(urllib.error.HTTPError, msg):
Expand All @@ -429,7 +438,7 @@ def test_redirect_limit_independent(self):
self.fakehttp(b'''HTTP/1.1 302 Found
Location: file://guidocomputer.athome.com:/python/license
Connection: close
''')
''', mock_close=True)
try:
self.assertRaises(urllib.error.HTTPError, urlopen,
"http://something")
Expand Down