Skip to content

Commit 02e0367

Browse files
authored
bpo-31258: test_urllib2_localnet uses addCleanup(server.stop) (#3184)
Use self.addCleanup(self.server.stop) to stop the HTTP server. Some tests didn't stop the server like test_https().
1 parent 1460ce5 commit 02e0367

File tree

1 file changed

+57
-90
lines changed

1 file changed

+57
-90
lines changed

Lib/test/test_urllib2_localnet.py

Lines changed: 57 additions & 90 deletions
Original file line numberDiff line numberDiff line change
@@ -278,6 +278,7 @@ def setUp(self):
278278
self._threads = test_support.threading_setup()
279279

280280
def tearDown(self):
281+
self.doCleanups()
281282
test_support.threading_cleanup(*self._threads)
282283

283284

@@ -296,10 +297,7 @@ def http_server_with_basic_auth_handler(*args, **kwargs):
296297
self.server_url = 'http://127.0.0.1:%s' % self.server.port
297298
self.server.start()
298299
self.server.ready.wait()
299-
300-
def tearDown(self):
301-
self.server.stop()
302-
super(BasicAuthTests, self).tearDown()
300+
self.addCleanup(self.server.stop)
303301

304302
def test_basic_auth_success(self):
305303
ah = urllib2.HTTPBasicAuthHandler()
@@ -347,15 +345,12 @@ def create_fake_proxy_handler(*args, **kwargs):
347345
self.server = LoopbackHttpServerThread(create_fake_proxy_handler)
348346
self.server.start()
349347
self.server.ready.wait()
348+
self.addCleanup(self.server.stop)
350349
proxy_url = "http://127.0.0.1:%d" % self.server.port
351350
handler = urllib2.ProxyHandler({"http" : proxy_url})
352351
self.proxy_digest_handler = urllib2.ProxyDigestAuthHandler()
353352
self.opener = urllib2.build_opener(handler, self.proxy_digest_handler)
354353

355-
def tearDown(self):
356-
self.server.stop()
357-
super(ProxyAuthTests, self).tearDown()
358-
359354
def test_proxy_with_bad_password_raises_httperror(self):
360355
self.proxy_digest_handler.add_password(self.REALM, self.URL,
361356
self.USER, self.PASSWD+"bad")
@@ -472,6 +467,7 @@ def start_server(self, responses):
472467
self.server = LoopbackHttpServerThread(handler)
473468
self.server.start()
474469
self.server.ready.wait()
470+
self.addCleanup(self.server.stop)
475471
port = self.server.port
476472
handler.port = port
477473
return handler
@@ -496,65 +492,53 @@ def test_redirection(self):
496492

497493
handler = self.start_server(responses)
498494

499-
try:
500-
f = urllib2.urlopen('http://localhost:%s/' % handler.port)
501-
data = f.read()
502-
f.close()
495+
f = urllib2.urlopen('http://localhost:%s/' % handler.port)
496+
data = f.read()
497+
f.close()
503498

504-
self.assertEqual(data, expected_response)
505-
self.assertEqual(handler.requests, ['/', '/somewhere_else'])
506-
finally:
507-
self.server.stop()
499+
self.assertEqual(data, expected_response)
500+
self.assertEqual(handler.requests, ['/', '/somewhere_else'])
508501

509502

510503
def test_404(self):
511504
expected_response = 'Bad bad bad...'
512505
handler = self.start_server([(404, [], expected_response)])
513506

514507
try:
515-
try:
516-
urllib2.urlopen('http://localhost:%s/weeble' % handler.port)
517-
except urllib2.URLError, f:
518-
pass
519-
else:
520-
self.fail('404 should raise URLError')
508+
urllib2.urlopen('http://localhost:%s/weeble' % handler.port)
509+
except urllib2.URLError, f:
510+
pass
511+
else:
512+
self.fail('404 should raise URLError')
521513

522-
data = f.read()
523-
f.close()
514+
data = f.read()
515+
f.close()
524516

525-
self.assertEqual(data, expected_response)
526-
self.assertEqual(handler.requests, ['/weeble'])
527-
finally:
528-
self.server.stop()
517+
self.assertEqual(data, expected_response)
518+
self.assertEqual(handler.requests, ['/weeble'])
529519

530520

531521
def test_200(self):
532522
expected_response = 'pycon 2008...'
533523
handler = self.start_server([(200, [], expected_response)])
534524

535-
try:
536-
f = urllib2.urlopen('http://localhost:%s/bizarre' % handler.port)
537-
data = f.read()
538-
f.close()
525+
f = urllib2.urlopen('http://localhost:%s/bizarre' % handler.port)
526+
data = f.read()
527+
f.close()
539528

540-
self.assertEqual(data, expected_response)
541-
self.assertEqual(handler.requests, ['/bizarre'])
542-
finally:
543-
self.server.stop()
529+
self.assertEqual(data, expected_response)
530+
self.assertEqual(handler.requests, ['/bizarre'])
544531

545532
def test_200_with_parameters(self):
546533
expected_response = 'pycon 2008...'
547534
handler = self.start_server([(200, [], expected_response)])
548535

549-
try:
550-
f = urllib2.urlopen('http://localhost:%s/bizarre' % handler.port, 'get=with_feeling')
551-
data = f.read()
552-
f.close()
536+
f = urllib2.urlopen('http://localhost:%s/bizarre' % handler.port, 'get=with_feeling')
537+
data = f.read()
538+
f.close()
553539

554-
self.assertEqual(data, expected_response)
555-
self.assertEqual(handler.requests, ['/bizarre', 'get=with_feeling'])
556-
finally:
557-
self.server.stop()
540+
self.assertEqual(data, expected_response)
541+
self.assertEqual(handler.requests, ['/bizarre', 'get=with_feeling'])
558542

559543
def test_https(self):
560544
handler = self.start_https_server()
@@ -603,52 +587,40 @@ def cb_sni(ssl_sock, server_name, initial_context):
603587
def test_sending_headers(self):
604588
handler = self.start_server([(200, [], "we don't care")])
605589

606-
try:
607-
req = urllib2.Request("http://localhost:%s/" % handler.port,
608-
headers={'Range': 'bytes=20-39'})
609-
urllib2.urlopen(req)
610-
self.assertEqual(handler.headers_received['Range'], 'bytes=20-39')
611-
finally:
612-
self.server.stop()
590+
req = urllib2.Request("http://localhost:%s/" % handler.port,
591+
headers={'Range': 'bytes=20-39'})
592+
urllib2.urlopen(req)
593+
self.assertEqual(handler.headers_received['Range'], 'bytes=20-39')
613594

614595
def test_basic(self):
615596
handler = self.start_server([(200, [], "we don't care")])
616597

598+
open_url = urllib2.urlopen("http://localhost:%s" % handler.port)
599+
for attr in ("read", "close", "info", "geturl"):
600+
self.assertTrue(hasattr(open_url, attr), "object returned from "
601+
"urlopen lacks the %s attribute" % attr)
617602
try:
618-
open_url = urllib2.urlopen("http://localhost:%s" % handler.port)
619-
for attr in ("read", "close", "info", "geturl"):
620-
self.assertTrue(hasattr(open_url, attr), "object returned from "
621-
"urlopen lacks the %s attribute" % attr)
622-
try:
623-
self.assertTrue(open_url.read(), "calling 'read' failed")
624-
finally:
625-
open_url.close()
603+
self.assertTrue(open_url.read(), "calling 'read' failed")
626604
finally:
627-
self.server.stop()
605+
open_url.close()
628606

629607
def test_info(self):
630608
handler = self.start_server([(200, [], "we don't care")])
631609

632-
try:
633-
open_url = urllib2.urlopen("http://localhost:%s" % handler.port)
634-
info_obj = open_url.info()
635-
self.assertIsInstance(info_obj, mimetools.Message,
636-
"object returned by 'info' is not an "
637-
"instance of mimetools.Message")
638-
self.assertEqual(info_obj.getsubtype(), "plain")
639-
finally:
640-
self.server.stop()
610+
open_url = urllib2.urlopen("http://localhost:%s" % handler.port)
611+
info_obj = open_url.info()
612+
self.assertIsInstance(info_obj, mimetools.Message,
613+
"object returned by 'info' is not an "
614+
"instance of mimetools.Message")
615+
self.assertEqual(info_obj.getsubtype(), "plain")
641616

642617
def test_geturl(self):
643618
# Make sure same URL as opened is returned by geturl.
644619
handler = self.start_server([(200, [], "we don't care")])
645620

646-
try:
647-
open_url = urllib2.urlopen("http://localhost:%s" % handler.port)
648-
url = open_url.geturl()
649-
self.assertEqual(url, "http://localhost:%s" % handler.port)
650-
finally:
651-
self.server.stop()
621+
open_url = urllib2.urlopen("http://localhost:%s" % handler.port)
622+
url = open_url.geturl()
623+
self.assertEqual(url, "http://localhost:%s" % handler.port)
652624

653625

654626
def test_bad_address(self):
@@ -682,26 +654,21 @@ def test_bad_address(self):
682654
def test_iteration(self):
683655
expected_response = "pycon 2008..."
684656
handler = self.start_server([(200, [], expected_response)])
685-
try:
686-
data = urllib2.urlopen("http://localhost:%s" % handler.port)
687-
for line in data:
688-
self.assertEqual(line, expected_response)
689-
finally:
690-
self.server.stop()
657+
658+
data = urllib2.urlopen("http://localhost:%s" % handler.port)
659+
for line in data:
660+
self.assertEqual(line, expected_response)
691661

692662
def ztest_line_iteration(self):
693663
lines = ["We\n", "got\n", "here\n", "verylong " * 8192 + "\n"]
694664
expected_response = "".join(lines)
695665
handler = self.start_server([(200, [], expected_response)])
696-
try:
697-
data = urllib2.urlopen("http://localhost:%s" % handler.port)
698-
for index, line in enumerate(data):
699-
self.assertEqual(line, lines[index],
700-
"Fetched line number %s doesn't match expected:\n"
701-
" Expected length was %s, got %s" %
702-
(index, len(lines[index]), len(line)))
703-
finally:
704-
self.server.stop()
666+
data = urllib2.urlopen("http://localhost:%s" % handler.port)
667+
for index, line in enumerate(data):
668+
self.assertEqual(line, lines[index],
669+
"Fetched line number %s doesn't match expected:\n"
670+
" Expected length was %s, got %s" %
671+
(index, len(lines[index]), len(line)))
705672
self.assertEqual(index + 1, len(lines))
706673

707674
def test_main():

0 commit comments

Comments
 (0)