mirror of
https://github.com/python/cpython.git
synced 2025-08-04 17:08:35 +00:00
gh-128734: Fix ResourceWarning in urllib tests (GH-128735)
This commit is contained in:
parent
cb72feb8a3
commit
5ace71713b
5 changed files with 40 additions and 20 deletions
|
@ -419,7 +419,9 @@ Connection: close
|
|||
Content-Type: text/html; charset=iso-8859-1
|
||||
''', mock_close=True)
|
||||
try:
|
||||
self.assertRaises(OSError, urllib.request.urlopen, "http://python.org/")
|
||||
with self.assertRaises(urllib.error.HTTPError) as cm:
|
||||
urllib.request.urlopen("http://python.org/")
|
||||
cm.exception.close()
|
||||
finally:
|
||||
self.unfakehttp()
|
||||
|
||||
|
@ -434,8 +436,9 @@ Content-Type: text/html; charset=iso-8859-1
|
|||
''', mock_close=True)
|
||||
try:
|
||||
msg = "Redirection to url 'file:"
|
||||
with self.assertRaisesRegex(urllib.error.HTTPError, msg):
|
||||
with self.assertRaisesRegex(urllib.error.HTTPError, msg) as cm:
|
||||
urllib.request.urlopen("http://python.org/")
|
||||
cm.exception.close()
|
||||
finally:
|
||||
self.unfakehttp()
|
||||
|
||||
|
@ -448,8 +451,9 @@ Location: file://guidocomputer.athome.com:/python/license
|
|||
Connection: close
|
||||
''', mock_close=True)
|
||||
try:
|
||||
self.assertRaises(urllib.error.HTTPError, urllib.request.urlopen,
|
||||
"http://something")
|
||||
with self.assertRaises(urllib.error.HTTPError) as cm:
|
||||
urllib.request.urlopen("http://something")
|
||||
cm.exception.close()
|
||||
finally:
|
||||
self.unfakehttp()
|
||||
|
||||
|
@ -529,10 +533,11 @@ class urlopen_DataTests(unittest.TestCase):
|
|||
"QOjdAAAAAXNSR0IArs4c6QAAAA9JREFUCNdj%0AYGBg%2BP//PwAGAQL%2BCm8 "
|
||||
"vHgAAAABJRU5ErkJggg%3D%3D%0A%20")
|
||||
|
||||
self.text_url_resp = urllib.request.urlopen(self.text_url)
|
||||
self.text_url_base64_resp = urllib.request.urlopen(
|
||||
self.text_url_base64)
|
||||
self.image_url_resp = urllib.request.urlopen(self.image_url)
|
||||
self.text_url_resp = self.enterContext(
|
||||
urllib.request.urlopen(self.text_url))
|
||||
self.text_url_base64_resp = self.enterContext(
|
||||
urllib.request.urlopen(self.text_url_base64))
|
||||
self.image_url_resp = self.enterContext(urllib.request.urlopen(self.image_url))
|
||||
|
||||
def test_interface(self):
|
||||
# Make sure object returned by urlopen() has the specified methods
|
||||
|
@ -548,8 +553,10 @@ class urlopen_DataTests(unittest.TestCase):
|
|||
[('text/plain', ''), ('charset', 'ISO-8859-1')])
|
||||
self.assertEqual(self.image_url_resp.info()['content-length'],
|
||||
str(len(self.image)))
|
||||
self.assertEqual(urllib.request.urlopen("data:,").info().get_params(),
|
||||
r = urllib.request.urlopen("data:,")
|
||||
self.assertEqual(r.info().get_params(),
|
||||
[('text/plain', ''), ('charset', 'US-ASCII')])
|
||||
r.close()
|
||||
|
||||
def test_geturl(self):
|
||||
self.assertEqual(self.text_url_resp.geturl(), self.text_url)
|
||||
|
|
|
@ -782,6 +782,7 @@ class HandlerTests(unittest.TestCase):
|
|||
headers = r.info()
|
||||
self.assertEqual(headers.get("Content-type"), mimetype)
|
||||
self.assertEqual(int(headers["Content-length"]), len(data))
|
||||
r.close()
|
||||
|
||||
@support.requires_resource("network")
|
||||
def test_ftp_error(self):
|
||||
|
@ -1247,10 +1248,11 @@ class HandlerTests(unittest.TestCase):
|
|||
try:
|
||||
method(req, MockFile(), code, "Blah",
|
||||
MockHeaders({"location": to_url}))
|
||||
except urllib.error.HTTPError:
|
||||
except urllib.error.HTTPError as err:
|
||||
# 307 and 308 in response to POST require user OK
|
||||
self.assertIn(code, (307, 308))
|
||||
self.assertIsNotNone(data)
|
||||
err.close()
|
||||
self.assertEqual(o.req.get_full_url(), to_url)
|
||||
try:
|
||||
self.assertEqual(o.req.get_method(), "GET")
|
||||
|
@ -1286,9 +1288,10 @@ class HandlerTests(unittest.TestCase):
|
|||
while 1:
|
||||
redirect(h, req, "http://example.com/")
|
||||
count = count + 1
|
||||
except urllib.error.HTTPError:
|
||||
except urllib.error.HTTPError as err:
|
||||
# don't stop until max_repeats, because cookies may introduce state
|
||||
self.assertEqual(count, urllib.request.HTTPRedirectHandler.max_repeats)
|
||||
err.close()
|
||||
|
||||
# detect endless non-repeating chain of redirects
|
||||
req = Request(from_url, origin_req_host="example.com")
|
||||
|
@ -1298,9 +1301,10 @@ class HandlerTests(unittest.TestCase):
|
|||
while 1:
|
||||
redirect(h, req, "http://example.com/%d" % count)
|
||||
count = count + 1
|
||||
except urllib.error.HTTPError:
|
||||
except urllib.error.HTTPError as err:
|
||||
self.assertEqual(count,
|
||||
urllib.request.HTTPRedirectHandler.max_redirections)
|
||||
err.close()
|
||||
|
||||
def test_invalid_redirect(self):
|
||||
from_url = "http://example.com/a.html"
|
||||
|
@ -1314,9 +1318,11 @@ class HandlerTests(unittest.TestCase):
|
|||
|
||||
for scheme in invalid_schemes:
|
||||
invalid_url = scheme + '://' + schemeless_url
|
||||
self.assertRaises(urllib.error.HTTPError, h.http_error_302,
|
||||
with self.assertRaises(urllib.error.HTTPError) as cm:
|
||||
h.http_error_302(
|
||||
req, MockFile(), 302, "Security Loophole",
|
||||
MockHeaders({"location": invalid_url}))
|
||||
cm.exception.close()
|
||||
|
||||
for scheme in valid_schemes:
|
||||
valid_url = scheme + '://' + schemeless_url
|
||||
|
@ -1912,11 +1918,13 @@ class MiscTests(unittest.TestCase):
|
|||
self.assertEqual(str(err), expected_errmsg)
|
||||
expected_errmsg = '<HTTPError %s: %r>' % (err.code, err.msg)
|
||||
self.assertEqual(repr(err), expected_errmsg)
|
||||
err.close()
|
||||
|
||||
def test_gh_98778(self):
|
||||
x = urllib.error.HTTPError("url", 405, "METHOD NOT ALLOWED", None, None)
|
||||
self.assertEqual(getattr(x, "__notes__", ()), ())
|
||||
self.assertIsInstance(x.fp.read(), bytes)
|
||||
x.close()
|
||||
|
||||
def test_parse_proxy(self):
|
||||
parse_proxy_test_cases = [
|
||||
|
|
|
@ -316,7 +316,9 @@ class BasicAuthTests(unittest.TestCase):
|
|||
ah = urllib.request.HTTPBasicAuthHandler()
|
||||
ah.add_password(self.REALM, self.server_url, self.USER, self.INCORRECT_PASSWD)
|
||||
urllib.request.install_opener(urllib.request.build_opener(ah))
|
||||
self.assertRaises(urllib.error.HTTPError, urllib.request.urlopen, self.server_url)
|
||||
with self.assertRaises(urllib.error.HTTPError) as cm:
|
||||
urllib.request.urlopen(self.server_url)
|
||||
cm.exception.close()
|
||||
|
||||
|
||||
@hashlib_helper.requires_hashdigest("md5", openssl=True)
|
||||
|
@ -362,15 +364,15 @@ class ProxyAuthTests(unittest.TestCase):
|
|||
self.proxy_digest_handler.add_password(self.REALM, self.URL,
|
||||
self.USER, self.PASSWD+"bad")
|
||||
self.digest_auth_handler.set_qop("auth")
|
||||
self.assertRaises(urllib.error.HTTPError,
|
||||
self.opener.open,
|
||||
self.URL)
|
||||
with self.assertRaises(urllib.error.HTTPError) as cm:
|
||||
self.opener.open(self.URL)
|
||||
cm.exception.close()
|
||||
|
||||
def test_proxy_with_no_password_raises_httperror(self):
|
||||
self.digest_auth_handler.set_qop("auth")
|
||||
self.assertRaises(urllib.error.HTTPError,
|
||||
self.opener.open,
|
||||
self.URL)
|
||||
with self.assertRaises(urllib.error.HTTPError) as cm:
|
||||
self.opener.open(self.URL)
|
||||
cm.exception.close()
|
||||
|
||||
def test_proxy_qop_auth_works(self):
|
||||
self.proxy_digest_handler.add_password(self.REALM, self.URL,
|
||||
|
|
|
@ -48,6 +48,7 @@ class TestResponse(unittest.TestCase):
|
|||
info = urllib.response.addinfo(self.fp, self.test_headers)
|
||||
self.assertEqual(info.info(), self.test_headers)
|
||||
self.assertEqual(info.headers, self.test_headers)
|
||||
info.close()
|
||||
|
||||
def test_addinfourl(self):
|
||||
url = "http://www.python.org"
|
||||
|
@ -60,6 +61,7 @@ class TestResponse(unittest.TestCase):
|
|||
self.assertEqual(infourl.headers, self.test_headers)
|
||||
self.assertEqual(infourl.url, url)
|
||||
self.assertEqual(infourl.status, code)
|
||||
infourl.close()
|
||||
|
||||
def tearDown(self):
|
||||
self.sock.close()
|
||||
|
|
|
@ -106,6 +106,7 @@ class urlopenNetworkTests(unittest.TestCase):
|
|||
with urllib.request.urlopen(URL):
|
||||
pass
|
||||
self.assertEqual(e.exception.code, 404)
|
||||
e.exception.close()
|
||||
|
||||
@support.requires_resource('walltime')
|
||||
def test_bad_address(self):
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue