aports/community/py3-uvloop/fix-dns-tests.patch
2025-05-02 13:18:55 +00:00

105 lines
4.5 KiB
Diff

Patch-Source: https://github.com/MagicStack/uvloop/commit/56807922f847ddac231a53d5b03eef70092b987c
From 56807922f847ddac231a53d5b03eef70092b987c Mon Sep 17 00:00:00 2001
From: Fantix King <fantix.king@gmail.com>
Date: Wed, 16 Apr 2025 18:15:45 -0400
Subject: [PATCH] test: fix getaddrinfo test (#663)
* getaddrinfo() returns non-deterministicly ordered result
* fix the AI_CANONNAME patch to only correct the first row
---
tests/test_dns.py | 41 +++++++++++++++++++++++++++++------------
1 file changed, 29 insertions(+), 12 deletions(-)
diff --git a/tests/test_dns.py b/tests/test_dns.py
index 66da026b..2647cc0c 100644
--- a/tests/test_dns.py
+++ b/tests/test_dns.py
@@ -10,9 +10,11 @@ def patched_getaddrinfo(*args, **kwargs):
# flag AI_CANONNAME, even if `host` is an IP
rv = []
result = socket.getaddrinfo(*args, **kwargs)
+ first = True
for af, sk, proto, canon_name, addr in result:
if kwargs.get('flags', 0) & socket.AI_CANONNAME:
- if not canon_name:
+ if not canon_name and first:
+ first = False
canon_name = args[0]
if not isinstance(canon_name, str):
canon_name = canon_name.decode('ascii')
@@ -24,7 +26,7 @@ def patched_getaddrinfo(*args, **kwargs):
class BaseTestDNS:
- def _test_getaddrinfo(self, *args, _patch=False, **kwargs):
+ def _test_getaddrinfo(self, *args, _patch=False, _sorted=False, **kwargs):
err = None
try:
if _patch:
@@ -50,7 +52,17 @@ def _test_getaddrinfo(self, *args, _patch=False, **kwargs):
if err is not None:
raise err
- self.assertEqual(a1, a2)
+ if _sorted:
+ if kwargs.get('flags', 0) & socket.AI_CANONNAME and a1 and a2:
+ af, sk, proto, canon_name1, addr = a1[0]
+ a1[0] = (af, sk, proto, '', addr)
+ af, sk, proto, canon_name2, addr = a2[0]
+ a2[0] = (af, sk, proto, '', addr)
+ self.assertEqual(canon_name1, canon_name2)
+
+ self.assertEqual(sorted(a1), sorted(a2))
+ else:
+ self.assertEqual(a1, a2)
def _test_getnameinfo(self, *args, **kwargs):
err = None
@@ -77,11 +89,13 @@ def _test_getnameinfo(self, *args, **kwargs):
self.assertEqual(a1, a2)
def test_getaddrinfo_1(self):
- self._test_getaddrinfo('example.com', 80)
- self._test_getaddrinfo('example.com', 80, type=socket.SOCK_STREAM)
+ self._test_getaddrinfo('example.com', 80, _sorted=True)
+ self._test_getaddrinfo('example.com', 80, type=socket.SOCK_STREAM,
+ _sorted=True)
def test_getaddrinfo_2(self):
- self._test_getaddrinfo('example.com', 80, flags=socket.AI_CANONNAME)
+ self._test_getaddrinfo('example.com', 80, flags=socket.AI_CANONNAME,
+ _sorted=True)
def test_getaddrinfo_3(self):
self._test_getaddrinfo('a' + '1' * 50 + '.wat', 800)
@@ -92,12 +106,14 @@ def test_getaddrinfo_4(self):
family=-1)
def test_getaddrinfo_5(self):
- self._test_getaddrinfo('example.com', '80')
- self._test_getaddrinfo('example.com', '80', type=socket.SOCK_STREAM)
+ self._test_getaddrinfo('example.com', '80', _sorted=True)
+ self._test_getaddrinfo('example.com', '80', type=socket.SOCK_STREAM,
+ _sorted=True)
def test_getaddrinfo_6(self):
- self._test_getaddrinfo(b'example.com', b'80')
- self._test_getaddrinfo(b'example.com', b'80', type=socket.SOCK_STREAM)
+ self._test_getaddrinfo(b'example.com', b'80', _sorted=True)
+ self._test_getaddrinfo(b'example.com', b'80', type=socket.SOCK_STREAM,
+ _sorted=True)
def test_getaddrinfo_7(self):
self._test_getaddrinfo(None, 0)
@@ -116,8 +132,9 @@ def test_getaddrinfo_10(self):
self._test_getaddrinfo(None, None, type=socket.SOCK_STREAM)
def test_getaddrinfo_11(self):
- self._test_getaddrinfo(b'example.com', '80')
- self._test_getaddrinfo(b'example.com', '80', type=socket.SOCK_STREAM)
+ self._test_getaddrinfo(b'example.com', '80', _sorted=True)
+ self._test_getaddrinfo(b'example.com', '80', type=socket.SOCK_STREAM,
+ _sorted=True)
def test_getaddrinfo_12(self):
# musl always returns ai_canonname but we don't