# HG changeset patch # Parent d6e27eafb4e1b48cb3fe3e6a7b366bf19729882a Issue #23788: Merge redundant test_bad_address() into test_urllibnet In Python 2, these were duplicated; one for urllib.urlopen() and one for urllib2.urlopen(). The test_urllibnet version has a better precondition to avoid false failures with bad DNS, and the test_urllib2_localnet version had a more up-to-date comment and domain name. diff -r d6e27eafb4e1 Lib/test/test_urllib2_localnet.py --- a/Lib/test/test_urllib2_localnet.py Mon Dec 07 20:45:16 2015 -0800 +++ b/Lib/test/test_urllib2_localnet.py Tue Dec 08 07:50:19 2015 +0000 @@ -626,35 +626,6 @@ url = open_url.geturl() self.assertEqual(url, "http://localhost:%s" % handler.port) - def test_bad_address(self): - # Make sure proper exception is raised when connecting to a bogus - # address. - - # as indicated by the comment below, this might fail with some ISP, - # so we run the test only when -unetwork/-uall is specified to - # mitigate the problem a bit (see #17564) - support.requires('network') - self.assertRaises(OSError, - # Given that both VeriSign and various ISPs have in - # the past or are presently hijacking various invalid - # domain name requests in an attempt to boost traffic - # to their own sites, finding a domain name to use - # for this test is difficult. RFC2606 leads one to - # believe that '.invalid' should work, but experience - # seemed to indicate otherwise. Single character - # TLDs are likely to remain invalid, so this seems to - # be the best choice. The trailing '.' prevents a - # related problem: The normal DNS resolver appends - # the domain names from the search path if there is - # no '.' the end and, and if one of those domains - # implements a '*' rule a result is returned. - # However, none of this will prevent the test from - # failing if the ISP hijacks all invalid domain - # requests. The real solution would be to be able to - # parameterize the framework with a mock resolver. - urllib.request.urlopen, - "http://sadflkjsasf.i.nvali.d./") - def test_iteration(self): expected_response = b"pycon 2008..." handler = self.start_server([(200, [], expected_response)]) diff -r d6e27eafb4e1 Lib/test/test_urllibnet.py --- a/Lib/test/test_urllibnet.py Mon Dec 07 20:45:16 2015 -0800 +++ b/Lib/test/test_urllibnet.py Tue Dec 08 07:50:19 2015 +0000 @@ -113,7 +113,25 @@ def test_bad_address(self): # Make sure proper exception is raised when connecting to a bogus # address. - bogus_domain = "sadflkjsasf.i.nvali.d" + + # Given that both VeriSign and various ISPs have in + # the past or are presently hijacking various invalid + # domain name requests in an attempt to boost traffic + # to their own sites, finding a domain name to use + # for this test is difficult. RFC2606 leads one to + # believe that '.invalid' should work, but experience + # seemed to indicate otherwise. Single character + # TLDs are likely to remain invalid, so this seems to + # be the best choice. The trailing '.' prevents a + # related problem: The normal DNS resolver appends + # the domain names from the search path if there is + # no '.' the end and, and if one of those domains + # implements a '*' rule a result is returned. + # However, none of this will prevent the test from + # failing if the ISP hijacks all invalid domain + # requests. The real solution would be to be able to + # parameterize the framework with a mock resolver. + bogus_domain = "sadflkjsasf.i.nvali.d." try: socket.gethostbyname(bogus_domain) except OSError: @@ -128,11 +146,7 @@ 'can be caused by a broken DNS server ' '(e.g. returns 404 or hijacks page)') with self.assertRaises(OSError, msg=failure_explanation): - # SF patch 809915: In Sep 2003, VeriSign started highjacking - # invalid .com and .net addresses to boost traffic to their own - # site. This test started failing then. One hopes the .invalid - # domain will be spared to serve its defined purpose. - urllib.request.urlopen("http://sadflkjsasf.i.nvali.d/") + urllib.request.urlopen("http://{}/".format(bogus_domain)) class urlretrieveNetworkTests(unittest.TestCase):