44import gc
55import io
66import os
7+ import platform
78import signal
89import socket
910try :
@@ -40,6 +41,15 @@ def data_file(filename):
4041 raise FileNotFoundError (filename )
4142
4243
44+ def osx_tiger ():
45+ """Return True if the platform is Mac OS 10.4 or older."""
46+ if sys .platform != 'darwin' :
47+ return False
48+ version = platform .mac_ver ()[0 ]
49+ version = tuple (map (int , version .split ('.' )))
50+ return version < (10 , 5 )
51+
52+
4353ONLYCERT = data_file ('ssl_cert.pem' )
4454ONLYKEY = data_file ('ssl_key.pem' )
4555SIGNED_CERTFILE = data_file ('keycert3.pem' )
@@ -499,10 +509,12 @@ def my_handler(*args):
499509 self .loop .run_forever ()
500510 self .assertEqual (caught , 1 )
501511
502- def _basetest_create_connection (self , connection_fut ):
512+ def _basetest_create_connection (self , connection_fut , check_sockname ):
503513 tr , pr = self .loop .run_until_complete (connection_fut )
504514 self .assertIsInstance (tr , asyncio .Transport )
505515 self .assertIsInstance (pr , asyncio .Protocol )
516+ if check_sockname :
517+ self .assertIsNotNone (tr .get_extra_info ('sockname' ))
506518 self .loop .run_until_complete (pr .done )
507519 self .assertGreater (pr .nbytes , 0 )
508520 tr .close ()
@@ -515,10 +527,14 @@ def test_create_connection(self):
515527
516528 @unittest .skipUnless (hasattr (socket , 'AF_UNIX' ), 'No UNIX Sockets' )
517529 def test_create_unix_connection (self ):
530+ # Issue #20682: On Mac OS X Tiger, getsockname() returns a
531+ # zero-length address for UNIX socket.
532+ check_sockname = not osx_tiger ()
533+
518534 with test_utils .run_test_unix_server () as httpd :
519535 conn_fut = self .loop .create_unix_connection (
520536 lambda : MyProto (loop = self .loop ), httpd .address )
521- self ._basetest_create_connection (conn_fut )
537+ self ._basetest_create_connection (conn_fut , check_sockname )
522538
523539 def test_create_connection_sock (self ):
524540 with test_utils .run_test_server () as httpd :
@@ -548,12 +564,14 @@ def test_create_connection_sock(self):
548564 self .assertGreater (pr .nbytes , 0 )
549565 tr .close ()
550566
551- def _basetest_create_ssl_connection (self , connection_fut ):
567+ def _basetest_create_ssl_connection (self , connection_fut ,
568+ check_sockname = True ):
552569 tr , pr = self .loop .run_until_complete (connection_fut )
553570 self .assertIsInstance (tr , asyncio .Transport )
554571 self .assertIsInstance (pr , asyncio .Protocol )
555572 self .assertTrue ('ssl' in tr .__class__ .__name__ .lower ())
556- self .assertIsNotNone (tr .get_extra_info ('sockname' ))
573+ if check_sockname :
574+ self .assertIsNotNone (tr .get_extra_info ('sockname' ))
557575 self .loop .run_until_complete (pr .done )
558576 self .assertGreater (pr .nbytes , 0 )
559577 tr .close ()
@@ -571,14 +589,18 @@ def test_create_ssl_connection(self):
571589 @unittest .skipIf (ssl is None , 'No ssl module' )
572590 @unittest .skipUnless (hasattr (socket , 'AF_UNIX' ), 'No UNIX Sockets' )
573591 def test_create_ssl_unix_connection (self ):
592+ # Issue #20682: On Mac OS X Tiger, getsockname() returns a
593+ # zero-length address for UNIX socket.
594+ check_sockname = not osx_tiger ()
595+
574596 with test_utils .run_test_unix_server (use_ssl = True ) as httpd :
575597 conn_fut = self .loop .create_unix_connection (
576598 lambda : MyProto (loop = self .loop ),
577599 httpd .address ,
578600 ssl = test_utils .dummy_ssl_context (),
579601 server_hostname = '127.0.0.1' )
580602
581- self ._basetest_create_ssl_connection (conn_fut )
603+ self ._basetest_create_ssl_connection (conn_fut , check_sockname )
582604
583605 def test_create_connection_local_addr (self ):
584606 with test_utils .run_test_server () as httpd :
0 commit comments