]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Add options for query&response logging to pytest
authorNicki Křížek <nicki@isc.org>
Tue, 17 Jun 2025 15:40:07 +0000 (17:40 +0200)
committerNicki Křížek <nicki@isc.org>
Fri, 27 Jun 2025 16:09:08 +0000 (18:09 +0200)
In some cases, it's useful to log the sent and received DNS messages.
Add options to enable this on demand. Query is only logged the first
time it's sent, since it doesn't change. If response logging is turned
on, then each response is logged, since it might be different every
time.

(cherry picked from commit 1e87b5ffc6c689942d37274659c78c382c1c6988)

bin/tests/system/isctest/query.py

index 4c389af2d9f9c6cc3025d19fe5b7afad5e4f943c..7e1ca1f359dd5d449b92a205365f6d0d260d42e9 100644 (file)
@@ -31,26 +31,39 @@ def generic_query(
     timeout: int = QUERY_TIMEOUT,
     attempts: int = 10,
     expected_rcode: dns_rcode = None,
+    log_query: bool = False,
+    log_response: bool = False,
 ) -> Any:
     if port is None:
         port = int(os.environ["PORT"])
     res = None
     for attempt in range(attempts):
+        log_msg = (
+            f"isc.query.{query_func.__name__}(): ip={ip}, port={port}, source={source}, "
+            f"timeout={timeout}, attempts left={attempts-attempt}"
+        )
+        if log_query:
+            log_msg += f"\n{message.to_text()}"
+            log_query = False  # only log query on first attempt
+        isctest.log.debug(log_msg)
         try:
+            res = query_func(message, ip, timeout, port=port, source=source)
+        except (dns.exception.Timeout, ConnectionRefusedError) as e:
             isctest.log.debug(
-                f"{query_func.__name__}(): ip={ip}, port={port}, source={source}, "
-                f"timeout={timeout}, attempts left={attempts-attempt}"
+                f"isc.query.{query_func.__name__}(): the '{e}' exception raised"
             )
-            res = query_func(message, ip, timeout, port=port, source=source)
+        else:
+            if log_response:
+                isctest.log.debug(
+                    f"isc.query.{query_func.__name__}(): response\n{res.to_text()}"
+                )
             if res.rcode() == expected_rcode or expected_rcode is None:
                 return res
-        except (dns.exception.Timeout, ConnectionRefusedError) as e:
-            isctest.log.debug(f"{query_func.__name__}(): the '{e}' exceptio raised")
         time.sleep(1)
     if expected_rcode is not None:
         last_rcode = dns_rcode.to_text(res.rcode()) if res else None
         isctest.log.debug(
-            f"{query_func.__name__}(): expected rcode={dns_rcode.to_text(expected_rcode)}, last rcode={last_rcode}"
+            f"isc.query.{query_func.__name__}(): expected rcode={dns_rcode.to_text(expected_rcode)}, last rcode={last_rcode}"
         )
     raise dns.exception.Timeout