@@ -10,9 +10,11 @@ def patched_getaddrinfo(*args, **kwargs):
10
10
# flag AI_CANONNAME, even if `host` is an IP
11
11
rv = []
12
12
result = socket .getaddrinfo (* args , ** kwargs )
13
+ first = True
13
14
for af , sk , proto , canon_name , addr in result :
14
15
if kwargs .get ('flags' , 0 ) & socket .AI_CANONNAME :
15
- if not canon_name :
16
+ if not canon_name and first :
17
+ first = False
16
18
canon_name = args [0 ]
17
19
if not isinstance (canon_name , str ):
18
20
canon_name = canon_name .decode ('ascii' )
@@ -24,7 +26,7 @@ def patched_getaddrinfo(*args, **kwargs):
24
26
25
27
class BaseTestDNS :
26
28
27
- def _test_getaddrinfo (self , * args , _patch = False , ** kwargs ):
29
+ def _test_getaddrinfo (self , * args , _patch = False , _sorted = False , ** kwargs ):
28
30
err = None
29
31
try :
30
32
if _patch :
@@ -50,7 +52,17 @@ def _test_getaddrinfo(self, *args, _patch=False, **kwargs):
50
52
if err is not None :
51
53
raise err
52
54
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 )
54
66
55
67
def _test_getnameinfo (self , * args , ** kwargs ):
56
68
err = None
@@ -77,11 +89,13 @@ def _test_getnameinfo(self, *args, **kwargs):
77
89
self .assertEqual (a1 , a2 )
78
90
79
91
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 )
82
95
83
96
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 )
85
99
86
100
def test_getaddrinfo_3 (self ):
87
101
self ._test_getaddrinfo ('a' + '1' * 50 + '.wat' , 800 )
@@ -92,12 +106,14 @@ def test_getaddrinfo_4(self):
92
106
family = - 1 )
93
107
94
108
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 )
97
112
98
113
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 )
101
117
102
118
def test_getaddrinfo_7 (self ):
103
119
self ._test_getaddrinfo (None , 0 )
@@ -116,8 +132,9 @@ def test_getaddrinfo_10(self):
116
132
self ._test_getaddrinfo (None , None , type = socket .SOCK_STREAM )
117
133
118
134
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 )
121
138
122
139
def test_getaddrinfo_12 (self ):
123
140
# musl always returns ai_canonname but we don't
0 commit comments