diff options
author | Giampaolo RodolĂ <g.rodola@gmail.com> | 2010-08-14 17:00:05 (GMT) |
---|---|---|
committer | Giampaolo RodolĂ <g.rodola@gmail.com> | 2010-08-14 17:00:05 (GMT) |
commit | b384e6c7804ebe15c2f85392cdcb8a55aba86e4a (patch) | |
tree | 6fe488bd5e4b1c92ed111ff9fa030f3d61eb0999 /Lib/test | |
parent | d6dac2e2fdb6d48138b401aea2e6d71d70b2b765 (diff) | |
download | cpython-b384e6c7804ebe15c2f85392cdcb8a55aba86e4a.zip cpython-b384e6c7804ebe15c2f85392cdcb8a55aba86e4a.tar.gz cpython-b384e6c7804ebe15c2f85392cdcb8a55aba86e4a.tar.bz2 |
Merged revisions 84024 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/py3k
........
r84024 | giampaolo.rodola | 2010-08-14 18:45:41 +0200 (sab, 14 ago 2010) | 1 line
fix issue #8857: provide a test case for socket.getaddrinfo
........
Diffstat (limited to 'Lib/test')
-rw-r--r-- | Lib/test/test_socket.py | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/Lib/test/test_socket.py b/Lib/test/test_socket.py index 0f0cb80..276f4c6 100644 --- a/Lib/test/test_socket.py +++ b/Lib/test/test_socket.py @@ -17,8 +17,21 @@ import array from weakref import proxy import signal +def try_address(host, port=0, family=socket.AF_INET): + """Try to bind a socket on the given host:port and return True + if that has been possible.""" + try: + sock = socket.socket(family, socket.SOCK_STREAM) + sock.bind((host, port)) + except (socket.error, socket.gaierror): + return False + else: + sock.close() + return True + HOST = support.HOST MSG = b'Michael Gilfix was here\n' +SUPPORTS_IPV6 = socket.has_ipv6 and try_address('::1', family=socket.AF_INET6) class SocketTCPTest(unittest.TestCase): @@ -554,6 +567,44 @@ class GeneralModuleTests(unittest.TestCase): self.assertTrue(hasattr(socket, 'RCVALL_ON')) self.assertTrue(hasattr(socket, 'RCVALL_OFF')) + def testGetaddrinfo(self): + try: + socket.getaddrinfo('localhost', 80) + except socket.gaierror as err: + if err.errno == socket.EAI_SERVICE: + # see http://bugs.python.org/issue1282647 + self.skipTest("buggy libc version") + raise + # len of every sequence is supposed to be == 5 + for info in socket.getaddrinfo(HOST, None): + self.assertEqual(len(info), 5) + # host can be a domain name, a string representation of an + # IPv4/v6 address or None + socket.getaddrinfo('localhost', 80) + socket.getaddrinfo('127.0.0.1', 80) + socket.getaddrinfo(None, 80) + if SUPPORTS_IPV6: + socket.getaddrinfo('::1', 80) + # port can be a string service name such as "http", a numeric + # port number or None + socket.getaddrinfo(HOST, "http") + socket.getaddrinfo(HOST, 80) + socket.getaddrinfo(HOST, None) + # test family and socktype filters + infos = socket.getaddrinfo(HOST, None, socket.AF_INET) + for family, _, _, _, _ in infos: + self.assertEqual(family, socket.AF_INET) + infos = socket.getaddrinfo(HOST, None, 0, socket.SOCK_STREAM) + for _, socktype, _, _, _ in infos: + self.assertEqual(socktype, socket.SOCK_STREAM) + # test proto and flags arguments + socket.getaddrinfo(HOST, None, 0, 0, socket.AI_CANONNAME) + socket.getaddrinfo(HOST, None, 0, 0, 0, socket.AI_PASSIVE) + # a server willing to support both IPv4 and IPv6 will + # usually do this + socket.getaddrinfo(None, 0, socket.AF_UNSPEC, socket.SOCK_STREAM, 0, + socket.AI_PASSIVE) + class BasicTCPTest(SocketConnectedTest): |