From 6e666b9674a66ac948da51817b4483d750f92963 Mon Sep 17 00:00:00 2001
From: Nicolas KAROLAK <nicolas@karolak.fr>
Date: Tue, 15 Oct 2019 12:32:50 +0000
Subject: [PATCH] make use of nmcli when systemd-resolved is used

---
 tests/test_dns_records.py | 25 ++++++++++---------------
 1 file changed, 10 insertions(+), 15 deletions(-)

diff --git a/tests/test_dns_records.py b/tests/test_dns_records.py
index dbb185c9..19003871 100755
--- a/tests/test_dns_records.py
+++ b/tests/test_dns_records.py
@@ -15,21 +15,18 @@ sys.path.append(str(Path(__file__).parents[1].resolve()))
 from envsetup import utils as u  # noqa: E402
 
 
-def get_dns_servers() -> list:
-    servers = list()
+def get_dns_servers() -> set:
     with open("/etc/resolv.conf", "r") as f:
         d = f.read().strip()
-        for l in d.split("\n"):
-            if l.startswith("nameserver "):
-                servers.append(l.split("nameserver ")[1])
-    if servers == ["127.0.1.1"]:
-        # NetworkManager
+        servers = [l.split()[1] for l in d.split("\n") if l.startswith("nameserver")]
+    if len(servers) and servers[0].startswith("127.0."):
+        # network-manager or systemd-resolved
         _, output = subprocess.getstatusoutput(
             "nmcli -f all device show | grep IP4.DNS | awk '{ print $2 }'"
         )
-        servers.extend(output.split("\n"))
+        servers = output.split("\n")
 
-    return servers
+    return set(servers)
 
 
 def get_result(output: str) -> str:
@@ -38,7 +35,7 @@ def get_result(output: str) -> str:
             return line.split("has address ")[1]
 
 
-def check_dns(hostname: str, expected_ip: str, resolvers: list) -> tuple:
+def check_dns(hostname: str, expected_ip: str, resolvers: set) -> tuple:
     warnings = 0
     errors = 0
 
@@ -50,8 +47,6 @@ def check_dns(hostname: str, expected_ip: str, resolvers: list) -> tuple:
             address = get_result(output)
             if address == expected_ip:
                 u.success("dns({}): {} -> {}".format(resolver, hostname, address))
-            elif address == "127.0.0.1" and resolver == "127.0.0.53":
-                u.success("dns({}): {} -> {}".format(resolver, hostname, address))
             else:
                 u.error(
                     "dns({}): {} -> {} (should be {})".format(
@@ -66,7 +61,7 @@ def check_dns(hostname: str, expected_ip: str, resolvers: list) -> tuple:
     return warnings, errors
 
 
-def check_resolver(conf: dict, resolvers: list, ip: str) -> tuple:
+def check_resolver(conf: dict, resolvers: set, ip: str) -> tuple:
     warnings = 0
     errors = 0
 
@@ -74,8 +69,8 @@ def check_resolver(conf: dict, resolvers: list, ip: str) -> tuple:
     for conf_resolver_key in conf_resolvers_keys:
         conf_resolver = conf.get(conf_resolver_key)
         if conf_resolver and conf_resolver not in resolvers:
-            u.error("resolver {} not configured".format(conf_resolver))
-            errors += 1
+            u.warning("resolver {} not configured".format(conf_resolver))
+            warnings += 1
 
     if not ip and (not errors):
         u.info("no IP set in configuration , unable to test DNS")
-- 
GitLab