@@ -10,9 +10,11 @@ def patched_getaddrinfo(*args, **kwargs):
1010 # flag AI_CANONNAME, even if `host` is an IP
1111 rv = []
1212 result = socket .getaddrinfo (* args , ** kwargs )
13+ first = True
1314 for af , sk , proto , canon_name , addr in result :
1415 if kwargs .get ('flags' , 0 ) & socket .AI_CANONNAME :
15- if not canon_name :
16+ if not canon_name and first :
17+ first = False
1618 canon_name = args [0 ]
1719 if not isinstance (canon_name , str ):
1820 canon_name = canon_name .decode ('ascii' )
@@ -24,7 +26,7 @@ def patched_getaddrinfo(*args, **kwargs):
2426
2527class BaseTestDNS :
2628
27- def _test_getaddrinfo (self , * args , _patch = False , ** kwargs ):
29+ def _test_getaddrinfo (self , * args , _patch = False , _sorted = False , ** kwargs ):
2830 err = None
2931 try :
3032 if _patch :
@@ -50,7 +52,17 @@ def _test_getaddrinfo(self, *args, _patch=False, **kwargs):
5052 if err is not None :
5153 raise err
5254
53- self .assertEqual (a1 , a2 )
55+ if _sorted :
56+ if kwargs .get ('flags' , 0 ) & socket .AI_CANONNAME and a1 and a2 :
57+ af , sk , proto , canon_name1 , addr = a1 [0 ]
58+ a1 [0 ] = (af , sk , proto , '' , addr )
59+ af , sk , proto , canon_name2 , addr = a2 [0 ]
60+ a2 [0 ] = (af , sk , proto , '' , addr )
61+ self .assertEqual (canon_name1 , canon_name2 )
62+
63+ self .assertEqual (sorted (a1 ), sorted (a2 ))
64+ else :
65+ self .assertEqual (a1 , a2 )
5466
5567 def _test_getnameinfo (self , * args , ** kwargs ):
5668 err = None
@@ -77,11 +89,13 @@ def _test_getnameinfo(self, *args, **kwargs):
7789 self .assertEqual (a1 , a2 )
7890
7991 def test_getaddrinfo_1 (self ):
80- self ._test_getaddrinfo ('example.com' , 80 )
81- self ._test_getaddrinfo ('example.com' , 80 , type = socket .SOCK_STREAM )
92+ self ._test_getaddrinfo ('example.com' , 80 , _sorted = True )
93+ self ._test_getaddrinfo ('example.com' , 80 , type = socket .SOCK_STREAM ,
94+ _sorted = True )
8295
8396 def test_getaddrinfo_2 (self ):
84- self ._test_getaddrinfo ('example.com' , 80 , flags = socket .AI_CANONNAME )
97+ self ._test_getaddrinfo ('example.com' , 80 , flags = socket .AI_CANONNAME ,
98+ _sorted = True )
8599
86100 def test_getaddrinfo_3 (self ):
87101 self ._test_getaddrinfo ('a' + '1' * 50 + '.wat' , 800 )
@@ -92,12 +106,14 @@ def test_getaddrinfo_4(self):
92106 family = - 1 )
93107
94108 def test_getaddrinfo_5 (self ):
95- self ._test_getaddrinfo ('example.com' , '80' )
96- self ._test_getaddrinfo ('example.com' , '80' , type = socket .SOCK_STREAM )
109+ self ._test_getaddrinfo ('example.com' , '80' , _sorted = True )
110+ self ._test_getaddrinfo ('example.com' , '80' , type = socket .SOCK_STREAM ,
111+ _sorted = True )
97112
98113 def test_getaddrinfo_6 (self ):
99- self ._test_getaddrinfo (b'example.com' , b'80' )
100- self ._test_getaddrinfo (b'example.com' , b'80' , type = socket .SOCK_STREAM )
114+ self ._test_getaddrinfo (b'example.com' , b'80' , _sorted = True )
115+ self ._test_getaddrinfo (b'example.com' , b'80' , type = socket .SOCK_STREAM ,
116+ _sorted = True )
101117
102118 def test_getaddrinfo_7 (self ):
103119 self ._test_getaddrinfo (None , 0 )
@@ -116,8 +132,9 @@ def test_getaddrinfo_10(self):
116132 self ._test_getaddrinfo (None , None , type = socket .SOCK_STREAM )
117133
118134 def test_getaddrinfo_11 (self ):
119- self ._test_getaddrinfo (b'example.com' , '80' )
120- self ._test_getaddrinfo (b'example.com' , '80' , type = socket .SOCK_STREAM )
135+ self ._test_getaddrinfo (b'example.com' , '80' , _sorted = True )
136+ self ._test_getaddrinfo (b'example.com' , '80' , type = socket .SOCK_STREAM ,
137+ _sorted = True )
121138
122139 def test_getaddrinfo_12 (self ):
123140 # musl always returns ai_canonname but we don't
0 commit comments