blob: 53c8b2fb0bdda4e75c79215a8b1e0017a2768055 [file] [log] [blame]
Guido van Rossum24e4af82002-06-12 19:18:08 +00001#!/usr/bin/env python
Barry Warsawcf3d4b51997-01-03 20:03:32 +00002
Guido van Rossum24e4af82002-06-12 19:18:08 +00003import unittest
Barry Warsaw04f357c2002-07-23 19:04:11 +00004from test import test_support
Barry Warsawcf3d4b51997-01-03 20:03:32 +00005
Trent Nelsone41b0062008-04-08 23:47:30 +00006import errno
Barry Warsawcf3d4b51997-01-03 20:03:32 +00007import socket
Guido van Rossum24e4af82002-06-12 19:18:08 +00008import select
Serhiy Storchaka74f49ab2013-01-19 12:55:39 +02009import _testcapi
Jeffrey Yasskin36550bd2008-03-28 04:53:10 +000010import time
11import traceback
Georg Brandla6168f92008-05-25 07:20:14 +000012import Queue
Jack Jansen522e7692002-09-06 21:57:50 +000013import sys
Christian Heimesa47b75b2008-01-04 15:48:06 +000014import os
Martin Blais2856e5f2006-05-26 12:03:27 +000015import array
Antoine Pitrouc818ed42010-09-07 21:40:25 +000016import contextlib
Raymond Hettinger027bb632004-05-31 03:09:25 +000017from weakref import proxy
Neal Norwitz9b0ca792006-08-02 06:46:21 +000018import signal
Antoine Pitrou66b5df62010-09-27 18:16:46 +000019import math
Barry Warsawcf3d4b51997-01-03 20:03:32 +000020
Giampaolo Rodolà633e4742010-08-14 17:04:46 +000021def try_address(host, port=0, family=socket.AF_INET):
22 """Try to bind a socket on the given host:port and return True
23 if that has been possible."""
24 try:
25 sock = socket.socket(family, socket.SOCK_STREAM)
26 sock.bind((host, port))
27 except (socket.error, socket.gaierror):
28 return False
29 else:
30 sock.close()
31 return True
32
33HOST = test_support.HOST
34MSG = b'Michael Gilfix was here\n'
35SUPPORTS_IPV6 = socket.has_ipv6 and try_address('::1', family=socket.AF_INET6)
36
Victor Stinner6a102812010-04-27 23:55:59 +000037try:
38 import thread
39 import threading
40except ImportError:
41 thread = None
42 threading = None
43
Trent Nelsone41b0062008-04-08 23:47:30 +000044HOST = test_support.HOST
Guido van Rossum24e4af82002-06-12 19:18:08 +000045MSG = 'Michael Gilfix was here\n'
Barry Warsawcf3d4b51997-01-03 20:03:32 +000046
Guido van Rossum24e4af82002-06-12 19:18:08 +000047class SocketTCPTest(unittest.TestCase):
Barry Warsawcf3d4b51997-01-03 20:03:32 +000048
Guido van Rossum24e4af82002-06-12 19:18:08 +000049 def setUp(self):
50 self.serv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
Trent Nelsone41b0062008-04-08 23:47:30 +000051 self.port = test_support.bind_port(self.serv)
Guido van Rossum24e4af82002-06-12 19:18:08 +000052 self.serv.listen(1)
Barry Warsawcf3d4b51997-01-03 20:03:32 +000053
Guido van Rossum24e4af82002-06-12 19:18:08 +000054 def tearDown(self):
55 self.serv.close()
56 self.serv = None
Barry Warsawcf3d4b51997-01-03 20:03:32 +000057
Guido van Rossum24e4af82002-06-12 19:18:08 +000058class SocketUDPTest(unittest.TestCase):
59
60 def setUp(self):
61 self.serv = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
Trent Nelsone41b0062008-04-08 23:47:30 +000062 self.port = test_support.bind_port(self.serv)
Guido van Rossum24e4af82002-06-12 19:18:08 +000063
64 def tearDown(self):
65 self.serv.close()
66 self.serv = None
67
68class ThreadableTest:
Guido van Rossum83ccb4e2002-06-18 18:35:13 +000069 """Threadable Test class
70
71 The ThreadableTest class makes it easy to create a threaded
72 client/server pair from an existing unit test. To create a
73 new threaded class from an existing unit test, use multiple
74 inheritance:
75
76 class NewClass (OldClass, ThreadableTest):
77 pass
78
79 This class defines two new fixture functions with obvious
80 purposes for overriding:
81
82 clientSetUp ()
83 clientTearDown ()
84
85 Any new test functions within the class must then define
86 tests in pairs, where the test name is preceeded with a
87 '_' to indicate the client portion of the test. Ex:
88
89 def testFoo(self):
90 # Server portion
91
92 def _testFoo(self):
93 # Client portion
94
95 Any exceptions raised by the clients during their tests
96 are caught and transferred to the main thread to alert
97 the testing framework.
98
99 Note, the server setup function cannot call any blocking
100 functions that rely on the client thread during setup,
Facundo Batista07c78be2007-03-23 18:54:07 +0000101 unless serverExplicitReady() is called just before
Guido van Rossum83ccb4e2002-06-18 18:35:13 +0000102 the blocking call (such as in setting up a client/server
103 connection and performing the accept() in setUp().
104 """
Guido van Rossum24e4af82002-06-12 19:18:08 +0000105
106 def __init__(self):
107 # Swap the true setup function
108 self.__setUp = self.setUp
109 self.__tearDown = self.tearDown
110 self.setUp = self._setUp
111 self.tearDown = self._tearDown
112
Guido van Rossum83ccb4e2002-06-18 18:35:13 +0000113 def serverExplicitReady(self):
114 """This method allows the server to explicitly indicate that
115 it wants the client thread to proceed. This is useful if the
116 server is about to execute a blocking routine that is
117 dependent upon the client thread during its setup routine."""
118 self.server_ready.set()
119
Guido van Rossum24e4af82002-06-12 19:18:08 +0000120 def _setUp(self):
Guido van Rossum83ccb4e2002-06-18 18:35:13 +0000121 self.server_ready = threading.Event()
122 self.client_ready = threading.Event()
Guido van Rossum24e4af82002-06-12 19:18:08 +0000123 self.done = threading.Event()
Georg Brandla6168f92008-05-25 07:20:14 +0000124 self.queue = Queue.Queue(1)
Guido van Rossum24e4af82002-06-12 19:18:08 +0000125
126 # Do some munging to start the client test.
Guido van Rossum11ba0942002-06-13 15:07:44 +0000127 methodname = self.id()
128 i = methodname.rfind('.')
129 methodname = methodname[i+1:]
130 test_method = getattr(self, '_' + methodname)
Guido van Rossumab659962002-06-12 21:29:43 +0000131 self.client_thread = thread.start_new_thread(
132 self.clientRun, (test_method,))
Guido van Rossum24e4af82002-06-12 19:18:08 +0000133
134 self.__setUp()
Benjamin Peterson0fbcf692008-06-11 17:27:50 +0000135 if not self.server_ready.is_set():
Guido van Rossum83ccb4e2002-06-18 18:35:13 +0000136 self.server_ready.set()
137 self.client_ready.wait()
Guido van Rossum24e4af82002-06-12 19:18:08 +0000138
139 def _tearDown(self):
140 self.__tearDown()
141 self.done.wait()
142
143 if not self.queue.empty():
144 msg = self.queue.get()
145 self.fail(msg)
146
147 def clientRun(self, test_func):
Guido van Rossum83ccb4e2002-06-18 18:35:13 +0000148 self.server_ready.wait()
Guido van Rossum24e4af82002-06-12 19:18:08 +0000149 self.clientSetUp()
Charles-François Natali21565942011-09-21 22:02:27 +0200150 self.client_ready.set()
Ezio Melottib22c3fe2011-11-06 17:50:52 +0200151 if not callable(test_func):
152 raise TypeError("test_func must be a callable function.")
Guido van Rossum24e4af82002-06-12 19:18:08 +0000153 try:
154 test_func()
155 except Exception, strerror:
156 self.queue.put(strerror)
157 self.clientTearDown()
158
159 def clientSetUp(self):
Florent Xicluna07627882010-03-21 01:14:24 +0000160 raise NotImplementedError("clientSetUp must be implemented.")
Guido van Rossum24e4af82002-06-12 19:18:08 +0000161
162 def clientTearDown(self):
163 self.done.set()
164 thread.exit()
165
166class ThreadedTCPSocketTest(SocketTCPTest, ThreadableTest):
167
168 def __init__(self, methodName='runTest'):
169 SocketTCPTest.__init__(self, methodName=methodName)
170 ThreadableTest.__init__(self)
171
172 def clientSetUp(self):
173 self.cli = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
174
175 def clientTearDown(self):
176 self.cli.close()
177 self.cli = None
178 ThreadableTest.clientTearDown(self)
179
180class ThreadedUDPSocketTest(SocketUDPTest, ThreadableTest):
181
182 def __init__(self, methodName='runTest'):
183 SocketUDPTest.__init__(self, methodName=methodName)
184 ThreadableTest.__init__(self)
185
186 def clientSetUp(self):
187 self.cli = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
188
Brian Curtindd8564f2010-11-04 03:54:23 +0000189 def clientTearDown(self):
190 self.cli.close()
191 self.cli = None
192 ThreadableTest.clientTearDown(self)
193
Guido van Rossum24e4af82002-06-12 19:18:08 +0000194class SocketConnectedTest(ThreadedTCPSocketTest):
195
196 def __init__(self, methodName='runTest'):
197 ThreadedTCPSocketTest.__init__(self, methodName=methodName)
198
199 def setUp(self):
200 ThreadedTCPSocketTest.setUp(self)
Guido van Rossum83ccb4e2002-06-18 18:35:13 +0000201 # Indicate explicitly we're ready for the client thread to
202 # proceed and then perform the blocking call to accept
203 self.serverExplicitReady()
Guido van Rossum24e4af82002-06-12 19:18:08 +0000204 conn, addr = self.serv.accept()
205 self.cli_conn = conn
206
207 def tearDown(self):
208 self.cli_conn.close()
209 self.cli_conn = None
210 ThreadedTCPSocketTest.tearDown(self)
211
212 def clientSetUp(self):
213 ThreadedTCPSocketTest.clientSetUp(self)
Trent Nelsone41b0062008-04-08 23:47:30 +0000214 self.cli.connect((HOST, self.port))
Guido van Rossum24e4af82002-06-12 19:18:08 +0000215 self.serv_conn = self.cli
216
217 def clientTearDown(self):
218 self.serv_conn.close()
219 self.serv_conn = None
220 ThreadedTCPSocketTest.clientTearDown(self)
221
Dave Cole331708b2004-08-09 04:51:41 +0000222class SocketPairTest(unittest.TestCase, ThreadableTest):
223
224 def __init__(self, methodName='runTest'):
225 unittest.TestCase.__init__(self, methodName=methodName)
226 ThreadableTest.__init__(self)
227
228 def setUp(self):
229 self.serv, self.cli = socket.socketpair()
230
231 def tearDown(self):
232 self.serv.close()
233 self.serv = None
234
235 def clientSetUp(self):
236 pass
237
238 def clientTearDown(self):
239 self.cli.close()
240 self.cli = None
241 ThreadableTest.clientTearDown(self)
242
Tim Peters494aaee2004-08-09 18:54:11 +0000243
Guido van Rossum24e4af82002-06-12 19:18:08 +0000244#######################################################################
245## Begin Tests
246
247class GeneralModuleTests(unittest.TestCase):
248
Raymond Hettinger027bb632004-05-31 03:09:25 +0000249 def test_weakref(self):
250 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
251 p = proxy(s)
252 self.assertEqual(p.fileno(), s.fileno())
253 s.close()
254 s = None
255 try:
256 p.fileno()
257 except ReferenceError:
258 pass
259 else:
260 self.fail('Socket proxy still exists')
261
Guido van Rossum24e4af82002-06-12 19:18:08 +0000262 def testSocketError(self):
Guido van Rossum8c943832002-08-08 01:00:28 +0000263 # Testing socket module exceptions
Guido van Rossum24e4af82002-06-12 19:18:08 +0000264 def raise_error(*args, **kwargs):
265 raise socket.error
266 def raise_herror(*args, **kwargs):
267 raise socket.herror
268 def raise_gaierror(*args, **kwargs):
269 raise socket.gaierror
Benjamin Peterson5c8da862009-06-30 22:57:08 +0000270 self.assertRaises(socket.error, raise_error,
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_herror,
Guido van Rossum24e4af82002-06-12 19:18:08 +0000273 "Error raising socket exception.")
Benjamin Peterson5c8da862009-06-30 22:57:08 +0000274 self.assertRaises(socket.error, raise_gaierror,
Guido van Rossum24e4af82002-06-12 19:18:08 +0000275 "Error raising socket exception.")
276
Ezio Melotti0639be62011-05-07 19:21:22 +0300277 def testSendtoErrors(self):
278 # Testing that sendto doens't masks failures. See #10169.
279 s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
280 self.addCleanup(s.close)
281 s.bind(('', 0))
282 sockname = s.getsockname()
283 # 2 args
284 with self.assertRaises(UnicodeEncodeError):
285 s.sendto(u'\u2620', sockname)
286 with self.assertRaises(TypeError) as cm:
287 s.sendto(5j, sockname)
288 self.assertIn('not complex', str(cm.exception))
289 with self.assertRaises(TypeError) as cm:
290 s.sendto('foo', None)
291 self.assertIn('not NoneType', str(cm.exception))
292 # 3 args
293 with self.assertRaises(UnicodeEncodeError):
294 s.sendto(u'\u2620', 0, sockname)
295 with self.assertRaises(TypeError) as cm:
296 s.sendto(5j, 0, sockname)
297 self.assertIn('not complex', str(cm.exception))
298 with self.assertRaises(TypeError) as cm:
299 s.sendto('foo', 0, None)
300 self.assertIn('not NoneType', str(cm.exception))
301 with self.assertRaises(TypeError) as cm:
302 s.sendto('foo', 'bar', sockname)
303 self.assertIn('an integer is required', str(cm.exception))
304 with self.assertRaises(TypeError) as cm:
305 s.sendto('foo', None, None)
306 self.assertIn('an integer is required', str(cm.exception))
307 # wrong number of args
308 with self.assertRaises(TypeError) as cm:
309 s.sendto('foo')
310 self.assertIn('(1 given)', str(cm.exception))
311 with self.assertRaises(TypeError) as cm:
312 s.sendto('foo', 0, sockname, 4)
313 self.assertIn('(4 given)', str(cm.exception))
314
315
Guido van Rossum24e4af82002-06-12 19:18:08 +0000316 def testCrucialConstants(self):
Guido van Rossum8c943832002-08-08 01:00:28 +0000317 # Testing for mission critical constants
Guido van Rossum24e4af82002-06-12 19:18:08 +0000318 socket.AF_INET
319 socket.SOCK_STREAM
320 socket.SOCK_DGRAM
321 socket.SOCK_RAW
322 socket.SOCK_RDM
323 socket.SOCK_SEQPACKET
324 socket.SOL_SOCKET
325 socket.SO_REUSEADDR
326
Guido van Rossum654c11e2002-06-13 20:24:17 +0000327 def testHostnameRes(self):
Guido van Rossum8c943832002-08-08 01:00:28 +0000328 # Testing hostname resolution mechanisms
Guido van Rossum654c11e2002-06-13 20:24:17 +0000329 hostname = socket.gethostname()
Guido van Rossum71e02942002-12-26 16:55:15 +0000330 try:
331 ip = socket.gethostbyname(hostname)
332 except socket.error:
333 # Probably name lookup wasn't set up right; skip this test
334 return
Benjamin Peterson5c8da862009-06-30 22:57:08 +0000335 self.assertTrue(ip.find('.') >= 0, "Error resolving host to ip.")
Guido van Rossum9647b522002-12-26 17:04:45 +0000336 try:
337 hname, aliases, ipaddrs = socket.gethostbyaddr(ip)
338 except socket.error:
339 # Probably a similar problem as above; skip this test
340 return
Brett Cannon01668a12005-03-11 00:04:17 +0000341 all_host_names = [hostname, hname] + aliases
Anthony Baxtercf0a2a82006-04-03 08:10:33 +0000342 fqhn = socket.getfqdn(ip)
Guido van Rossum654c11e2002-06-13 20:24:17 +0000343 if not fqhn in all_host_names:
Martin v. Löwis04855cc2006-03-26 16:40:47 +0000344 self.fail("Error testing host resolution mechanisms. (fqdn: %s, all: %s)" % (fqhn, repr(all_host_names)))
Barry Warsawcf3d4b51997-01-03 20:03:32 +0000345
Serhiy Storchaka32e23e72013-11-03 23:15:46 +0200346 @unittest.skipUnless(hasattr(sys, 'getrefcount'),
347 'test needs sys.getrefcount()')
Guido van Rossum284a2cf2002-06-12 21:19:40 +0000348 def testRefCountGetNameInfo(self):
Guido van Rossum8c943832002-08-08 01:00:28 +0000349 # Testing reference count for getnameinfo
Serhiy Storchaka32e23e72013-11-03 23:15:46 +0200350 try:
351 # On some versions, this loses a reference
352 orig = sys.getrefcount(__name__)
353 socket.getnameinfo(__name__,0)
354 except TypeError:
355 self.assertEqual(sys.getrefcount(__name__), orig,
356 "socket.getnameinfo loses a reference")
Barry Warsawcf3d4b51997-01-03 20:03:32 +0000357
Guido van Rossum24e4af82002-06-12 19:18:08 +0000358 def testInterpreterCrash(self):
Guido van Rossum8c943832002-08-08 01:00:28 +0000359 # Making sure getnameinfo doesn't crash the interpreter
Guido van Rossum24e4af82002-06-12 19:18:08 +0000360 try:
361 # On some versions, this crashes the interpreter.
362 socket.getnameinfo(('x', 0, 0, 0), 0)
363 except socket.error:
364 pass
Barry Warsawcf3d4b51997-01-03 20:03:32 +0000365
Guido van Rossumc0a0e082002-09-16 01:30:03 +0000366 def testNtoH(self):
Guido van Rossuma2627af2002-09-14 00:58:46 +0000367 # This just checks that htons etc. are their own inverse,
368 # when looking at the lower 16 or 32 bits.
369 sizes = {socket.htonl: 32, socket.ntohl: 32,
370 socket.htons: 16, socket.ntohs: 16}
371 for func, size in sizes.items():
372 mask = (1L<<size) - 1
373 for i in (0, 1, 0xffff, ~0xffff, 2, 0x01234567, 0x76543210):
374 self.assertEqual(i & mask, func(func(i&mask)) & mask)
Jeremy Hyltoncbd5b892002-07-31 15:57:39 +0000375
Guido van Rossuma2627af2002-09-14 00:58:46 +0000376 swapped = func(mask)
377 self.assertEqual(swapped & mask, mask)
378 self.assertRaises(OverflowError, func, 1L<<34)
Jeremy Hyltonc075e192002-07-25 16:01:12 +0000379
Guido van Rossumbb2cc692007-01-14 17:03:32 +0000380 def testNtoHErrors(self):
381 good_values = [ 1, 2, 3, 1L, 2L, 3L ]
382 bad_values = [ -1, -2, -3, -1L, -2L, -3L ]
383 for k in good_values:
384 socket.ntohl(k)
385 socket.ntohs(k)
386 socket.htonl(k)
387 socket.htons(k)
388 for k in bad_values:
389 self.assertRaises(OverflowError, socket.ntohl, k)
390 self.assertRaises(OverflowError, socket.ntohs, k)
391 self.assertRaises(OverflowError, socket.htonl, k)
392 self.assertRaises(OverflowError, socket.htons, k)
393
Barry Warsaw11b91a02004-06-28 00:50:43 +0000394 def testGetServBy(self):
395 eq = self.assertEqual
396 # Find one service that exists, then check all the related interfaces.
397 # I've ordered this by protocols that have both a tcp and udp
398 # protocol, at least for modern Linuxes.
Gregory P. Smith886a1cd2010-10-17 04:28:14 +0000399 if (sys.platform.startswith('linux') or
400 sys.platform.startswith('freebsd') or
401 sys.platform.startswith('netbsd') or
402 sys.platform == 'darwin'):
Andrew MacIntyre18bf43c2004-07-12 12:10:30 +0000403 # avoid the 'echo' service on this platform, as there is an
404 # assumption breaking non-standard port/protocol entry
405 services = ('daytime', 'qotd', 'domain')
406 else:
407 services = ('echo', 'daytime', 'domain')
408 for service in services:
Skip Montanarof4433302002-08-02 15:52:30 +0000409 try:
Barry Warsaw11b91a02004-06-28 00:50:43 +0000410 port = socket.getservbyname(service, 'tcp')
Skip Montanarof4433302002-08-02 15:52:30 +0000411 break
412 except socket.error:
413 pass
Skip Montanaro05eb4012004-02-10 15:51:15 +0000414 else:
415 raise socket.error
Barry Warsaw11b91a02004-06-28 00:50:43 +0000416 # Try same call with optional protocol omitted
417 port2 = socket.getservbyname(service)
418 eq(port, port2)
Terry Jan Reedya70f60a2013-03-11 17:56:17 -0400419 # Try udp, but don't barf if it doesn't exist
Barry Warsaw11b91a02004-06-28 00:50:43 +0000420 try:
421 udpport = socket.getservbyname(service, 'udp')
422 except socket.error:
423 udpport = None
424 else:
425 eq(udpport, port)
426 # Now make sure the lookup by port returns the same service name
427 eq(socket.getservbyport(port2), service)
428 eq(socket.getservbyport(port, 'tcp'), service)
429 if udpport is not None:
430 eq(socket.getservbyport(udpport, 'udp'), service)
Gregory P. Smithde1a8b72009-01-31 22:57:30 +0000431 # Make sure getservbyport does not accept out of range ports.
432 self.assertRaises(OverflowError, socket.getservbyport, -1)
433 self.assertRaises(OverflowError, socket.getservbyport, 65536)
Guido van Rossum24e4af82002-06-12 19:18:08 +0000434
Guido van Rossum9d0c8ce2002-07-18 17:08:35 +0000435 def testDefaultTimeout(self):
Guido van Rossum8c943832002-08-08 01:00:28 +0000436 # Testing default timeout
Guido van Rossum9d0c8ce2002-07-18 17:08:35 +0000437 # The default timeout should initially be None
438 self.assertEqual(socket.getdefaulttimeout(), None)
439 s = socket.socket()
440 self.assertEqual(s.gettimeout(), None)
441 s.close()
442
443 # Set the default timeout to 10, and see if it propagates
444 socket.setdefaulttimeout(10)
445 self.assertEqual(socket.getdefaulttimeout(), 10)
446 s = socket.socket()
447 self.assertEqual(s.gettimeout(), 10)
448 s.close()
449
450 # Reset the default timeout to None, and see if it propagates
451 socket.setdefaulttimeout(None)
452 self.assertEqual(socket.getdefaulttimeout(), None)
453 s = socket.socket()
454 self.assertEqual(s.gettimeout(), None)
455 s.close()
456
457 # Check that setting it to an invalid value raises ValueError
458 self.assertRaises(ValueError, socket.setdefaulttimeout, -1)
459
460 # Check that setting it to an invalid type raises TypeError
461 self.assertRaises(TypeError, socket.setdefaulttimeout, "spam")
462
Serhiy Storchaka32e23e72013-11-03 23:15:46 +0200463 @unittest.skipUnless(hasattr(socket, 'inet_aton'),
464 'test needs socket.inet_aton()')
Gregory P. Smith3605b5c2009-02-11 23:45:25 +0000465 def testIPv4_inet_aton_fourbytes(self):
Gregory P. Smith3605b5c2009-02-11 23:45:25 +0000466 # Test that issue1008086 and issue767150 are fixed.
467 # It must return 4 bytes.
Ezio Melotti2623a372010-11-21 13:34:58 +0000468 self.assertEqual('\x00'*4, socket.inet_aton('0.0.0.0'))
469 self.assertEqual('\xff'*4, socket.inet_aton('255.255.255.255'))
Gregory P. Smith3605b5c2009-02-11 23:45:25 +0000470
Serhiy Storchaka32e23e72013-11-03 23:15:46 +0200471 @unittest.skipUnless(hasattr(socket, 'inet_pton'),
472 'test needs socket.inet_pton()')
Guido van Rossum47dfa4a2003-04-25 05:48:32 +0000473 def testIPv4toString(self):
474 from socket import inet_aton as f, inet_pton, AF_INET
475 g = lambda a: inet_pton(AF_INET, a)
476
Ezio Melotti2623a372010-11-21 13:34:58 +0000477 self.assertEqual('\x00\x00\x00\x00', f('0.0.0.0'))
478 self.assertEqual('\xff\x00\xff\x00', f('255.0.255.0'))
479 self.assertEqual('\xaa\xaa\xaa\xaa', f('170.170.170.170'))
480 self.assertEqual('\x01\x02\x03\x04', f('1.2.3.4'))
481 self.assertEqual('\xff\xff\xff\xff', f('255.255.255.255'))
Guido van Rossum47dfa4a2003-04-25 05:48:32 +0000482
Ezio Melotti2623a372010-11-21 13:34:58 +0000483 self.assertEqual('\x00\x00\x00\x00', g('0.0.0.0'))
484 self.assertEqual('\xff\x00\xff\x00', g('255.0.255.0'))
485 self.assertEqual('\xaa\xaa\xaa\xaa', g('170.170.170.170'))
486 self.assertEqual('\xff\xff\xff\xff', g('255.255.255.255'))
Tim Petersc2659cf2003-05-12 20:19:37 +0000487
Serhiy Storchaka32e23e72013-11-03 23:15:46 +0200488 @unittest.skipUnless(hasattr(socket, 'inet_pton'),
489 'test needs socket.inet_pton()')
Guido van Rossum47dfa4a2003-04-25 05:48:32 +0000490 def testIPv6toString(self):
491 try:
492 from socket import inet_pton, AF_INET6, has_ipv6
493 if not has_ipv6:
494 return
495 except ImportError:
496 return
497 f = lambda a: inet_pton(AF_INET6, a)
498
Ezio Melotti2623a372010-11-21 13:34:58 +0000499 self.assertEqual('\x00' * 16, f('::'))
500 self.assertEqual('\x00' * 16, f('0::0'))
501 self.assertEqual('\x00\x01' + '\x00' * 14, f('1::'))
502 self.assertEqual(
Guido van Rossum47dfa4a2003-04-25 05:48:32 +0000503 '\x45\xef\x76\xcb\x00\x1a\x56\xef\xaf\xeb\x0b\xac\x19\x24\xae\xae',
504 f('45ef:76cb:1a:56ef:afeb:bac:1924:aeae')
505 )
Tim Petersc2659cf2003-05-12 20:19:37 +0000506
Serhiy Storchaka32e23e72013-11-03 23:15:46 +0200507 @unittest.skipUnless(hasattr(socket, 'inet_ntop'),
508 'test needs socket.inet_ntop()')
Guido van Rossum47dfa4a2003-04-25 05:48:32 +0000509 def testStringToIPv4(self):
510 from socket import inet_ntoa as f, inet_ntop, AF_INET
511 g = lambda a: inet_ntop(AF_INET, a)
512
Ezio Melotti2623a372010-11-21 13:34:58 +0000513 self.assertEqual('1.0.1.0', f('\x01\x00\x01\x00'))
514 self.assertEqual('170.85.170.85', f('\xaa\x55\xaa\x55'))
515 self.assertEqual('255.255.255.255', f('\xff\xff\xff\xff'))
516 self.assertEqual('1.2.3.4', f('\x01\x02\x03\x04'))
Tim Petersc2659cf2003-05-12 20:19:37 +0000517
Ezio Melotti2623a372010-11-21 13:34:58 +0000518 self.assertEqual('1.0.1.0', g('\x01\x00\x01\x00'))
519 self.assertEqual('170.85.170.85', g('\xaa\x55\xaa\x55'))
520 self.assertEqual('255.255.255.255', g('\xff\xff\xff\xff'))
Guido van Rossum47dfa4a2003-04-25 05:48:32 +0000521
Serhiy Storchaka32e23e72013-11-03 23:15:46 +0200522 @unittest.skipUnless(hasattr(socket, 'inet_ntop'),
523 'test needs socket.inet_ntop()')
Guido van Rossum47dfa4a2003-04-25 05:48:32 +0000524 def testStringToIPv6(self):
525 try:
526 from socket import inet_ntop, AF_INET6, has_ipv6
527 if not has_ipv6:
528 return
529 except ImportError:
530 return
531 f = lambda a: inet_ntop(AF_INET6, a)
532
Ezio Melotti2623a372010-11-21 13:34:58 +0000533 self.assertEqual('::', f('\x00' * 16))
534 self.assertEqual('::1', f('\x00' * 15 + '\x01'))
535 self.assertEqual(
Guido van Rossum47dfa4a2003-04-25 05:48:32 +0000536 'aef:b01:506:1001:ffff:9997:55:170',
537 f('\x0a\xef\x0b\x01\x05\x06\x10\x01\xff\xff\x99\x97\x00\x55\x01\x70')
538 )
539
Guido van Rossumb6cc7d22002-07-19 12:46:46 +0000540 # XXX The following don't test module-level functionality...
Guido van Rossum9d0c8ce2002-07-18 17:08:35 +0000541
Gregory P. Smithde1a8b72009-01-31 22:57:30 +0000542 def _get_unused_port(self, bind_address='0.0.0.0'):
543 """Use a temporary socket to elicit an unused ephemeral port.
Trent Nelsone41b0062008-04-08 23:47:30 +0000544
Gregory P. Smithde1a8b72009-01-31 22:57:30 +0000545 Args:
546 bind_address: Hostname or IP address to search for a port on.
547
548 Returns: A most likely to be unused port.
549 """
550 tempsock = socket.socket()
551 tempsock.bind((bind_address, 0))
552 host, port = tempsock.getsockname()
553 tempsock.close()
554 return port
555
556 def testSockName(self):
557 # Testing getsockname()
558 port = self._get_unused_port()
Guido van Rossum24e4af82002-06-12 19:18:08 +0000559 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
Brian Curtin62c20b62010-11-02 02:59:55 +0000560 self.addCleanup(sock.close)
Trent Nelsone41b0062008-04-08 23:47:30 +0000561 sock.bind(("0.0.0.0", port))
Guido van Rossum24e4af82002-06-12 19:18:08 +0000562 name = sock.getsockname()
Neal Norwitz4a9ff162006-06-11 21:38:38 +0000563 # XXX(nnorwitz): http://tinyurl.com/os5jz seems to indicate
564 # it reasonable to get the host's addr in addition to 0.0.0.0.
565 # At least for eCos. This is required for the S/390 to pass.
Georg Brandlb7276502010-11-26 08:28:05 +0000566 try:
567 my_ip_addr = socket.gethostbyname(socket.gethostname())
568 except socket.error:
569 # Probably name lookup wasn't set up right; skip this test
570 return
Ezio Melottiaa980582010-01-23 23:04:36 +0000571 self.assertIn(name[0], ("0.0.0.0", my_ip_addr), '%s invalid' % name[0])
Trent Nelsone41b0062008-04-08 23:47:30 +0000572 self.assertEqual(name[1], port)
Guido van Rossum24e4af82002-06-12 19:18:08 +0000573
574 def testGetSockOpt(self):
Guido van Rossum8c943832002-08-08 01:00:28 +0000575 # Testing getsockopt()
Guido van Rossum24e4af82002-06-12 19:18:08 +0000576 # We know a socket should start without reuse==0
577 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
Brian Curtin62c20b62010-11-02 02:59:55 +0000578 self.addCleanup(sock.close)
Guido van Rossum24e4af82002-06-12 19:18:08 +0000579 reuse = sock.getsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR)
Benjamin Peterson5c8da862009-06-30 22:57:08 +0000580 self.assertFalse(reuse != 0, "initial mode is reuse")
Guido van Rossum24e4af82002-06-12 19:18:08 +0000581
582 def testSetSockOpt(self):
Guido van Rossum8c943832002-08-08 01:00:28 +0000583 # Testing setsockopt()
Guido van Rossum24e4af82002-06-12 19:18:08 +0000584 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
Brian Curtin62c20b62010-11-02 02:59:55 +0000585 self.addCleanup(sock.close)
Guido van Rossum24e4af82002-06-12 19:18:08 +0000586 sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
587 reuse = sock.getsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR)
Benjamin Peterson5c8da862009-06-30 22:57:08 +0000588 self.assertFalse(reuse == 0, "failed to set reuse mode")
Guido van Rossum24e4af82002-06-12 19:18:08 +0000589
Guido van Rossumb6cc7d22002-07-19 12:46:46 +0000590 def testSendAfterClose(self):
Guido van Rossum8c943832002-08-08 01:00:28 +0000591 # testing send() after close() with timeout
Guido van Rossumb6cc7d22002-07-19 12:46:46 +0000592 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
593 sock.settimeout(1)
594 sock.close()
595 self.assertRaises(socket.error, sock.send, "spam")
596
Georg Brandlbb03ac02006-03-21 18:17:25 +0000597 def testNewAttributes(self):
598 # testing .family, .type and .protocol
Georg Brandlbc45a3f2006-03-17 19:17:34 +0000599 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
Georg Brandlbb03ac02006-03-21 18:17:25 +0000600 self.assertEqual(sock.family, socket.AF_INET)
601 self.assertEqual(sock.type, socket.SOCK_STREAM)
602 self.assertEqual(sock.proto, 0)
Georg Brandlbc45a3f2006-03-17 19:17:34 +0000603 sock.close()
604
Gregory P. Smithde1a8b72009-01-31 22:57:30 +0000605 def test_getsockaddrarg(self):
606 host = '0.0.0.0'
607 port = self._get_unused_port(bind_address=host)
608 big_port = port + 65536
609 neg_port = port - 65536
610 sock = socket.socket()
611 try:
612 self.assertRaises(OverflowError, sock.bind, (host, big_port))
613 self.assertRaises(OverflowError, sock.bind, (host, neg_port))
614 sock.bind((host, port))
615 finally:
616 sock.close()
617
Brian Curtin91a5b812010-11-05 15:52:20 +0000618 @unittest.skipUnless(os.name == "nt", "Windows specific")
Christian Heimesa47b75b2008-01-04 15:48:06 +0000619 def test_sock_ioctl(self):
Benjamin Peterson5c8da862009-06-30 22:57:08 +0000620 self.assertTrue(hasattr(socket.socket, 'ioctl'))
621 self.assertTrue(hasattr(socket, 'SIO_RCVALL'))
622 self.assertTrue(hasattr(socket, 'RCVALL_ON'))
623 self.assertTrue(hasattr(socket, 'RCVALL_OFF'))
Kristján Valur Jónsson2fcd03b2009-09-25 15:19:51 +0000624 self.assertTrue(hasattr(socket, 'SIO_KEEPALIVE_VALS'))
625 s = socket.socket()
Brian Curtin91a5b812010-11-05 15:52:20 +0000626 self.addCleanup(s.close)
Kristján Valur Jónsson2fcd03b2009-09-25 15:19:51 +0000627 self.assertRaises(ValueError, s.ioctl, -1, None)
628 s.ioctl(socket.SIO_KEEPALIVE_VALS, (1, 100, 100))
Christian Heimesa47b75b2008-01-04 15:48:06 +0000629
Giampaolo Rodolà633e4742010-08-14 17:04:46 +0000630 def testGetaddrinfo(self):
631 try:
632 socket.getaddrinfo('localhost', 80)
633 except socket.gaierror as err:
634 if err.errno == socket.EAI_SERVICE:
635 # see http://bugs.python.org/issue1282647
636 self.skipTest("buggy libc version")
637 raise
638 # len of every sequence is supposed to be == 5
639 for info in socket.getaddrinfo(HOST, None):
640 self.assertEqual(len(info), 5)
641 # host can be a domain name, a string representation of an
642 # IPv4/v6 address or None
643 socket.getaddrinfo('localhost', 80)
644 socket.getaddrinfo('127.0.0.1', 80)
645 socket.getaddrinfo(None, 80)
646 if SUPPORTS_IPV6:
647 socket.getaddrinfo('::1', 80)
648 # port can be a string service name such as "http", a numeric
Petri Lehtinenab7dd182012-12-20 21:06:14 +0200649 # port number (int or long), or None
Giampaolo Rodolà633e4742010-08-14 17:04:46 +0000650 socket.getaddrinfo(HOST, "http")
651 socket.getaddrinfo(HOST, 80)
Petri Lehtinenab7dd182012-12-20 21:06:14 +0200652 socket.getaddrinfo(HOST, 80L)
Giampaolo Rodolà633e4742010-08-14 17:04:46 +0000653 socket.getaddrinfo(HOST, None)
654 # test family and socktype filters
655 infos = socket.getaddrinfo(HOST, None, socket.AF_INET)
656 for family, _, _, _, _ in infos:
657 self.assertEqual(family, socket.AF_INET)
658 infos = socket.getaddrinfo(HOST, None, 0, socket.SOCK_STREAM)
659 for _, socktype, _, _, _ in infos:
660 self.assertEqual(socktype, socket.SOCK_STREAM)
661 # test proto and flags arguments
Giampaolo Rodolà8a9b2222010-08-16 05:10:30 +0000662 socket.getaddrinfo(HOST, None, 0, 0, socket.SOL_TCP)
Giampaolo Rodolà633e4742010-08-14 17:04:46 +0000663 socket.getaddrinfo(HOST, None, 0, 0, 0, socket.AI_PASSIVE)
664 # a server willing to support both IPv4 and IPv6 will
665 # usually do this
666 socket.getaddrinfo(None, 0, socket.AF_UNSPEC, socket.SOCK_STREAM, 0,
667 socket.AI_PASSIVE)
668
Ronald Oussoren16c52a32013-05-24 13:45:27 +0200669 # Issue 17269
Ronald Oussoren0e6283e2013-06-10 10:35:36 +0200670 if hasattr(socket, 'AI_NUMERICSERV'):
671 socket.getaddrinfo("localhost", None, 0, 0, 0, socket.AI_NUMERICSERV)
Christian Heimesa47b75b2008-01-04 15:48:06 +0000672
Antoine Pitrou66b5df62010-09-27 18:16:46 +0000673 def check_sendall_interrupted(self, with_timeout):
674 # socketpair() is not stricly required, but it makes things easier.
675 if not hasattr(signal, 'alarm') or not hasattr(socket, 'socketpair'):
676 self.skipTest("signal.alarm and socket.socketpair required for this test")
677 # Our signal handlers clobber the C errno by calling a math function
678 # with an invalid domain value.
679 def ok_handler(*args):
680 self.assertRaises(ValueError, math.acosh, 0)
681 def raising_handler(*args):
682 self.assertRaises(ValueError, math.acosh, 0)
683 1 // 0
684 c, s = socket.socketpair()
685 old_alarm = signal.signal(signal.SIGALRM, raising_handler)
686 try:
687 if with_timeout:
688 # Just above the one second minimum for signal.alarm
689 c.settimeout(1.5)
690 with self.assertRaises(ZeroDivisionError):
691 signal.alarm(1)
Charles-François Natali5aac8b72013-08-29 19:00:30 +0200692 c.sendall(b"x" * test_support.SOCK_MAX_SIZE)
Antoine Pitrou66b5df62010-09-27 18:16:46 +0000693 if with_timeout:
694 signal.signal(signal.SIGALRM, ok_handler)
695 signal.alarm(1)
Charles-François Natali5aac8b72013-08-29 19:00:30 +0200696 self.assertRaises(socket.timeout, c.sendall,
697 b"x" * test_support.SOCK_MAX_SIZE)
Antoine Pitrou66b5df62010-09-27 18:16:46 +0000698 finally:
699 signal.signal(signal.SIGALRM, old_alarm)
700 c.close()
701 s.close()
702
703 def test_sendall_interrupted(self):
704 self.check_sendall_interrupted(False)
705
706 def test_sendall_interrupted_with_timeout(self):
707 self.check_sendall_interrupted(True)
708
Serhiy Storchaka74f49ab2013-01-19 12:55:39 +0200709 def test_listen_backlog(self):
710 for backlog in 0, -1:
711 srv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
712 srv.bind((HOST, 0))
713 srv.listen(backlog)
714 srv.close()
715
716 # Issue 15989
Antoine Pitrou47d1d0d2011-05-10 19:16:03 +0200717 srv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
718 srv.bind((HOST, 0))
Serhiy Storchaka74f49ab2013-01-19 12:55:39 +0200719 self.assertRaises(OverflowError, srv.listen, _testcapi.INT_MAX + 1)
Antoine Pitrou47d1d0d2011-05-10 19:16:03 +0200720 srv.close()
721
Charles-François Natali3aa59e32012-01-02 15:38:27 +0100722 @unittest.skipUnless(SUPPORTS_IPV6, 'IPv6 required for this test.')
723 def test_flowinfo(self):
724 self.assertRaises(OverflowError, socket.getnameinfo,
725 ('::1',0, 0xffffffff), 0)
726 s = socket.socket(socket.AF_INET6, socket.SOCK_STREAM)
727 try:
728 self.assertRaises(OverflowError, s.bind, ('::1', 0, -10))
729 finally:
730 s.close()
731
Antoine Pitrou66b5df62010-09-27 18:16:46 +0000732
Victor Stinner6a102812010-04-27 23:55:59 +0000733@unittest.skipUnless(thread, 'Threading required for this test.')
Guido van Rossum24e4af82002-06-12 19:18:08 +0000734class BasicTCPTest(SocketConnectedTest):
735
736 def __init__(self, methodName='runTest'):
737 SocketConnectedTest.__init__(self, methodName=methodName)
738
739 def testRecv(self):
Guido van Rossum8c943832002-08-08 01:00:28 +0000740 # Testing large receive over TCP
Guido van Rossum24e4af82002-06-12 19:18:08 +0000741 msg = self.cli_conn.recv(1024)
Guido van Rossum76489682002-06-12 20:38:30 +0000742 self.assertEqual(msg, MSG)
Guido van Rossum24e4af82002-06-12 19:18:08 +0000743
744 def _testRecv(self):
745 self.serv_conn.send(MSG)
746
747 def testOverFlowRecv(self):
Guido van Rossum8c943832002-08-08 01:00:28 +0000748 # Testing receive in chunks over TCP
Guido van Rossum24e4af82002-06-12 19:18:08 +0000749 seg1 = self.cli_conn.recv(len(MSG) - 3)
750 seg2 = self.cli_conn.recv(1024)
Guido van Rossumab659962002-06-12 21:29:43 +0000751 msg = seg1 + seg2
Guido van Rossum76489682002-06-12 20:38:30 +0000752 self.assertEqual(msg, MSG)
Guido van Rossum24e4af82002-06-12 19:18:08 +0000753
754 def _testOverFlowRecv(self):
755 self.serv_conn.send(MSG)
756
757 def testRecvFrom(self):
Guido van Rossum8c943832002-08-08 01:00:28 +0000758 # Testing large recvfrom() over TCP
Guido van Rossum24e4af82002-06-12 19:18:08 +0000759 msg, addr = self.cli_conn.recvfrom(1024)
Guido van Rossum76489682002-06-12 20:38:30 +0000760 self.assertEqual(msg, MSG)
Guido van Rossum24e4af82002-06-12 19:18:08 +0000761
762 def _testRecvFrom(self):
763 self.serv_conn.send(MSG)
764
765 def testOverFlowRecvFrom(self):
Guido van Rossum8c943832002-08-08 01:00:28 +0000766 # Testing recvfrom() in chunks over TCP
Guido van Rossum24e4af82002-06-12 19:18:08 +0000767 seg1, addr = self.cli_conn.recvfrom(len(MSG)-3)
768 seg2, addr = self.cli_conn.recvfrom(1024)
Guido van Rossumab659962002-06-12 21:29:43 +0000769 msg = seg1 + seg2
Guido van Rossum76489682002-06-12 20:38:30 +0000770 self.assertEqual(msg, MSG)
Guido van Rossum24e4af82002-06-12 19:18:08 +0000771
772 def _testOverFlowRecvFrom(self):
773 self.serv_conn.send(MSG)
774
775 def testSendAll(self):
Guido van Rossum8c943832002-08-08 01:00:28 +0000776 # Testing sendall() with a 2048 byte string over TCP
Guido van Rossume531e292002-08-08 20:28:34 +0000777 msg = ''
Guido van Rossum24e4af82002-06-12 19:18:08 +0000778 while 1:
779 read = self.cli_conn.recv(1024)
780 if not read:
781 break
Guido van Rossume531e292002-08-08 20:28:34 +0000782 msg += read
783 self.assertEqual(msg, 'f' * 2048)
Guido van Rossum24e4af82002-06-12 19:18:08 +0000784
785 def _testSendAll(self):
Guido van Rossumab659962002-06-12 21:29:43 +0000786 big_chunk = 'f' * 2048
Guido van Rossum24e4af82002-06-12 19:18:08 +0000787 self.serv_conn.sendall(big_chunk)
788
789 def testFromFd(self):
Guido van Rossum8c943832002-08-08 01:00:28 +0000790 # Testing fromfd()
Guido van Rossum8e95ca82002-06-12 20:55:17 +0000791 if not hasattr(socket, "fromfd"):
Guido van Rossum6fb3d5e2002-06-12 20:48:59 +0000792 return # On Windows, this doesn't exist
Guido van Rossum24e4af82002-06-12 19:18:08 +0000793 fd = self.cli_conn.fileno()
794 sock = socket.fromfd(fd, socket.AF_INET, socket.SOCK_STREAM)
Brian Curtin62c20b62010-11-02 02:59:55 +0000795 self.addCleanup(sock.close)
Guido van Rossum24e4af82002-06-12 19:18:08 +0000796 msg = sock.recv(1024)
Guido van Rossum76489682002-06-12 20:38:30 +0000797 self.assertEqual(msg, MSG)
Guido van Rossum24e4af82002-06-12 19:18:08 +0000798
799 def _testFromFd(self):
800 self.serv_conn.send(MSG)
801
Brian Curtin62c20b62010-11-02 02:59:55 +0000802 def testDup(self):
803 # Testing dup()
804 sock = self.cli_conn.dup()
805 self.addCleanup(sock.close)
806 msg = sock.recv(1024)
807 self.assertEqual(msg, MSG)
808
809 def _testDup(self):
810 self.serv_conn.send(MSG)
811
Guido van Rossum24e4af82002-06-12 19:18:08 +0000812 def testShutdown(self):
Guido van Rossum8c943832002-08-08 01:00:28 +0000813 # Testing shutdown()
Guido van Rossum24e4af82002-06-12 19:18:08 +0000814 msg = self.cli_conn.recv(1024)
Guido van Rossum76489682002-06-12 20:38:30 +0000815 self.assertEqual(msg, MSG)
Mark Dickinsone82cdae2009-01-15 14:54:37 +0000816 # wait for _testShutdown to finish: on OS X, when the server
817 # closes the connection the client also becomes disconnected,
Mark Dickinson0e151822009-01-15 14:58:28 +0000818 # and the client's shutdown call will fail. (Issue #4397.)
Mark Dickinsone82cdae2009-01-15 14:54:37 +0000819 self.done.wait()
Guido van Rossum24e4af82002-06-12 19:18:08 +0000820
821 def _testShutdown(self):
822 self.serv_conn.send(MSG)
Serhiy Storchaka74f49ab2013-01-19 12:55:39 +0200823 # Issue 15989
824 self.assertRaises(OverflowError, self.serv_conn.shutdown,
825 _testcapi.INT_MAX + 1)
826 self.assertRaises(OverflowError, self.serv_conn.shutdown,
827 2 + (_testcapi.UINT_MAX + 1))
Guido van Rossum24e4af82002-06-12 19:18:08 +0000828 self.serv_conn.shutdown(2)
829
Victor Stinner6a102812010-04-27 23:55:59 +0000830@unittest.skipUnless(thread, 'Threading required for this test.')
Guido van Rossum24e4af82002-06-12 19:18:08 +0000831class BasicUDPTest(ThreadedUDPSocketTest):
832
833 def __init__(self, methodName='runTest'):
834 ThreadedUDPSocketTest.__init__(self, methodName=methodName)
835
836 def testSendtoAndRecv(self):
Guido van Rossum8c943832002-08-08 01:00:28 +0000837 # Testing sendto() and Recv() over UDP
Guido van Rossum24e4af82002-06-12 19:18:08 +0000838 msg = self.serv.recv(len(MSG))
Guido van Rossum76489682002-06-12 20:38:30 +0000839 self.assertEqual(msg, MSG)
Guido van Rossum24e4af82002-06-12 19:18:08 +0000840
841 def _testSendtoAndRecv(self):
Trent Nelsone41b0062008-04-08 23:47:30 +0000842 self.cli.sendto(MSG, 0, (HOST, self.port))
Guido van Rossum24e4af82002-06-12 19:18:08 +0000843
Guido van Rossum1c938012002-06-12 21:17:20 +0000844 def testRecvFrom(self):
Guido van Rossum8c943832002-08-08 01:00:28 +0000845 # Testing recvfrom() over UDP
Guido van Rossum24e4af82002-06-12 19:18:08 +0000846 msg, addr = self.serv.recvfrom(len(MSG))
Guido van Rossum76489682002-06-12 20:38:30 +0000847 self.assertEqual(msg, MSG)
Guido van Rossum24e4af82002-06-12 19:18:08 +0000848
Guido van Rossum1c938012002-06-12 21:17:20 +0000849 def _testRecvFrom(self):
Trent Nelsone41b0062008-04-08 23:47:30 +0000850 self.cli.sendto(MSG, 0, (HOST, self.port))
Guido van Rossum24e4af82002-06-12 19:18:08 +0000851
Facundo Batista1fe9f962007-03-28 03:45:20 +0000852 def testRecvFromNegative(self):
853 # Negative lengths passed to recvfrom should give ValueError.
854 self.assertRaises(ValueError, self.serv.recvfrom, -1)
855
856 def _testRecvFromNegative(self):
Trent Nelsone41b0062008-04-08 23:47:30 +0000857 self.cli.sendto(MSG, 0, (HOST, self.port))
Facundo Batista1fe9f962007-03-28 03:45:20 +0000858
Victor Stinner6a102812010-04-27 23:55:59 +0000859@unittest.skipUnless(thread, 'Threading required for this test.')
Martin v. Löwis7596e832006-07-01 15:33:37 +0000860class TCPCloserTest(ThreadedTCPSocketTest):
861
862 def testClose(self):
863 conn, addr = self.serv.accept()
864 conn.close()
865
866 sd = self.cli
867 read, write, err = select.select([sd], [], [], 1.0)
868 self.assertEqual(read, [sd])
869 self.assertEqual(sd.recv(1), '')
870
871 def _testClose(self):
Trent Nelsone41b0062008-04-08 23:47:30 +0000872 self.cli.connect((HOST, self.port))
Martin v. Löwis7596e832006-07-01 15:33:37 +0000873 time.sleep(1.0)
874
Serhiy Storchaka32e23e72013-11-03 23:15:46 +0200875@unittest.skipUnless(hasattr(socket, 'socketpair'),
876 'test needs socket.socketpair()')
Victor Stinner6a102812010-04-27 23:55:59 +0000877@unittest.skipUnless(thread, 'Threading required for this test.')
Dave Cole331708b2004-08-09 04:51:41 +0000878class BasicSocketPairTest(SocketPairTest):
879
880 def __init__(self, methodName='runTest'):
881 SocketPairTest.__init__(self, methodName=methodName)
882
883 def testRecv(self):
884 msg = self.serv.recv(1024)
885 self.assertEqual(msg, MSG)
886
887 def _testRecv(self):
888 self.cli.send(MSG)
889
890 def testSend(self):
891 self.serv.send(MSG)
892
893 def _testSend(self):
894 msg = self.cli.recv(1024)
895 self.assertEqual(msg, MSG)
896
Victor Stinner6a102812010-04-27 23:55:59 +0000897@unittest.skipUnless(thread, 'Threading required for this test.')
Guido van Rossum24e4af82002-06-12 19:18:08 +0000898class NonBlockingTCPTests(ThreadedTCPSocketTest):
899
900 def __init__(self, methodName='runTest'):
901 ThreadedTCPSocketTest.__init__(self, methodName=methodName)
902
903 def testSetBlocking(self):
Guido van Rossum8c943832002-08-08 01:00:28 +0000904 # Testing whether set blocking works
Serhiy Storchaka74f49ab2013-01-19 12:55:39 +0200905 self.serv.setblocking(True)
906 self.assertIsNone(self.serv.gettimeout())
907 self.serv.setblocking(False)
908 self.assertEqual(self.serv.gettimeout(), 0.0)
Guido van Rossum24e4af82002-06-12 19:18:08 +0000909 start = time.time()
910 try:
911 self.serv.accept()
912 except socket.error:
913 pass
914 end = time.time()
Benjamin Peterson5c8da862009-06-30 22:57:08 +0000915 self.assertTrue((end - start) < 1.0, "Error setting non-blocking mode.")
Serhiy Storchaka74f49ab2013-01-19 12:55:39 +0200916 # Issue 15989
917 if _testcapi.UINT_MAX < _testcapi.ULONG_MAX:
918 self.serv.setblocking(_testcapi.UINT_MAX + 1)
919 self.assertIsNone(self.serv.gettimeout())
Guido van Rossum24e4af82002-06-12 19:18:08 +0000920
921 def _testSetBlocking(self):
Barry Warsaw6870bba2001-03-23 17:40:16 +0000922 pass
Barry Warsawcf3d4b51997-01-03 20:03:32 +0000923
Guido van Rossum24e4af82002-06-12 19:18:08 +0000924 def testAccept(self):
Guido van Rossum8c943832002-08-08 01:00:28 +0000925 # Testing non-blocking accept
Guido van Rossum24e4af82002-06-12 19:18:08 +0000926 self.serv.setblocking(0)
Guido van Rossum41360a41998-03-26 19:42:58 +0000927 try:
Guido van Rossum24e4af82002-06-12 19:18:08 +0000928 conn, addr = self.serv.accept()
929 except socket.error:
930 pass
931 else:
932 self.fail("Error trying to do non-blocking accept.")
933 read, write, err = select.select([self.serv], [], [])
934 if self.serv in read:
935 conn, addr = self.serv.accept()
Brian Curtin62c20b62010-11-02 02:59:55 +0000936 conn.close()
Guido van Rossum24e4af82002-06-12 19:18:08 +0000937 else:
938 self.fail("Error trying to do accept after select.")
Guido van Rossum67f7a382002-06-06 21:08:16 +0000939
Guido van Rossum24e4af82002-06-12 19:18:08 +0000940 def _testAccept(self):
Guido van Rossumb6cc7d22002-07-19 12:46:46 +0000941 time.sleep(0.1)
Trent Nelsone41b0062008-04-08 23:47:30 +0000942 self.cli.connect((HOST, self.port))
Guido van Rossum24e4af82002-06-12 19:18:08 +0000943
944 def testConnect(self):
Guido van Rossum8c943832002-08-08 01:00:28 +0000945 # Testing non-blocking connect
Guido van Rossum24e4af82002-06-12 19:18:08 +0000946 conn, addr = self.serv.accept()
Brian Curtin62c20b62010-11-02 02:59:55 +0000947 conn.close()
Guido van Rossum24e4af82002-06-12 19:18:08 +0000948
949 def _testConnect(self):
Guido van Rossum7b8bac12002-06-13 16:07:04 +0000950 self.cli.settimeout(10)
Trent Nelsone41b0062008-04-08 23:47:30 +0000951 self.cli.connect((HOST, self.port))
Guido van Rossum24e4af82002-06-12 19:18:08 +0000952
953 def testRecv(self):
Guido van Rossum8c943832002-08-08 01:00:28 +0000954 # Testing non-blocking recv
Guido van Rossum24e4af82002-06-12 19:18:08 +0000955 conn, addr = self.serv.accept()
956 conn.setblocking(0)
957 try:
958 msg = conn.recv(len(MSG))
959 except socket.error:
960 pass
961 else:
962 self.fail("Error trying to do non-blocking recv.")
963 read, write, err = select.select([conn], [], [])
964 if conn in read:
965 msg = conn.recv(len(MSG))
Brian Curtin62c20b62010-11-02 02:59:55 +0000966 conn.close()
Guido van Rossum76489682002-06-12 20:38:30 +0000967 self.assertEqual(msg, MSG)
Guido van Rossum24e4af82002-06-12 19:18:08 +0000968 else:
969 self.fail("Error during select call to non-blocking socket.")
970
971 def _testRecv(self):
Trent Nelsone41b0062008-04-08 23:47:30 +0000972 self.cli.connect((HOST, self.port))
Guido van Rossumb6cc7d22002-07-19 12:46:46 +0000973 time.sleep(0.1)
Guido van Rossum24e4af82002-06-12 19:18:08 +0000974 self.cli.send(MSG)
975
Victor Stinner6a102812010-04-27 23:55:59 +0000976@unittest.skipUnless(thread, 'Threading required for this test.')
Guido van Rossum24e4af82002-06-12 19:18:08 +0000977class FileObjectClassTestCase(SocketConnectedTest):
978
Guido van Rossume9f66142002-08-07 15:46:19 +0000979 bufsize = -1 # Use default buffer size
980
Guido van Rossum24e4af82002-06-12 19:18:08 +0000981 def __init__(self, methodName='runTest'):
982 SocketConnectedTest.__init__(self, methodName=methodName)
983
984 def setUp(self):
985 SocketConnectedTest.setUp(self)
Guido van Rossume9f66142002-08-07 15:46:19 +0000986 self.serv_file = self.cli_conn.makefile('rb', self.bufsize)
Guido van Rossum24e4af82002-06-12 19:18:08 +0000987
988 def tearDown(self):
989 self.serv_file.close()
Benjamin Peterson5c8da862009-06-30 22:57:08 +0000990 self.assertTrue(self.serv_file.closed)
Guido van Rossum24e4af82002-06-12 19:18:08 +0000991 SocketConnectedTest.tearDown(self)
Kristján Valur Jónsson2380fee2012-12-25 13:04:50 +0000992 self.serv_file = None
Guido van Rossum24e4af82002-06-12 19:18:08 +0000993
994 def clientSetUp(self):
995 SocketConnectedTest.clientSetUp(self)
Guido van Rossume9f66142002-08-07 15:46:19 +0000996 self.cli_file = self.serv_conn.makefile('wb')
Guido van Rossum24e4af82002-06-12 19:18:08 +0000997
998 def clientTearDown(self):
999 self.cli_file.close()
Benjamin Peterson5c8da862009-06-30 22:57:08 +00001000 self.assertTrue(self.cli_file.closed)
Guido van Rossum24e4af82002-06-12 19:18:08 +00001001 self.cli_file = None
1002 SocketConnectedTest.clientTearDown(self)
1003
1004 def testSmallRead(self):
Guido van Rossum8c943832002-08-08 01:00:28 +00001005 # Performing small file read test
Guido van Rossum24e4af82002-06-12 19:18:08 +00001006 first_seg = self.serv_file.read(len(MSG)-3)
1007 second_seg = self.serv_file.read(3)
Guido van Rossumab659962002-06-12 21:29:43 +00001008 msg = first_seg + second_seg
Guido van Rossum76489682002-06-12 20:38:30 +00001009 self.assertEqual(msg, MSG)
Guido van Rossum24e4af82002-06-12 19:18:08 +00001010
1011 def _testSmallRead(self):
1012 self.cli_file.write(MSG)
1013 self.cli_file.flush()
1014
Guido van Rossum8c943832002-08-08 01:00:28 +00001015 def testFullRead(self):
1016 # read until EOF
1017 msg = self.serv_file.read()
1018 self.assertEqual(msg, MSG)
1019
1020 def _testFullRead(self):
1021 self.cli_file.write(MSG)
1022 self.cli_file.close()
1023
Guido van Rossum24e4af82002-06-12 19:18:08 +00001024 def testUnbufferedRead(self):
Guido van Rossum8c943832002-08-08 01:00:28 +00001025 # Performing unbuffered file read test
Guido van Rossum24e4af82002-06-12 19:18:08 +00001026 buf = ''
1027 while 1:
1028 char = self.serv_file.read(1)
Guido van Rossum8c943832002-08-08 01:00:28 +00001029 if not char:
Guido van Rossum24e4af82002-06-12 19:18:08 +00001030 break
Guido van Rossum8c943832002-08-08 01:00:28 +00001031 buf += char
1032 self.assertEqual(buf, MSG)
Guido van Rossum24e4af82002-06-12 19:18:08 +00001033
1034 def _testUnbufferedRead(self):
1035 self.cli_file.write(MSG)
1036 self.cli_file.flush()
1037
1038 def testReadline(self):
Guido van Rossum8c943832002-08-08 01:00:28 +00001039 # Performing file readline test
Guido van Rossum24e4af82002-06-12 19:18:08 +00001040 line = self.serv_file.readline()
Guido van Rossum76489682002-06-12 20:38:30 +00001041 self.assertEqual(line, MSG)
Guido van Rossum24e4af82002-06-12 19:18:08 +00001042
1043 def _testReadline(self):
1044 self.cli_file.write(MSG)
1045 self.cli_file.flush()
1046
Gregory P. Smith24237ea2008-05-05 21:53:45 +00001047 def testReadlineAfterRead(self):
1048 a_baloo_is = self.serv_file.read(len("A baloo is"))
1049 self.assertEqual("A baloo is", a_baloo_is)
1050 _a_bear = self.serv_file.read(len(" a bear"))
1051 self.assertEqual(" a bear", _a_bear)
1052 line = self.serv_file.readline()
1053 self.assertEqual("\n", line)
1054 line = self.serv_file.readline()
1055 self.assertEqual("A BALOO IS A BEAR.\n", line)
1056 line = self.serv_file.readline()
1057 self.assertEqual(MSG, line)
1058
1059 def _testReadlineAfterRead(self):
1060 self.cli_file.write("A baloo is a bear\n")
1061 self.cli_file.write("A BALOO IS A BEAR.\n")
1062 self.cli_file.write(MSG)
1063 self.cli_file.flush()
1064
1065 def testReadlineAfterReadNoNewline(self):
1066 end_of_ = self.serv_file.read(len("End Of "))
1067 self.assertEqual("End Of ", end_of_)
1068 line = self.serv_file.readline()
1069 self.assertEqual("Line", line)
1070
1071 def _testReadlineAfterReadNoNewline(self):
1072 self.cli_file.write("End Of Line")
1073
Tim Peters116d83c2004-03-28 02:20:45 +00001074 def testClosedAttr(self):
Benjamin Peterson5c8da862009-06-30 22:57:08 +00001075 self.assertTrue(not self.serv_file.closed)
Tim Peters116d83c2004-03-28 02:20:45 +00001076
1077 def _testClosedAttr(self):
Benjamin Peterson5c8da862009-06-30 22:57:08 +00001078 self.assertTrue(not self.cli_file.closed)
Tim Peters116d83c2004-03-28 02:20:45 +00001079
Gregory P. Smithc4ad0342009-08-13 18:54:50 +00001080
1081class FileObjectInterruptedTestCase(unittest.TestCase):
1082 """Test that the file object correctly handles EINTR internally."""
1083
1084 class MockSocket(object):
1085 def __init__(self, recv_funcs=()):
1086 # A generator that returns callables that we'll call for each
1087 # call to recv().
1088 self._recv_step = iter(recv_funcs)
1089
1090 def recv(self, size):
1091 return self._recv_step.next()()
1092
1093 @staticmethod
1094 def _raise_eintr():
1095 raise socket.error(errno.EINTR)
1096
1097 def _test_readline(self, size=-1, **kwargs):
1098 mock_sock = self.MockSocket(recv_funcs=[
1099 lambda : "This is the first line\nAnd the sec",
1100 self._raise_eintr,
1101 lambda : "ond line is here\n",
1102 lambda : "",
1103 ])
1104 fo = socket._fileobject(mock_sock, **kwargs)
Ezio Melotti2623a372010-11-21 13:34:58 +00001105 self.assertEqual(fo.readline(size), "This is the first line\n")
1106 self.assertEqual(fo.readline(size), "And the second line is here\n")
Gregory P. Smithc4ad0342009-08-13 18:54:50 +00001107
1108 def _test_read(self, size=-1, **kwargs):
1109 mock_sock = self.MockSocket(recv_funcs=[
1110 lambda : "This is the first line\nAnd the sec",
1111 self._raise_eintr,
1112 lambda : "ond line is here\n",
1113 lambda : "",
1114 ])
1115 fo = socket._fileobject(mock_sock, **kwargs)
Ezio Melotti2623a372010-11-21 13:34:58 +00001116 self.assertEqual(fo.read(size), "This is the first line\n"
Gregory P. Smithc4ad0342009-08-13 18:54:50 +00001117 "And the second line is here\n")
1118
1119 def test_default(self):
1120 self._test_readline()
1121 self._test_readline(size=100)
1122 self._test_read()
1123 self._test_read(size=100)
1124
1125 def test_with_1k_buffer(self):
1126 self._test_readline(bufsize=1024)
1127 self._test_readline(size=100, bufsize=1024)
1128 self._test_read(bufsize=1024)
1129 self._test_read(size=100, bufsize=1024)
1130
1131 def _test_readline_no_buffer(self, size=-1):
1132 mock_sock = self.MockSocket(recv_funcs=[
1133 lambda : "aa",
1134 lambda : "\n",
1135 lambda : "BB",
1136 self._raise_eintr,
1137 lambda : "bb",
1138 lambda : "",
1139 ])
1140 fo = socket._fileobject(mock_sock, bufsize=0)
Ezio Melotti2623a372010-11-21 13:34:58 +00001141 self.assertEqual(fo.readline(size), "aa\n")
1142 self.assertEqual(fo.readline(size), "BBbb")
Gregory P. Smithc4ad0342009-08-13 18:54:50 +00001143
1144 def test_no_buffer(self):
1145 self._test_readline_no_buffer()
1146 self._test_readline_no_buffer(size=4)
1147 self._test_read(bufsize=0)
1148 self._test_read(size=100, bufsize=0)
1149
1150
Guido van Rossume9f66142002-08-07 15:46:19 +00001151class UnbufferedFileObjectClassTestCase(FileObjectClassTestCase):
1152
1153 """Repeat the tests from FileObjectClassTestCase with bufsize==0.
Tim Peters469cdad2002-08-08 20:19:19 +00001154
Guido van Rossume9f66142002-08-07 15:46:19 +00001155 In this case (and in this case only), it should be possible to
1156 create a file object, read a line from it, create another file
1157 object, read another line from it, without loss of data in the
1158 first file object's buffer. Note that httplib relies on this
1159 when reading multiple requests from the same socket."""
1160
1161 bufsize = 0 # Use unbuffered mode
1162
1163 def testUnbufferedReadline(self):
Guido van Rossum8c943832002-08-08 01:00:28 +00001164 # Read a line, create a new file object, read another line with it
Guido van Rossume9f66142002-08-07 15:46:19 +00001165 line = self.serv_file.readline() # first line
Guido van Rossum10e3f412002-08-07 19:02:49 +00001166 self.assertEqual(line, "A. " + MSG) # first line
Guido van Rossume9f66142002-08-07 15:46:19 +00001167 self.serv_file = self.cli_conn.makefile('rb', 0)
1168 line = self.serv_file.readline() # second line
Guido van Rossum10e3f412002-08-07 19:02:49 +00001169 self.assertEqual(line, "B. " + MSG) # second line
Guido van Rossume9f66142002-08-07 15:46:19 +00001170
1171 def _testUnbufferedReadline(self):
Guido van Rossum10e3f412002-08-07 19:02:49 +00001172 self.cli_file.write("A. " + MSG)
1173 self.cli_file.write("B. " + MSG)
Guido van Rossume9f66142002-08-07 15:46:19 +00001174 self.cli_file.flush()
1175
Guido van Rossum8c943832002-08-08 01:00:28 +00001176class LineBufferedFileObjectClassTestCase(FileObjectClassTestCase):
1177
1178 bufsize = 1 # Default-buffered for reading; line-buffered for writing
1179
Kristján Valur Jónsson2380fee2012-12-25 13:04:50 +00001180 class SocketMemo(object):
1181 """A wrapper to keep track of sent data, needed to examine write behaviour"""
1182 def __init__(self, sock):
1183 self._sock = sock
1184 self.sent = []
1185
1186 def send(self, data, flags=0):
1187 n = self._sock.send(data, flags)
1188 self.sent.append(data[:n])
1189 return n
1190
1191 def sendall(self, data, flags=0):
1192 self._sock.sendall(data, flags)
1193 self.sent.append(data)
1194
1195 def __getattr__(self, attr):
1196 return getattr(self._sock, attr)
1197
1198 def getsent(self):
1199 return [e.tobytes() if isinstance(e, memoryview) else e for e in self.sent]
1200
1201 def setUp(self):
1202 FileObjectClassTestCase.setUp(self)
1203 self.serv_file._sock = self.SocketMemo(self.serv_file._sock)
1204
1205 def testLinebufferedWrite(self):
1206 # Write two lines, in small chunks
1207 msg = MSG.strip()
1208 print >> self.serv_file, msg,
1209 print >> self.serv_file, msg
1210
1211 # second line:
1212 print >> self.serv_file, msg,
1213 print >> self.serv_file, msg,
1214 print >> self.serv_file, msg
1215
1216 # third line
1217 print >> self.serv_file, ''
1218
1219 self.serv_file.flush()
1220
1221 msg1 = "%s %s\n"%(msg, msg)
1222 msg2 = "%s %s %s\n"%(msg, msg, msg)
1223 msg3 = "\n"
1224 self.assertEqual(self.serv_file._sock.getsent(), [msg1, msg2, msg3])
1225
1226 def _testLinebufferedWrite(self):
1227 msg = MSG.strip()
1228 msg1 = "%s %s\n"%(msg, msg)
1229 msg2 = "%s %s %s\n"%(msg, msg, msg)
1230 msg3 = "\n"
1231 l1 = self.cli_file.readline()
1232 self.assertEqual(l1, msg1)
1233 l2 = self.cli_file.readline()
1234 self.assertEqual(l2, msg2)
1235 l3 = self.cli_file.readline()
1236 self.assertEqual(l3, msg3)
1237
Guido van Rossum8c943832002-08-08 01:00:28 +00001238
1239class SmallBufferedFileObjectClassTestCase(FileObjectClassTestCase):
1240
1241 bufsize = 2 # Exercise the buffering code
Guido van Rossume9f66142002-08-07 15:46:19 +00001242
Georg Brandldd7b0522007-01-21 10:35:10 +00001243
Facundo Batista07c78be2007-03-23 18:54:07 +00001244class NetworkConnectionTest(object):
1245 """Prove network connection."""
1246 def clientSetUp(self):
Trent Nelsone41b0062008-04-08 23:47:30 +00001247 # We're inherited below by BasicTCPTest2, which also inherits
1248 # BasicTCPTest, which defines self.port referenced below.
1249 self.cli = socket.create_connection((HOST, self.port))
Facundo Batista07c78be2007-03-23 18:54:07 +00001250 self.serv_conn = self.cli
Neal Norwitz0d4c06e2007-04-25 06:30:05 +00001251
Facundo Batista07c78be2007-03-23 18:54:07 +00001252class BasicTCPTest2(NetworkConnectionTest, BasicTCPTest):
1253 """Tests that NetworkConnection does not break existing TCP functionality.
1254 """
1255
Facundo Batistab8af7bc2007-03-25 01:53:21 +00001256class NetworkConnectionNoServer(unittest.TestCase):
Antoine Pitrouc818ed42010-09-07 21:40:25 +00001257 class MockSocket(socket.socket):
1258 def connect(self, *args):
1259 raise socket.timeout('timed out')
1260
1261 @contextlib.contextmanager
1262 def mocked_socket_module(self):
1263 """Return a socket which times out on connect"""
1264 old_socket = socket.socket
1265 socket.socket = self.MockSocket
1266 try:
1267 yield
1268 finally:
1269 socket.socket = old_socket
1270
1271 def test_connect(self):
Trent Nelsone41b0062008-04-08 23:47:30 +00001272 port = test_support.find_unused_port()
Antoine Pitrouc818ed42010-09-07 21:40:25 +00001273 cli = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
Brian Curtin62c20b62010-11-02 02:59:55 +00001274 self.addCleanup(cli.close)
Antoine Pitrouc818ed42010-09-07 21:40:25 +00001275 with self.assertRaises(socket.error) as cm:
1276 cli.connect((HOST, port))
1277 self.assertEqual(cm.exception.errno, errno.ECONNREFUSED)
1278
1279 def test_create_connection(self):
1280 # Issue #9792: errors raised by create_connection() should have
1281 # a proper errno attribute.
1282 port = test_support.find_unused_port()
1283 with self.assertRaises(socket.error) as cm:
1284 socket.create_connection((HOST, port))
Trent Nelson6a7f8672012-10-18 01:35:32 -04001285
1286 # Issue #16257: create_connection() calls getaddrinfo() against
1287 # 'localhost'. This may result in an IPV6 addr being returned
1288 # as well as an IPV4 one:
1289 # >>> socket.getaddrinfo('localhost', port, 0, SOCK_STREAM)
1290 # >>> [(2, 2, 0, '', ('127.0.0.1', 41230)),
1291 # (26, 2, 0, '', ('::1', 41230, 0, 0))]
1292 #
1293 # create_connection() enumerates through all the addresses returned
1294 # and if it doesn't successfully bind to any of them, it propagates
1295 # the last exception it encountered.
1296 #
1297 # On Solaris, ENETUNREACH is returned in this circumstance instead
1298 # of ECONNREFUSED. So, if that errno exists, add it to our list of
1299 # expected errnos.
1300 expected_errnos = [ errno.ECONNREFUSED, ]
1301 if hasattr(errno, 'ENETUNREACH'):
1302 expected_errnos.append(errno.ENETUNREACH)
1303
1304 self.assertIn(cm.exception.errno, expected_errnos)
Antoine Pitrouc818ed42010-09-07 21:40:25 +00001305
1306 def test_create_connection_timeout(self):
1307 # Issue #9792: create_connection() should not recast timeout errors
1308 # as generic socket errors.
1309 with self.mocked_socket_module():
1310 with self.assertRaises(socket.timeout):
1311 socket.create_connection((HOST, 1234))
1312
Facundo Batista07c78be2007-03-23 18:54:07 +00001313
Victor Stinner6a102812010-04-27 23:55:59 +00001314@unittest.skipUnless(thread, 'Threading required for this test.')
Facundo Batistab8af7bc2007-03-25 01:53:21 +00001315class NetworkConnectionAttributesTest(SocketTCPTest, ThreadableTest):
1316
1317 def __init__(self, methodName='runTest'):
1318 SocketTCPTest.__init__(self, methodName=methodName)
1319 ThreadableTest.__init__(self)
1320
1321 def clientSetUp(self):
Gregory P. Smith79a3eb12010-01-03 01:29:44 +00001322 self.source_port = test_support.find_unused_port()
Facundo Batistab8af7bc2007-03-25 01:53:21 +00001323
1324 def clientTearDown(self):
1325 self.cli.close()
1326 self.cli = None
1327 ThreadableTest.clientTearDown(self)
1328
1329 def _justAccept(self):
1330 conn, addr = self.serv.accept()
Brian Curtin62c20b62010-11-02 02:59:55 +00001331 conn.close()
Facundo Batistab8af7bc2007-03-25 01:53:21 +00001332
1333 testFamily = _justAccept
1334 def _testFamily(self):
Trent Nelsone41b0062008-04-08 23:47:30 +00001335 self.cli = socket.create_connection((HOST, self.port), timeout=30)
Brian Curtin62c20b62010-11-02 02:59:55 +00001336 self.addCleanup(self.cli.close)
Facundo Batistab8af7bc2007-03-25 01:53:21 +00001337 self.assertEqual(self.cli.family, 2)
1338
Gregory P. Smith49d709c2010-01-03 15:05:52 +00001339 testSourceAddress = _justAccept
1340 def _testSourceAddress(self):
Gregory P. Smith79a3eb12010-01-03 01:29:44 +00001341 self.cli = socket.create_connection((HOST, self.port), timeout=30,
1342 source_address=('', self.source_port))
Brian Curtin62c20b62010-11-02 02:59:55 +00001343 self.addCleanup(self.cli.close)
Gregory P. Smith79a3eb12010-01-03 01:29:44 +00001344 self.assertEqual(self.cli.getsockname()[1], self.source_port)
Gregory P. Smith49d709c2010-01-03 15:05:52 +00001345 # The port number being used is sufficient to show that the bind()
1346 # call happened.
Gregory P. Smith79a3eb12010-01-03 01:29:44 +00001347
Neal Norwitz0d4c06e2007-04-25 06:30:05 +00001348 testTimeoutDefault = _justAccept
Facundo Batistab8af7bc2007-03-25 01:53:21 +00001349 def _testTimeoutDefault(self):
Facundo Batista4f1b1ed2008-05-29 16:39:26 +00001350 # passing no explicit timeout uses socket's global default
Benjamin Peterson5c8da862009-06-30 22:57:08 +00001351 self.assertTrue(socket.getdefaulttimeout() is None)
Facundo Batista4f1b1ed2008-05-29 16:39:26 +00001352 socket.setdefaulttimeout(42)
1353 try:
1354 self.cli = socket.create_connection((HOST, self.port))
Brian Curtin62c20b62010-11-02 02:59:55 +00001355 self.addCleanup(self.cli.close)
Facundo Batista4f1b1ed2008-05-29 16:39:26 +00001356 finally:
1357 socket.setdefaulttimeout(None)
Ezio Melotti2623a372010-11-21 13:34:58 +00001358 self.assertEqual(self.cli.gettimeout(), 42)
Facundo Batista4f1b1ed2008-05-29 16:39:26 +00001359
1360 testTimeoutNone = _justAccept
1361 def _testTimeoutNone(self):
1362 # None timeout means the same as sock.settimeout(None)
Benjamin Peterson5c8da862009-06-30 22:57:08 +00001363 self.assertTrue(socket.getdefaulttimeout() is None)
Facundo Batista4f1b1ed2008-05-29 16:39:26 +00001364 socket.setdefaulttimeout(30)
1365 try:
1366 self.cli = socket.create_connection((HOST, self.port), timeout=None)
Brian Curtin62c20b62010-11-02 02:59:55 +00001367 self.addCleanup(self.cli.close)
Facundo Batista4f1b1ed2008-05-29 16:39:26 +00001368 finally:
1369 socket.setdefaulttimeout(None)
1370 self.assertEqual(self.cli.gettimeout(), None)
Neal Norwitz0d4c06e2007-04-25 06:30:05 +00001371
1372 testTimeoutValueNamed = _justAccept
Facundo Batistab8af7bc2007-03-25 01:53:21 +00001373 def _testTimeoutValueNamed(self):
Trent Nelsone41b0062008-04-08 23:47:30 +00001374 self.cli = socket.create_connection((HOST, self.port), timeout=30)
Facundo Batistab8af7bc2007-03-25 01:53:21 +00001375 self.assertEqual(self.cli.gettimeout(), 30)
Facundo Batista07c78be2007-03-23 18:54:07 +00001376
Neal Norwitz0d4c06e2007-04-25 06:30:05 +00001377 testTimeoutValueNonamed = _justAccept
Facundo Batistab8af7bc2007-03-25 01:53:21 +00001378 def _testTimeoutValueNonamed(self):
Trent Nelsone41b0062008-04-08 23:47:30 +00001379 self.cli = socket.create_connection((HOST, self.port), 30)
Brian Curtin62c20b62010-11-02 02:59:55 +00001380 self.addCleanup(self.cli.close)
Facundo Batistab8af7bc2007-03-25 01:53:21 +00001381 self.assertEqual(self.cli.gettimeout(), 30)
Facundo Batista07c78be2007-03-23 18:54:07 +00001382
Victor Stinner6a102812010-04-27 23:55:59 +00001383@unittest.skipUnless(thread, 'Threading required for this test.')
Facundo Batistab8af7bc2007-03-25 01:53:21 +00001384class NetworkConnectionBehaviourTest(SocketTCPTest, ThreadableTest):
1385
1386 def __init__(self, methodName='runTest'):
1387 SocketTCPTest.__init__(self, methodName=methodName)
1388 ThreadableTest.__init__(self)
1389
1390 def clientSetUp(self):
1391 pass
1392
1393 def clientTearDown(self):
1394 self.cli.close()
1395 self.cli = None
1396 ThreadableTest.clientTearDown(self)
1397
Facundo Batista07c78be2007-03-23 18:54:07 +00001398 def testInsideTimeout(self):
Facundo Batistab8af7bc2007-03-25 01:53:21 +00001399 conn, addr = self.serv.accept()
Brian Curtin62c20b62010-11-02 02:59:55 +00001400 self.addCleanup(conn.close)
Facundo Batistab8af7bc2007-03-25 01:53:21 +00001401 time.sleep(3)
1402 conn.send("done!")
1403 testOutsideTimeout = testInsideTimeout
1404
1405 def _testInsideTimeout(self):
Trent Nelsone41b0062008-04-08 23:47:30 +00001406 self.cli = sock = socket.create_connection((HOST, self.port))
Facundo Batista07c78be2007-03-23 18:54:07 +00001407 data = sock.recv(5)
1408 self.assertEqual(data, "done!")
1409
Facundo Batistab8af7bc2007-03-25 01:53:21 +00001410 def _testOutsideTimeout(self):
Trent Nelsone41b0062008-04-08 23:47:30 +00001411 self.cli = sock = socket.create_connection((HOST, self.port), timeout=1)
Benjamin Peterson5c8da862009-06-30 22:57:08 +00001412 self.assertRaises(socket.timeout, lambda: sock.recv(5))
Facundo Batista07c78be2007-03-23 18:54:07 +00001413
1414
Georg Brandldd7b0522007-01-21 10:35:10 +00001415class Urllib2FileobjectTest(unittest.TestCase):
1416
1417 # urllib2.HTTPHandler has "borrowed" socket._fileobject, and requires that
1418 # it close the socket if the close c'tor argument is true
1419
1420 def testClose(self):
1421 class MockSocket:
1422 closed = False
1423 def flush(self): pass
1424 def close(self): self.closed = True
1425
1426 # must not close unless we request it: the original use of _fileobject
1427 # by module socket requires that the underlying socket not be closed until
1428 # the _socketobject that created the _fileobject is closed
1429 s = MockSocket()
1430 f = socket._fileobject(s)
1431 f.close()
Benjamin Peterson5c8da862009-06-30 22:57:08 +00001432 self.assertTrue(not s.closed)
Georg Brandldd7b0522007-01-21 10:35:10 +00001433
1434 s = MockSocket()
1435 f = socket._fileobject(s, close=True)
1436 f.close()
Benjamin Peterson5c8da862009-06-30 22:57:08 +00001437 self.assertTrue(s.closed)
Georg Brandldd7b0522007-01-21 10:35:10 +00001438
Raymond Hettinger11a35f52003-06-29 04:40:22 +00001439class TCPTimeoutTest(SocketTCPTest):
1440
1441 def testTCPTimeout(self):
1442 def raise_timeout(*args, **kwargs):
1443 self.serv.settimeout(1.0)
1444 self.serv.accept()
Benjamin Peterson5c8da862009-06-30 22:57:08 +00001445 self.assertRaises(socket.timeout, raise_timeout,
Raymond Hettinger11a35f52003-06-29 04:40:22 +00001446 "Error generating a timeout exception (TCP)")
1447
1448 def testTimeoutZero(self):
1449 ok = False
1450 try:
1451 self.serv.settimeout(0.0)
1452 foo = self.serv.accept()
1453 except socket.timeout:
1454 self.fail("caught timeout instead of error (TCP)")
1455 except socket.error:
1456 ok = True
1457 except:
1458 self.fail("caught unexpected exception (TCP)")
1459 if not ok:
1460 self.fail("accept() returned success when we did not expect it")
1461
Serhiy Storchaka32e23e72013-11-03 23:15:46 +02001462 @unittest.skipUnless(hasattr(signal, 'alarm'),
1463 'test needs signal.alarm()')
Neal Norwitz9b0ca792006-08-02 06:46:21 +00001464 def testInterruptedTimeout(self):
1465 # XXX I don't know how to do this test on MSWindows or any other
1466 # plaform that doesn't support signal.alarm() or os.kill(), though
1467 # the bug should have existed on all platforms.
Neal Norwitz9b0ca792006-08-02 06:46:21 +00001468 self.serv.settimeout(5.0) # must be longer than alarm
1469 class Alarm(Exception):
1470 pass
1471 def alarm_handler(signal, frame):
1472 raise Alarm
1473 old_alarm = signal.signal(signal.SIGALRM, alarm_handler)
1474 try:
1475 signal.alarm(2) # POSIX allows alarm to be up to 1 second early
1476 try:
1477 foo = self.serv.accept()
1478 except socket.timeout:
1479 self.fail("caught timeout instead of Alarm")
1480 except Alarm:
1481 pass
1482 except:
Jeffrey Yasskin36550bd2008-03-28 04:53:10 +00001483 self.fail("caught other exception instead of Alarm:"
1484 " %s(%s):\n%s" %
1485 (sys.exc_info()[:2] + (traceback.format_exc(),)))
Neal Norwitz9b0ca792006-08-02 06:46:21 +00001486 else:
1487 self.fail("nothing caught")
Jeffrey Yasskin36550bd2008-03-28 04:53:10 +00001488 finally:
1489 signal.alarm(0) # shut off alarm
Neal Norwitz9b0ca792006-08-02 06:46:21 +00001490 except Alarm:
1491 self.fail("got Alarm in wrong place")
1492 finally:
1493 # no alarm can be pending. Safe to restore old handler.
1494 signal.signal(signal.SIGALRM, old_alarm)
1495
Ezio Melotti169ed592011-11-18 18:33:14 +02001496class UDPTimeoutTest(SocketUDPTest):
Raymond Hettinger11a35f52003-06-29 04:40:22 +00001497
1498 def testUDPTimeout(self):
1499 def raise_timeout(*args, **kwargs):
1500 self.serv.settimeout(1.0)
1501 self.serv.recv(1024)
Benjamin Peterson5c8da862009-06-30 22:57:08 +00001502 self.assertRaises(socket.timeout, raise_timeout,
Raymond Hettinger11a35f52003-06-29 04:40:22 +00001503 "Error generating a timeout exception (UDP)")
1504
1505 def testTimeoutZero(self):
1506 ok = False
1507 try:
1508 self.serv.settimeout(0.0)
1509 foo = self.serv.recv(1024)
1510 except socket.timeout:
1511 self.fail("caught timeout instead of error (UDP)")
1512 except socket.error:
1513 ok = True
1514 except:
1515 self.fail("caught unexpected exception (UDP)")
1516 if not ok:
1517 self.fail("recv() returned success when we did not expect it")
1518
1519class TestExceptions(unittest.TestCase):
1520
1521 def testExceptionTree(self):
Benjamin Peterson5c8da862009-06-30 22:57:08 +00001522 self.assertTrue(issubclass(socket.error, Exception))
1523 self.assertTrue(issubclass(socket.herror, socket.error))
1524 self.assertTrue(issubclass(socket.gaierror, socket.error))
1525 self.assertTrue(issubclass(socket.timeout, socket.error))
Raymond Hettinger11a35f52003-06-29 04:40:22 +00001526
Serhiy Storchaka32e23e72013-11-03 23:15:46 +02001527@unittest.skipUnless(sys.platform == 'linux', 'Linux specific test')
Armin Rigoa9017c32006-04-19 11:50:27 +00001528class TestLinuxAbstractNamespace(unittest.TestCase):
1529
1530 UNIX_PATH_MAX = 108
1531
1532 def testLinuxAbstractNamespace(self):
1533 address = "\x00python-test-hello\x00\xff"
1534 s1 = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
1535 s1.bind(address)
1536 s1.listen(1)
1537 s2 = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
1538 s2.connect(s1.getsockname())
1539 s1.accept()
1540 self.assertEqual(s1.getsockname(), address)
1541 self.assertEqual(s2.getpeername(), address)
1542
1543 def testMaxName(self):
1544 address = "\x00" + "h" * (self.UNIX_PATH_MAX - 1)
1545 s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
1546 s.bind(address)
1547 self.assertEqual(s.getsockname(), address)
1548
1549 def testNameOverflow(self):
1550 address = "\x00" + "h" * self.UNIX_PATH_MAX
1551 s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
1552 self.assertRaises(socket.error, s.bind, address)
1553
Raymond Hettinger11a35f52003-06-29 04:40:22 +00001554
Victor Stinner6a102812010-04-27 23:55:59 +00001555@unittest.skipUnless(thread, 'Threading required for this test.')
Martin Blais2856e5f2006-05-26 12:03:27 +00001556class BufferIOTest(SocketConnectedTest):
1557 """
1558 Test the buffer versions of socket.recv() and socket.send().
1559 """
1560 def __init__(self, methodName='runTest'):
1561 SocketConnectedTest.__init__(self, methodName=methodName)
1562
Antoine Pitroud7b731d2010-03-17 22:45:39 +00001563 def testRecvIntoArray(self):
Martin Blais2856e5f2006-05-26 12:03:27 +00001564 buf = array.array('c', ' '*1024)
Martin Blaisaf2ae722006-06-04 13:49:49 +00001565 nbytes = self.cli_conn.recv_into(buf)
Martin Blais2856e5f2006-05-26 12:03:27 +00001566 self.assertEqual(nbytes, len(MSG))
1567 msg = buf.tostring()[:len(MSG)]
1568 self.assertEqual(msg, MSG)
1569
Antoine Pitroud7b731d2010-03-17 22:45:39 +00001570 def _testRecvIntoArray(self):
Florent Xicluna07627882010-03-21 01:14:24 +00001571 with test_support.check_py3k_warnings():
1572 buf = buffer(MSG)
Martin Blais2856e5f2006-05-26 12:03:27 +00001573 self.serv_conn.send(buf)
1574
Antoine Pitroud7b731d2010-03-17 22:45:39 +00001575 def testRecvIntoBytearray(self):
1576 buf = bytearray(1024)
1577 nbytes = self.cli_conn.recv_into(buf)
1578 self.assertEqual(nbytes, len(MSG))
1579 msg = buf[:len(MSG)]
1580 self.assertEqual(msg, MSG)
1581
1582 _testRecvIntoBytearray = _testRecvIntoArray
1583
1584 def testRecvIntoMemoryview(self):
1585 buf = bytearray(1024)
1586 nbytes = self.cli_conn.recv_into(memoryview(buf))
1587 self.assertEqual(nbytes, len(MSG))
1588 msg = buf[:len(MSG)]
1589 self.assertEqual(msg, MSG)
1590
1591 _testRecvIntoMemoryview = _testRecvIntoArray
1592
1593 def testRecvFromIntoArray(self):
Martin Blais2856e5f2006-05-26 12:03:27 +00001594 buf = array.array('c', ' '*1024)
Martin Blaisaf2ae722006-06-04 13:49:49 +00001595 nbytes, addr = self.cli_conn.recvfrom_into(buf)
Martin Blais2856e5f2006-05-26 12:03:27 +00001596 self.assertEqual(nbytes, len(MSG))
1597 msg = buf.tostring()[:len(MSG)]
1598 self.assertEqual(msg, MSG)
1599
Antoine Pitroud7b731d2010-03-17 22:45:39 +00001600 def _testRecvFromIntoArray(self):
Florent Xicluna07627882010-03-21 01:14:24 +00001601 with test_support.check_py3k_warnings():
1602 buf = buffer(MSG)
Martin Blais2856e5f2006-05-26 12:03:27 +00001603 self.serv_conn.send(buf)
1604
Antoine Pitroud7b731d2010-03-17 22:45:39 +00001605 def testRecvFromIntoBytearray(self):
1606 buf = bytearray(1024)
1607 nbytes, addr = self.cli_conn.recvfrom_into(buf)
1608 self.assertEqual(nbytes, len(MSG))
1609 msg = buf[:len(MSG)]
1610 self.assertEqual(msg, MSG)
1611
1612 _testRecvFromIntoBytearray = _testRecvFromIntoArray
1613
1614 def testRecvFromIntoMemoryview(self):
1615 buf = bytearray(1024)
1616 nbytes, addr = self.cli_conn.recvfrom_into(memoryview(buf))
1617 self.assertEqual(nbytes, len(MSG))
1618 msg = buf[:len(MSG)]
1619 self.assertEqual(msg, MSG)
1620
1621 _testRecvFromIntoMemoryview = _testRecvFromIntoArray
1622
Christian Heimesfb2d25a2008-01-07 16:12:44 +00001623
1624TIPC_STYPE = 2000
1625TIPC_LOWER = 200
1626TIPC_UPPER = 210
1627
1628def isTipcAvailable():
1629 """Check if the TIPC module is loaded
1630
1631 The TIPC module is not loaded automatically on Ubuntu and probably
1632 other Linux distros.
1633 """
1634 if not hasattr(socket, "AF_TIPC"):
1635 return False
1636 if not os.path.isfile("/proc/modules"):
1637 return False
1638 with open("/proc/modules") as f:
1639 for line in f:
1640 if line.startswith("tipc "):
1641 return True
Christian Heimesfb2d25a2008-01-07 16:12:44 +00001642 return False
1643
Serhiy Storchaka32e23e72013-11-03 23:15:46 +02001644@unittest.skipUnless(isTipcAvailable(),
1645 "TIPC module is not loaded, please 'sudo modprobe tipc'")
1646class TIPCTest(unittest.TestCase):
Christian Heimesfb2d25a2008-01-07 16:12:44 +00001647 def testRDM(self):
1648 srv = socket.socket(socket.AF_TIPC, socket.SOCK_RDM)
1649 cli = socket.socket(socket.AF_TIPC, socket.SOCK_RDM)
1650
1651 srv.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
1652 srvaddr = (socket.TIPC_ADDR_NAMESEQ, TIPC_STYPE,
1653 TIPC_LOWER, TIPC_UPPER)
1654 srv.bind(srvaddr)
1655
1656 sendaddr = (socket.TIPC_ADDR_NAME, TIPC_STYPE,
1657 TIPC_LOWER + (TIPC_UPPER - TIPC_LOWER) / 2, 0)
1658 cli.sendto(MSG, sendaddr)
1659
1660 msg, recvaddr = srv.recvfrom(1024)
1661
1662 self.assertEqual(cli.getsockname(), recvaddr)
1663 self.assertEqual(msg, MSG)
1664
1665
Serhiy Storchaka32e23e72013-11-03 23:15:46 +02001666@unittest.skipUnless(isTipcAvailable(),
1667 "TIPC module is not loaded, please 'sudo modprobe tipc'")
1668class TIPCThreadableTest(unittest.TestCase, ThreadableTest):
Christian Heimesfb2d25a2008-01-07 16:12:44 +00001669 def __init__(self, methodName = 'runTest'):
1670 unittest.TestCase.__init__(self, methodName = methodName)
1671 ThreadableTest.__init__(self)
1672
1673 def setUp(self):
1674 self.srv = socket.socket(socket.AF_TIPC, socket.SOCK_STREAM)
1675 self.srv.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
1676 srvaddr = (socket.TIPC_ADDR_NAMESEQ, TIPC_STYPE,
1677 TIPC_LOWER, TIPC_UPPER)
1678 self.srv.bind(srvaddr)
1679 self.srv.listen(5)
1680 self.serverExplicitReady()
1681 self.conn, self.connaddr = self.srv.accept()
1682
1683 def clientSetUp(self):
1684 # The is a hittable race between serverExplicitReady() and the
1685 # accept() call; sleep a little while to avoid it, otherwise
1686 # we could get an exception
1687 time.sleep(0.1)
1688 self.cli = socket.socket(socket.AF_TIPC, socket.SOCK_STREAM)
1689 addr = (socket.TIPC_ADDR_NAME, TIPC_STYPE,
1690 TIPC_LOWER + (TIPC_UPPER - TIPC_LOWER) / 2, 0)
1691 self.cli.connect(addr)
1692 self.cliaddr = self.cli.getsockname()
1693
1694 def testStream(self):
1695 msg = self.conn.recv(1024)
1696 self.assertEqual(msg, MSG)
1697 self.assertEqual(self.cliaddr, self.connaddr)
1698
1699 def _testStream(self):
1700 self.cli.send(MSG)
1701 self.cli.close()
1702
1703
Guido van Rossumb995eb72002-07-31 16:08:40 +00001704def test_main():
Martin v. Löwis7596e832006-07-01 15:33:37 +00001705 tests = [GeneralModuleTests, BasicTCPTest, TCPCloserTest, TCPTimeoutTest,
Ronald Oussoren9545a232010-05-05 19:09:31 +00001706 TestExceptions, BufferIOTest, BasicTCPTest2, BasicUDPTest,
1707 UDPTimeoutTest ]
Walter Dörwald21d3a322003-05-01 17:45:56 +00001708
1709 tests.extend([
1710 NonBlockingTCPTests,
1711 FileObjectClassTestCase,
Gregory P. Smithc4ad0342009-08-13 18:54:50 +00001712 FileObjectInterruptedTestCase,
Walter Dörwald21d3a322003-05-01 17:45:56 +00001713 UnbufferedFileObjectClassTestCase,
1714 LineBufferedFileObjectClassTestCase,
Georg Brandldd7b0522007-01-21 10:35:10 +00001715 SmallBufferedFileObjectClassTestCase,
1716 Urllib2FileobjectTest,
Facundo Batistab8af7bc2007-03-25 01:53:21 +00001717 NetworkConnectionNoServer,
Facundo Batista07c78be2007-03-23 18:54:07 +00001718 NetworkConnectionAttributesTest,
1719 NetworkConnectionBehaviourTest,
Walter Dörwald21d3a322003-05-01 17:45:56 +00001720 ])
Serhiy Storchaka32e23e72013-11-03 23:15:46 +02001721 tests.append(BasicSocketPairTest)
1722 tests.append(TestLinuxAbstractNamespace)
1723 tests.extend([TIPCTest, TIPCThreadableTest])
Neal Norwitz9602cc22006-06-18 19:35:01 +00001724
1725 thread_info = test_support.threading_setup()
Walter Dörwald21d3a322003-05-01 17:45:56 +00001726 test_support.run_unittest(*tests)
Neal Norwitz9602cc22006-06-18 19:35:01 +00001727 test_support.threading_cleanup(*thread_info)
Guido van Rossum24e4af82002-06-12 19:18:08 +00001728
1729if __name__ == "__main__":
Guido van Rossumb995eb72002-07-31 16:08:40 +00001730 test_main()