mirror of
https://gitlab.alpinelinux.org/alpine/aports.git
synced 2025-06-06 18:04:54 +02:00
105 lines
4.5 KiB
Diff
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
|