test_socket.py 62 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804
  1. import unittest
  2. from test import test_support
  3. import errno
  4. import itertools
  5. import socket
  6. import select
  7. import time
  8. import traceback
  9. import Queue
  10. import sys
  11. import os
  12. import array
  13. import contextlib
  14. import signal
  15. import math
  16. import weakref
  17. try:
  18. import _socket
  19. except ImportError:
  20. _socket = None
  21. def 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. HOST = test_support.HOST
  33. MSG = b'Michael Gilfix was here\n'
  34. SUPPORTS_IPV6 = socket.has_ipv6 and try_address('::1', family=socket.AF_INET6)
  35. try:
  36. import thread
  37. import threading
  38. except ImportError:
  39. thread = None
  40. threading = None
  41. HOST = test_support.HOST
  42. MSG = 'Michael Gilfix was here\n'
  43. class SocketTCPTest(unittest.TestCase):
  44. def setUp(self):
  45. self.serv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  46. self.port = test_support.bind_port(self.serv)
  47. self.serv.listen(1)
  48. def tearDown(self):
  49. self.serv.close()
  50. self.serv = None
  51. class SocketUDPTest(unittest.TestCase):
  52. def setUp(self):
  53. self.serv = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
  54. self.port = test_support.bind_port(self.serv)
  55. def tearDown(self):
  56. self.serv.close()
  57. self.serv = None
  58. class ThreadableTest:
  59. """Threadable Test class
  60. The ThreadableTest class makes it easy to create a threaded
  61. client/server pair from an existing unit test. To create a
  62. new threaded class from an existing unit test, use multiple
  63. inheritance:
  64. class NewClass (OldClass, ThreadableTest):
  65. pass
  66. This class defines two new fixture functions with obvious
  67. purposes for overriding:
  68. clientSetUp ()
  69. clientTearDown ()
  70. Any new test functions within the class must then define
  71. tests in pairs, where the test name is preceded with a
  72. '_' to indicate the client portion of the test. Ex:
  73. def testFoo(self):
  74. # Server portion
  75. def _testFoo(self):
  76. # Client portion
  77. Any exceptions raised by the clients during their tests
  78. are caught and transferred to the main thread to alert
  79. the testing framework.
  80. Note, the server setup function cannot call any blocking
  81. functions that rely on the client thread during setup,
  82. unless serverExplicitReady() is called just before
  83. the blocking call (such as in setting up a client/server
  84. connection and performing the accept() in setUp().
  85. """
  86. def __init__(self):
  87. # Swap the true setup function
  88. self.__setUp = self.setUp
  89. self.__tearDown = self.tearDown
  90. self.setUp = self._setUp
  91. self.tearDown = self._tearDown
  92. def serverExplicitReady(self):
  93. """This method allows the server to explicitly indicate that
  94. it wants the client thread to proceed. This is useful if the
  95. server is about to execute a blocking routine that is
  96. dependent upon the client thread during its setup routine."""
  97. self.server_ready.set()
  98. def _setUp(self):
  99. self.server_ready = threading.Event()
  100. self.client_ready = threading.Event()
  101. self.done = threading.Event()
  102. self.queue = Queue.Queue(1)
  103. # Do some munging to start the client test.
  104. methodname = self.id()
  105. i = methodname.rfind('.')
  106. methodname = methodname[i+1:]
  107. test_method = getattr(self, '_' + methodname)
  108. self.client_thread = thread.start_new_thread(
  109. self.clientRun, (test_method,))
  110. self.__setUp()
  111. if not self.server_ready.is_set():
  112. self.server_ready.set()
  113. self.client_ready.wait()
  114. def _tearDown(self):
  115. self.__tearDown()
  116. self.done.wait()
  117. if not self.queue.empty():
  118. msg = self.queue.get()
  119. self.fail(msg)
  120. def clientRun(self, test_func):
  121. self.server_ready.wait()
  122. self.clientSetUp()
  123. self.client_ready.set()
  124. if not callable(test_func):
  125. raise TypeError("test_func must be a callable function.")
  126. try:
  127. test_func()
  128. except Exception, strerror:
  129. self.queue.put(strerror)
  130. self.clientTearDown()
  131. def clientSetUp(self):
  132. raise NotImplementedError("clientSetUp must be implemented.")
  133. def clientTearDown(self):
  134. self.done.set()
  135. thread.exit()
  136. class ThreadedTCPSocketTest(SocketTCPTest, ThreadableTest):
  137. def __init__(self, methodName='runTest'):
  138. SocketTCPTest.__init__(self, methodName=methodName)
  139. ThreadableTest.__init__(self)
  140. def clientSetUp(self):
  141. self.cli = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  142. def clientTearDown(self):
  143. self.cli.close()
  144. self.cli = None
  145. ThreadableTest.clientTearDown(self)
  146. class ThreadedUDPSocketTest(SocketUDPTest, ThreadableTest):
  147. def __init__(self, methodName='runTest'):
  148. SocketUDPTest.__init__(self, methodName=methodName)
  149. ThreadableTest.__init__(self)
  150. def clientSetUp(self):
  151. self.cli = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
  152. def clientTearDown(self):
  153. self.cli.close()
  154. self.cli = None
  155. ThreadableTest.clientTearDown(self)
  156. class SocketConnectedTest(ThreadedTCPSocketTest):
  157. def __init__(self, methodName='runTest'):
  158. ThreadedTCPSocketTest.__init__(self, methodName=methodName)
  159. def setUp(self):
  160. ThreadedTCPSocketTest.setUp(self)
  161. # Indicate explicitly we're ready for the client thread to
  162. # proceed and then perform the blocking call to accept
  163. self.serverExplicitReady()
  164. conn, addr = self.serv.accept()
  165. self.cli_conn = conn
  166. def tearDown(self):
  167. self.cli_conn.close()
  168. self.cli_conn = None
  169. ThreadedTCPSocketTest.tearDown(self)
  170. def clientSetUp(self):
  171. ThreadedTCPSocketTest.clientSetUp(self)
  172. self.cli.connect((HOST, self.port))
  173. self.serv_conn = self.cli
  174. def clientTearDown(self):
  175. self.serv_conn.close()
  176. self.serv_conn = None
  177. ThreadedTCPSocketTest.clientTearDown(self)
  178. class SocketPairTest(unittest.TestCase, ThreadableTest):
  179. def __init__(self, methodName='runTest'):
  180. unittest.TestCase.__init__(self, methodName=methodName)
  181. ThreadableTest.__init__(self)
  182. def setUp(self):
  183. self.serv, self.cli = socket.socketpair()
  184. def tearDown(self):
  185. self.serv.close()
  186. self.serv = None
  187. def clientSetUp(self):
  188. pass
  189. def clientTearDown(self):
  190. self.cli.close()
  191. self.cli = None
  192. ThreadableTest.clientTearDown(self)
  193. #######################################################################
  194. ## Begin Tests
  195. class GeneralModuleTests(unittest.TestCase):
  196. @unittest.skipUnless(_socket is not None, 'need _socket module')
  197. def test_csocket_repr(self):
  198. s = _socket.socket(_socket.AF_INET, _socket.SOCK_STREAM)
  199. try:
  200. expected = ('<socket object, fd=%s, family=%s, type=%s, protocol=%s>'
  201. % (s.fileno(), s.family, s.type, s.proto))
  202. self.assertEqual(repr(s), expected)
  203. finally:
  204. s.close()
  205. expected = ('<socket object, fd=-1, family=%s, type=%s, protocol=%s>'
  206. % (s.family, s.type, s.proto))
  207. self.assertEqual(repr(s), expected)
  208. def test_weakref(self):
  209. s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  210. p = weakref.proxy(s)
  211. self.assertEqual(p.fileno(), s.fileno())
  212. s.close()
  213. s = None
  214. try:
  215. p.fileno()
  216. except ReferenceError:
  217. pass
  218. else:
  219. self.fail('Socket proxy still exists')
  220. def test_weakref__sock(self):
  221. s = socket.socket()._sock
  222. w = weakref.ref(s)
  223. self.assertIs(w(), s)
  224. del s
  225. test_support.gc_collect()
  226. self.assertIsNone(w())
  227. def testSocketError(self):
  228. # Testing socket module exceptions
  229. def raise_error(*args, **kwargs):
  230. raise socket.error
  231. def raise_herror(*args, **kwargs):
  232. raise socket.herror
  233. def raise_gaierror(*args, **kwargs):
  234. raise socket.gaierror
  235. self.assertRaises(socket.error, raise_error,
  236. "Error raising socket exception.")
  237. self.assertRaises(socket.error, raise_herror,
  238. "Error raising socket exception.")
  239. self.assertRaises(socket.error, raise_gaierror,
  240. "Error raising socket exception.")
  241. def testSendtoErrors(self):
  242. # Testing that sendto doens't masks failures. See #10169.
  243. s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
  244. self.addCleanup(s.close)
  245. s.bind(('', 0))
  246. sockname = s.getsockname()
  247. # 2 args
  248. with self.assertRaises(UnicodeEncodeError):
  249. s.sendto(u'\u2620', sockname)
  250. with self.assertRaises(TypeError) as cm:
  251. s.sendto(5j, sockname)
  252. self.assertIn('not complex', str(cm.exception))
  253. with self.assertRaises(TypeError) as cm:
  254. s.sendto('foo', None)
  255. self.assertIn('not NoneType', str(cm.exception))
  256. # 3 args
  257. with self.assertRaises(UnicodeEncodeError):
  258. s.sendto(u'\u2620', 0, sockname)
  259. with self.assertRaises(TypeError) as cm:
  260. s.sendto(5j, 0, sockname)
  261. self.assertIn('not complex', str(cm.exception))
  262. with self.assertRaises(TypeError) as cm:
  263. s.sendto('foo', 0, None)
  264. self.assertIn('not NoneType', str(cm.exception))
  265. with self.assertRaises(TypeError) as cm:
  266. s.sendto('foo', 'bar', sockname)
  267. self.assertIn('an integer is required', str(cm.exception))
  268. with self.assertRaises(TypeError) as cm:
  269. s.sendto('foo', None, None)
  270. self.assertIn('an integer is required', str(cm.exception))
  271. # wrong number of args
  272. with self.assertRaises(TypeError) as cm:
  273. s.sendto('foo')
  274. self.assertIn('(1 given)', str(cm.exception))
  275. with self.assertRaises(TypeError) as cm:
  276. s.sendto('foo', 0, sockname, 4)
  277. self.assertIn('(4 given)', str(cm.exception))
  278. def testCrucialConstants(self):
  279. # Testing for mission critical constants
  280. socket.AF_INET
  281. socket.SOCK_STREAM
  282. socket.SOCK_DGRAM
  283. socket.SOCK_RAW
  284. socket.SOCK_RDM
  285. socket.SOCK_SEQPACKET
  286. socket.SOL_SOCKET
  287. socket.SO_REUSEADDR
  288. def testHostnameRes(self):
  289. # Testing hostname resolution mechanisms
  290. hostname = socket.gethostname()
  291. try:
  292. ip = socket.gethostbyname(hostname)
  293. except socket.error:
  294. # Probably name lookup wasn't set up right; skip this test
  295. self.skipTest('name lookup failure')
  296. self.assertTrue(ip.find('.') >= 0, "Error resolving host to ip.")
  297. try:
  298. hname, aliases, ipaddrs = socket.gethostbyaddr(ip)
  299. except socket.error:
  300. # Probably a similar problem as above; skip this test
  301. self.skipTest('address lookup failure')
  302. all_host_names = [hostname, hname] + aliases
  303. fqhn = socket.getfqdn(ip)
  304. if not fqhn in all_host_names:
  305. self.fail("Error testing host resolution mechanisms. (fqdn: %s, all: %s)" % (fqhn, repr(all_host_names)))
  306. @unittest.skipUnless(hasattr(sys, 'getrefcount'),
  307. 'test needs sys.getrefcount()')
  308. def testRefCountGetNameInfo(self):
  309. # Testing reference count for getnameinfo
  310. try:
  311. # On some versions, this loses a reference
  312. orig = sys.getrefcount(__name__)
  313. socket.getnameinfo(__name__,0)
  314. except TypeError:
  315. self.assertEqual(sys.getrefcount(__name__), orig,
  316. "socket.getnameinfo loses a reference")
  317. def testInterpreterCrash(self):
  318. # Making sure getnameinfo doesn't crash the interpreter
  319. try:
  320. # On some versions, this crashes the interpreter.
  321. socket.getnameinfo(('x', 0, 0, 0), 0)
  322. except socket.error:
  323. pass
  324. def testNtoH(self):
  325. # This just checks that htons etc. are their own inverse,
  326. # when looking at the lower 16 or 32 bits.
  327. sizes = {socket.htonl: 32, socket.ntohl: 32,
  328. socket.htons: 16, socket.ntohs: 16}
  329. for func, size in sizes.items():
  330. mask = (1L<<size) - 1
  331. for i in (0, 1, 0xffff, ~0xffff, 2, 0x01234567, 0x76543210):
  332. self.assertEqual(i & mask, func(func(i&mask)) & mask)
  333. swapped = func(mask)
  334. self.assertEqual(swapped & mask, mask)
  335. self.assertRaises(OverflowError, func, 1L<<34)
  336. def testNtoHErrors(self):
  337. good_values = [ 1, 2, 3, 1L, 2L, 3L ]
  338. bad_values = [ -1, -2, -3, -1L, -2L, -3L ]
  339. for k in good_values:
  340. socket.ntohl(k)
  341. socket.ntohs(k)
  342. socket.htonl(k)
  343. socket.htons(k)
  344. for k in bad_values:
  345. self.assertRaises(OverflowError, socket.ntohl, k)
  346. self.assertRaises(OverflowError, socket.ntohs, k)
  347. self.assertRaises(OverflowError, socket.htonl, k)
  348. self.assertRaises(OverflowError, socket.htons, k)
  349. def testGetServBy(self):
  350. eq = self.assertEqual
  351. # Find one service that exists, then check all the related interfaces.
  352. # I've ordered this by protocols that have both a tcp and udp
  353. # protocol, at least for modern Linuxes.
  354. if (sys.platform.startswith('linux') or
  355. sys.platform.startswith('freebsd') or
  356. sys.platform.startswith('netbsd') or
  357. sys.platform == 'darwin'):
  358. # avoid the 'echo' service on this platform, as there is an
  359. # assumption breaking non-standard port/protocol entry
  360. services = ('daytime', 'qotd', 'domain')
  361. else:
  362. services = ('echo', 'daytime', 'domain')
  363. for service in services:
  364. try:
  365. port = socket.getservbyname(service, 'tcp')
  366. break
  367. except socket.error:
  368. pass
  369. else:
  370. raise socket.error
  371. # Try same call with optional protocol omitted
  372. port2 = socket.getservbyname(service)
  373. eq(port, port2)
  374. # Try udp, but don't barf if it doesn't exist
  375. try:
  376. udpport = socket.getservbyname(service, 'udp')
  377. except socket.error:
  378. udpport = None
  379. else:
  380. eq(udpport, port)
  381. # Now make sure the lookup by port returns the same service name
  382. eq(socket.getservbyport(port2), service)
  383. eq(socket.getservbyport(port, 'tcp'), service)
  384. if udpport is not None:
  385. eq(socket.getservbyport(udpport, 'udp'), service)
  386. # Make sure getservbyport does not accept out of range ports.
  387. self.assertRaises(OverflowError, socket.getservbyport, -1)
  388. self.assertRaises(OverflowError, socket.getservbyport, 65536)
  389. def testDefaultTimeout(self):
  390. # Testing default timeout
  391. # The default timeout should initially be None
  392. self.assertEqual(socket.getdefaulttimeout(), None)
  393. s = socket.socket()
  394. self.assertEqual(s.gettimeout(), None)
  395. s.close()
  396. # Set the default timeout to 10, and see if it propagates
  397. socket.setdefaulttimeout(10)
  398. self.assertEqual(socket.getdefaulttimeout(), 10)
  399. s = socket.socket()
  400. self.assertEqual(s.gettimeout(), 10)
  401. s.close()
  402. # Reset the default timeout to None, and see if it propagates
  403. socket.setdefaulttimeout(None)
  404. self.assertEqual(socket.getdefaulttimeout(), None)
  405. s = socket.socket()
  406. self.assertEqual(s.gettimeout(), None)
  407. s.close()
  408. # Check that setting it to an invalid value raises ValueError
  409. self.assertRaises(ValueError, socket.setdefaulttimeout, -1)
  410. # Check that setting it to an invalid type raises TypeError
  411. self.assertRaises(TypeError, socket.setdefaulttimeout, "spam")
  412. @unittest.skipUnless(hasattr(socket, 'inet_aton'),
  413. 'test needs socket.inet_aton()')
  414. def testIPv4_inet_aton_fourbytes(self):
  415. # Test that issue1008086 and issue767150 are fixed.
  416. # It must return 4 bytes.
  417. self.assertEqual('\x00'*4, socket.inet_aton('0.0.0.0'))
  418. self.assertEqual('\xff'*4, socket.inet_aton('255.255.255.255'))
  419. @unittest.skipUnless(hasattr(socket, 'inet_pton'),
  420. 'test needs socket.inet_pton()')
  421. def testIPv4toString(self):
  422. from socket import inet_aton as f, inet_pton, AF_INET
  423. g = lambda a: inet_pton(AF_INET, a)
  424. self.assertEqual('\x00\x00\x00\x00', f('0.0.0.0'))
  425. self.assertEqual('\xff\x00\xff\x00', f('255.0.255.0'))
  426. self.assertEqual('\xaa\xaa\xaa\xaa', f('170.170.170.170'))
  427. self.assertEqual('\x01\x02\x03\x04', f('1.2.3.4'))
  428. self.assertEqual('\xff\xff\xff\xff', f('255.255.255.255'))
  429. self.assertEqual('\x00\x00\x00\x00', g('0.0.0.0'))
  430. self.assertEqual('\xff\x00\xff\x00', g('255.0.255.0'))
  431. self.assertEqual('\xaa\xaa\xaa\xaa', g('170.170.170.170'))
  432. self.assertEqual('\xff\xff\xff\xff', g('255.255.255.255'))
  433. @unittest.skipUnless(hasattr(socket, 'inet_pton'),
  434. 'test needs socket.inet_pton()')
  435. def testIPv6toString(self):
  436. try:
  437. from socket import inet_pton, AF_INET6, has_ipv6
  438. if not has_ipv6:
  439. self.skipTest('IPv6 not available')
  440. except ImportError:
  441. self.skipTest('could not import needed symbols from socket')
  442. f = lambda a: inet_pton(AF_INET6, a)
  443. self.assertEqual('\x00' * 16, f('::'))
  444. self.assertEqual('\x00' * 16, f('0::0'))
  445. self.assertEqual('\x00\x01' + '\x00' * 14, f('1::'))
  446. self.assertEqual(
  447. '\x45\xef\x76\xcb\x00\x1a\x56\xef\xaf\xeb\x0b\xac\x19\x24\xae\xae',
  448. f('45ef:76cb:1a:56ef:afeb:bac:1924:aeae')
  449. )
  450. @unittest.skipUnless(hasattr(socket, 'inet_ntop'),
  451. 'test needs socket.inet_ntop()')
  452. def testStringToIPv4(self):
  453. from socket import inet_ntoa as f, inet_ntop, AF_INET
  454. g = lambda a: inet_ntop(AF_INET, a)
  455. self.assertEqual('1.0.1.0', f('\x01\x00\x01\x00'))
  456. self.assertEqual('170.85.170.85', f('\xaa\x55\xaa\x55'))
  457. self.assertEqual('255.255.255.255', f('\xff\xff\xff\xff'))
  458. self.assertEqual('1.2.3.4', f('\x01\x02\x03\x04'))
  459. self.assertEqual('1.0.1.0', g('\x01\x00\x01\x00'))
  460. self.assertEqual('170.85.170.85', g('\xaa\x55\xaa\x55'))
  461. self.assertEqual('255.255.255.255', g('\xff\xff\xff\xff'))
  462. @unittest.skipUnless(hasattr(socket, 'inet_ntop'),
  463. 'test needs socket.inet_ntop()')
  464. def testStringToIPv6(self):
  465. try:
  466. from socket import inet_ntop, AF_INET6, has_ipv6
  467. if not has_ipv6:
  468. self.skipTest('IPv6 not available')
  469. except ImportError:
  470. self.skipTest('could not import needed symbols from socket')
  471. f = lambda a: inet_ntop(AF_INET6, a)
  472. self.assertEqual('::', f('\x00' * 16))
  473. self.assertEqual('::1', f('\x00' * 15 + '\x01'))
  474. self.assertEqual(
  475. 'aef:b01:506:1001:ffff:9997:55:170',
  476. f('\x0a\xef\x0b\x01\x05\x06\x10\x01\xff\xff\x99\x97\x00\x55\x01\x70')
  477. )
  478. # XXX The following don't test module-level functionality...
  479. def _get_unused_port(self, bind_address='0.0.0.0'):
  480. """Use a temporary socket to elicit an unused ephemeral port.
  481. Args:
  482. bind_address: Hostname or IP address to search for a port on.
  483. Returns: A most likely to be unused port.
  484. """
  485. tempsock = socket.socket()
  486. tempsock.bind((bind_address, 0))
  487. host, port = tempsock.getsockname()
  488. tempsock.close()
  489. return port
  490. def testSockName(self):
  491. # Testing getsockname()
  492. port = self._get_unused_port()
  493. sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  494. self.addCleanup(sock.close)
  495. sock.bind(("0.0.0.0", port))
  496. name = sock.getsockname()
  497. # XXX(nnorwitz): http://tinyurl.com/os5jz seems to indicate
  498. # it reasonable to get the host's addr in addition to 0.0.0.0.
  499. # At least for eCos. This is required for the S/390 to pass.
  500. try:
  501. my_ip_addr = socket.gethostbyname(socket.gethostname())
  502. except socket.error:
  503. # Probably name lookup wasn't set up right; skip this test
  504. self.skipTest('name lookup failure')
  505. self.assertIn(name[0], ("0.0.0.0", my_ip_addr), '%s invalid' % name[0])
  506. self.assertEqual(name[1], port)
  507. def testGetSockOpt(self):
  508. # Testing getsockopt()
  509. # We know a socket should start without reuse==0
  510. sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  511. self.addCleanup(sock.close)
  512. reuse = sock.getsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR)
  513. self.assertFalse(reuse != 0, "initial mode is reuse")
  514. def testSetSockOpt(self):
  515. # Testing setsockopt()
  516. sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  517. self.addCleanup(sock.close)
  518. sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
  519. reuse = sock.getsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR)
  520. self.assertFalse(reuse == 0, "failed to set reuse mode")
  521. def testSendAfterClose(self):
  522. # testing send() after close() with timeout
  523. sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  524. sock.settimeout(1)
  525. sock.close()
  526. self.assertRaises(socket.error, sock.send, "spam")
  527. def testNewAttributes(self):
  528. # testing .family, .type and .protocol
  529. sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  530. self.assertEqual(sock.family, socket.AF_INET)
  531. self.assertEqual(sock.type, socket.SOCK_STREAM)
  532. self.assertEqual(sock.proto, 0)
  533. sock.close()
  534. def test_getsockaddrarg(self):
  535. sock = socket.socket()
  536. self.addCleanup(sock.close)
  537. port = test_support.find_unused_port()
  538. big_port = port + 65536
  539. neg_port = port - 65536
  540. self.assertRaises(OverflowError, sock.bind, (HOST, big_port))
  541. self.assertRaises(OverflowError, sock.bind, (HOST, neg_port))
  542. # Since find_unused_port() is inherently subject to race conditions, we
  543. # call it a couple times if necessary.
  544. for i in itertools.count():
  545. port = test_support.find_unused_port()
  546. try:
  547. sock.bind((HOST, port))
  548. except OSError as e:
  549. if e.errno != errno.EADDRINUSE or i == 5:
  550. raise
  551. else:
  552. break
  553. @unittest.skipUnless(os.name == "nt", "Windows specific")
  554. def test_sock_ioctl(self):
  555. self.assertTrue(hasattr(socket.socket, 'ioctl'))
  556. self.assertTrue(hasattr(socket, 'SIO_RCVALL'))
  557. self.assertTrue(hasattr(socket, 'RCVALL_ON'))
  558. self.assertTrue(hasattr(socket, 'RCVALL_OFF'))
  559. self.assertTrue(hasattr(socket, 'SIO_KEEPALIVE_VALS'))
  560. s = socket.socket()
  561. self.addCleanup(s.close)
  562. self.assertRaises(ValueError, s.ioctl, -1, None)
  563. s.ioctl(socket.SIO_KEEPALIVE_VALS, (1, 100, 100))
  564. def testGetaddrinfo(self):
  565. try:
  566. socket.getaddrinfo('localhost', 80)
  567. except socket.gaierror as err:
  568. if err.errno == socket.EAI_SERVICE:
  569. # see http://bugs.python.org/issue1282647
  570. self.skipTest("buggy libc version")
  571. raise
  572. # len of every sequence is supposed to be == 5
  573. for info in socket.getaddrinfo(HOST, None):
  574. self.assertEqual(len(info), 5)
  575. # host can be a domain name, a string representation of an
  576. # IPv4/v6 address or None
  577. socket.getaddrinfo('localhost', 80)
  578. socket.getaddrinfo('127.0.0.1', 80)
  579. socket.getaddrinfo(None, 80)
  580. if SUPPORTS_IPV6:
  581. socket.getaddrinfo('::1', 80)
  582. # port can be a string service name such as "http", a numeric
  583. # port number (int or long), or None
  584. socket.getaddrinfo(HOST, "http")
  585. socket.getaddrinfo(HOST, 80)
  586. socket.getaddrinfo(HOST, 80L)
  587. socket.getaddrinfo(HOST, None)
  588. # test family and socktype filters
  589. infos = socket.getaddrinfo(HOST, None, socket.AF_INET)
  590. for family, _, _, _, _ in infos:
  591. self.assertEqual(family, socket.AF_INET)
  592. infos = socket.getaddrinfo(HOST, None, 0, socket.SOCK_STREAM)
  593. for _, socktype, _, _, _ in infos:
  594. self.assertEqual(socktype, socket.SOCK_STREAM)
  595. # test proto and flags arguments
  596. socket.getaddrinfo(HOST, None, 0, 0, socket.SOL_TCP)
  597. socket.getaddrinfo(HOST, None, 0, 0, 0, socket.AI_PASSIVE)
  598. # a server willing to support both IPv4 and IPv6 will
  599. # usually do this
  600. socket.getaddrinfo(None, 0, socket.AF_UNSPEC, socket.SOCK_STREAM, 0,
  601. socket.AI_PASSIVE)
  602. # Issue 17269: test workaround for OS X platform bug segfault
  603. if hasattr(socket, 'AI_NUMERICSERV'):
  604. try:
  605. # The arguments here are undefined and the call may succeed
  606. # or fail. All we care here is that it doesn't segfault.
  607. socket.getaddrinfo("localhost", None, 0, 0, 0,
  608. socket.AI_NUMERICSERV)
  609. except socket.gaierror:
  610. pass
  611. def check_sendall_interrupted(self, with_timeout):
  612. # socketpair() is not strictly required, but it makes things easier.
  613. if not hasattr(signal, 'alarm') or not hasattr(socket, 'socketpair'):
  614. self.skipTest("signal.alarm and socket.socketpair required for this test")
  615. # Our signal handlers clobber the C errno by calling a math function
  616. # with an invalid domain value.
  617. def ok_handler(*args):
  618. self.assertRaises(ValueError, math.acosh, 0)
  619. def raising_handler(*args):
  620. self.assertRaises(ValueError, math.acosh, 0)
  621. 1 // 0
  622. c, s = socket.socketpair()
  623. old_alarm = signal.signal(signal.SIGALRM, raising_handler)
  624. try:
  625. if with_timeout:
  626. # Just above the one second minimum for signal.alarm
  627. c.settimeout(1.5)
  628. with self.assertRaises(ZeroDivisionError):
  629. signal.alarm(1)
  630. c.sendall(b"x" * test_support.SOCK_MAX_SIZE)
  631. if with_timeout:
  632. signal.signal(signal.SIGALRM, ok_handler)
  633. signal.alarm(1)
  634. self.assertRaises(socket.timeout, c.sendall,
  635. b"x" * test_support.SOCK_MAX_SIZE)
  636. finally:
  637. signal.signal(signal.SIGALRM, old_alarm)
  638. c.close()
  639. s.close()
  640. def test_sendall_interrupted(self):
  641. self.check_sendall_interrupted(False)
  642. def test_sendall_interrupted_with_timeout(self):
  643. self.check_sendall_interrupted(True)
  644. def test_listen_backlog(self):
  645. for backlog in 0, -1:
  646. srv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  647. srv.bind((HOST, 0))
  648. srv.listen(backlog)
  649. srv.close()
  650. @test_support.cpython_only
  651. def test_listen_backlog_overflow(self):
  652. # Issue 15989
  653. import _testcapi
  654. srv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  655. srv.bind((HOST, 0))
  656. self.assertRaises(OverflowError, srv.listen, _testcapi.INT_MAX + 1)
  657. srv.close()
  658. @unittest.skipUnless(SUPPORTS_IPV6, 'IPv6 required for this test.')
  659. def test_flowinfo(self):
  660. self.assertRaises(OverflowError, socket.getnameinfo,
  661. ('::1',0, 0xffffffff), 0)
  662. s = socket.socket(socket.AF_INET6, socket.SOCK_STREAM)
  663. try:
  664. self.assertRaises(OverflowError, s.bind, ('::1', 0, -10))
  665. finally:
  666. s.close()
  667. @unittest.skipUnless(thread, 'Threading required for this test.')
  668. class BasicTCPTest(SocketConnectedTest):
  669. def __init__(self, methodName='runTest'):
  670. SocketConnectedTest.__init__(self, methodName=methodName)
  671. def testRecv(self):
  672. # Testing large receive over TCP
  673. msg = self.cli_conn.recv(1024)
  674. self.assertEqual(msg, MSG)
  675. def _testRecv(self):
  676. self.serv_conn.send(MSG)
  677. def testOverFlowRecv(self):
  678. # Testing receive in chunks over TCP
  679. seg1 = self.cli_conn.recv(len(MSG) - 3)
  680. seg2 = self.cli_conn.recv(1024)
  681. msg = seg1 + seg2
  682. self.assertEqual(msg, MSG)
  683. def _testOverFlowRecv(self):
  684. self.serv_conn.send(MSG)
  685. def testRecvFrom(self):
  686. # Testing large recvfrom() over TCP
  687. msg, addr = self.cli_conn.recvfrom(1024)
  688. self.assertEqual(msg, MSG)
  689. def _testRecvFrom(self):
  690. self.serv_conn.send(MSG)
  691. def testOverFlowRecvFrom(self):
  692. # Testing recvfrom() in chunks over TCP
  693. seg1, addr = self.cli_conn.recvfrom(len(MSG)-3)
  694. seg2, addr = self.cli_conn.recvfrom(1024)
  695. msg = seg1 + seg2
  696. self.assertEqual(msg, MSG)
  697. def _testOverFlowRecvFrom(self):
  698. self.serv_conn.send(MSG)
  699. def testSendAll(self):
  700. # Testing sendall() with a 2048 byte string over TCP
  701. msg = ''
  702. while 1:
  703. read = self.cli_conn.recv(1024)
  704. if not read:
  705. break
  706. msg += read
  707. self.assertEqual(msg, 'f' * 2048)
  708. def _testSendAll(self):
  709. big_chunk = 'f' * 2048
  710. self.serv_conn.sendall(big_chunk)
  711. @unittest.skipUnless(hasattr(socket, 'fromfd'),
  712. 'socket.fromfd not available')
  713. def testFromFd(self):
  714. # Testing fromfd()
  715. fd = self.cli_conn.fileno()
  716. sock = socket.fromfd(fd, socket.AF_INET, socket.SOCK_STREAM)
  717. self.addCleanup(sock.close)
  718. msg = sock.recv(1024)
  719. self.assertEqual(msg, MSG)
  720. def _testFromFd(self):
  721. self.serv_conn.send(MSG)
  722. def testDup(self):
  723. # Testing dup()
  724. sock = self.cli_conn.dup()
  725. self.addCleanup(sock.close)
  726. msg = sock.recv(1024)
  727. self.assertEqual(msg, MSG)
  728. def _testDup(self):
  729. self.serv_conn.send(MSG)
  730. def testShutdown(self):
  731. # Testing shutdown()
  732. msg = self.cli_conn.recv(1024)
  733. self.assertEqual(msg, MSG)
  734. # wait for _testShutdown to finish: on OS X, when the server
  735. # closes the connection the client also becomes disconnected,
  736. # and the client's shutdown call will fail. (Issue #4397.)
  737. self.done.wait()
  738. def _testShutdown(self):
  739. self.serv_conn.send(MSG)
  740. self.serv_conn.shutdown(2)
  741. testShutdown_overflow = test_support.cpython_only(testShutdown)
  742. @test_support.cpython_only
  743. def _testShutdown_overflow(self):
  744. import _testcapi
  745. self.serv_conn.send(MSG)
  746. # Issue 15989
  747. self.assertRaises(OverflowError, self.serv_conn.shutdown,
  748. _testcapi.INT_MAX + 1)
  749. self.assertRaises(OverflowError, self.serv_conn.shutdown,
  750. 2 + (_testcapi.UINT_MAX + 1))
  751. self.serv_conn.shutdown(2)
  752. @unittest.skipUnless(thread, 'Threading required for this test.')
  753. class BasicUDPTest(ThreadedUDPSocketTest):
  754. def __init__(self, methodName='runTest'):
  755. ThreadedUDPSocketTest.__init__(self, methodName=methodName)
  756. def testSendtoAndRecv(self):
  757. # Testing sendto() and Recv() over UDP
  758. msg = self.serv.recv(len(MSG))
  759. self.assertEqual(msg, MSG)
  760. def _testSendtoAndRecv(self):
  761. self.cli.sendto(MSG, 0, (HOST, self.port))
  762. def testRecvFrom(self):
  763. # Testing recvfrom() over UDP
  764. msg, addr = self.serv.recvfrom(len(MSG))
  765. self.assertEqual(msg, MSG)
  766. def _testRecvFrom(self):
  767. self.cli.sendto(MSG, 0, (HOST, self.port))
  768. def testRecvFromNegative(self):
  769. # Negative lengths passed to recvfrom should give ValueError.
  770. self.assertRaises(ValueError, self.serv.recvfrom, -1)
  771. def _testRecvFromNegative(self):
  772. self.cli.sendto(MSG, 0, (HOST, self.port))
  773. @unittest.skipUnless(thread, 'Threading required for this test.')
  774. class TCPCloserTest(ThreadedTCPSocketTest):
  775. def testClose(self):
  776. conn, addr = self.serv.accept()
  777. conn.close()
  778. sd = self.cli
  779. read, write, err = select.select([sd], [], [], 1.0)
  780. self.assertEqual(read, [sd])
  781. self.assertEqual(sd.recv(1), '')
  782. def _testClose(self):
  783. self.cli.connect((HOST, self.port))
  784. time.sleep(1.0)
  785. @unittest.skipUnless(hasattr(socket, 'socketpair'),
  786. 'test needs socket.socketpair()')
  787. @unittest.skipUnless(thread, 'Threading required for this test.')
  788. class BasicSocketPairTest(SocketPairTest):
  789. def __init__(self, methodName='runTest'):
  790. SocketPairTest.__init__(self, methodName=methodName)
  791. def testRecv(self):
  792. msg = self.serv.recv(1024)
  793. self.assertEqual(msg, MSG)
  794. def _testRecv(self):
  795. self.cli.send(MSG)
  796. def testSend(self):
  797. self.serv.send(MSG)
  798. def _testSend(self):
  799. msg = self.cli.recv(1024)
  800. self.assertEqual(msg, MSG)
  801. @unittest.skipUnless(thread, 'Threading required for this test.')
  802. class NonBlockingTCPTests(ThreadedTCPSocketTest):
  803. def __init__(self, methodName='runTest'):
  804. ThreadedTCPSocketTest.__init__(self, methodName=methodName)
  805. def testSetBlocking(self):
  806. # Testing whether set blocking works
  807. self.serv.setblocking(True)
  808. self.assertIsNone(self.serv.gettimeout())
  809. self.serv.setblocking(False)
  810. self.assertEqual(self.serv.gettimeout(), 0.0)
  811. start = time.time()
  812. try:
  813. self.serv.accept()
  814. except socket.error:
  815. pass
  816. end = time.time()
  817. self.assertTrue((end - start) < 1.0, "Error setting non-blocking mode.")
  818. def _testSetBlocking(self):
  819. pass
  820. @test_support.cpython_only
  821. def testSetBlocking_overflow(self):
  822. # Issue 15989
  823. import _testcapi
  824. if _testcapi.UINT_MAX >= _testcapi.ULONG_MAX:
  825. self.skipTest('needs UINT_MAX < ULONG_MAX')
  826. self.serv.setblocking(False)
  827. self.assertEqual(self.serv.gettimeout(), 0.0)
  828. self.serv.setblocking(_testcapi.UINT_MAX + 1)
  829. self.assertIsNone(self.serv.gettimeout())
  830. _testSetBlocking_overflow = test_support.cpython_only(_testSetBlocking)
  831. def testAccept(self):
  832. # Testing non-blocking accept
  833. self.serv.setblocking(0)
  834. try:
  835. conn, addr = self.serv.accept()
  836. except socket.error:
  837. pass
  838. else:
  839. self.fail("Error trying to do non-blocking accept.")
  840. read, write, err = select.select([self.serv], [], [])
  841. if self.serv in read:
  842. conn, addr = self.serv.accept()
  843. conn.close()
  844. else:
  845. self.fail("Error trying to do accept after select.")
  846. def _testAccept(self):
  847. time.sleep(0.1)
  848. self.cli.connect((HOST, self.port))
  849. def testConnect(self):
  850. # Testing non-blocking connect
  851. conn, addr = self.serv.accept()
  852. conn.close()
  853. def _testConnect(self):
  854. self.cli.settimeout(10)
  855. self.cli.connect((HOST, self.port))
  856. def testRecv(self):
  857. # Testing non-blocking recv
  858. conn, addr = self.serv.accept()
  859. conn.setblocking(0)
  860. try:
  861. msg = conn.recv(len(MSG))
  862. except socket.error:
  863. pass
  864. else:
  865. self.fail("Error trying to do non-blocking recv.")
  866. read, write, err = select.select([conn], [], [])
  867. if conn in read:
  868. msg = conn.recv(len(MSG))
  869. conn.close()
  870. self.assertEqual(msg, MSG)
  871. else:
  872. self.fail("Error during select call to non-blocking socket.")
  873. def _testRecv(self):
  874. self.cli.connect((HOST, self.port))
  875. time.sleep(0.1)
  876. self.cli.send(MSG)
  877. @unittest.skipUnless(thread, 'Threading required for this test.')
  878. class FileObjectClassTestCase(SocketConnectedTest):
  879. bufsize = -1 # Use default buffer size
  880. def __init__(self, methodName='runTest'):
  881. SocketConnectedTest.__init__(self, methodName=methodName)
  882. def setUp(self):
  883. SocketConnectedTest.setUp(self)
  884. self.serv_file = self.cli_conn.makefile('rb', self.bufsize)
  885. def tearDown(self):
  886. self.serv_file.close()
  887. self.assertTrue(self.serv_file.closed)
  888. SocketConnectedTest.tearDown(self)
  889. self.serv_file = None
  890. def clientSetUp(self):
  891. SocketConnectedTest.clientSetUp(self)
  892. self.cli_file = self.serv_conn.makefile('wb')
  893. def clientTearDown(self):
  894. self.cli_file.close()
  895. self.assertTrue(self.cli_file.closed)
  896. self.cli_file = None
  897. SocketConnectedTest.clientTearDown(self)
  898. def testSmallRead(self):
  899. # Performing small file read test
  900. first_seg = self.serv_file.read(len(MSG)-3)
  901. second_seg = self.serv_file.read(3)
  902. msg = first_seg + second_seg
  903. self.assertEqual(msg, MSG)
  904. def _testSmallRead(self):
  905. self.cli_file.write(MSG)
  906. self.cli_file.flush()
  907. def testFullRead(self):
  908. # read until EOF
  909. msg = self.serv_file.read()
  910. self.assertEqual(msg, MSG)
  911. def _testFullRead(self):
  912. self.cli_file.write(MSG)
  913. self.cli_file.close()
  914. def testUnbufferedRead(self):
  915. # Performing unbuffered file read test
  916. buf = ''
  917. while 1:
  918. char = self.serv_file.read(1)
  919. if not char:
  920. break
  921. buf += char
  922. self.assertEqual(buf, MSG)
  923. def _testUnbufferedRead(self):
  924. self.cli_file.write(MSG)
  925. self.cli_file.flush()
  926. def testReadline(self):
  927. # Performing file readline test
  928. line = self.serv_file.readline()
  929. self.assertEqual(line, MSG)
  930. def _testReadline(self):
  931. self.cli_file.write(MSG)
  932. self.cli_file.flush()
  933. def testReadlineAfterRead(self):
  934. a_baloo_is = self.serv_file.read(len("A baloo is"))
  935. self.assertEqual("A baloo is", a_baloo_is)
  936. _a_bear = self.serv_file.read(len(" a bear"))
  937. self.assertEqual(" a bear", _a_bear)
  938. line = self.serv_file.readline()
  939. self.assertEqual("\n", line)
  940. line = self.serv_file.readline()
  941. self.assertEqual("A BALOO IS A BEAR.\n", line)
  942. line = self.serv_file.readline()
  943. self.assertEqual(MSG, line)
  944. def _testReadlineAfterRead(self):
  945. self.cli_file.write("A baloo is a bear\n")
  946. self.cli_file.write("A BALOO IS A BEAR.\n")
  947. self.cli_file.write(MSG)
  948. self.cli_file.flush()
  949. def testReadlineAfterReadNoNewline(self):
  950. end_of_ = self.serv_file.read(len("End Of "))
  951. self.assertEqual("End Of ", end_of_)
  952. line = self.serv_file.readline()
  953. self.assertEqual("Line", line)
  954. def _testReadlineAfterReadNoNewline(self):
  955. self.cli_file.write("End Of Line")
  956. def testClosedAttr(self):
  957. self.assertTrue(not self.serv_file.closed)
  958. def _testClosedAttr(self):
  959. self.assertTrue(not self.cli_file.closed)
  960. class FileObjectInterruptedTestCase(unittest.TestCase):
  961. """Test that the file object correctly handles EINTR internally."""
  962. class MockSocket(object):
  963. def __init__(self, recv_funcs=()):
  964. # A generator that returns callables that we'll call for each
  965. # call to recv().
  966. self._recv_step = iter(recv_funcs)
  967. def recv(self, size):
  968. return self._recv_step.next()()
  969. @staticmethod
  970. def _raise_eintr():
  971. raise socket.error(errno.EINTR)
  972. def _test_readline(self, size=-1, **kwargs):
  973. mock_sock = self.MockSocket(recv_funcs=[
  974. lambda : "This is the first line\nAnd the sec",
  975. self._raise_eintr,
  976. lambda : "ond line is here\n",
  977. lambda : "",
  978. ])
  979. fo = socket._fileobject(mock_sock, **kwargs)
  980. self.assertEqual(fo.readline(size), "This is the first line\n")
  981. self.assertEqual(fo.readline(size), "And the second line is here\n")
  982. def _test_read(self, size=-1, **kwargs):
  983. mock_sock = self.MockSocket(recv_funcs=[
  984. lambda : "This is the first line\nAnd the sec",
  985. self._raise_eintr,
  986. lambda : "ond line is here\n",
  987. lambda : "",
  988. ])
  989. fo = socket._fileobject(mock_sock, **kwargs)
  990. self.assertEqual(fo.read(size), "This is the first line\n"
  991. "And the second line is here\n")
  992. def test_default(self):
  993. self._test_readline()
  994. self._test_readline(size=100)
  995. self._test_read()
  996. self._test_read(size=100)
  997. def test_with_1k_buffer(self):
  998. self._test_readline(bufsize=1024)
  999. self._test_readline(size=100, bufsize=1024)
  1000. self._test_read(bufsize=1024)
  1001. self._test_read(size=100, bufsize=1024)
  1002. def _test_readline_no_buffer(self, size=-1):
  1003. mock_sock = self.MockSocket(recv_funcs=[
  1004. lambda : "aa",
  1005. lambda : "\n",
  1006. lambda : "BB",
  1007. self._raise_eintr,
  1008. lambda : "bb",
  1009. lambda : "",
  1010. ])
  1011. fo = socket._fileobject(mock_sock, bufsize=0)
  1012. self.assertEqual(fo.readline(size), "aa\n")
  1013. self.assertEqual(fo.readline(size), "BBbb")
  1014. def test_no_buffer(self):
  1015. self._test_readline_no_buffer()
  1016. self._test_readline_no_buffer(size=4)
  1017. self._test_read(bufsize=0)
  1018. self._test_read(size=100, bufsize=0)
  1019. class UnbufferedFileObjectClassTestCase(FileObjectClassTestCase):
  1020. """Repeat the tests from FileObjectClassTestCase with bufsize==0.
  1021. In this case (and in this case only), it should be possible to
  1022. create a file object, read a line from it, create another file
  1023. object, read another line from it, without loss of data in the
  1024. first file object's buffer. Note that httplib relies on this
  1025. when reading multiple requests from the same socket."""
  1026. bufsize = 0 # Use unbuffered mode
  1027. def testUnbufferedReadline(self):
  1028. # Read a line, create a new file object, read another line with it
  1029. line = self.serv_file.readline() # first line
  1030. self.assertEqual(line, "A. " + MSG) # first line
  1031. self.serv_file = self.cli_conn.makefile('rb', 0)
  1032. line = self.serv_file.readline() # second line
  1033. self.assertEqual(line, "B. " + MSG) # second line
  1034. def _testUnbufferedReadline(self):
  1035. self.cli_file.write("A. " + MSG)
  1036. self.cli_file.write("B. " + MSG)
  1037. self.cli_file.flush()
  1038. class LineBufferedFileObjectClassTestCase(FileObjectClassTestCase):
  1039. bufsize = 1 # Default-buffered for reading; line-buffered for writing
  1040. class SocketMemo(object):
  1041. """A wrapper to keep track of sent data, needed to examine write behaviour"""
  1042. def __init__(self, sock):
  1043. self._sock = sock
  1044. self.sent = []
  1045. def send(self, data, flags=0):
  1046. n = self._sock.send(data, flags)
  1047. self.sent.append(data[:n])
  1048. return n
  1049. def sendall(self, data, flags=0):
  1050. self._sock.sendall(data, flags)
  1051. self.sent.append(data)
  1052. def __getattr__(self, attr):
  1053. return getattr(self._sock, attr)
  1054. def getsent(self):
  1055. return [e.tobytes() if isinstance(e, memoryview) else e for e in self.sent]
  1056. def setUp(self):
  1057. FileObjectClassTestCase.setUp(self)
  1058. self.serv_file._sock = self.SocketMemo(self.serv_file._sock)
  1059. def testLinebufferedWrite(self):
  1060. # Write two lines, in small chunks
  1061. msg = MSG.strip()
  1062. print >> self.serv_file, msg,
  1063. print >> self.serv_file, msg
  1064. # second line:
  1065. print >> self.serv_file, msg,
  1066. print >> self.serv_file, msg,
  1067. print >> self.serv_file, msg
  1068. # third line
  1069. print >> self.serv_file, ''
  1070. self.serv_file.flush()
  1071. msg1 = "%s %s\n"%(msg, msg)
  1072. msg2 = "%s %s %s\n"%(msg, msg, msg)
  1073. msg3 = "\n"
  1074. self.assertEqual(self.serv_file._sock.getsent(), [msg1, msg2, msg3])
  1075. def _testLinebufferedWrite(self):
  1076. msg = MSG.strip()
  1077. msg1 = "%s %s\n"%(msg, msg)
  1078. msg2 = "%s %s %s\n"%(msg, msg, msg)
  1079. msg3 = "\n"
  1080. l1 = self.cli_file.readline()
  1081. self.assertEqual(l1, msg1)
  1082. l2 = self.cli_file.readline()
  1083. self.assertEqual(l2, msg2)
  1084. l3 = self.cli_file.readline()
  1085. self.assertEqual(l3, msg3)
  1086. class SmallBufferedFileObjectClassTestCase(FileObjectClassTestCase):
  1087. bufsize = 2 # Exercise the buffering code
  1088. class NetworkConnectionTest(object):
  1089. """Prove network connection."""
  1090. def clientSetUp(self):
  1091. # We're inherited below by BasicTCPTest2, which also inherits
  1092. # BasicTCPTest, which defines self.port referenced below.
  1093. self.cli = socket.create_connection((HOST, self.port))
  1094. self.serv_conn = self.cli
  1095. class BasicTCPTest2(NetworkConnectionTest, BasicTCPTest):
  1096. """Tests that NetworkConnection does not break existing TCP functionality.
  1097. """
  1098. class NetworkConnectionNoServer(unittest.TestCase):
  1099. class MockSocket(socket.socket):
  1100. def connect(self, *args):
  1101. raise socket.timeout('timed out')
  1102. @contextlib.contextmanager
  1103. def mocked_socket_module(self):
  1104. """Return a socket which times out on connect"""
  1105. old_socket = socket.socket
  1106. socket.socket = self.MockSocket
  1107. try:
  1108. yield
  1109. finally:
  1110. socket.socket = old_socket
  1111. def test_connect(self):
  1112. port = test_support.find_unused_port()
  1113. cli = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  1114. self.addCleanup(cli.close)
  1115. with self.assertRaises(socket.error) as cm:
  1116. cli.connect((HOST, port))
  1117. self.assertEqual(cm.exception.errno, errno.ECONNREFUSED)
  1118. def test_create_connection(self):
  1119. # Issue #9792: errors raised by create_connection() should have
  1120. # a proper errno attribute.
  1121. port = test_support.find_unused_port()
  1122. with self.assertRaises(socket.error) as cm:
  1123. socket.create_connection((HOST, port))
  1124. # Issue #16257: create_connection() calls getaddrinfo() against
  1125. # 'localhost'. This may result in an IPV6 addr being returned
  1126. # as well as an IPV4 one:
  1127. # >>> socket.getaddrinfo('localhost', port, 0, SOCK_STREAM)
  1128. # >>> [(2, 2, 0, '', ('127.0.0.1', 41230)),
  1129. # (26, 2, 0, '', ('::1', 41230, 0, 0))]
  1130. #
  1131. # create_connection() enumerates through all the addresses returned
  1132. # and if it doesn't successfully bind to any of them, it propagates
  1133. # the last exception it encountered.
  1134. #
  1135. # On Solaris, ENETUNREACH is returned in this circumstance instead
  1136. # of ECONNREFUSED. So, if that errno exists, add it to our list of
  1137. # expected errnos.
  1138. expected_errnos = [ errno.ECONNREFUSED, ]
  1139. if hasattr(errno, 'ENETUNREACH'):
  1140. expected_errnos.append(errno.ENETUNREACH)
  1141. self.assertIn(cm.exception.errno, expected_errnos)
  1142. def test_create_connection_timeout(self):
  1143. # Issue #9792: create_connection() should not recast timeout errors
  1144. # as generic socket errors.
  1145. with self.mocked_socket_module():
  1146. with self.assertRaises(socket.timeout):
  1147. socket.create_connection((HOST, 1234))
  1148. @unittest.skipUnless(thread, 'Threading required for this test.')
  1149. class NetworkConnectionAttributesTest(SocketTCPTest, ThreadableTest):
  1150. def __init__(self, methodName='runTest'):
  1151. SocketTCPTest.__init__(self, methodName=methodName)
  1152. ThreadableTest.__init__(self)
  1153. def clientSetUp(self):
  1154. self.source_port = test_support.find_unused_port()
  1155. def clientTearDown(self):
  1156. self.cli.close()
  1157. self.cli = None
  1158. ThreadableTest.clientTearDown(self)
  1159. def _justAccept(self):
  1160. conn, addr = self.serv.accept()
  1161. conn.close()
  1162. testFamily = _justAccept
  1163. def _testFamily(self):
  1164. self.cli = socket.create_connection((HOST, self.port), timeout=30)
  1165. self.addCleanup(self.cli.close)
  1166. self.assertEqual(self.cli.family, 2)
  1167. testSourceAddress = _justAccept
  1168. def _testSourceAddress(self):
  1169. self.cli = socket.create_connection((HOST, self.port), timeout=30,
  1170. source_address=('', self.source_port))
  1171. self.addCleanup(self.cli.close)
  1172. self.assertEqual(self.cli.getsockname()[1], self.source_port)
  1173. # The port number being used is sufficient to show that the bind()
  1174. # call happened.
  1175. testTimeoutDefault = _justAccept
  1176. def _testTimeoutDefault(self):
  1177. # passing no explicit timeout uses socket's global default
  1178. self.assertTrue(socket.getdefaulttimeout() is None)
  1179. socket.setdefaulttimeout(42)
  1180. try:
  1181. self.cli = socket.create_connection((HOST, self.port))
  1182. self.addCleanup(self.cli.close)
  1183. finally:
  1184. socket.setdefaulttimeout(None)
  1185. self.assertEqual(self.cli.gettimeout(), 42)
  1186. testTimeoutNone = _justAccept
  1187. def _testTimeoutNone(self):
  1188. # None timeout means the same as sock.settimeout(None)
  1189. self.assertTrue(socket.getdefaulttimeout() is None)
  1190. socket.setdefaulttimeout(30)
  1191. try:
  1192. self.cli = socket.create_connection((HOST, self.port), timeout=None)
  1193. self.addCleanup(self.cli.close)
  1194. finally:
  1195. socket.setdefaulttimeout(None)
  1196. self.assertEqual(self.cli.gettimeout(), None)
  1197. testTimeoutValueNamed = _justAccept
  1198. def _testTimeoutValueNamed(self):
  1199. self.cli = socket.create_connection((HOST, self.port), timeout=30)
  1200. self.assertEqual(self.cli.gettimeout(), 30)
  1201. testTimeoutValueNonamed = _justAccept
  1202. def _testTimeoutValueNonamed(self):
  1203. self.cli = socket.create_connection((HOST, self.port), 30)
  1204. self.addCleanup(self.cli.close)
  1205. self.assertEqual(self.cli.gettimeout(), 30)
  1206. @unittest.skipUnless(thread, 'Threading required for this test.')
  1207. class NetworkConnectionBehaviourTest(SocketTCPTest, ThreadableTest):
  1208. def __init__(self, methodName='runTest'):
  1209. SocketTCPTest.__init__(self, methodName=methodName)
  1210. ThreadableTest.__init__(self)
  1211. def clientSetUp(self):
  1212. pass
  1213. def clientTearDown(self):
  1214. self.cli.close()
  1215. self.cli = None
  1216. ThreadableTest.clientTearDown(self)
  1217. def testInsideTimeout(self):
  1218. conn, addr = self.serv.accept()
  1219. self.addCleanup(conn.close)
  1220. time.sleep(3)
  1221. conn.send("done!")
  1222. testOutsideTimeout = testInsideTimeout
  1223. def _testInsideTimeout(self):
  1224. self.cli = sock = socket.create_connection((HOST, self.port))
  1225. data = sock.recv(5)
  1226. self.assertEqual(data, "done!")
  1227. def _testOutsideTimeout(self):
  1228. self.cli = sock = socket.create_connection((HOST, self.port), timeout=1)
  1229. self.assertRaises(socket.timeout, lambda: sock.recv(5))
  1230. class Urllib2FileobjectTest(unittest.TestCase):
  1231. # urllib2.HTTPHandler has "borrowed" socket._fileobject, and requires that
  1232. # it close the socket if the close c'tor argument is true
  1233. def testClose(self):
  1234. class MockSocket:
  1235. closed = False
  1236. def flush(self): pass
  1237. def close(self): self.closed = True
  1238. # must not close unless we request it: the original use of _fileobject
  1239. # by module socket requires that the underlying socket not be closed until
  1240. # the _socketobject that created the _fileobject is closed
  1241. s = MockSocket()
  1242. f = socket._fileobject(s)
  1243. f.close()
  1244. self.assertTrue(not s.closed)
  1245. s = MockSocket()
  1246. f = socket._fileobject(s, close=True)
  1247. f.close()
  1248. self.assertTrue(s.closed)
  1249. class TCPTimeoutTest(SocketTCPTest):
  1250. def testTCPTimeout(self):
  1251. def raise_timeout(*args, **kwargs):
  1252. self.serv.settimeout(1.0)
  1253. self.serv.accept()
  1254. self.assertRaises(socket.timeout, raise_timeout,
  1255. "Error generating a timeout exception (TCP)")
  1256. def testTimeoutZero(self):
  1257. ok = False
  1258. try:
  1259. self.serv.settimeout(0.0)
  1260. foo = self.serv.accept()
  1261. except socket.timeout:
  1262. self.fail("caught timeout instead of error (TCP)")
  1263. except socket.error:
  1264. ok = True
  1265. except:
  1266. self.fail("caught unexpected exception (TCP)")
  1267. if not ok:
  1268. self.fail("accept() returned success when we did not expect it")
  1269. @unittest.skipUnless(hasattr(signal, 'alarm'),
  1270. 'test needs signal.alarm()')
  1271. def testInterruptedTimeout(self):
  1272. # XXX I don't know how to do this test on MSWindows or any other
  1273. # plaform that doesn't support signal.alarm() or os.kill(), though
  1274. # the bug should have existed on all platforms.
  1275. self.serv.settimeout(5.0) # must be longer than alarm
  1276. class Alarm(Exception):
  1277. pass
  1278. def alarm_handler(signal, frame):
  1279. raise Alarm
  1280. old_alarm = signal.signal(signal.SIGALRM, alarm_handler)
  1281. try:
  1282. signal.alarm(2) # POSIX allows alarm to be up to 1 second early
  1283. try:
  1284. foo = self.serv.accept()
  1285. except socket.timeout:
  1286. self.fail("caught timeout instead of Alarm")
  1287. except Alarm:
  1288. pass
  1289. except:
  1290. self.fail("caught other exception instead of Alarm:"
  1291. " %s(%s):\n%s" %
  1292. (sys.exc_info()[:2] + (traceback.format_exc(),)))
  1293. else:
  1294. self.fail("nothing caught")
  1295. finally:
  1296. signal.alarm(0) # shut off alarm
  1297. except Alarm:
  1298. self.fail("got Alarm in wrong place")
  1299. finally:
  1300. # no alarm can be pending. Safe to restore old handler.
  1301. signal.signal(signal.SIGALRM, old_alarm)
  1302. class UDPTimeoutTest(SocketUDPTest):
  1303. def testUDPTimeout(self):
  1304. def raise_timeout(*args, **kwargs):
  1305. self.serv.settimeout(1.0)
  1306. self.serv.recv(1024)
  1307. self.assertRaises(socket.timeout, raise_timeout,
  1308. "Error generating a timeout exception (UDP)")
  1309. def testTimeoutZero(self):
  1310. ok = False
  1311. try:
  1312. self.serv.settimeout(0.0)
  1313. foo = self.serv.recv(1024)
  1314. except socket.timeout:
  1315. self.fail("caught timeout instead of error (UDP)")
  1316. except socket.error:
  1317. ok = True
  1318. except:
  1319. self.fail("caught unexpected exception (UDP)")
  1320. if not ok:
  1321. self.fail("recv() returned success when we did not expect it")
  1322. class TestExceptions(unittest.TestCase):
  1323. def testExceptionTree(self):
  1324. self.assertTrue(issubclass(socket.error, Exception))
  1325. self.assertTrue(issubclass(socket.herror, socket.error))
  1326. self.assertTrue(issubclass(socket.gaierror, socket.error))
  1327. self.assertTrue(issubclass(socket.timeout, socket.error))
  1328. @unittest.skipUnless(sys.platform == 'linux', 'Linux specific test')
  1329. class TestLinuxAbstractNamespace(unittest.TestCase):
  1330. UNIX_PATH_MAX = 108
  1331. def testLinuxAbstractNamespace(self):
  1332. address = "\x00python-test-hello\x00\xff"
  1333. s1 = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
  1334. s1.bind(address)
  1335. s1.listen(1)
  1336. s2 = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
  1337. s2.connect(s1.getsockname())
  1338. s1.accept()
  1339. self.assertEqual(s1.getsockname(), address)
  1340. self.assertEqual(s2.getpeername(), address)
  1341. def testMaxName(self):
  1342. address = "\x00" + "h" * (self.UNIX_PATH_MAX - 1)
  1343. s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
  1344. s.bind(address)
  1345. self.assertEqual(s.getsockname(), address)
  1346. def testNameOverflow(self):
  1347. address = "\x00" + "h" * self.UNIX_PATH_MAX
  1348. s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
  1349. self.assertRaises(socket.error, s.bind, address)
  1350. @unittest.skipUnless(thread, 'Threading required for this test.')
  1351. class BufferIOTest(SocketConnectedTest):
  1352. """
  1353. Test the buffer versions of socket.recv() and socket.send().
  1354. """
  1355. def __init__(self, methodName='runTest'):
  1356. SocketConnectedTest.__init__(self, methodName=methodName)
  1357. def testRecvIntoArray(self):
  1358. buf = array.array('c', ' '*1024)
  1359. nbytes = self.cli_conn.recv_into(buf)
  1360. self.assertEqual(nbytes, len(MSG))
  1361. msg = buf.tostring()[:len(MSG)]
  1362. self.assertEqual(msg, MSG)
  1363. def _testRecvIntoArray(self):
  1364. with test_support.check_py3k_warnings():
  1365. buf = buffer(MSG)
  1366. self.serv_conn.send(buf)
  1367. def testRecvIntoBytearray(self):
  1368. buf = bytearray(1024)
  1369. nbytes = self.cli_conn.recv_into(buf)
  1370. self.assertEqual(nbytes, len(MSG))
  1371. msg = buf[:len(MSG)]
  1372. self.assertEqual(msg, MSG)
  1373. _testRecvIntoBytearray = _testRecvIntoArray
  1374. def testRecvIntoMemoryview(self):
  1375. buf = bytearray(1024)
  1376. nbytes = self.cli_conn.recv_into(memoryview(buf))
  1377. self.assertEqual(nbytes, len(MSG))
  1378. msg = buf[:len(MSG)]
  1379. self.assertEqual(msg, MSG)
  1380. _testRecvIntoMemoryview = _testRecvIntoArray
  1381. def testRecvFromIntoArray(self):
  1382. buf = array.array('c', ' '*1024)
  1383. nbytes, addr = self.cli_conn.recvfrom_into(buf)
  1384. self.assertEqual(nbytes, len(MSG))
  1385. msg = buf.tostring()[:len(MSG)]
  1386. self.assertEqual(msg, MSG)
  1387. def _testRecvFromIntoArray(self):
  1388. with test_support.check_py3k_warnings():
  1389. buf = buffer(MSG)
  1390. self.serv_conn.send(buf)
  1391. def testRecvFromIntoBytearray(self):
  1392. buf = bytearray(1024)
  1393. nbytes, addr = self.cli_conn.recvfrom_into(buf)
  1394. self.assertEqual(nbytes, len(MSG))
  1395. msg = buf[:len(MSG)]
  1396. self.assertEqual(msg, MSG)
  1397. _testRecvFromIntoBytearray = _testRecvFromIntoArray
  1398. def testRecvFromIntoMemoryview(self):
  1399. buf = bytearray(1024)
  1400. nbytes, addr = self.cli_conn.recvfrom_into(memoryview(buf))
  1401. self.assertEqual(nbytes, len(MSG))
  1402. msg = buf[:len(MSG)]
  1403. self.assertEqual(msg, MSG)
  1404. _testRecvFromIntoMemoryview = _testRecvFromIntoArray
  1405. def testRecvFromIntoSmallBuffer(self):
  1406. # See issue #20246.
  1407. buf = bytearray(8)
  1408. self.assertRaises(ValueError, self.cli_conn.recvfrom_into, buf, 1024)
  1409. def _testRecvFromIntoSmallBuffer(self):
  1410. with test_support.check_py3k_warnings():
  1411. buf = buffer(MSG)
  1412. self.serv_conn.send(buf)
  1413. def testRecvFromIntoEmptyBuffer(self):
  1414. buf = bytearray()
  1415. self.cli_conn.recvfrom_into(buf)
  1416. self.cli_conn.recvfrom_into(buf, 0)
  1417. _testRecvFromIntoEmptyBuffer = _testRecvFromIntoArray
  1418. TIPC_STYPE = 2000
  1419. TIPC_LOWER = 200
  1420. TIPC_UPPER = 210
  1421. def isTipcAvailable():
  1422. """Check if the TIPC module is loaded
  1423. The TIPC module is not loaded automatically on Ubuntu and probably
  1424. other Linux distros.
  1425. """
  1426. if not hasattr(socket, "AF_TIPC"):
  1427. return False
  1428. if not os.path.isfile("/proc/modules"):
  1429. return False
  1430. with open("/proc/modules") as f:
  1431. for line in f:
  1432. if line.startswith("tipc "):
  1433. return True
  1434. return False
  1435. @unittest.skipUnless(isTipcAvailable(),
  1436. "TIPC module is not loaded, please 'sudo modprobe tipc'")
  1437. class TIPCTest(unittest.TestCase):
  1438. def testRDM(self):
  1439. srv = socket.socket(socket.AF_TIPC, socket.SOCK_RDM)
  1440. cli = socket.socket(socket.AF_TIPC, socket.SOCK_RDM)
  1441. srv.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
  1442. srvaddr = (socket.TIPC_ADDR_NAMESEQ, TIPC_STYPE,
  1443. TIPC_LOWER, TIPC_UPPER)
  1444. srv.bind(srvaddr)
  1445. sendaddr = (socket.TIPC_ADDR_NAME, TIPC_STYPE,
  1446. TIPC_LOWER + (TIPC_UPPER - TIPC_LOWER) / 2, 0)
  1447. cli.sendto(MSG, sendaddr)
  1448. msg, recvaddr = srv.recvfrom(1024)
  1449. self.assertEqual(cli.getsockname(), recvaddr)
  1450. self.assertEqual(msg, MSG)
  1451. @unittest.skipUnless(isTipcAvailable(),
  1452. "TIPC module is not loaded, please 'sudo modprobe tipc'")
  1453. class TIPCThreadableTest(unittest.TestCase, ThreadableTest):
  1454. def __init__(self, methodName = 'runTest'):
  1455. unittest.TestCase.__init__(self, methodName = methodName)
  1456. ThreadableTest.__init__(self)
  1457. def setUp(self):
  1458. self.srv = socket.socket(socket.AF_TIPC, socket.SOCK_STREAM)
  1459. self.srv.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
  1460. srvaddr = (socket.TIPC_ADDR_NAMESEQ, TIPC_STYPE,
  1461. TIPC_LOWER, TIPC_UPPER)
  1462. self.srv.bind(srvaddr)
  1463. self.srv.listen(5)
  1464. self.serverExplicitReady()
  1465. self.conn, self.connaddr = self.srv.accept()
  1466. def clientSetUp(self):
  1467. # There is a hittable race between serverExplicitReady() and the
  1468. # accept() call; sleep a little while to avoid it, otherwise
  1469. # we could get an exception
  1470. time.sleep(0.1)
  1471. self.cli = socket.socket(socket.AF_TIPC, socket.SOCK_STREAM)
  1472. addr = (socket.TIPC_ADDR_NAME, TIPC_STYPE,
  1473. TIPC_LOWER + (TIPC_UPPER - TIPC_LOWER) / 2, 0)
  1474. self.cli.connect(addr)
  1475. self.cliaddr = self.cli.getsockname()
  1476. def testStream(self):
  1477. msg = self.conn.recv(1024)
  1478. self.assertEqual(msg, MSG)
  1479. self.assertEqual(self.cliaddr, self.connaddr)
  1480. def _testStream(self):
  1481. self.cli.send(MSG)
  1482. self.cli.close()
  1483. def test_main():
  1484. tests = [GeneralModuleTests, BasicTCPTest, TCPCloserTest, TCPTimeoutTest,
  1485. TestExceptions, BufferIOTest, BasicTCPTest2, BasicUDPTest,
  1486. UDPTimeoutTest ]
  1487. tests.extend([
  1488. NonBlockingTCPTests,
  1489. FileObjectClassTestCase,
  1490. FileObjectInterruptedTestCase,
  1491. UnbufferedFileObjectClassTestCase,
  1492. LineBufferedFileObjectClassTestCase,
  1493. SmallBufferedFileObjectClassTestCase,
  1494. Urllib2FileobjectTest,
  1495. NetworkConnectionNoServer,
  1496. NetworkConnectionAttributesTest,
  1497. NetworkConnectionBehaviourTest,
  1498. ])
  1499. tests.append(BasicSocketPairTest)
  1500. tests.append(TestLinuxAbstractNamespace)
  1501. tests.extend([TIPCTest, TIPCThreadableTest])
  1502. thread_info = test_support.threading_setup()
  1503. test_support.run_unittest(*tests)
  1504. test_support.threading_cleanup(*thread_info)
  1505. if __name__ == "__main__":
  1506. test_main()