Skip to content

Commit 5ae7ac3

Browse files
committed
Closes #26620: Fix ResourceWarning in test_urllib2_localnet
* Use context manager on urllib objects to ensure that they are closed on error * Use self.addCleanup() to cleanup resources even if a test is interrupted with CTRL+c
1 parent 1c26cb9 commit 5ae7ac3

File tree

1 file changed

+18
-21
lines changed

1 file changed

+18
-21
lines changed

Lib/test/test_urllib2_localnet.py

Lines changed: 18 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -289,12 +289,12 @@ def setUp(self):
289289
def http_server_with_basic_auth_handler(*args, **kwargs):
290290
return BasicAuthHandler(*args, **kwargs)
291291
self.server = LoopbackHttpServerThread(http_server_with_basic_auth_handler)
292+
self.addCleanup(self.server.stop)
292293
self.server_url = 'http://127.0.0.1:%s' % self.server.port
293294
self.server.start()
294295
self.server.ready.wait()
295296

296297
def tearDown(self):
297-
self.server.stop()
298298
super(BasicAuthTests, self).tearDown()
299299

300300
def test_basic_auth_success(self):
@@ -438,17 +438,13 @@ class TestUrlopen(unittest.TestCase):
438438

439439
def setUp(self):
440440
super(TestUrlopen, self).setUp()
441+
441442
# Ignore proxies for localhost tests.
442-
self.old_environ = os.environ.copy()
443+
def restore_environ(old_environ):
444+
os.environ.clear()
445+
os.environ.update(old_environ)
446+
self.addCleanup(restore_environ, os.environ.copy())
443447
os.environ['NO_PROXY'] = '*'
444-
self.server = None
445-
446-
def tearDown(self):
447-
if self.server is not None:
448-
self.server.stop()
449-
os.environ.clear()
450-
os.environ.update(self.old_environ)
451-
super(TestUrlopen, self).tearDown()
452448

453449
def urlopen(self, url, data=None, **kwargs):
454450
l = []
@@ -469,6 +465,7 @@ def start_server(self, responses=None):
469465
handler = GetRequestHandler(responses)
470466

471467
self.server = LoopbackHttpServerThread(handler)
468+
self.addCleanup(self.server.stop)
472469
self.server.start()
473470
self.server.ready.wait()
474471
port = self.server.port
@@ -592,7 +589,8 @@ def test_sending_headers(self):
592589
handler = self.start_server()
593590
req = urllib.request.Request("http://localhost:%s/" % handler.port,
594591
headers={"Range": "bytes=20-39"})
595-
urllib.request.urlopen(req)
592+
with urllib.request.urlopen(req):
593+
pass
596594
self.assertEqual(handler.headers_received["Range"], "bytes=20-39")
597595

598596
def test_basic(self):
@@ -608,22 +606,21 @@ def test_basic(self):
608606

609607
def test_info(self):
610608
handler = self.start_server()
611-
try:
612-
open_url = urllib.request.urlopen(
613-
"http://localhost:%s" % handler.port)
609+
open_url = urllib.request.urlopen(
610+
"http://localhost:%s" % handler.port)
611+
with open_url:
614612
info_obj = open_url.info()
615-
self.assertIsInstance(info_obj, email.message.Message,
616-
"object returned by 'info' is not an "
617-
"instance of email.message.Message")
618-
self.assertEqual(info_obj.get_content_subtype(), "plain")
619-
finally:
620-
self.server.stop()
613+
self.assertIsInstance(info_obj, email.message.Message,
614+
"object returned by 'info' is not an "
615+
"instance of email.message.Message")
616+
self.assertEqual(info_obj.get_content_subtype(), "plain")
621617

622618
def test_geturl(self):
623619
# Make sure same URL as opened is returned by geturl.
624620
handler = self.start_server()
625621
open_url = urllib.request.urlopen("http://localhost:%s" % handler.port)
626-
url = open_url.geturl()
622+
with open_url:
623+
url = open_url.geturl()
627624
self.assertEqual(url, "http://localhost:%s" % handler.port)
628625

629626
def test_iteration(self):

0 commit comments

Comments
 (0)