blob: 35e983ebfc5662935bc859cc29e58690e12c55de [file] [log] [blame]
Guido van Rossum24e4af82002-06-12 19:18:08 +00001import unittest
Barry Warsaw04f357c2002-07-23 19:04:11 +00002from test import test_support
Barry Warsawcf3d4b51997-01-03 20:03:32 +00003
Trent Nelsone41b0062008-04-08 23:47:30 +00004import errno
Barry Warsawcf3d4b51997-01-03 20:03:32 +00005import socket
Guido van Rossum24e4af82002-06-12 19:18:08 +00006import select
Serhiy Storchaka74f49ab2013-01-19 12:55:39 +02007import _testcapi
Jeffrey Yasskin36550bd2008-03-28 04:53:10 +00008import time
9import traceback
Georg Brandla6168f92008-05-25 07:20:14 +000010import Queue
Jack Jansen522e7692002-09-06 21:57:50 +000011import sys
Christian Heimesa47b75b2008-01-04 15:48:06 +000012import os
Martin Blais2856e5f2006-05-26 12:03:27 +000013import array
Antoine Pitrouc818ed42010-09-07 21:40:25 +000014import contextlib
Raymond Hettinger027bb632004-05-31 03:09:25 +000015from weakref import proxy
Neal Norwitz9b0ca792006-08-02 06:46:21 +000016import signal
Antoine Pitrou66b5df62010-09-27 18:16:46 +000017import math
Barry Warsawcf3d4b51997-01-03 20:03:32 +000018
Giampaolo Rodolà633e4742010-08-14 17:04:46 +000019def try_address(host, port=0, family=socket.AF_INET):
20 """Try to bind a socket on the given host:port and return True
21 if that has been possible."""
22 try:
23 sock = socket.socket(family, socket.SOCK_STREAM)
24 sock.bind((host, port))
25 except (socket.error, socket.gaierror):
26 return False
27 else:
28 sock.close()
29 return True
30
31HOST = test_support.HOST
32MSG = b'Michael Gilfix was here\n'
33SUPPORTS_IPV6 = socket.has_ipv6 and try_address('::1', family=socket.AF_INET6)
34
Victor Stinner6a102812010-04-27 23:55:59 +000035try:
36 import thread
37 import threading
38except ImportError:
39 thread = None
40 threading = None
41
Trent Nelsone41b0062008-04-08 23:47:30 +000042HOST = test_support.HOST
Guido van Rossum24e4af82002-06-12 19:18:08 +000043MSG = 'Michael Gilfix was here\n'
Barry Warsawcf3d4b51997-01-03 20:03:32 +000044
Guido van Rossum24e4af82002-06-12 19:18:08 +000045class SocketTCPTest(unittest.TestCase):
Barry Warsawcf3d4b51997-01-03 20:03:32 +000046
Guido van Rossum24e4af82002-06-12 19:18:08 +000047 def setUp(self):
48 self.serv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
Trent Nelsone41b0062008-04-08 23:47:30 +000049 self.port = test_support.bind_port(self.serv)
Guido van Rossum24e4af82002-06-12 19:18:08 +000050 self.serv.listen(1)
Barry Warsawcf3d4b51997-01-03 20:03:32 +000051
Guido van Rossum24e4af82002-06-12 19:18:08 +000052 def tearDown(self):
53 self.serv.close()
54 self.serv = None
Barry Warsawcf3d4b51997-01-03 20:03:32 +000055
Guido van Rossum24e4af82002-06-12 19:18:08 +000056class SocketUDPTest(unittest.TestCase):
57
58 def setUp(self):
59 self.serv = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
Trent Nelsone41b0062008-04-08 23:47:30 +000060 self.port = test_support.bind_port(self.serv)
Guido van Rossum24e4af82002-06-12 19:18:08 +000061
62 def tearDown(self):
63 self.serv.close()
64 self.serv = None
65
66class ThreadableTest:
Guido van Rossum83ccb4e2002-06-18 18:35:13 +000067 """Threadable Test class
68
69 The ThreadableTest class makes it easy to create a threaded
70 client/server pair from an existing unit test. To create a
71 new threaded class from an existing unit test, use multiple
72 inheritance:
73
74 class NewClass (OldClass, ThreadableTest):
75 pass
76
77 This class defines two new fixture functions with obvious
78 purposes for overriding:
79
80 clientSetUp ()
81 clientTearDown ()
82
83 Any new test functions within the class must then define
84 tests in pairs, where the test name is preceeded with a
85 '_' to indicate the client portion of the test. Ex:
86
87 def testFoo(self):
88 # Server portion
89
90 def _testFoo(self):
91 # Client portion
92
93 Any exceptions raised by the clients during their tests
94 are caught and transferred to the main thread to alert
95 the testing framework.
96
97 Note, the server setup function cannot call any blocking
98 functions that rely on the client thread during setup,
Facundo Batista07c78be2007-03-23 18:54:07 +000099 unless serverExplicitReady() is called just before
Guido van Rossum83ccb4e2002-06-18 18:35:13 +0000100 the blocking call (such as in setting up a client/server
101 connection and performing the accept() in setUp().
102 """
Guido van Rossum24e4af82002-06-12 19:18:08 +0000103
104 def __init__(self):
105 # Swap the true setup function
106 self.__setUp = self.setUp
107 self.__tearDown = self.tearDown
108 self.setUp = self._setUp
109 self.tearDown = self._tearDown
110
Guido van Rossum83ccb4e2002-06-18 18:35:13 +0000111 def serverExplicitReady(self):
112 """This method allows the server to explicitly indicate that
113 it wants the client thread to proceed. This is useful if the
114 server is about to execute a blocking routine that is
115 dependent upon the client thread during its setup routine."""
116 self.server_ready.set()
117
Guido van Rossum24e4af82002-06-12 19:18:08 +0000118 def _setUp(self):
Guido van Rossum83ccb4e2002-06-18 18:35:13 +0000119 self.server_ready = threading.Event()
120 self.client_ready = threading.Event()
Guido van Rossum24e4af82002-06-12 19:18:08 +0000121 self.done = threading.Event()
Georg Brandla6168f92008-05-25 07:20:14 +0000122 self.queue = Queue.Queue(1)
Guido van Rossum24e4af82002-06-12 19:18:08 +0000123
124 # Do some munging to start the client test.
Guido van Rossum11ba0942002-06-13 15:07:44 +0000125 methodname = self.id()
126 i = methodname.rfind('.')
127 methodname = methodname[i+1:]
128 test_method = getattr(self, '_' + methodname)
Guido van Rossumab659962002-06-12 21:29:43 +0000129 self.client_thread = thread.start_new_thread(
130 self.clientRun, (test_method,))
Guido van Rossum24e4af82002-06-12 19:18:08 +0000131
132 self.__setUp()
Benjamin Peterson0fbcf692008-06-11 17:27:50 +0000133 if not self.server_ready.is_set():
Guido van Rossum83ccb4e2002-06-18 18:35:13 +0000134 self.server_ready.set()
135 self.client_ready.wait()
Guido van Rossum24e4af82002-06-12 19:18:08 +0000136
137 def _tearDown(self):
138 self.__tearDown()
139 self.done.wait()
140
141 if not self.queue.empty():
142 msg = self.queue.get()
143 self.fail(msg)
144
145 def clientRun(self, test_func):
Guido van Rossum83ccb4e2002-06-18 18:35:13 +0000146 self.server_ready.wait()
Guido van Rossum24e4af82002-06-12 19:18:08 +0000147 self.clientSetUp()
Charles-François Natali21565942011-09-21 22:02:27 +0200148 self.client_ready.set()
Ezio Melottib22c3fe2011-11-06 17:50:52 +0200149 if not callable(test_func):
150 raise TypeError("test_func must be a callable function.")
Guido van Rossum24e4af82002-06-12 19:18:08 +0000151 try:
152 test_func()
153 except Exception, strerror:
154 self.queue.put(strerror)
155 self.clientTearDown()
156
157 def clientSetUp(self):
Florent Xicluna07627882010-03-21 01:14:24 +0000158 raise NotImplementedError("clientSetUp must be implemented.")
Guido van Rossum24e4af82002-06-12 19:18:08 +0000159
160 def clientTearDown(self):
161 self.done.set()
162 thread.exit()
163
164class ThreadedTCPSocketTest(SocketTCPTest, ThreadableTest):
165
166 def __init__(self, methodName='runTest'):
167 SocketTCPTest.__init__(self, methodName=methodName)
168 ThreadableTest.__init__(self)
169
170 def clientSetUp(self):
171 self.cli = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
172
173 def clientTearDown(self):
174 self.cli.close()
175 self.cli = None
176 ThreadableTest.clientTearDown(self)
177
178class ThreadedUDPSocketTest(SocketUDPTest, ThreadableTest):
179
180 def __init__(self, methodName='runTest'):
181 SocketUDPTest.__init__(self, methodName=methodName)
182 ThreadableTest.__init__(self)
183
184 def clientSetUp(self):
185 self.cli = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
186
Brian Curtindd8564f2010-11-04 03:54:23 +0000187 def clientTearDown(self):
188 self.cli.close()
189 self.cli = None
190 ThreadableTest.clientTearDown(self)
191
Guido van Rossum24e4af82002-06-12 19:18:08 +0000192class SocketConnectedTest(ThreadedTCPSocketTest):
193
194 def __init__(self, methodName='runTest'):
195 ThreadedTCPSocketTest.__init__(self, methodName=methodName)
196
197 def setUp(self):
198 ThreadedTCPSocketTest.setUp(self)
Guido van Rossum83ccb4e2002-06-18 18:35:13 +0000199 # Indicate explicitly we're ready for the client thread to
200 # proceed and then perform the blocking call to accept
201 self.serverExplicitReady()
Guido van Rossum24e4af82002-06-12 19:18:08 +0000202 conn, addr = self.serv.accept()
203 self.cli_conn = conn
204
205 def tearDown(self):
206 self.cli_conn.close()
207 self.cli_conn = None
208 ThreadedTCPSocketTest.tearDown(self)
209
210 def clientSetUp(self):
211 ThreadedTCPSocketTest.clientSetUp(self)
Trent Nelsone41b0062008-04-08 23:47:30 +0000212 self.cli.connect((HOST, self.port))
Guido van Rossum24e4af82002-06-12 19:18:08 +0000213 self.serv_conn = self.cli
214
215 def clientTearDown(self):
216 self.serv_conn.close()
217 self.serv_conn = None
218 ThreadedTCPSocketTest.clientTearDown(self)
219
Dave Cole331708b2004-08-09 04:51:41 +0000220class SocketPairTest(unittest.TestCase, ThreadableTest):
221
222 def __init__(self, methodName='runTest'):
223 unittest.TestCase.__init__(self, methodName=methodName)
224 ThreadableTest.__init__(self)
225
226 def setUp(self):
227 self.serv, self.cli = socket.socketpair()
228
229 def tearDown(self):
230 self.serv.close()
231 self.serv = None
232
233 def clientSetUp(self):
234 pass
235
236 def clientTearDown(self):
237 self.cli.close()
238 self.cli = None
239 ThreadableTest.clientTearDown(self)
240
Tim Peters494aaee2004-08-09 18:54:11 +0000241
Guido van Rossum24e4af82002-06-12 19:18:08 +0000242#######################################################################
243## Begin Tests
244
245class GeneralModuleTests(unittest.TestCase):
246
Raymond Hettinger027bb632004-05-31 03:09:25 +0000247 def test_weakref(self):
248 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
249 p = proxy(s)
250 self.assertEqual(p.fileno(), s.fileno())
251 s.close()
252 s = None
253 try:
254 p.fileno()
255 except ReferenceError:
256 pass
257 else:
258 self.fail('Socket proxy still exists')
259
Guido van Rossum24e4af82002-06-12 19:18:08 +0000260 def testSocketError(self):
Guido van Rossum8c943832002-08-08 01:00:28 +0000261 # Testing socket module exceptions
Guido van Rossum24e4af82002-06-12 19:18:08 +0000262 def raise_error(*args, **kwargs):
263 raise socket.error
264 def raise_herror(*args, **kwargs):
265 raise socket.herror
266 def raise_gaierror(*args, **kwargs):
267 raise socket.gaierror
Benjamin Peterson5c8da862009-06-30 22:57:08 +0000268 self.assertRaises(socket.error, raise_error,
Guido van Rossum24e4af82002-06-12 19:18:08 +0000269 "Error raising socket exception.")
Benjamin Peterson5c8da862009-06-30 22:57:08 +0000270 self.assertRaises(socket.error, raise_herror,
Guido van Rossum24e4af82002-06-12 19:18:08 +0000271 "Error raising socket exception.")
Benjamin Peterson5c8da862009-06-30 22:57:08 +0000272 self.assertRaises(socket.error, raise_gaierror,
Guido van Rossum24e4af82002-06-12 19:18:08 +0000273 "Error raising socket exception.")
274
Ezio Melotti0639be62011-05-07 19:21:22 +0300275 def testSendtoErrors(self):
276 # Testing that sendto doens't masks failures. See #10169.
277 s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
278 self.addCleanup(s.close)
279 s.bind(('', 0))
280 sockname = s.getsockname()
281 # 2 args
282 with self.assertRaises(UnicodeEncodeError):
283 s.sendto(u'\u2620', sockname)
284 with self.assertRaises(TypeError) as cm:
285 s.sendto(5j, sockname)
286 self.assertIn('not complex', str(cm.exception))
287 with self.assertRaises(TypeError) as cm:
288 s.sendto('foo', None)
289 self.assertIn('not NoneType', str(cm.exception))
290 # 3 args
291 with self.assertRaises(UnicodeEncodeError):
292 s.sendto(u'\u2620', 0, sockname)
293 with self.assertRaises(TypeError) as cm:
294 s.sendto(5j, 0, sockname)
295 self.assertIn('not complex', str(cm.exception))
296 with self.assertRaises(TypeError) as cm:
297 s.sendto('foo', 0, None)
298 self.assertIn('not NoneType', str(cm.exception))
299 with self.assertRaises(TypeError) as cm:
300 s.sendto('foo', 'bar', sockname)
301 self.assertIn('an integer is required', str(cm.exception))
302 with self.assertRaises(TypeError) as cm:
303 s.sendto('foo', None, None)
304 self.assertIn('an integer is required', str(cm.exception))
305 # wrong number of args
306 with self.assertRaises(TypeError) as cm:
307 s.sendto('foo')
308 self.assertIn('(1 given)', str(cm.exception))
309 with self.assertRaises(TypeError) as cm:
310 s.sendto('foo', 0, sockname, 4)
311 self.assertIn('(4 given)', str(cm.exception))
312
313
Guido van Rossum24e4af82002-06-12 19:18:08 +0000314 def testCrucialConstants(self):
Guido van Rossum8c943832002-08-08 01:00:28 +0000315 # Testing for mission critical constants
Guido van Rossum24e4af82002-06-12 19:18:08 +0000316 socket.AF_INET
317 socket.SOCK_STREAM
318 socket.SOCK_DGRAM
319 socket.SOCK_RAW
320 socket.SOCK_RDM
321 socket.SOCK_SEQPACKET
322 socket.SOL_SOCKET
323 socket.SO_REUSEADDR
324
Guido van Rossum654c11e2002-06-13 20:24:17 +0000325 def testHostnameRes(self):
Guido van Rossum8c943832002-08-08 01:00:28 +0000326 # Testing hostname resolution mechanisms
Guido van Rossum654c11e2002-06-13 20:24:17 +0000327 hostname = socket.gethostname()
Guido van Rossum71e02942002-12-26 16:55:15 +0000328 try:
329 ip = socket.gethostbyname(hostname)
330 except socket.error:
331 # Probably name lookup wasn't set up right; skip this test
Zachary Ware1f702212013-12-10 14:09:20 -0600332 self.skipTest('name lookup failure')
Benjamin Peterson5c8da862009-06-30 22:57:08 +0000333 self.assertTrue(ip.find('.') >= 0, "Error resolving host to ip.")
Guido van Rossum9647b522002-12-26 17:04:45 +0000334 try:
335 hname, aliases, ipaddrs = socket.gethostbyaddr(ip)
336 except socket.error:
337 # Probably a similar problem as above; skip this test
Zachary Ware1f702212013-12-10 14:09:20 -0600338 self.skipTest('address lookup failure')
Brett Cannon01668a12005-03-11 00:04:17 +0000339 all_host_names = [hostname, hname] + aliases
Anthony Baxtercf0a2a82006-04-03 08:10:33 +0000340 fqhn = socket.getfqdn(ip)
Guido van Rossum654c11e2002-06-13 20:24:17 +0000341 if not fqhn in all_host_names:
Martin v. Löwis04855cc2006-03-26 16:40:47 +0000342 self.fail("Error testing host resolution mechanisms. (fqdn: %s, all: %s)" % (fqhn, repr(all_host_names)))
Barry Warsawcf3d4b51997-01-03 20:03:32 +0000343
Serhiy Storchaka32e23e72013-11-03 23:15:46 +0200344 @unittest.skipUnless(hasattr(sys, 'getrefcount'),
345 'test needs sys.getrefcount()')
Guido van Rossum284a2cf2002-06-12 21:19:40 +0000346 def testRefCountGetNameInfo(self):
Guido van Rossum8c943832002-08-08 01:00:28 +0000347 # Testing reference count for getnameinfo
Serhiy Storchaka32e23e72013-11-03 23:15:46 +0200348 try:
349 # On some versions, this loses a reference
350 orig = sys.getrefcount(__name__)
351 socket.getnameinfo(__name__,0)
352 except TypeError:
353 self.assertEqual(sys.getrefcount(__name__), orig,
354 "socket.getnameinfo loses a reference")
Barry Warsawcf3d4b51997-01-03 20:03:32 +0000355
Guido van Rossum24e4af82002-06-12 19:18:08 +0000356 def testInterpreterCrash(self):
Guido van Rossum8c943832002-08-08 01:00:28 +0000357 # Making sure getnameinfo doesn't crash the interpreter
Guido van Rossum24e4af82002-06-12 19:18:08 +0000358 try:
359 # On some versions, this crashes the interpreter.
360 socket.getnameinfo(('x', 0, 0, 0), 0)
361 except socket.error:
362 pass
Barry Warsawcf3d4b51997-01-03 20:03:32 +0000363
Guido van Rossumc0a0e082002-09-16 01:30:03 +0000364 def testNtoH(self):
Guido van Rossuma2627af2002-09-14 00:58:46 +0000365 # This just checks that htons etc. are their own inverse,
366 # when looking at the lower 16 or 32 bits.
367 sizes = {socket.htonl: 32, socket.ntohl: 32,
368 socket.htons: 16, socket.ntohs: 16}
369 for func, size in sizes.items():
370 mask = (1L<<size) - 1
371 for i in (0, 1, 0xffff, ~0xffff, 2, 0x01234567, 0x76543210):
372 self.assertEqual(i & mask, func(func(i&mask)) & mask)
Jeremy Hyltoncbd5b892002-07-31 15:57:39 +0000373
Guido van Rossuma2627af2002-09-14 00:58:46 +0000374 swapped = func(mask)
375 self.assertEqual(swapped & mask, mask)
376 self.assertRaises(OverflowError, func, 1L<<34)
Jeremy Hyltonc075e192002-07-25 16:01:12 +0000377
Guido van Rossumbb2cc692007-01-14 17:03:32 +0000378 def testNtoHErrors(self):
379 good_values = [ 1, 2, 3, 1L, 2L, 3L ]
380 bad_values = [ -1, -2, -3, -1L, -2L, -3L ]
381 for k in good_values:
382 socket.ntohl(k)
383 socket.ntohs(k)
384 socket.htonl(k)
385 socket.htons(k)
386 for k in bad_values:
387 self.assertRaises(OverflowError, socket.ntohl, k)
388 self.assertRaises(OverflowError, socket.ntohs, k)
389 self.assertRaises(OverflowError, socket.htonl, k)
390 self.assertRaises(OverflowError, socket.htons, k)
391
Barry Warsaw11b91a02004-06-28 00:50:43 +0000392 def testGetServBy(self):
393 eq = self.assertEqual
394 # Find one service that exists, then check all the related interfaces.
395 # I've ordered this by protocols that have both a tcp and udp
396 # protocol, at least for modern Linuxes.
Gregory P. Smith886a1cd2010-10-17 04:28:14 +0000397 if (sys.platform.startswith('linux') or
398 sys.platform.startswith('freebsd') or
399 sys.platform.startswith('netbsd') or
400 sys.platform == 'darwin'):
Andrew MacIntyre18bf43c2004-07-12 12:10:30 +0000401 # avoid the 'echo' service on this platform, as there is an
402 # assumption breaking non-standard port/protocol entry
403 services = ('daytime', 'qotd', 'domain')
404 else:
405 services = ('echo', 'daytime', 'domain')
406 for service in services:
Skip Montanarof4433302002-08-02 15:52:30 +0000407 try:
Barry Warsaw11b91a02004-06-28 00:50:43 +0000408 port = socket.getservbyname(service, 'tcp')
Skip Montanarof4433302002-08-02 15:52:30 +0000409 break
410 except socket.error:
411 pass
Skip Montanaro05eb4012004-02-10 15:51:15 +0000412 else:
413 raise socket.error
Barry Warsaw11b91a02004-06-28 00:50:43 +0000414 # Try same call with optional protocol omitted
415 port2 = socket.getservbyname(service)
416 eq(port, port2)
Terry Jan Reedya70f60a2013-03-11 17:56:17 -0400417 # Try udp, but don't barf if it doesn't exist
Barry Warsaw11b91a02004-06-28 00:50:43 +0000418 try:
419 udpport = socket.getservbyname(service, 'udp')
420 except socket.error:
421 udpport = None
422 else:
423 eq(udpport, port)
424 # Now make sure the lookup by port returns the same service name
425 eq(socket.getservbyport(port2), service)
426 eq(socket.getservbyport(port, 'tcp'), service)
427 if udpport is not None:
428 eq(socket.getservbyport(udpport, 'udp'), service)
Gregory P. Smithde1a8b72009-01-31 22:57:30 +0000429 # Make sure getservbyport does not accept out of range ports.
430 self.assertRaises(OverflowError, socket.getservbyport, -1)
431 self.assertRaises(OverflowError, socket.getservbyport, 65536)
Guido van Rossum24e4af82002-06-12 19:18:08 +0000432
Guido van Rossum9d0c8ce2002-07-18 17:08:35 +0000433 def testDefaultTimeout(self):
Guido van Rossum8c943832002-08-08 01:00:28 +0000434 # Testing default timeout
Guido van Rossum9d0c8ce2002-07-18 17:08:35 +0000435 # The default timeout should initially be None
436 self.assertEqual(socket.getdefaulttimeout(), None)
437 s = socket.socket()
438 self.assertEqual(s.gettimeout(), None)
439 s.close()
440
441 # Set the default timeout to 10, and see if it propagates
442 socket.setdefaulttimeout(10)
443 self.assertEqual(socket.getdefaulttimeout(), 10)
444 s = socket.socket()
445 self.assertEqual(s.gettimeout(), 10)
446 s.close()
447
448 # Reset the default timeout to None, and see if it propagates
449 socket.setdefaulttimeout(None)
450 self.assertEqual(socket.getdefaulttimeout(), None)
451 s = socket.socket()
452 self.assertEqual(s.gettimeout(), None)
453 s.close()
454
455 # Check that setting it to an invalid value raises ValueError
456 self.assertRaises(ValueError, socket.setdefaulttimeout, -1)
457
458 # Check that setting it to an invalid type raises TypeError
459 self.assertRaises(TypeError, socket.setdefaulttimeout, "spam")
460
Serhiy Storchaka32e23e72013-11-03 23:15:46 +0200461 @unittest.skipUnless(hasattr(socket, 'inet_aton'),
462 'test needs socket.inet_aton()')
Gregory P. Smith3605b5c2009-02-11 23:45:25 +0000463 def testIPv4_inet_aton_fourbytes(self):
Gregory P. Smith3605b5c2009-02-11 23:45:25 +0000464 # Test that issue1008086 and issue767150 are fixed.
465 # It must return 4 bytes.
Ezio Melotti2623a372010-11-21 13:34:58 +0000466 self.assertEqual('\x00'*4, socket.inet_aton('0.0.0.0'))
467 self.assertEqual('\xff'*4, socket.inet_aton('255.255.255.255'))
Gregory P. Smith3605b5c2009-02-11 23:45:25 +0000468
Serhiy Storchaka32e23e72013-11-03 23:15:46 +0200469 @unittest.skipUnless(hasattr(socket, 'inet_pton'),
470 'test needs socket.inet_pton()')
Guido van Rossum47dfa4a2003-04-25 05:48:32 +0000471 def testIPv4toString(self):
472 from socket import inet_aton as f, inet_pton, AF_INET
473 g = lambda a: inet_pton(AF_INET, a)
474
Ezio Melotti2623a372010-11-21 13:34:58 +0000475 self.assertEqual('\x00\x00\x00\x00', f('0.0.0.0'))
476 self.assertEqual('\xff\x00\xff\x00', f('255.0.255.0'))
477 self.assertEqual('\xaa\xaa\xaa\xaa', f('170.170.170.170'))
478 self.assertEqual('\x01\x02\x03\x04', f('1.2.3.4'))
479 self.assertEqual('\xff\xff\xff\xff', f('255.255.255.255'))
Guido van Rossum47dfa4a2003-04-25 05:48:32 +0000480
Ezio Melotti2623a372010-11-21 13:34:58 +0000481 self.assertEqual('\x00\x00\x00\x00', g('0.0.0.0'))
482 self.assertEqual('\xff\x00\xff\x00', g('255.0.255.0'))
483 self.assertEqual('\xaa\xaa\xaa\xaa', g('170.170.170.170'))
484 self.assertEqual('\xff\xff\xff\xff', g('255.255.255.255'))
Tim Petersc2659cf2003-05-12 20:19:37 +0000485
Serhiy Storchaka32e23e72013-11-03 23:15:46 +0200486 @unittest.skipUnless(hasattr(socket, 'inet_pton'),
487 'test needs socket.inet_pton()')
Guido van Rossum47dfa4a2003-04-25 05:48:32 +0000488 def testIPv6toString(self):
489 try:
490 from socket import inet_pton, AF_INET6, has_ipv6
491 if not has_ipv6:
Zachary Ware1f702212013-12-10 14:09:20 -0600492 self.skipTest('IPv6 not available')
Guido van Rossum47dfa4a2003-04-25 05:48:32 +0000493 except ImportError:
Zachary Ware1f702212013-12-10 14:09:20 -0600494 self.skipTest('could not import needed symbols from socket')
Guido van Rossum47dfa4a2003-04-25 05:48:32 +0000495 f = lambda a: inet_pton(AF_INET6, a)
496
Ezio Melotti2623a372010-11-21 13:34:58 +0000497 self.assertEqual('\x00' * 16, f('::'))
498 self.assertEqual('\x00' * 16, f('0::0'))
499 self.assertEqual('\x00\x01' + '\x00' * 14, f('1::'))
500 self.assertEqual(
Guido van Rossum47dfa4a2003-04-25 05:48:32 +0000501 '\x45\xef\x76\xcb\x00\x1a\x56\xef\xaf\xeb\x0b\xac\x19\x24\xae\xae',
502 f('45ef:76cb:1a:56ef:afeb:bac:1924:aeae')
503 )
Tim Petersc2659cf2003-05-12 20:19:37 +0000504
Serhiy Storchaka32e23e72013-11-03 23:15:46 +0200505 @unittest.skipUnless(hasattr(socket, 'inet_ntop'),
506 'test needs socket.inet_ntop()')
Guido van Rossum47dfa4a2003-04-25 05:48:32 +0000507 def testStringToIPv4(self):
508 from socket import inet_ntoa as f, inet_ntop, AF_INET
509 g = lambda a: inet_ntop(AF_INET, a)
510
Ezio Melotti2623a372010-11-21 13:34:58 +0000511 self.assertEqual('1.0.1.0', f('\x01\x00\x01\x00'))
512 self.assertEqual('170.85.170.85', f('\xaa\x55\xaa\x55'))
513 self.assertEqual('255.255.255.255', f('\xff\xff\xff\xff'))
514 self.assertEqual('1.2.3.4', f('\x01\x02\x03\x04'))
Tim Petersc2659cf2003-05-12 20:19:37 +0000515
Ezio Melotti2623a372010-11-21 13:34:58 +0000516 self.assertEqual('1.0.1.0', g('\x01\x00\x01\x00'))
517 self.assertEqual('170.85.170.85', g('\xaa\x55\xaa\x55'))
518 self.assertEqual('255.255.255.255', g('\xff\xff\xff\xff'))
Guido van Rossum47dfa4a2003-04-25 05:48:32 +0000519
Serhiy Storchaka32e23e72013-11-03 23:15:46 +0200520 @unittest.skipUnless(hasattr(socket, 'inet_ntop'),
521 'test needs socket.inet_ntop()')
Guido van Rossum47dfa4a2003-04-25 05:48:32 +0000522 def testStringToIPv6(self):
523 try:
524 from socket import inet_ntop, AF_INET6, has_ipv6
525 if not has_ipv6:
Zachary Ware1f702212013-12-10 14:09:20 -0600526 self.skipTest('IPv6 not available')
Guido van Rossum47dfa4a2003-04-25 05:48:32 +0000527 except ImportError:
Zachary Ware1f702212013-12-10 14:09:20 -0600528 self.skipTest('could not import needed symbols from socket')
Guido van Rossum47dfa4a2003-04-25 05:48:32 +0000529 f = lambda a: inet_ntop(AF_INET6, a)
530
Ezio Melotti2623a372010-11-21 13:34:58 +0000531 self.assertEqual('::', f('\x00' * 16))
532 self.assertEqual('::1', f('\x00' * 15 + '\x01'))
533 self.assertEqual(
Guido van Rossum47dfa4a2003-04-25 05:48:32 +0000534 'aef:b01:506:1001:ffff:9997:55:170',
535 f('\x0a\xef\x0b\x01\x05\x06\x10\x01\xff\xff\x99\x97\x00\x55\x01\x70')
536 )
537
Guido van Rossumb6cc7d22002-07-19 12:46:46 +0000538 # XXX The following don't test module-level functionality...
Guido van Rossum9d0c8ce2002-07-18 17:08:35 +0000539
Gregory P. Smithde1a8b72009-01-31 22:57:30 +0000540 def _get_unused_port(self, bind_address='0.0.0.0'):
541 """Use a temporary socket to elicit an unused ephemeral port.
Trent Nelsone41b0062008-04-08 23:47:30 +0000542
Gregory P. Smithde1a8b72009-01-31 22:57:30 +0000543 Args:
544 bind_address: Hostname or IP address to search for a port on.
545
546 Returns: A most likely to be unused port.
547 """
548 tempsock = socket.socket()
549 tempsock.bind((bind_address, 0))
550 host, port = tempsock.getsockname()
551 tempsock.close()
552 return port
553
554 def testSockName(self):
555 # Testing getsockname()
556 port = self._get_unused_port()
Guido van Rossum24e4af82002-06-12 19:18:08 +0000557 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
Brian Curtin62c20b62010-11-02 02:59:55 +0000558 self.addCleanup(sock.close)
Trent Nelsone41b0062008-04-08 23:47:30 +0000559 sock.bind(("0.0.0.0", port))
Guido van Rossum24e4af82002-06-12 19:18:08 +0000560 name = sock.getsockname()
Neal Norwitz4a9ff162006-06-11 21:38:38 +0000561 # XXX(nnorwitz): http://tinyurl.com/os5jz seems to indicate
562 # it reasonable to get the host's addr in addition to 0.0.0.0.
563 # At least for eCos. This is required for the S/390 to pass.
Georg Brandlb7276502010-11-26 08:28:05 +0000564 try:
565 my_ip_addr = socket.gethostbyname(socket.gethostname())
566 except socket.error:
567 # Probably name lookup wasn't set up right; skip this test
Zachary Ware1f702212013-12-10 14:09:20 -0600568 self.skipTest('name lookup failure')
Ezio Melottiaa980582010-01-23 23:04:36 +0000569 self.assertIn(name[0], ("0.0.0.0", my_ip_addr), '%s invalid' % name[0])
Trent Nelsone41b0062008-04-08 23:47:30 +0000570 self.assertEqual(name[1], port)
Guido van Rossum24e4af82002-06-12 19:18:08 +0000571
572 def testGetSockOpt(self):
Guido van Rossum8c943832002-08-08 01:00:28 +0000573 # Testing getsockopt()
Guido van Rossum24e4af82002-06-12 19:18:08 +0000574 # We know a socket should start without reuse==0
575 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
Brian Curtin62c20b62010-11-02 02:59:55 +0000576 self.addCleanup(sock.close)
Guido van Rossum24e4af82002-06-12 19:18:08 +0000577 reuse = sock.getsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR)
Benjamin Peterson5c8da862009-06-30 22:57:08 +0000578 self.assertFalse(reuse != 0, "initial mode is reuse")
Guido van Rossum24e4af82002-06-12 19:18:08 +0000579
580 def testSetSockOpt(self):
Guido van Rossum8c943832002-08-08 01:00:28 +0000581 # Testing setsockopt()
Guido van Rossum24e4af82002-06-12 19:18:08 +0000582 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
Brian Curtin62c20b62010-11-02 02:59:55 +0000583 self.addCleanup(sock.close)
Guido van Rossum24e4af82002-06-12 19:18:08 +0000584 sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
585 reuse = sock.getsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR)
Benjamin Peterson5c8da862009-06-30 22:57:08 +0000586 self.assertFalse(reuse == 0, "failed to set reuse mode")
Guido van Rossum24e4af82002-06-12 19:18:08 +0000587
Guido van Rossumb6cc7d22002-07-19 12:46:46 +0000588 def testSendAfterClose(self):
Guido van Rossum8c943832002-08-08 01:00:28 +0000589 # testing send() after close() with timeout
Guido van Rossumb6cc7d22002-07-19 12:46:46 +0000590 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
591 sock.settimeout(1)
592 sock.close()
593 self.assertRaises(socket.error, sock.send, "spam")
594
Georg Brandlbb03ac02006-03-21 18:17:25 +0000595 def testNewAttributes(self):
596 # testing .family, .type and .protocol
Georg Brandlbc45a3f2006-03-17 19:17:34 +0000597 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
Georg Brandlbb03ac02006-03-21 18:17:25 +0000598 self.assertEqual(sock.family, socket.AF_INET)
599 self.assertEqual(sock.type, socket.SOCK_STREAM)
600 self.assertEqual(sock.proto, 0)
Georg Brandlbc45a3f2006-03-17 19:17:34 +0000601 sock.close()
602
Gregory P. Smithde1a8b72009-01-31 22:57:30 +0000603 def test_getsockaddrarg(self):
604 host = '0.0.0.0'
605 port = self._get_unused_port(bind_address=host)
606 big_port = port + 65536
607 neg_port = port - 65536
608 sock = socket.socket()
609 try:
610 self.assertRaises(OverflowError, sock.bind, (host, big_port))
611 self.assertRaises(OverflowError, sock.bind, (host, neg_port))
612 sock.bind((host, port))
613 finally:
614 sock.close()
615
Brian Curtin91a5b812010-11-05 15:52:20 +0000616 @unittest.skipUnless(os.name == "nt", "Windows specific")
Christian Heimesa47b75b2008-01-04 15:48:06 +0000617 def test_sock_ioctl(self):
Benjamin Peterson5c8da862009-06-30 22:57:08 +0000618 self.assertTrue(hasattr(socket.socket, 'ioctl'))
619 self.assertTrue(hasattr(socket, 'SIO_RCVALL'))
620 self.assertTrue(hasattr(socket, 'RCVALL_ON'))
621 self.assertTrue(hasattr(socket, 'RCVALL_OFF'))
Kristján Valur Jónsson2fcd03b2009-09-25 15:19:51 +0000622 self.assertTrue(hasattr(socket, 'SIO_KEEPALIVE_VALS'))
623 s = socket.socket()
Brian Curtin91a5b812010-11-05 15:52:20 +0000624 self.addCleanup(s.close)
Kristján Valur Jónsson2fcd03b2009-09-25 15:19:51 +0000625 self.assertRaises(ValueError, s.ioctl, -1, None)
626 s.ioctl(socket.SIO_KEEPALIVE_VALS, (1, 100, 100))
Christian Heimesa47b75b2008-01-04 15:48:06 +0000627
Giampaolo Rodolà633e4742010-08-14 17:04:46 +0000628 def testGetaddrinfo(self):
629 try:
630 socket.getaddrinfo('localhost', 80)
631 except socket.gaierror as err:
632 if err.errno == socket.EAI_SERVICE:
633 # see http://bugs.python.org/issue1282647
634 self.skipTest("buggy libc version")
635 raise
636 # len of every sequence is supposed to be == 5
637 for info in socket.getaddrinfo(HOST, None):
638 self.assertEqual(len(info), 5)
639 # host can be a domain name, a string representation of an
640 # IPv4/v6 address or None
641 socket.getaddrinfo('localhost', 80)
642 socket.getaddrinfo('127.0.0.1', 80)
643 socket.getaddrinfo(None, 80)
644 if SUPPORTS_IPV6:
645 socket.getaddrinfo('::1', 80)
646 # port can be a string service name such as "http", a numeric
Petri Lehtinenab7dd182012-12-20 21:06:14 +0200647 # port number (int or long), or None
Giampaolo Rodolà633e4742010-08-14 17:04:46 +0000648 socket.getaddrinfo(HOST, "http")
649 socket.getaddrinfo(HOST, 80)
Petri Lehtinenab7dd182012-12-20 21:06:14 +0200650 socket.getaddrinfo(HOST, 80L)
Giampaolo Rodolà633e4742010-08-14 17:04:46 +0000651 socket.getaddrinfo(HOST, None)
652 # test family and socktype filters
653 infos = socket.getaddrinfo(HOST, None, socket.AF_INET)
654 for family, _, _, _, _ in infos:
655 self.assertEqual(family, socket.AF_INET)
656 infos = socket.getaddrinfo(HOST, None, 0, socket.SOCK_STREAM)
657 for _, socktype, _, _, _ in infos:
658 self.assertEqual(socktype, socket.SOCK_STREAM)
659 # test proto and flags arguments
Giampaolo Rodolà8a9b2222010-08-16 05:10:30 +0000660 socket.getaddrinfo(HOST, None, 0, 0, socket.SOL_TCP)
Giampaolo Rodolà633e4742010-08-14 17:04:46 +0000661 socket.getaddrinfo(HOST, None, 0, 0, 0, socket.AI_PASSIVE)
662 # a server willing to support both IPv4 and IPv6 will
663 # usually do this
664 socket.getaddrinfo(None, 0, socket.AF_UNSPEC, socket.SOCK_STREAM, 0,
665 socket.AI_PASSIVE)
666
Ronald Oussoren16c52a32013-05-24 13:45:27 +0200667 # Issue 17269
Ronald Oussoren0e6283e2013-06-10 10:35:36 +0200668 if hasattr(socket, 'AI_NUMERICSERV'):
669 socket.getaddrinfo("localhost", None, 0, 0, 0, socket.AI_NUMERICSERV)
Christian Heimesa47b75b2008-01-04 15:48:06 +0000670
Antoine Pitrou66b5df62010-09-27 18:16:46 +0000671 def check_sendall_interrupted(self, with_timeout):
672 # socketpair() is not stricly required, but it makes things easier.
673 if not hasattr(signal, 'alarm') or not hasattr(socket, 'socketpair'):
674 self.skipTest("signal.alarm and socket.socketpair required for this test")
675 # Our signal handlers clobber the C errno by calling a math function
676 # with an invalid domain value.
677 def ok_handler(*args):
678 self.assertRaises(ValueError, math.acosh, 0)
679 def raising_handler(*args):
680 self.assertRaises(ValueError, math.acosh, 0)
681 1 // 0
682 c, s = socket.socketpair()
683 old_alarm = signal.signal(signal.SIGALRM, raising_handler)
684 try:
685 if with_timeout:
686 # Just above the one second minimum for signal.alarm
687 c.settimeout(1.5)
688 with self.assertRaises(ZeroDivisionError):
689 signal.alarm(1)
Charles-François Natali5aac8b72013-08-29 19:00:30 +0200690 c.sendall(b"x" * test_support.SOCK_MAX_SIZE)
Antoine Pitrou66b5df62010-09-27 18:16:46 +0000691 if with_timeout:
692 signal.signal(signal.SIGALRM, ok_handler)
693 signal.alarm(1)
Charles-François Natali5aac8b72013-08-29 19:00:30 +0200694 self.assertRaises(socket.timeout, c.sendall,
695 b"x" * test_support.SOCK_MAX_SIZE)
Antoine Pitrou66b5df62010-09-27 18:16:46 +0000696 finally:
697 signal.signal(signal.SIGALRM, old_alarm)
698 c.close()
699 s.close()
700
701 def test_sendall_interrupted(self):
702 self.check_sendall_interrupted(False)
703
704 def test_sendall_interrupted_with_timeout(self):
705 self.check_sendall_interrupted(True)
706
Serhiy Storchaka74f49ab2013-01-19 12:55:39 +0200707 def test_listen_backlog(self):
708 for backlog in 0, -1:
709 srv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
710 srv.bind((HOST, 0))
711 srv.listen(backlog)
712 srv.close()
713
714 # Issue 15989
Antoine Pitrou47d1d0d2011-05-10 19:16:03 +0200715 srv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
716 srv.bind((HOST, 0))
Serhiy Storchaka74f49ab2013-01-19 12:55:39 +0200717 self.assertRaises(OverflowError, srv.listen, _testcapi.INT_MAX + 1)
Antoine Pitrou47d1d0d2011-05-10 19:16:03 +0200718 srv.close()
719
Charles-François Natali3aa59e32012-01-02 15:38:27 +0100720 @unittest.skipUnless(SUPPORTS_IPV6, 'IPv6 required for this test.')
721 def test_flowinfo(self):
722 self.assertRaises(OverflowError, socket.getnameinfo,
723 ('::1',0, 0xffffffff), 0)
724 s = socket.socket(socket.AF_INET6, socket.SOCK_STREAM)
725 try:
726 self.assertRaises(OverflowError, s.bind, ('::1', 0, -10))
727 finally:
728 s.close()
729
Antoine Pitrou66b5df62010-09-27 18:16:46 +0000730
Victor Stinner6a102812010-04-27 23:55:59 +0000731@unittest.skipUnless(thread, 'Threading required for this test.')
Guido van Rossum24e4af82002-06-12 19:18:08 +0000732class BasicTCPTest(SocketConnectedTest):
733
734 def __init__(self, methodName='runTest'):
735 SocketConnectedTest.__init__(self, methodName=methodName)
736
737 def testRecv(self):
Guido van Rossum8c943832002-08-08 01:00:28 +0000738 # Testing large receive over TCP
Guido van Rossum24e4af82002-06-12 19:18:08 +0000739 msg = self.cli_conn.recv(1024)
Guido van Rossum76489682002-06-12 20:38:30 +0000740 self.assertEqual(msg, MSG)
Guido van Rossum24e4af82002-06-12 19:18:08 +0000741
742 def _testRecv(self):
743 self.serv_conn.send(MSG)
744
745 def testOverFlowRecv(self):
Guido van Rossum8c943832002-08-08 01:00:28 +0000746 # Testing receive in chunks over TCP
Guido van Rossum24e4af82002-06-12 19:18:08 +0000747 seg1 = self.cli_conn.recv(len(MSG) - 3)
748 seg2 = self.cli_conn.recv(1024)
Guido van Rossumab659962002-06-12 21:29:43 +0000749 msg = seg1 + seg2
Guido van Rossum76489682002-06-12 20:38:30 +0000750 self.assertEqual(msg, MSG)
Guido van Rossum24e4af82002-06-12 19:18:08 +0000751
752 def _testOverFlowRecv(self):
753 self.serv_conn.send(MSG)
754
755 def testRecvFrom(self):
Guido van Rossum8c943832002-08-08 01:00:28 +0000756 # Testing large recvfrom() over TCP
Guido van Rossum24e4af82002-06-12 19:18:08 +0000757 msg, addr = self.cli_conn.recvfrom(1024)
Guido van Rossum76489682002-06-12 20:38:30 +0000758 self.assertEqual(msg, MSG)
Guido van Rossum24e4af82002-06-12 19:18:08 +0000759
760 def _testRecvFrom(self):
761 self.serv_conn.send(MSG)
762
763 def testOverFlowRecvFrom(self):
Guido van Rossum8c943832002-08-08 01:00:28 +0000764 # Testing recvfrom() in chunks over TCP
Guido van Rossum24e4af82002-06-12 19:18:08 +0000765 seg1, addr = self.cli_conn.recvfrom(len(MSG)-3)
766 seg2, addr = self.cli_conn.recvfrom(1024)
Guido van Rossumab659962002-06-12 21:29:43 +0000767 msg = seg1 + seg2
Guido van Rossum76489682002-06-12 20:38:30 +0000768 self.assertEqual(msg, MSG)
Guido van Rossum24e4af82002-06-12 19:18:08 +0000769
770 def _testOverFlowRecvFrom(self):
771 self.serv_conn.send(MSG)
772
773 def testSendAll(self):
Guido van Rossum8c943832002-08-08 01:00:28 +0000774 # Testing sendall() with a 2048 byte string over TCP
Guido van Rossume531e292002-08-08 20:28:34 +0000775 msg = ''
Guido van Rossum24e4af82002-06-12 19:18:08 +0000776 while 1:
777 read = self.cli_conn.recv(1024)
778 if not read:
779 break
Guido van Rossume531e292002-08-08 20:28:34 +0000780 msg += read
781 self.assertEqual(msg, 'f' * 2048)
Guido van Rossum24e4af82002-06-12 19:18:08 +0000782
783 def _testSendAll(self):
Guido van Rossumab659962002-06-12 21:29:43 +0000784 big_chunk = 'f' * 2048
Guido van Rossum24e4af82002-06-12 19:18:08 +0000785 self.serv_conn.sendall(big_chunk)
786
Zachary Ware1f702212013-12-10 14:09:20 -0600787 @unittest.skipUnless(hasattr(socket, 'fromfd'),
788 'socket.fromfd not availble')
Guido van Rossum24e4af82002-06-12 19:18:08 +0000789 def testFromFd(self):
Guido van Rossum8c943832002-08-08 01:00:28 +0000790 # Testing fromfd()
Guido van Rossum24e4af82002-06-12 19:18:08 +0000791 fd = self.cli_conn.fileno()
792 sock = socket.fromfd(fd, socket.AF_INET, socket.SOCK_STREAM)
Brian Curtin62c20b62010-11-02 02:59:55 +0000793 self.addCleanup(sock.close)
Guido van Rossum24e4af82002-06-12 19:18:08 +0000794 msg = sock.recv(1024)
Guido van Rossum76489682002-06-12 20:38:30 +0000795 self.assertEqual(msg, MSG)
Guido van Rossum24e4af82002-06-12 19:18:08 +0000796
797 def _testFromFd(self):
798 self.serv_conn.send(MSG)
799
Brian Curtin62c20b62010-11-02 02:59:55 +0000800 def testDup(self):
801 # Testing dup()
802 sock = self.cli_conn.dup()
803 self.addCleanup(sock.close)
804 msg = sock.recv(1024)
805 self.assertEqual(msg, MSG)
806
807 def _testDup(self):
808 self.serv_conn.send(MSG)
809
Guido van Rossum24e4af82002-06-12 19:18:08 +0000810 def testShutdown(self):
Guido van Rossum8c943832002-08-08 01:00:28 +0000811 # Testing shutdown()
Guido van Rossum24e4af82002-06-12 19:18:08 +0000812 msg = self.cli_conn.recv(1024)
Guido van Rossum76489682002-06-12 20:38:30 +0000813 self.assertEqual(msg, MSG)
Mark Dickinsone82cdae2009-01-15 14:54:37 +0000814 # wait for _testShutdown to finish: on OS X, when the server
815 # closes the connection the client also becomes disconnected,
Mark Dickinson0e151822009-01-15 14:58:28 +0000816 # and the client's shutdown call will fail. (Issue #4397.)
Mark Dickinsone82cdae2009-01-15 14:54:37 +0000817 self.done.wait()
Guido van Rossum24e4af82002-06-12 19:18:08 +0000818
819 def _testShutdown(self):
820 self.serv_conn.send(MSG)
Serhiy Storchaka74f49ab2013-01-19 12:55:39 +0200821 # Issue 15989
822 self.assertRaises(OverflowError, self.serv_conn.shutdown,
823 _testcapi.INT_MAX + 1)
824 self.assertRaises(OverflowError, self.serv_conn.shutdown,
825 2 + (_testcapi.UINT_MAX + 1))
Guido van Rossum24e4af82002-06-12 19:18:08 +0000826 self.serv_conn.shutdown(2)
827
Victor Stinner6a102812010-04-27 23:55:59 +0000828@unittest.skipUnless(thread, 'Threading required for this test.')
Guido van Rossum24e4af82002-06-12 19:18:08 +0000829class BasicUDPTest(ThreadedUDPSocketTest):
830
831 def __init__(self, methodName='runTest'):
832 ThreadedUDPSocketTest.__init__(self, methodName=methodName)
833
834 def testSendtoAndRecv(self):
Guido van Rossum8c943832002-08-08 01:00:28 +0000835 # Testing sendto() and Recv() over UDP
Guido van Rossum24e4af82002-06-12 19:18:08 +0000836 msg = self.serv.recv(len(MSG))
Guido van Rossum76489682002-06-12 20:38:30 +0000837 self.assertEqual(msg, MSG)
Guido van Rossum24e4af82002-06-12 19:18:08 +0000838
839 def _testSendtoAndRecv(self):
Trent Nelsone41b0062008-04-08 23:47:30 +0000840 self.cli.sendto(MSG, 0, (HOST, self.port))
Guido van Rossum24e4af82002-06-12 19:18:08 +0000841
Guido van Rossum1c938012002-06-12 21:17:20 +0000842 def testRecvFrom(self):
Guido van Rossum8c943832002-08-08 01:00:28 +0000843 # Testing recvfrom() over UDP
Guido van Rossum24e4af82002-06-12 19:18:08 +0000844 msg, addr = self.serv.recvfrom(len(MSG))
Guido van Rossum76489682002-06-12 20:38:30 +0000845 self.assertEqual(msg, MSG)
Guido van Rossum24e4af82002-06-12 19:18:08 +0000846
Guido van Rossum1c938012002-06-12 21:17:20 +0000847 def _testRecvFrom(self):
Trent Nelsone41b0062008-04-08 23:47:30 +0000848 self.cli.sendto(MSG, 0, (HOST, self.port))
Guido van Rossum24e4af82002-06-12 19:18:08 +0000849
Facundo Batista1fe9f962007-03-28 03:45:20 +0000850 def testRecvFromNegative(self):
851 # Negative lengths passed to recvfrom should give ValueError.
852 self.assertRaises(ValueError, self.serv.recvfrom, -1)
853
854 def _testRecvFromNegative(self):
Trent Nelsone41b0062008-04-08 23:47:30 +0000855 self.cli.sendto(MSG, 0, (HOST, self.port))
Facundo Batista1fe9f962007-03-28 03:45:20 +0000856
Victor Stinner6a102812010-04-27 23:55:59 +0000857@unittest.skipUnless(thread, 'Threading required for this test.')
Martin v. Löwis7596e832006-07-01 15:33:37 +0000858class TCPCloserTest(ThreadedTCPSocketTest):
859
860 def testClose(self):
861 conn, addr = self.serv.accept()
862 conn.close()
863
864 sd = self.cli
865 read, write, err = select.select([sd], [], [], 1.0)
866 self.assertEqual(read, [sd])
867 self.assertEqual(sd.recv(1), '')
868
869 def _testClose(self):
Trent Nelsone41b0062008-04-08 23:47:30 +0000870 self.cli.connect((HOST, self.port))
Martin v. Löwis7596e832006-07-01 15:33:37 +0000871 time.sleep(1.0)
872
Serhiy Storchaka32e23e72013-11-03 23:15:46 +0200873@unittest.skipUnless(hasattr(socket, 'socketpair'),
874 'test needs socket.socketpair()')
Victor Stinner6a102812010-04-27 23:55:59 +0000875@unittest.skipUnless(thread, 'Threading required for this test.')
Dave Cole331708b2004-08-09 04:51:41 +0000876class BasicSocketPairTest(SocketPairTest):
877
878 def __init__(self, methodName='runTest'):
879 SocketPairTest.__init__(self, methodName=methodName)
880
881 def testRecv(self):
882 msg = self.serv.recv(1024)
883 self.assertEqual(msg, MSG)
884
885 def _testRecv(self):
886 self.cli.send(MSG)
887
888 def testSend(self):
889 self.serv.send(MSG)
890
891 def _testSend(self):
892 msg = self.cli.recv(1024)
893 self.assertEqual(msg, MSG)
894
Victor Stinner6a102812010-04-27 23:55:59 +0000895@unittest.skipUnless(thread, 'Threading required for this test.')
Guido van Rossum24e4af82002-06-12 19:18:08 +0000896class NonBlockingTCPTests(ThreadedTCPSocketTest):
897
898 def __init__(self, methodName='runTest'):
899 ThreadedTCPSocketTest.__init__(self, methodName=methodName)
900
901 def testSetBlocking(self):
Guido van Rossum8c943832002-08-08 01:00:28 +0000902 # Testing whether set blocking works
Serhiy Storchaka74f49ab2013-01-19 12:55:39 +0200903 self.serv.setblocking(True)
904 self.assertIsNone(self.serv.gettimeout())
905 self.serv.setblocking(False)
906 self.assertEqual(self.serv.gettimeout(), 0.0)
Guido van Rossum24e4af82002-06-12 19:18:08 +0000907 start = time.time()
908 try:
909 self.serv.accept()
910 except socket.error:
911 pass
912 end = time.time()
Benjamin Peterson5c8da862009-06-30 22:57:08 +0000913 self.assertTrue((end - start) < 1.0, "Error setting non-blocking mode.")
Serhiy Storchaka74f49ab2013-01-19 12:55:39 +0200914 # Issue 15989
915 if _testcapi.UINT_MAX < _testcapi.ULONG_MAX:
916 self.serv.setblocking(_testcapi.UINT_MAX + 1)
917 self.assertIsNone(self.serv.gettimeout())
Guido van Rossum24e4af82002-06-12 19:18:08 +0000918
919 def _testSetBlocking(self):
Barry Warsaw6870bba2001-03-23 17:40:16 +0000920 pass
Barry Warsawcf3d4b51997-01-03 20:03:32 +0000921
Guido van Rossum24e4af82002-06-12 19:18:08 +0000922 def testAccept(self):
Guido van Rossum8c943832002-08-08 01:00:28 +0000923 # Testing non-blocking accept
Guido van Rossum24e4af82002-06-12 19:18:08 +0000924 self.serv.setblocking(0)
Guido van Rossum41360a41998-03-26 19:42:58 +0000925 try:
Guido van Rossum24e4af82002-06-12 19:18:08 +0000926 conn, addr = self.serv.accept()
927 except socket.error:
928 pass
929 else:
930 self.fail("Error trying to do non-blocking accept.")
931 read, write, err = select.select([self.serv], [], [])
932 if self.serv in read:
933 conn, addr = self.serv.accept()
Brian Curtin62c20b62010-11-02 02:59:55 +0000934 conn.close()
Guido van Rossum24e4af82002-06-12 19:18:08 +0000935 else:
936 self.fail("Error trying to do accept after select.")
Guido van Rossum67f7a382002-06-06 21:08:16 +0000937
Guido van Rossum24e4af82002-06-12 19:18:08 +0000938 def _testAccept(self):
Guido van Rossumb6cc7d22002-07-19 12:46:46 +0000939 time.sleep(0.1)
Trent Nelsone41b0062008-04-08 23:47:30 +0000940 self.cli.connect((HOST, self.port))
Guido van Rossum24e4af82002-06-12 19:18:08 +0000941
942 def testConnect(self):
Guido van Rossum8c943832002-08-08 01:00:28 +0000943 # Testing non-blocking connect
Guido van Rossum24e4af82002-06-12 19:18:08 +0000944 conn, addr = self.serv.accept()
Brian Curtin62c20b62010-11-02 02:59:55 +0000945 conn.close()
Guido van Rossum24e4af82002-06-12 19:18:08 +0000946
947 def _testConnect(self):
Guido van Rossum7b8bac12002-06-13 16:07:04 +0000948 self.cli.settimeout(10)
Trent Nelsone41b0062008-04-08 23:47:30 +0000949 self.cli.connect((HOST, self.port))
Guido van Rossum24e4af82002-06-12 19:18:08 +0000950
951 def testRecv(self):
Guido van Rossum8c943832002-08-08 01:00:28 +0000952 # Testing non-blocking recv
Guido van Rossum24e4af82002-06-12 19:18:08 +0000953 conn, addr = self.serv.accept()
954 conn.setblocking(0)
955 try:
956 msg = conn.recv(len(MSG))
957 except socket.error:
958 pass
959 else:
960 self.fail("Error trying to do non-blocking recv.")
961 read, write, err = select.select([conn], [], [])
962 if conn in read:
963 msg = conn.recv(len(MSG))
Brian Curtin62c20b62010-11-02 02:59:55 +0000964 conn.close()
Guido van Rossum76489682002-06-12 20:38:30 +0000965 self.assertEqual(msg, MSG)
Guido van Rossum24e4af82002-06-12 19:18:08 +0000966 else:
967 self.fail("Error during select call to non-blocking socket.")
968
969 def _testRecv(self):
Trent Nelsone41b0062008-04-08 23:47:30 +0000970 self.cli.connect((HOST, self.port))
Guido van Rossumb6cc7d22002-07-19 12:46:46 +0000971 time.sleep(0.1)
Guido van Rossum24e4af82002-06-12 19:18:08 +0000972 self.cli.send(MSG)
973
Victor Stinner6a102812010-04-27 23:55:59 +0000974@unittest.skipUnless(thread, 'Threading required for this test.')
Guido van Rossum24e4af82002-06-12 19:18:08 +0000975class FileObjectClassTestCase(SocketConnectedTest):
976
Guido van Rossume9f66142002-08-07 15:46:19 +0000977 bufsize = -1 # Use default buffer size
978
Guido van Rossum24e4af82002-06-12 19:18:08 +0000979 def __init__(self, methodName='runTest'):
980 SocketConnectedTest.__init__(self, methodName=methodName)
981
982 def setUp(self):
983 SocketConnectedTest.setUp(self)
Guido van Rossume9f66142002-08-07 15:46:19 +0000984 self.serv_file = self.cli_conn.makefile('rb', self.bufsize)
Guido van Rossum24e4af82002-06-12 19:18:08 +0000985
986 def tearDown(self):
987 self.serv_file.close()
Benjamin Peterson5c8da862009-06-30 22:57:08 +0000988 self.assertTrue(self.serv_file.closed)
Guido van Rossum24e4af82002-06-12 19:18:08 +0000989 SocketConnectedTest.tearDown(self)
Kristján Valur Jónsson2380fee2012-12-25 13:04:50 +0000990 self.serv_file = None
Guido van Rossum24e4af82002-06-12 19:18:08 +0000991
992 def clientSetUp(self):
993 SocketConnectedTest.clientSetUp(self)
Guido van Rossume9f66142002-08-07 15:46:19 +0000994 self.cli_file = self.serv_conn.makefile('wb')
Guido van Rossum24e4af82002-06-12 19:18:08 +0000995
996 def clientTearDown(self):
997 self.cli_file.close()
Benjamin Peterson5c8da862009-06-30 22:57:08 +0000998 self.assertTrue(self.cli_file.closed)
Guido van Rossum24e4af82002-06-12 19:18:08 +0000999 self.cli_file = None
1000 SocketConnectedTest.clientTearDown(self)
1001
1002 def testSmallRead(self):
Guido van Rossum8c943832002-08-08 01:00:28 +00001003 # Performing small file read test
Guido van Rossum24e4af82002-06-12 19:18:08 +00001004 first_seg = self.serv_file.read(len(MSG)-3)
1005 second_seg = self.serv_file.read(3)
Guido van Rossumab659962002-06-12 21:29:43 +00001006 msg = first_seg + second_seg
Guido van Rossum76489682002-06-12 20:38:30 +00001007 self.assertEqual(msg, MSG)
Guido van Rossum24e4af82002-06-12 19:18:08 +00001008
1009 def _testSmallRead(self):
1010 self.cli_file.write(MSG)
1011 self.cli_file.flush()
1012
Guido van Rossum8c943832002-08-08 01:00:28 +00001013 def testFullRead(self):
1014 # read until EOF
1015 msg = self.serv_file.read()
1016 self.assertEqual(msg, MSG)
1017
1018 def _testFullRead(self):
1019 self.cli_file.write(MSG)
1020 self.cli_file.close()
1021
Guido van Rossum24e4af82002-06-12 19:18:08 +00001022 def testUnbufferedRead(self):
Guido van Rossum8c943832002-08-08 01:00:28 +00001023 # Performing unbuffered file read test
Guido van Rossum24e4af82002-06-12 19:18:08 +00001024 buf = ''
1025 while 1:
1026 char = self.serv_file.read(1)
Guido van Rossum8c943832002-08-08 01:00:28 +00001027 if not char:
Guido van Rossum24e4af82002-06-12 19:18:08 +00001028 break
Guido van Rossum8c943832002-08-08 01:00:28 +00001029 buf += char
1030 self.assertEqual(buf, MSG)
Guido van Rossum24e4af82002-06-12 19:18:08 +00001031
1032 def _testUnbufferedRead(self):
1033 self.cli_file.write(MSG)
1034 self.cli_file.flush()
1035
1036 def testReadline(self):
Guido van Rossum8c943832002-08-08 01:00:28 +00001037 # Performing file readline test
Guido van Rossum24e4af82002-06-12 19:18:08 +00001038 line = self.serv_file.readline()
Guido van Rossum76489682002-06-12 20:38:30 +00001039 self.assertEqual(line, MSG)
Guido van Rossum24e4af82002-06-12 19:18:08 +00001040
1041 def _testReadline(self):
1042 self.cli_file.write(MSG)
1043 self.cli_file.flush()
1044
Gregory P. Smith24237ea2008-05-05 21:53:45 +00001045 def testReadlineAfterRead(self):
1046 a_baloo_is = self.serv_file.read(len("A baloo is"))
1047 self.assertEqual("A baloo is", a_baloo_is)
1048 _a_bear = self.serv_file.read(len(" a bear"))
1049 self.assertEqual(" a bear", _a_bear)
1050 line = self.serv_file.readline()
1051 self.assertEqual("\n", line)
1052 line = self.serv_file.readline()
1053 self.assertEqual("A BALOO IS A BEAR.\n", line)
1054 line = self.serv_file.readline()
1055 self.assertEqual(MSG, line)
1056
1057 def _testReadlineAfterRead(self):
1058 self.cli_file.write("A baloo is a bear\n")
1059 self.cli_file.write("A BALOO IS A BEAR.\n")
1060 self.cli_file.write(MSG)
1061 self.cli_file.flush()
1062
1063 def testReadlineAfterReadNoNewline(self):
1064 end_of_ = self.serv_file.read(len("End Of "))
1065 self.assertEqual("End Of ", end_of_)
1066 line = self.serv_file.readline()
1067 self.assertEqual("Line", line)
1068
1069 def _testReadlineAfterReadNoNewline(self):
1070 self.cli_file.write("End Of Line")
1071
Tim Peters116d83c2004-03-28 02:20:45 +00001072 def testClosedAttr(self):
Benjamin Peterson5c8da862009-06-30 22:57:08 +00001073 self.assertTrue(not self.serv_file.closed)
Tim Peters116d83c2004-03-28 02:20:45 +00001074
1075 def _testClosedAttr(self):
Benjamin Peterson5c8da862009-06-30 22:57:08 +00001076 self.assertTrue(not self.cli_file.closed)
Tim Peters116d83c2004-03-28 02:20:45 +00001077
Gregory P. Smithc4ad0342009-08-13 18:54:50 +00001078
1079class FileObjectInterruptedTestCase(unittest.TestCase):
1080 """Test that the file object correctly handles EINTR internally."""
1081
1082 class MockSocket(object):
1083 def __init__(self, recv_funcs=()):
1084 # A generator that returns callables that we'll call for each
1085 # call to recv().
1086 self._recv_step = iter(recv_funcs)
1087
1088 def recv(self, size):
1089 return self._recv_step.next()()
1090
1091 @staticmethod
1092 def _raise_eintr():
1093 raise socket.error(errno.EINTR)
1094
1095 def _test_readline(self, size=-1, **kwargs):
1096 mock_sock = self.MockSocket(recv_funcs=[
1097 lambda : "This is the first line\nAnd the sec",
1098 self._raise_eintr,
1099 lambda : "ond line is here\n",
1100 lambda : "",
1101 ])
1102 fo = socket._fileobject(mock_sock, **kwargs)
Ezio Melotti2623a372010-11-21 13:34:58 +00001103 self.assertEqual(fo.readline(size), "This is the first line\n")
1104 self.assertEqual(fo.readline(size), "And the second line is here\n")
Gregory P. Smithc4ad0342009-08-13 18:54:50 +00001105
1106 def _test_read(self, size=-1, **kwargs):
1107 mock_sock = self.MockSocket(recv_funcs=[
1108 lambda : "This is the first line\nAnd the sec",
1109 self._raise_eintr,
1110 lambda : "ond line is here\n",
1111 lambda : "",
1112 ])
1113 fo = socket._fileobject(mock_sock, **kwargs)
Ezio Melotti2623a372010-11-21 13:34:58 +00001114 self.assertEqual(fo.read(size), "This is the first line\n"
Gregory P. Smithc4ad0342009-08-13 18:54:50 +00001115 "And the second line is here\n")
1116
1117 def test_default(self):
1118 self._test_readline()
1119 self._test_readline(size=100)
1120 self._test_read()
1121 self._test_read(size=100)
1122
1123 def test_with_1k_buffer(self):
1124 self._test_readline(bufsize=1024)
1125 self._test_readline(size=100, bufsize=1024)
1126 self._test_read(bufsize=1024)
1127 self._test_read(size=100, bufsize=1024)
1128
1129 def _test_readline_no_buffer(self, size=-1):
1130 mock_sock = self.MockSocket(recv_funcs=[
1131 lambda : "aa",
1132 lambda : "\n",
1133 lambda : "BB",
1134 self._raise_eintr,
1135 lambda : "bb",
1136 lambda : "",
1137 ])
1138 fo = socket._fileobject(mock_sock, bufsize=0)
Ezio Melotti2623a372010-11-21 13:34:58 +00001139 self.assertEqual(fo.readline(size), "aa\n")
1140 self.assertEqual(fo.readline(size), "BBbb")
Gregory P. Smithc4ad0342009-08-13 18:54:50 +00001141
1142 def test_no_buffer(self):
1143 self._test_readline_no_buffer()
1144 self._test_readline_no_buffer(size=4)
1145 self._test_read(bufsize=0)
1146 self._test_read(size=100, bufsize=0)
1147
1148
Guido van Rossume9f66142002-08-07 15:46:19 +00001149class UnbufferedFileObjectClassTestCase(FileObjectClassTestCase):
1150
1151 """Repeat the tests from FileObjectClassTestCase with bufsize==0.
Tim Peters469cdad2002-08-08 20:19:19 +00001152
Guido van Rossume9f66142002-08-07 15:46:19 +00001153 In this case (and in this case only), it should be possible to
1154 create a file object, read a line from it, create another file
1155 object, read another line from it, without loss of data in the
1156 first file object's buffer. Note that httplib relies on this
1157 when reading multiple requests from the same socket."""
1158
1159 bufsize = 0 # Use unbuffered mode
1160
1161 def testUnbufferedReadline(self):
Guido van Rossum8c943832002-08-08 01:00:28 +00001162 # Read a line, create a new file object, read another line with it
Guido van Rossume9f66142002-08-07 15:46:19 +00001163 line = self.serv_file.readline() # first line
Guido van Rossum10e3f412002-08-07 19:02:49 +00001164 self.assertEqual(line, "A. " + MSG) # first line
Guido van Rossume9f66142002-08-07 15:46:19 +00001165 self.serv_file = self.cli_conn.makefile('rb', 0)
1166 line = self.serv_file.readline() # second line
Guido van Rossum10e3f412002-08-07 19:02:49 +00001167 self.assertEqual(line, "B. " + MSG) # second line
Guido van Rossume9f66142002-08-07 15:46:19 +00001168
1169 def _testUnbufferedReadline(self):
Guido van Rossum10e3f412002-08-07 19:02:49 +00001170 self.cli_file.write("A. " + MSG)
1171 self.cli_file.write("B. " + MSG)
Guido van Rossume9f66142002-08-07 15:46:19 +00001172 self.cli_file.flush()
1173
Guido van Rossum8c943832002-08-08 01:00:28 +00001174class LineBufferedFileObjectClassTestCase(FileObjectClassTestCase):
1175
1176 bufsize = 1 # Default-buffered for reading; line-buffered for writing
1177
Kristján Valur Jónsson2380fee2012-12-25 13:04:50 +00001178 class SocketMemo(object):
1179 """A wrapper to keep track of sent data, needed to examine write behaviour"""
1180 def __init__(self, sock):
1181 self._sock = sock
1182 self.sent = []
1183
1184 def send(self, data, flags=0):
1185 n = self._sock.send(data, flags)
1186 self.sent.append(data[:n])
1187 return n
1188
1189 def sendall(self, data, flags=0):
1190 self._sock.sendall(data, flags)
1191 self.sent.append(data)
1192
1193 def __getattr__(self, attr):
1194 return getattr(self._sock, attr)
1195
1196 def getsent(self):
1197 return [e.tobytes() if isinstance(e, memoryview) else e for e in self.sent]
1198
1199 def setUp(self):
1200 FileObjectClassTestCase.setUp(self)
1201 self.serv_file._sock = self.SocketMemo(self.serv_file._sock)
1202
1203 def testLinebufferedWrite(self):
1204 # Write two lines, in small chunks
1205 msg = MSG.strip()
1206 print >> self.serv_file, msg,
1207 print >> self.serv_file, msg
1208
1209 # second line:
1210 print >> self.serv_file, msg,
1211 print >> self.serv_file, msg,
1212 print >> self.serv_file, msg
1213
1214 # third line
1215 print >> self.serv_file, ''
1216
1217 self.serv_file.flush()
1218
1219 msg1 = "%s %s\n"%(msg, msg)
1220 msg2 = "%s %s %s\n"%(msg, msg, msg)
1221 msg3 = "\n"
1222 self.assertEqual(self.serv_file._sock.getsent(), [msg1, msg2, msg3])
1223
1224 def _testLinebufferedWrite(self):
1225 msg = MSG.strip()
1226 msg1 = "%s %s\n"%(msg, msg)
1227 msg2 = "%s %s %s\n"%(msg, msg, msg)
1228 msg3 = "\n"
1229 l1 = self.cli_file.readline()
1230 self.assertEqual(l1, msg1)
1231 l2 = self.cli_file.readline()
1232 self.assertEqual(l2, msg2)
1233 l3 = self.cli_file.readline()
1234 self.assertEqual(l3, msg3)
1235
Guido van Rossum8c943832002-08-08 01:00:28 +00001236
1237class SmallBufferedFileObjectClassTestCase(FileObjectClassTestCase):
1238
1239 bufsize = 2 # Exercise the buffering code
Guido van Rossume9f66142002-08-07 15:46:19 +00001240
Georg Brandldd7b0522007-01-21 10:35:10 +00001241
Facundo Batista07c78be2007-03-23 18:54:07 +00001242class NetworkConnectionTest(object):
1243 """Prove network connection."""
1244 def clientSetUp(self):
Trent Nelsone41b0062008-04-08 23:47:30 +00001245 # We're inherited below by BasicTCPTest2, which also inherits
1246 # BasicTCPTest, which defines self.port referenced below.
1247 self.cli = socket.create_connection((HOST, self.port))
Facundo Batista07c78be2007-03-23 18:54:07 +00001248 self.serv_conn = self.cli
Neal Norwitz0d4c06e2007-04-25 06:30:05 +00001249
Facundo Batista07c78be2007-03-23 18:54:07 +00001250class BasicTCPTest2(NetworkConnectionTest, BasicTCPTest):
1251 """Tests that NetworkConnection does not break existing TCP functionality.
1252 """
1253
Facundo Batistab8af7bc2007-03-25 01:53:21 +00001254class NetworkConnectionNoServer(unittest.TestCase):
Antoine Pitrouc818ed42010-09-07 21:40:25 +00001255 class MockSocket(socket.socket):
1256 def connect(self, *args):
1257 raise socket.timeout('timed out')
1258
1259 @contextlib.contextmanager
1260 def mocked_socket_module(self):
1261 """Return a socket which times out on connect"""
1262 old_socket = socket.socket
1263 socket.socket = self.MockSocket
1264 try:
1265 yield
1266 finally:
1267 socket.socket = old_socket
1268
1269 def test_connect(self):
Trent Nelsone41b0062008-04-08 23:47:30 +00001270 port = test_support.find_unused_port()
Antoine Pitrouc818ed42010-09-07 21:40:25 +00001271 cli = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
Brian Curtin62c20b62010-11-02 02:59:55 +00001272 self.addCleanup(cli.close)
Antoine Pitrouc818ed42010-09-07 21:40:25 +00001273 with self.assertRaises(socket.error) as cm:
1274 cli.connect((HOST, port))
1275 self.assertEqual(cm.exception.errno, errno.ECONNREFUSED)
1276
1277 def test_create_connection(self):
1278 # Issue #9792: errors raised by create_connection() should have
1279 # a proper errno attribute.
1280 port = test_support.find_unused_port()
1281 with self.assertRaises(socket.error) as cm:
1282 socket.create_connection((HOST, port))
Trent Nelson6a7f8672012-10-18 01:35:32 -04001283
1284 # Issue #16257: create_connection() calls getaddrinfo() against
1285 # 'localhost'. This may result in an IPV6 addr being returned
1286 # as well as an IPV4 one:
1287 # >>> socket.getaddrinfo('localhost', port, 0, SOCK_STREAM)
1288 # >>> [(2, 2, 0, '', ('127.0.0.1', 41230)),
1289 # (26, 2, 0, '', ('::1', 41230, 0, 0))]
1290 #
1291 # create_connection() enumerates through all the addresses returned
1292 # and if it doesn't successfully bind to any of them, it propagates
1293 # the last exception it encountered.
1294 #
1295 # On Solaris, ENETUNREACH is returned in this circumstance instead
1296 # of ECONNREFUSED. So, if that errno exists, add it to our list of
1297 # expected errnos.
1298 expected_errnos = [ errno.ECONNREFUSED, ]
1299 if hasattr(errno, 'ENETUNREACH'):
1300 expected_errnos.append(errno.ENETUNREACH)
1301
1302 self.assertIn(cm.exception.errno, expected_errnos)
Antoine Pitrouc818ed42010-09-07 21:40:25 +00001303
1304 def test_create_connection_timeout(self):
1305 # Issue #9792: create_connection() should not recast timeout errors
1306 # as generic socket errors.
1307 with self.mocked_socket_module():
1308 with self.assertRaises(socket.timeout):
1309 socket.create_connection((HOST, 1234))
1310
Facundo Batista07c78be2007-03-23 18:54:07 +00001311
Victor Stinner6a102812010-04-27 23:55:59 +00001312@unittest.skipUnless(thread, 'Threading required for this test.')
Facundo Batistab8af7bc2007-03-25 01:53:21 +00001313class NetworkConnectionAttributesTest(SocketTCPTest, ThreadableTest):
1314
1315 def __init__(self, methodName='runTest'):
1316 SocketTCPTest.__init__(self, methodName=methodName)
1317 ThreadableTest.__init__(self)
1318
1319 def clientSetUp(self):
Gregory P. Smith79a3eb12010-01-03 01:29:44 +00001320 self.source_port = test_support.find_unused_port()
Facundo Batistab8af7bc2007-03-25 01:53:21 +00001321
1322 def clientTearDown(self):
1323 self.cli.close()
1324 self.cli = None
1325 ThreadableTest.clientTearDown(self)
1326
1327 def _justAccept(self):
1328 conn, addr = self.serv.accept()
Brian Curtin62c20b62010-11-02 02:59:55 +00001329 conn.close()
Facundo Batistab8af7bc2007-03-25 01:53:21 +00001330
1331 testFamily = _justAccept
1332 def _testFamily(self):
Trent Nelsone41b0062008-04-08 23:47:30 +00001333 self.cli = socket.create_connection((HOST, self.port), timeout=30)
Brian Curtin62c20b62010-11-02 02:59:55 +00001334 self.addCleanup(self.cli.close)
Facundo Batistab8af7bc2007-03-25 01:53:21 +00001335 self.assertEqual(self.cli.family, 2)
1336
Gregory P. Smith49d709c2010-01-03 15:05:52 +00001337 testSourceAddress = _justAccept
1338 def _testSourceAddress(self):
Gregory P. Smith79a3eb12010-01-03 01:29:44 +00001339 self.cli = socket.create_connection((HOST, self.port), timeout=30,
1340 source_address=('', self.source_port))
Brian Curtin62c20b62010-11-02 02:59:55 +00001341 self.addCleanup(self.cli.close)
Gregory P. Smith79a3eb12010-01-03 01:29:44 +00001342 self.assertEqual(self.cli.getsockname()[1], self.source_port)
Gregory P. Smith49d709c2010-01-03 15:05:52 +00001343 # The port number being used is sufficient to show that the bind()
1344 # call happened.
Gregory P. Smith79a3eb12010-01-03 01:29:44 +00001345
Neal Norwitz0d4c06e2007-04-25 06:30:05 +00001346 testTimeoutDefault = _justAccept
Facundo Batistab8af7bc2007-03-25 01:53:21 +00001347 def _testTimeoutDefault(self):
Facundo Batista4f1b1ed2008-05-29 16:39:26 +00001348 # passing no explicit timeout uses socket's global default
Benjamin Peterson5c8da862009-06-30 22:57:08 +00001349 self.assertTrue(socket.getdefaulttimeout() is None)
Facundo Batista4f1b1ed2008-05-29 16:39:26 +00001350 socket.setdefaulttimeout(42)
1351 try:
1352 self.cli = socket.create_connection((HOST, self.port))
Brian Curtin62c20b62010-11-02 02:59:55 +00001353 self.addCleanup(self.cli.close)
Facundo Batista4f1b1ed2008-05-29 16:39:26 +00001354 finally:
1355 socket.setdefaulttimeout(None)
Ezio Melotti2623a372010-11-21 13:34:58 +00001356 self.assertEqual(self.cli.gettimeout(), 42)
Facundo Batista4f1b1ed2008-05-29 16:39:26 +00001357
1358 testTimeoutNone = _justAccept
1359 def _testTimeoutNone(self):
1360 # None timeout means the same as sock.settimeout(None)
Benjamin Peterson5c8da862009-06-30 22:57:08 +00001361 self.assertTrue(socket.getdefaulttimeout() is None)
Facundo Batista4f1b1ed2008-05-29 16:39:26 +00001362 socket.setdefaulttimeout(30)
1363 try:
1364 self.cli = socket.create_connection((HOST, self.port), timeout=None)
Brian Curtin62c20b62010-11-02 02:59:55 +00001365 self.addCleanup(self.cli.close)
Facundo Batista4f1b1ed2008-05-29 16:39:26 +00001366 finally:
1367 socket.setdefaulttimeout(None)
1368 self.assertEqual(self.cli.gettimeout(), None)
Neal Norwitz0d4c06e2007-04-25 06:30:05 +00001369
1370 testTimeoutValueNamed = _justAccept
Facundo Batistab8af7bc2007-03-25 01:53:21 +00001371 def _testTimeoutValueNamed(self):
Trent Nelsone41b0062008-04-08 23:47:30 +00001372 self.cli = socket.create_connection((HOST, self.port), timeout=30)
Facundo Batistab8af7bc2007-03-25 01:53:21 +00001373 self.assertEqual(self.cli.gettimeout(), 30)
Facundo Batista07c78be2007-03-23 18:54:07 +00001374
Neal Norwitz0d4c06e2007-04-25 06:30:05 +00001375 testTimeoutValueNonamed = _justAccept
Facundo Batistab8af7bc2007-03-25 01:53:21 +00001376 def _testTimeoutValueNonamed(self):
Trent Nelsone41b0062008-04-08 23:47:30 +00001377 self.cli = socket.create_connection((HOST, self.port), 30)
Brian Curtin62c20b62010-11-02 02:59:55 +00001378 self.addCleanup(self.cli.close)
Facundo Batistab8af7bc2007-03-25 01:53:21 +00001379 self.assertEqual(self.cli.gettimeout(), 30)
Facundo Batista07c78be2007-03-23 18:54:07 +00001380
Victor Stinner6a102812010-04-27 23:55:59 +00001381@unittest.skipUnless(thread, 'Threading required for this test.')
Facundo Batistab8af7bc2007-03-25 01:53:21 +00001382class NetworkConnectionBehaviourTest(SocketTCPTest, ThreadableTest):
1383
1384 def __init__(self, methodName='runTest'):
1385 SocketTCPTest.__init__(self, methodName=methodName)
1386 ThreadableTest.__init__(self)
1387
1388 def clientSetUp(self):
1389 pass
1390
1391 def clientTearDown(self):
1392 self.cli.close()
1393 self.cli = None
1394 ThreadableTest.clientTearDown(self)
1395
Facundo Batista07c78be2007-03-23 18:54:07 +00001396 def testInsideTimeout(self):
Facundo Batistab8af7bc2007-03-25 01:53:21 +00001397 conn, addr = self.serv.accept()
Brian Curtin62c20b62010-11-02 02:59:55 +00001398 self.addCleanup(conn.close)
Facundo Batistab8af7bc2007-03-25 01:53:21 +00001399 time.sleep(3)
1400 conn.send("done!")
1401 testOutsideTimeout = testInsideTimeout
1402
1403 def _testInsideTimeout(self):
Trent Nelsone41b0062008-04-08 23:47:30 +00001404 self.cli = sock = socket.create_connection((HOST, self.port))
Facundo Batista07c78be2007-03-23 18:54:07 +00001405 data = sock.recv(5)
1406 self.assertEqual(data, "done!")
1407
Facundo Batistab8af7bc2007-03-25 01:53:21 +00001408 def _testOutsideTimeout(self):
Trent Nelsone41b0062008-04-08 23:47:30 +00001409 self.cli = sock = socket.create_connection((HOST, self.port), timeout=1)
Benjamin Peterson5c8da862009-06-30 22:57:08 +00001410 self.assertRaises(socket.timeout, lambda: sock.recv(5))
Facundo Batista07c78be2007-03-23 18:54:07 +00001411
1412
Georg Brandldd7b0522007-01-21 10:35:10 +00001413class Urllib2FileobjectTest(unittest.TestCase):
1414
1415 # urllib2.HTTPHandler has "borrowed" socket._fileobject, and requires that
1416 # it close the socket if the close c'tor argument is true
1417
1418 def testClose(self):
1419 class MockSocket:
1420 closed = False
1421 def flush(self): pass
1422 def close(self): self.closed = True
1423
1424 # must not close unless we request it: the original use of _fileobject
1425 # by module socket requires that the underlying socket not be closed until
1426 # the _socketobject that created the _fileobject is closed
1427 s = MockSocket()
1428 f = socket._fileobject(s)
1429 f.close()
Benjamin Peterson5c8da862009-06-30 22:57:08 +00001430 self.assertTrue(not s.closed)
Georg Brandldd7b0522007-01-21 10:35:10 +00001431
1432 s = MockSocket()
1433 f = socket._fileobject(s, close=True)
1434 f.close()
Benjamin Peterson5c8da862009-06-30 22:57:08 +00001435 self.assertTrue(s.closed)
Georg Brandldd7b0522007-01-21 10:35:10 +00001436
Raymond Hettinger11a35f52003-06-29 04:40:22 +00001437class TCPTimeoutTest(SocketTCPTest):
1438
1439 def testTCPTimeout(self):
1440 def raise_timeout(*args, **kwargs):
1441 self.serv.settimeout(1.0)
1442 self.serv.accept()
Benjamin Peterson5c8da862009-06-30 22:57:08 +00001443 self.assertRaises(socket.timeout, raise_timeout,
Raymond Hettinger11a35f52003-06-29 04:40:22 +00001444 "Error generating a timeout exception (TCP)")
1445
1446 def testTimeoutZero(self):
1447 ok = False
1448 try:
1449 self.serv.settimeout(0.0)
1450 foo = self.serv.accept()
1451 except socket.timeout:
1452 self.fail("caught timeout instead of error (TCP)")
1453 except socket.error:
1454 ok = True
1455 except:
1456 self.fail("caught unexpected exception (TCP)")
1457 if not ok:
1458 self.fail("accept() returned success when we did not expect it")
1459
Serhiy Storchaka32e23e72013-11-03 23:15:46 +02001460 @unittest.skipUnless(hasattr(signal, 'alarm'),
1461 'test needs signal.alarm()')
Neal Norwitz9b0ca792006-08-02 06:46:21 +00001462 def testInterruptedTimeout(self):
1463 # XXX I don't know how to do this test on MSWindows or any other
1464 # plaform that doesn't support signal.alarm() or os.kill(), though
1465 # the bug should have existed on all platforms.
Neal Norwitz9b0ca792006-08-02 06:46:21 +00001466 self.serv.settimeout(5.0) # must be longer than alarm
1467 class Alarm(Exception):
1468 pass
1469 def alarm_handler(signal, frame):
1470 raise Alarm
1471 old_alarm = signal.signal(signal.SIGALRM, alarm_handler)
1472 try:
1473 signal.alarm(2) # POSIX allows alarm to be up to 1 second early
1474 try:
1475 foo = self.serv.accept()
1476 except socket.timeout:
1477 self.fail("caught timeout instead of Alarm")
1478 except Alarm:
1479 pass
1480 except:
Jeffrey Yasskin36550bd2008-03-28 04:53:10 +00001481 self.fail("caught other exception instead of Alarm:"
1482 " %s(%s):\n%s" %
1483 (sys.exc_info()[:2] + (traceback.format_exc(),)))
Neal Norwitz9b0ca792006-08-02 06:46:21 +00001484 else:
1485 self.fail("nothing caught")
Jeffrey Yasskin36550bd2008-03-28 04:53:10 +00001486 finally:
1487 signal.alarm(0) # shut off alarm
Neal Norwitz9b0ca792006-08-02 06:46:21 +00001488 except Alarm:
1489 self.fail("got Alarm in wrong place")
1490 finally:
1491 # no alarm can be pending. Safe to restore old handler.
1492 signal.signal(signal.SIGALRM, old_alarm)
1493
Ezio Melotti169ed592011-11-18 18:33:14 +02001494class UDPTimeoutTest(SocketUDPTest):
Raymond Hettinger11a35f52003-06-29 04:40:22 +00001495
1496 def testUDPTimeout(self):
1497 def raise_timeout(*args, **kwargs):
1498 self.serv.settimeout(1.0)
1499 self.serv.recv(1024)
Benjamin Peterson5c8da862009-06-30 22:57:08 +00001500 self.assertRaises(socket.timeout, raise_timeout,
Raymond Hettinger11a35f52003-06-29 04:40:22 +00001501 "Error generating a timeout exception (UDP)")
1502
1503 def testTimeoutZero(self):
1504 ok = False
1505 try:
1506 self.serv.settimeout(0.0)
1507 foo = self.serv.recv(1024)
1508 except socket.timeout:
1509 self.fail("caught timeout instead of error (UDP)")
1510 except socket.error:
1511 ok = True
1512 except:
1513 self.fail("caught unexpected exception (UDP)")
1514 if not ok:
1515 self.fail("recv() returned success when we did not expect it")
1516
1517class TestExceptions(unittest.TestCase):
1518
1519 def testExceptionTree(self):
Benjamin Peterson5c8da862009-06-30 22:57:08 +00001520 self.assertTrue(issubclass(socket.error, Exception))
1521 self.assertTrue(issubclass(socket.herror, socket.error))
1522 self.assertTrue(issubclass(socket.gaierror, socket.error))
1523 self.assertTrue(issubclass(socket.timeout, socket.error))
Raymond Hettinger11a35f52003-06-29 04:40:22 +00001524
Serhiy Storchaka32e23e72013-11-03 23:15:46 +02001525@unittest.skipUnless(sys.platform == 'linux', 'Linux specific test')
Armin Rigoa9017c32006-04-19 11:50:27 +00001526class TestLinuxAbstractNamespace(unittest.TestCase):
1527
1528 UNIX_PATH_MAX = 108
1529
1530 def testLinuxAbstractNamespace(self):
1531 address = "\x00python-test-hello\x00\xff"
1532 s1 = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
1533 s1.bind(address)
1534 s1.listen(1)
1535 s2 = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
1536 s2.connect(s1.getsockname())
1537 s1.accept()
1538 self.assertEqual(s1.getsockname(), address)
1539 self.assertEqual(s2.getpeername(), address)
1540
1541 def testMaxName(self):
1542 address = "\x00" + "h" * (self.UNIX_PATH_MAX - 1)
1543 s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
1544 s.bind(address)
1545 self.assertEqual(s.getsockname(), address)
1546
1547 def testNameOverflow(self):
1548 address = "\x00" + "h" * self.UNIX_PATH_MAX
1549 s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
1550 self.assertRaises(socket.error, s.bind, address)
1551
Raymond Hettinger11a35f52003-06-29 04:40:22 +00001552
Victor Stinner6a102812010-04-27 23:55:59 +00001553@unittest.skipUnless(thread, 'Threading required for this test.')
Martin Blais2856e5f2006-05-26 12:03:27 +00001554class BufferIOTest(SocketConnectedTest):
1555 """
1556 Test the buffer versions of socket.recv() and socket.send().
1557 """
1558 def __init__(self, methodName='runTest'):
1559 SocketConnectedTest.__init__(self, methodName=methodName)
1560
Antoine Pitroud7b731d2010-03-17 22:45:39 +00001561 def testRecvIntoArray(self):
Martin Blais2856e5f2006-05-26 12:03:27 +00001562 buf = array.array('c', ' '*1024)
Martin Blaisaf2ae722006-06-04 13:49:49 +00001563 nbytes = self.cli_conn.recv_into(buf)
Martin Blais2856e5f2006-05-26 12:03:27 +00001564 self.assertEqual(nbytes, len(MSG))
1565 msg = buf.tostring()[:len(MSG)]
1566 self.assertEqual(msg, MSG)
1567
Antoine Pitroud7b731d2010-03-17 22:45:39 +00001568 def _testRecvIntoArray(self):
Florent Xicluna07627882010-03-21 01:14:24 +00001569 with test_support.check_py3k_warnings():
1570 buf = buffer(MSG)
Martin Blais2856e5f2006-05-26 12:03:27 +00001571 self.serv_conn.send(buf)
1572
Antoine Pitroud7b731d2010-03-17 22:45:39 +00001573 def testRecvIntoBytearray(self):
1574 buf = bytearray(1024)
1575 nbytes = self.cli_conn.recv_into(buf)
1576 self.assertEqual(nbytes, len(MSG))
1577 msg = buf[:len(MSG)]
1578 self.assertEqual(msg, MSG)
1579
1580 _testRecvIntoBytearray = _testRecvIntoArray
1581
1582 def testRecvIntoMemoryview(self):
1583 buf = bytearray(1024)
1584 nbytes = self.cli_conn.recv_into(memoryview(buf))
1585 self.assertEqual(nbytes, len(MSG))
1586 msg = buf[:len(MSG)]
1587 self.assertEqual(msg, MSG)
1588
1589 _testRecvIntoMemoryview = _testRecvIntoArray
1590
1591 def testRecvFromIntoArray(self):
Martin Blais2856e5f2006-05-26 12:03:27 +00001592 buf = array.array('c', ' '*1024)
Martin Blaisaf2ae722006-06-04 13:49:49 +00001593 nbytes, addr = self.cli_conn.recvfrom_into(buf)
Martin Blais2856e5f2006-05-26 12:03:27 +00001594 self.assertEqual(nbytes, len(MSG))
1595 msg = buf.tostring()[:len(MSG)]
1596 self.assertEqual(msg, MSG)
1597
Antoine Pitroud7b731d2010-03-17 22:45:39 +00001598 def _testRecvFromIntoArray(self):
Florent Xicluna07627882010-03-21 01:14:24 +00001599 with test_support.check_py3k_warnings():
1600 buf = buffer(MSG)
Martin Blais2856e5f2006-05-26 12:03:27 +00001601 self.serv_conn.send(buf)
1602
Antoine Pitroud7b731d2010-03-17 22:45:39 +00001603 def testRecvFromIntoBytearray(self):
1604 buf = bytearray(1024)
1605 nbytes, addr = self.cli_conn.recvfrom_into(buf)
1606 self.assertEqual(nbytes, len(MSG))
1607 msg = buf[:len(MSG)]
1608 self.assertEqual(msg, MSG)
1609
1610 _testRecvFromIntoBytearray = _testRecvFromIntoArray
1611
1612 def testRecvFromIntoMemoryview(self):
1613 buf = bytearray(1024)
1614 nbytes, addr = self.cli_conn.recvfrom_into(memoryview(buf))
1615 self.assertEqual(nbytes, len(MSG))
1616 msg = buf[:len(MSG)]
1617 self.assertEqual(msg, MSG)
1618
1619 _testRecvFromIntoMemoryview = _testRecvFromIntoArray
1620
Benjamin Peterson28cf3682014-01-13 22:59:38 -05001621 def testRecvFromIntoSmallBuffer(self):
1622 # See issue #20246.
1623 buf = bytearray(8)
1624 self.assertRaises(ValueError, self.cli_conn.recvfrom_into, buf, 1024)
1625
1626 def _testRecvFromIntoSmallBuffer(self):
1627 with test_support.check_py3k_warnings():
Stefan Krah70df6672014-01-21 23:05:52 +01001628 buf = buffer(MSG)
Benjamin Peterson28cf3682014-01-13 22:59:38 -05001629 self.serv_conn.send(buf)
1630
Benjamin Petersond93d6332014-01-14 00:27:42 -05001631 def testRecvFromIntoEmptyBuffer(self):
1632 buf = bytearray()
1633 self.cli_conn.recvfrom_into(buf)
1634 self.cli_conn.recvfrom_into(buf, 0)
1635
1636 _testRecvFromIntoEmptyBuffer = _testRecvFromIntoArray
1637
Christian Heimesfb2d25a2008-01-07 16:12:44 +00001638
1639TIPC_STYPE = 2000
1640TIPC_LOWER = 200
1641TIPC_UPPER = 210
1642
1643def isTipcAvailable():
1644 """Check if the TIPC module is loaded
1645
1646 The TIPC module is not loaded automatically on Ubuntu and probably
1647 other Linux distros.
1648 """
1649 if not hasattr(socket, "AF_TIPC"):
1650 return False
1651 if not os.path.isfile("/proc/modules"):
1652 return False
1653 with open("/proc/modules") as f:
1654 for line in f:
1655 if line.startswith("tipc "):
1656 return True
Christian Heimesfb2d25a2008-01-07 16:12:44 +00001657 return False
1658
Serhiy Storchaka32e23e72013-11-03 23:15:46 +02001659@unittest.skipUnless(isTipcAvailable(),
1660 "TIPC module is not loaded, please 'sudo modprobe tipc'")
1661class TIPCTest(unittest.TestCase):
Christian Heimesfb2d25a2008-01-07 16:12:44 +00001662 def testRDM(self):
1663 srv = socket.socket(socket.AF_TIPC, socket.SOCK_RDM)
1664 cli = socket.socket(socket.AF_TIPC, socket.SOCK_RDM)
1665
1666 srv.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
1667 srvaddr = (socket.TIPC_ADDR_NAMESEQ, TIPC_STYPE,
1668 TIPC_LOWER, TIPC_UPPER)
1669 srv.bind(srvaddr)
1670
1671 sendaddr = (socket.TIPC_ADDR_NAME, TIPC_STYPE,
1672 TIPC_LOWER + (TIPC_UPPER - TIPC_LOWER) / 2, 0)
1673 cli.sendto(MSG, sendaddr)
1674
1675 msg, recvaddr = srv.recvfrom(1024)
1676
1677 self.assertEqual(cli.getsockname(), recvaddr)
1678 self.assertEqual(msg, MSG)
1679
1680
Serhiy Storchaka32e23e72013-11-03 23:15:46 +02001681@unittest.skipUnless(isTipcAvailable(),
1682 "TIPC module is not loaded, please 'sudo modprobe tipc'")
1683class TIPCThreadableTest(unittest.TestCase, ThreadableTest):
Christian Heimesfb2d25a2008-01-07 16:12:44 +00001684 def __init__(self, methodName = 'runTest'):
1685 unittest.TestCase.__init__(self, methodName = methodName)
1686 ThreadableTest.__init__(self)
1687
1688 def setUp(self):
1689 self.srv = socket.socket(socket.AF_TIPC, socket.SOCK_STREAM)
1690 self.srv.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
1691 srvaddr = (socket.TIPC_ADDR_NAMESEQ, TIPC_STYPE,
1692 TIPC_LOWER, TIPC_UPPER)
1693 self.srv.bind(srvaddr)
1694 self.srv.listen(5)
1695 self.serverExplicitReady()
1696 self.conn, self.connaddr = self.srv.accept()
1697
1698 def clientSetUp(self):
1699 # The is a hittable race between serverExplicitReady() and the
1700 # accept() call; sleep a little while to avoid it, otherwise
1701 # we could get an exception
1702 time.sleep(0.1)
1703 self.cli = socket.socket(socket.AF_TIPC, socket.SOCK_STREAM)
1704 addr = (socket.TIPC_ADDR_NAME, TIPC_STYPE,
1705 TIPC_LOWER + (TIPC_UPPER - TIPC_LOWER) / 2, 0)
1706 self.cli.connect(addr)
1707 self.cliaddr = self.cli.getsockname()
1708
1709 def testStream(self):
1710 msg = self.conn.recv(1024)
1711 self.assertEqual(msg, MSG)
1712 self.assertEqual(self.cliaddr, self.connaddr)
1713
1714 def _testStream(self):
1715 self.cli.send(MSG)
1716 self.cli.close()
1717
1718
Guido van Rossumb995eb72002-07-31 16:08:40 +00001719def test_main():
Martin v. Löwis7596e832006-07-01 15:33:37 +00001720 tests = [GeneralModuleTests, BasicTCPTest, TCPCloserTest, TCPTimeoutTest,
Ronald Oussoren9545a232010-05-05 19:09:31 +00001721 TestExceptions, BufferIOTest, BasicTCPTest2, BasicUDPTest,
1722 UDPTimeoutTest ]
Walter Dörwald21d3a322003-05-01 17:45:56 +00001723
1724 tests.extend([
1725 NonBlockingTCPTests,
1726 FileObjectClassTestCase,
Gregory P. Smithc4ad0342009-08-13 18:54:50 +00001727 FileObjectInterruptedTestCase,
Walter Dörwald21d3a322003-05-01 17:45:56 +00001728 UnbufferedFileObjectClassTestCase,
1729 LineBufferedFileObjectClassTestCase,
Georg Brandldd7b0522007-01-21 10:35:10 +00001730 SmallBufferedFileObjectClassTestCase,
1731 Urllib2FileobjectTest,
Facundo Batistab8af7bc2007-03-25 01:53:21 +00001732 NetworkConnectionNoServer,
Facundo Batista07c78be2007-03-23 18:54:07 +00001733 NetworkConnectionAttributesTest,
1734 NetworkConnectionBehaviourTest,
Walter Dörwald21d3a322003-05-01 17:45:56 +00001735 ])
Serhiy Storchaka32e23e72013-11-03 23:15:46 +02001736 tests.append(BasicSocketPairTest)
1737 tests.append(TestLinuxAbstractNamespace)
1738 tests.extend([TIPCTest, TIPCThreadableTest])
Neal Norwitz9602cc22006-06-18 19:35:01 +00001739
1740 thread_info = test_support.threading_setup()
Walter Dörwald21d3a322003-05-01 17:45:56 +00001741 test_support.run_unittest(*tests)
Neal Norwitz9602cc22006-06-18 19:35:01 +00001742 test_support.threading_cleanup(*thread_info)
Guido van Rossum24e4af82002-06-12 19:18:08 +00001743
1744if __name__ == "__main__":
Guido van Rossumb995eb72002-07-31 16:08:40 +00001745 test_main()