11import asyncio
22import socket
3+ import sys
34import unittest
45
56from uvloop import _testbase as tb
67
78
8- def patched_getaddrinfo (* args , ** kwargs ):
9- # corrected socket.getaddrinfo() behavior: ai_canonname always follows the
10- # flag AI_CANONNAME, even if `host` is an IP
11- rv = []
12- result = socket .getaddrinfo (* args , ** kwargs )
13- first = True
14- for af , sk , proto , canon_name , addr in result :
15- if kwargs .get ('flags' , 0 ) & socket .AI_CANONNAME :
16- if not canon_name and first :
17- first = False
18- canon_name = args [0 ]
19- if not isinstance (canon_name , str ):
20- canon_name = canon_name .decode ('ascii' )
21- elif canon_name :
22- canon_name = ''
23- rv .append ((af , sk , proto , canon_name , addr ))
24- return rv
25-
26-
279class BaseTestDNS :
2810
29- def _test_getaddrinfo (self , * args , _patch = False , _sorted = False , ** kwargs ):
11+ def _test_getaddrinfo (self , * args , _sorted = False , ** kwargs ):
3012 err = None
3113 try :
32- if _patch :
33- a1 = patched_getaddrinfo (* args , ** kwargs )
34- else :
35- a1 = socket .getaddrinfo (* args , ** kwargs )
14+ a1 = socket .getaddrinfo (* args , ** kwargs )
3615 except (socket .gaierror , UnicodeError ) as ex :
3716 err = ex
3817
@@ -54,20 +33,23 @@ def _test_getaddrinfo(self, *args, _patch=False, _sorted=False, **kwargs):
5433
5534 if _sorted :
5635 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 )
36+ self .assertEqual (a1 [0 ][3 ], a2 [0 ][3 ])
37+ a1 = [(af , sk , pr , addr ) for af , sk , pr , _ , addr in a1 ]
38+ a2 = [(af , sk , pr , addr ) for af , sk , pr , _ , addr in a2 ]
6239
6340 try :
6441 self .assertEqual (sorted (a1 ), sorted (a2 ))
6542 except AssertionError :
6643 for x , y in zip (sorted (a1 ), sorted (a2 )):
67- print (x , '\t ' , y )
44+ print (x , '\t ' , y , file = sys . stderr )
6845 raise
6946 else :
70- self .assertEqual (a1 , a2 )
47+ try :
48+ self .assertEqual (a1 , a2 )
49+ except AssertionError :
50+ for x , y in zip (a1 , a2 ):
51+ print (x , '\t ' , y , file = sys .stderr )
52+ raise
7153
7254 def _test_getnameinfo (self , * args , ** kwargs ):
7355 err = None
@@ -146,32 +128,28 @@ def test_getaddrinfo_12(self):
146128 patch = self .implementation != 'asyncio'
147129
148130 self ._test_getaddrinfo ('127.0.0.1' , '80' )
149- self ._test_getaddrinfo ('127.0.0.1' , '80' , type = socket .SOCK_STREAM ,
150- _patch = patch )
131+ self ._test_getaddrinfo ('127.0.0.1' , '80' , type = socket .SOCK_STREAM )
151132
152133 def test_getaddrinfo_13 (self ):
153134 # musl always returns ai_canonname but we don't
154135 patch = self .implementation != 'asyncio'
155136
156137 self ._test_getaddrinfo (b'127.0.0.1' , b'80' )
157- self ._test_getaddrinfo (b'127.0.0.1' , b'80' , type = socket .SOCK_STREAM ,
158- _patch = patch )
138+ self ._test_getaddrinfo (b'127.0.0.1' , b'80' , type = socket .SOCK_STREAM )
159139
160140 def test_getaddrinfo_14 (self ):
161141 # musl always returns ai_canonname but we don't
162142 patch = self .implementation != 'asyncio'
163143
164144 self ._test_getaddrinfo (b'127.0.0.1' , b'http' )
165- self ._test_getaddrinfo (b'127.0.0.1' , b'http' , type = socket .SOCK_STREAM ,
166- _patch = patch )
145+ self ._test_getaddrinfo (b'127.0.0.1' , b'http' , type = socket .SOCK_STREAM )
167146
168147 def test_getaddrinfo_15 (self ):
169148 # musl always returns ai_canonname but we don't
170149 patch = self .implementation != 'asyncio'
171150
172151 self ._test_getaddrinfo ('127.0.0.1' , 'http' )
173- self ._test_getaddrinfo ('127.0.0.1' , 'http' , type = socket .SOCK_STREAM ,
174- _patch = patch )
152+ self ._test_getaddrinfo ('127.0.0.1' , 'http' , type = socket .SOCK_STREAM )
175153
176154 def test_getaddrinfo_16 (self ):
177155 self ._test_getaddrinfo ('localhost' , 'http' )
@@ -192,10 +170,9 @@ def test_getaddrinfo_19(self):
192170 patch = self .implementation != 'asyncio'
193171
194172 self ._test_getaddrinfo ('::1' , 80 )
173+ self ._test_getaddrinfo ('::1' , 80 , type = socket .SOCK_STREAM )
195174 self ._test_getaddrinfo ('::1' , 80 , type = socket .SOCK_STREAM ,
196- _patch = patch )
197- self ._test_getaddrinfo ('::1' , 80 , type = socket .SOCK_STREAM ,
198- flags = socket .AI_CANONNAME , _patch = patch )
175+ flags = socket .AI_CANONNAME )
199176
200177 def test_getaddrinfo_20 (self ):
201178 # musl always returns ai_canonname while macOS never return for IPs,
@@ -204,10 +181,9 @@ def test_getaddrinfo_20(self):
204181 patch = self .implementation != 'asyncio'
205182
206183 self ._test_getaddrinfo ('127.0.0.1' , 80 )
184+ self ._test_getaddrinfo ('127.0.0.1' , 80 , type = socket .SOCK_STREAM )
207185 self ._test_getaddrinfo ('127.0.0.1' , 80 , type = socket .SOCK_STREAM ,
208- _patch = patch )
209- self ._test_getaddrinfo ('127.0.0.1' , 80 , type = socket .SOCK_STREAM ,
210- flags = socket .AI_CANONNAME , _patch = patch )
186+ flags = socket .AI_CANONNAME )
211187
212188 # https://github.com/libuv/libuv/security/advisories/GHSA-f74f-cvh7-c6q6
213189 # See also: https://github.com/MagicStack/uvloop/pull/600
0 commit comments