4
4
import gc
5
5
import io
6
6
import os
7
+ import platform
7
8
import signal
8
9
import socket
9
10
try :
@@ -40,6 +41,15 @@ def data_file(filename):
40
41
raise FileNotFoundError (filename )
41
42
42
43
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
+
43
53
ONLYCERT = data_file ('ssl_cert.pem' )
44
54
ONLYKEY = data_file ('ssl_key.pem' )
45
55
SIGNED_CERTFILE = data_file ('keycert3.pem' )
@@ -499,10 +509,12 @@ def my_handler(*args):
499
509
self .loop .run_forever ()
500
510
self .assertEqual (caught , 1 )
501
511
502
- def _basetest_create_connection (self , connection_fut ):
512
+ def _basetest_create_connection (self , connection_fut , check_sockname = True ):
503
513
tr , pr = self .loop .run_until_complete (connection_fut )
504
514
self .assertIsInstance (tr , asyncio .Transport )
505
515
self .assertIsInstance (pr , asyncio .Protocol )
516
+ if check_sockname :
517
+ self .assertIsNotNone (tr .get_extra_info ('sockname' ))
506
518
self .loop .run_until_complete (pr .done )
507
519
self .assertGreater (pr .nbytes , 0 )
508
520
tr .close ()
@@ -515,10 +527,14 @@ def test_create_connection(self):
515
527
516
528
@unittest .skipUnless (hasattr (socket , 'AF_UNIX' ), 'No UNIX Sockets' )
517
529
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
+
518
534
with test_utils .run_test_unix_server () as httpd :
519
535
conn_fut = self .loop .create_unix_connection (
520
536
lambda : MyProto (loop = self .loop ), httpd .address )
521
- self ._basetest_create_connection (conn_fut )
537
+ self ._basetest_create_connection (conn_fut , check_sockname )
522
538
523
539
def test_create_connection_sock (self ):
524
540
with test_utils .run_test_server () as httpd :
@@ -548,12 +564,14 @@ def test_create_connection_sock(self):
548
564
self .assertGreater (pr .nbytes , 0 )
549
565
tr .close ()
550
566
551
- def _basetest_create_ssl_connection (self , connection_fut ):
567
+ def _basetest_create_ssl_connection (self , connection_fut ,
568
+ check_sockname = True ):
552
569
tr , pr = self .loop .run_until_complete (connection_fut )
553
570
self .assertIsInstance (tr , asyncio .Transport )
554
571
self .assertIsInstance (pr , asyncio .Protocol )
555
572
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' ))
557
575
self .loop .run_until_complete (pr .done )
558
576
self .assertGreater (pr .nbytes , 0 )
559
577
tr .close ()
@@ -571,14 +589,18 @@ def test_create_ssl_connection(self):
571
589
@unittest .skipIf (ssl is None , 'No ssl module' )
572
590
@unittest .skipUnless (hasattr (socket , 'AF_UNIX' ), 'No UNIX Sockets' )
573
591
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
+
574
596
with test_utils .run_test_unix_server (use_ssl = True ) as httpd :
575
597
conn_fut = self .loop .create_unix_connection (
576
598
lambda : MyProto (loop = self .loop ),
577
599
httpd .address ,
578
600
ssl = test_utils .dummy_ssl_context (),
579
601
server_hostname = '127.0.0.1' )
580
602
581
- self ._basetest_create_ssl_connection (conn_fut )
603
+ self ._basetest_create_ssl_connection (conn_fut , check_sockname )
582
604
583
605
def test_create_connection_local_addr (self ):
584
606
with test_utils .run_test_server () as httpd :
0 commit comments