Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 5680792

Browse files
authored
test: fix getaddrinfo test (#663)
* getaddrinfo() returns non-deterministicly ordered result * fix the AI_CANONNAME patch to only correct the first row
1 parent 7bb12a1 commit 5680792

File tree

1 file changed

+29
-12
lines changed

1 file changed

+29
-12
lines changed

‎tests/test_dns.py‎

Lines changed: 29 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -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

2527
class 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

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /