bpo-29639: change test.support.HOST to "localhost"
test.support.HOST should be "localhost" as it was in the past. See the bpo-29639. Tests that need the IP address should use HOSTv4 (added) or the existing HOSTv6 constant. This changes the definition and fixes tests that needed updating to deal with HOST being the hostname rather than the hardcoded IP address. This is only the first step in addressing https://bugs.python.org/issue29639.
This commit is contained in:
parent
829dacce4f
commit
efb1d0a3c0
|
@ -287,7 +287,6 @@ class dispatcher:
|
|||
|
||||
def set_socket(self, sock, map=None):
|
||||
self.socket = sock
|
||||
## self.__dict__['socket'] = sock
|
||||
self._fileno = sock.fileno()
|
||||
self.add_channel(map)
|
||||
|
||||
|
|
|
@ -601,9 +601,8 @@ def requires_mac_ver(*min_version):
|
|||
return decorator
|
||||
|
||||
|
||||
# Don't use "localhost", since resolving it uses the DNS under recent
|
||||
# Windows versions (see issue #18792).
|
||||
HOST = "127.0.0.1"
|
||||
HOST = "localhost"
|
||||
HOSTv4 = "127.0.0.1"
|
||||
HOSTv6 = "::1"
|
||||
|
||||
|
||||
|
|
|
@ -170,11 +170,11 @@ class TestFamilyDetection(unittest.TestCase):
|
|||
|
||||
@unittest.skipUnless(support.IPV6_ENABLED, "IPv6 not enabled")
|
||||
def test_socket_uses_IPv6(self):
|
||||
server = smtpd.SMTPServer((support.HOSTv6, 0), (support.HOST, 0))
|
||||
server = smtpd.SMTPServer((support.HOSTv6, 0), (support.HOSTv4, 0))
|
||||
self.assertEqual(server.socket.family, socket.AF_INET6)
|
||||
|
||||
def test_socket_uses_IPv4(self):
|
||||
server = smtpd.SMTPServer((support.HOST, 0), (support.HOSTv6, 0))
|
||||
server = smtpd.SMTPServer((support.HOSTv4, 0), (support.HOSTv6, 0))
|
||||
self.assertEqual(server.socket.family, socket.AF_INET)
|
||||
|
||||
|
||||
|
|
|
@ -19,10 +19,9 @@ import threading
|
|||
|
||||
import unittest
|
||||
from test import support, mock_socket
|
||||
from test.support import HOST, HOSTv4, HOSTv6
|
||||
|
||||
|
||||
HOST = support.HOST
|
||||
|
||||
if sys.platform == 'darwin':
|
||||
# select.poll returns a select.POLLHUP at the end of the tests
|
||||
# on darwin, so just ignore it
|
||||
|
@ -208,8 +207,8 @@ class DebuggingServerTests(unittest.TestCase):
|
|||
# Pick a random unused port by passing 0 for the port number
|
||||
self.serv = smtpd.DebuggingServer((HOST, 0), ('nowhere', -1),
|
||||
decode_data=True)
|
||||
# Keep a note of what port was assigned
|
||||
self.port = self.serv.socket.getsockname()[1]
|
||||
# Keep a note of what server host and port were assigned
|
||||
self.host, self.port = self.serv.socket.getsockname()[:2]
|
||||
serv_args = (self.serv, self.serv_evt, self.client_evt)
|
||||
self.thread = threading.Thread(target=debugging_server, args=serv_args)
|
||||
self.thread.start()
|
||||
|
@ -231,6 +230,11 @@ class DebuggingServerTests(unittest.TestCase):
|
|||
smtpd.DEBUGSTREAM.close()
|
||||
smtpd.DEBUGSTREAM = self.old_DEBUGSTREAM
|
||||
|
||||
def get_output_without_xpeer(self):
|
||||
test_output = self.output.getvalue()
|
||||
return re.sub(r'(.*?)^X-Peer:\s*\S+\n(.*)', r'\1\2',
|
||||
test_output, flags=re.MULTILINE|re.DOTALL)
|
||||
|
||||
def testBasic(self):
|
||||
# connect
|
||||
smtp = smtplib.SMTP(HOST, self.port, local_hostname='localhost', timeout=3)
|
||||
|
@ -238,16 +242,16 @@ class DebuggingServerTests(unittest.TestCase):
|
|||
|
||||
def testSourceAddress(self):
|
||||
# connect
|
||||
port = support.find_unused_port()
|
||||
src_port = support.find_unused_port()
|
||||
try:
|
||||
smtp = smtplib.SMTP(HOST, self.port, local_hostname='localhost',
|
||||
timeout=3, source_address=('127.0.0.1', port))
|
||||
self.assertEqual(smtp.source_address, ('127.0.0.1', port))
|
||||
smtp = smtplib.SMTP(self.host, self.port, local_hostname='localhost',
|
||||
timeout=3, source_address=(self.host, src_port))
|
||||
self.assertEqual(smtp.source_address, (self.host, src_port))
|
||||
self.assertEqual(smtp.local_hostname, 'localhost')
|
||||
smtp.quit()
|
||||
except OSError as e:
|
||||
if e.errno == errno.EADDRINUSE:
|
||||
self.skipTest("couldn't bind to port %d" % port)
|
||||
self.skipTest("couldn't bind to source port %d" % src_port)
|
||||
raise
|
||||
|
||||
def testNOOP(self):
|
||||
|
@ -374,10 +378,14 @@ class DebuggingServerTests(unittest.TestCase):
|
|||
self.client_evt.set()
|
||||
self.serv_evt.wait()
|
||||
self.output.flush()
|
||||
# Add the X-Peer header that DebuggingServer adds
|
||||
m['X-Peer'] = socket.gethostbyname('localhost')
|
||||
# Remove the X-Peer header that DebuggingServer adds as figuring out
|
||||
# exactly what IP address format is put there is not easy (and
|
||||
# irrelevant to our test). Typically 127.0.0.1 or ::1, but it is
|
||||
# not always the same as socket.gethostbyname(HOST). :(
|
||||
test_output = self.get_output_without_xpeer()
|
||||
del m['X-Peer']
|
||||
mexpect = '%s%s\n%s' % (MSG_BEGIN, m.as_string(), MSG_END)
|
||||
self.assertEqual(self.output.getvalue(), mexpect)
|
||||
self.assertEqual(test_output, mexpect)
|
||||
|
||||
def testSendMessageWithAddresses(self):
|
||||
m = email.mime.text.MIMEText('A test message')
|
||||
|
@ -397,12 +405,13 @@ class DebuggingServerTests(unittest.TestCase):
|
|||
self.client_evt.set()
|
||||
self.serv_evt.wait()
|
||||
self.output.flush()
|
||||
# Add the X-Peer header that DebuggingServer adds
|
||||
m['X-Peer'] = socket.gethostbyname('localhost')
|
||||
# Remove the X-Peer header that DebuggingServer adds.
|
||||
test_output = self.get_output_without_xpeer()
|
||||
del m['X-Peer']
|
||||
# The Bcc header should not be transmitted.
|
||||
del m['Bcc']
|
||||
mexpect = '%s%s\n%s' % (MSG_BEGIN, m.as_string(), MSG_END)
|
||||
self.assertEqual(self.output.getvalue(), mexpect)
|
||||
self.assertEqual(test_output, mexpect)
|
||||
debugout = smtpd.DEBUGSTREAM.getvalue()
|
||||
sender = re.compile("^sender: foo@bar.com$", re.MULTILINE)
|
||||
self.assertRegex(debugout, sender)
|
||||
|
@ -426,10 +435,11 @@ class DebuggingServerTests(unittest.TestCase):
|
|||
self.client_evt.set()
|
||||
self.serv_evt.wait()
|
||||
self.output.flush()
|
||||
# Add the X-Peer header that DebuggingServer adds
|
||||
m['X-Peer'] = socket.gethostbyname('localhost')
|
||||
# Remove the X-Peer header that DebuggingServer adds.
|
||||
test_output = self.get_output_without_xpeer()
|
||||
del m['X-Peer']
|
||||
mexpect = '%s%s\n%s' % (MSG_BEGIN, m.as_string(), MSG_END)
|
||||
self.assertEqual(self.output.getvalue(), mexpect)
|
||||
self.assertEqual(test_output, mexpect)
|
||||
debugout = smtpd.DEBUGSTREAM.getvalue()
|
||||
sender = re.compile("^sender: foo@bar.com$", re.MULTILINE)
|
||||
self.assertRegex(debugout, sender)
|
||||
|
@ -452,10 +462,11 @@ class DebuggingServerTests(unittest.TestCase):
|
|||
self.client_evt.set()
|
||||
self.serv_evt.wait()
|
||||
self.output.flush()
|
||||
# Add the X-Peer header that DebuggingServer adds
|
||||
m['X-Peer'] = socket.gethostbyname('localhost')
|
||||
# Remove the X-Peer header that DebuggingServer adds.
|
||||
test_output = self.get_output_without_xpeer()
|
||||
del m['X-Peer']
|
||||
mexpect = '%s%s\n%s' % (MSG_BEGIN, m.as_string(), MSG_END)
|
||||
self.assertEqual(self.output.getvalue(), mexpect)
|
||||
self.assertEqual(test_output, mexpect)
|
||||
debugout = smtpd.DEBUGSTREAM.getvalue()
|
||||
sender = re.compile("^sender: joe@example.com$", re.MULTILINE)
|
||||
self.assertRegex(debugout, sender)
|
||||
|
@ -481,10 +492,11 @@ class DebuggingServerTests(unittest.TestCase):
|
|||
self.client_evt.set()
|
||||
self.serv_evt.wait()
|
||||
self.output.flush()
|
||||
# Add the X-Peer header that DebuggingServer adds
|
||||
m['X-Peer'] = socket.gethostbyname('localhost')
|
||||
# Remove the X-Peer header that DebuggingServer adds.
|
||||
test_output = self.get_output_without_xpeer()
|
||||
del m['X-Peer']
|
||||
mexpect = '%s%s\n%s' % (MSG_BEGIN, m.as_string(), MSG_END)
|
||||
self.assertEqual(self.output.getvalue(), mexpect)
|
||||
self.assertEqual(test_output, mexpect)
|
||||
debugout = smtpd.DEBUGSTREAM.getvalue()
|
||||
sender = re.compile("^sender: the_rescuers@Rescue-Aid-Society.com$", re.MULTILINE)
|
||||
self.assertRegex(debugout, sender)
|
||||
|
@ -515,10 +527,11 @@ class DebuggingServerTests(unittest.TestCase):
|
|||
# The Resent-Bcc headers are deleted before serialization.
|
||||
del m['Bcc']
|
||||
del m['Resent-Bcc']
|
||||
# Add the X-Peer header that DebuggingServer adds
|
||||
m['X-Peer'] = socket.gethostbyname('localhost')
|
||||
# Remove the X-Peer header that DebuggingServer adds.
|
||||
test_output = self.get_output_without_xpeer()
|
||||
del m['X-Peer']
|
||||
mexpect = '%s%s\n%s' % (MSG_BEGIN, m.as_string(), MSG_END)
|
||||
self.assertEqual(self.output.getvalue(), mexpect)
|
||||
self.assertEqual(test_output, mexpect)
|
||||
debugout = smtpd.DEBUGSTREAM.getvalue()
|
||||
sender = re.compile("^sender: holy@grail.net$", re.MULTILINE)
|
||||
self.assertRegex(debugout, sender)
|
||||
|
|
|
@ -864,12 +864,12 @@ class GeneralModuleTests(unittest.TestCase):
|
|||
self.fail("Error testing host resolution mechanisms. (fqdn: %s, all: %s)" % (fqhn, repr(all_host_names)))
|
||||
|
||||
def test_host_resolution(self):
|
||||
for addr in [support.HOST, '10.0.0.1', '255.255.255.255']:
|
||||
for addr in [support.HOSTv4, '10.0.0.1', '255.255.255.255']:
|
||||
self.assertEqual(socket.gethostbyname(addr), addr)
|
||||
|
||||
# we don't test support.HOSTv6 because there's a chance it doesn't have
|
||||
# a matching name entry (e.g. 'ip6-localhost')
|
||||
for host in [support.HOST]:
|
||||
for host in [support.HOSTv4]:
|
||||
self.assertIn(host, socket.gethostbyaddr(host)[2])
|
||||
|
||||
def test_host_resolution_bad_address(self):
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
test.support.HOST is now "localhost", a new HOSTv4 constant has been added
|
||||
for your ``127.0.0.1`` needs, similar to the existing HOSTv6 constant.
|
Loading…
Reference in New Issue