From: Bob Halley Date: Fri, 11 Jun 2021 17:26:04 +0000 (-0700) Subject: Try to skip dangling CNAME tests if systemd-resolved is running. [Issue #658] X-Git-Tag: v2.2.0rc1~77 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2c6088cadb4baed119d501c92adc02fa2ad97815;p=thirdparty%2Fdnspython.git Try to skip dangling CNAME tests if systemd-resolved is running. [Issue #658] --- diff --git a/tests/test_async.py b/tests/test_async.py index 0252f225..cad7e20d 100644 --- a/tests/test_async.py +++ b/tests/test_async.py @@ -49,6 +49,17 @@ except socket.gaierror: _network_available = False +# Look for systemd-resolved, as it does dangling CNAME responses incorrectly. +# +# Currently we simply check if the nameserver is 127.0.0.53. +_systemd_resolved_present = False +try: + _resolver = dns.resolver.Resolver() + if _resolver.nameservers == ['127.0.0.53']: + _systemd_resolved_present = True +except Exception: + pass + # Probe for IPv4 and IPv6 query_addresses = [] for (af, address) in ((socket.AF_INET, '8.8.8.8'), @@ -197,6 +208,7 @@ class AsyncTests(unittest.TestCase): return await dns.asyncresolver.canonical_name(name) self.assertEqual(self.async_run(run), cname) + @unittest.skipIf(_systemd_resolved_present, "systemd-resolved in use") def testCanonicalNameDangling(self): name = dns.name.from_text('dangling-cname.dnspython.org') cname = dns.name.from_text('dangling-target.dnspython.org') diff --git a/tests/test_resolver.py b/tests/test_resolver.py index dce250bc..f264d2e9 100644 --- a/tests/test_resolver.py +++ b/tests/test_resolver.py @@ -52,6 +52,18 @@ except ImportError: class Server(object): pass +# Look for systemd-resolved, as it does dangling CNAME responses incorrectly. +# +# Currently we simply check if the nameserver is 127.0.0.53. +_systemd_resolved_present = False +try: + _resolver = dns.resolver.Resolver() + if _resolver.nameservers == ['127.0.0.53']: + _systemd_resolved_present = True +except Exception: + pass + + resolv_conf = u""" /t/t # comment 1 @@ -682,6 +694,7 @@ class LiveResolverTests(unittest.TestCase): cname = dns.name.from_text('dmfrjf4ips8xa.cloudfront.net') self.assertEqual(dns.resolver.canonical_name(name), cname) + @unittest.skipIf(_systemd_resolved_present, "systemd-resolved in use") def testCanonicalNameDangling(self): name = dns.name.from_text('dangling-cname.dnspython.org') cname = dns.name.from_text('dangling-target.dnspython.org')