]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Add system test utility package isctest
authorTom Krizek <tkrizek@isc.org>
Mon, 4 Dec 2023 17:05:50 +0000 (18:05 +0100)
committerTom Krizek <tkrizek@isc.org>
Tue, 5 Dec 2023 13:27:41 +0000 (14:27 +0100)
Create a utility package for code shared by the python tests. The
utility functions should use reasonable defaults and be split up into
modules according to their functionality.

Ensure assert rewriting is enabled for the modules to get the most
useful output from pytest.

(cherry picked from commit cba5a1d62cb053a928e06fa5fb30f6ffca1f4940)

bin/tests/system/conftest.py
bin/tests/system/isctest/__init__.py [new file with mode: 0644]
bin/tests/system/isctest/check.py [new file with mode: 0644]
bin/tests/system/isctest/query.py [new file with mode: 0644]
dangerfile.py

index c8eef007a74099a264e2a454775458ccd2e2bc90..034b2c8e91b099767df6731d4c1ec8ec075b642e 100644 (file)
@@ -23,6 +23,9 @@ from typing import Any, Dict, List, Optional
 import pytest
 
 
+pytest.register_assert_rewrite("isctest")
+
+
 # Silence warnings caused by passing a pytest fixture to another fixture.
 # pylint: disable=redefined-outer-name
 
diff --git a/bin/tests/system/isctest/__init__.py b/bin/tests/system/isctest/__init__.py
new file mode 100644 (file)
index 0000000..0f2eae1
--- /dev/null
@@ -0,0 +1,13 @@
+# Copyright (C) Internet Systems Consortium, Inc. ("ISC")
+#
+# SPDX-License-Identifier: MPL-2.0
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0.  If a copy of the MPL was not distributed with this
+# file, you can obtain one at https://mozilla.org/MPL/2.0/.
+#
+# See the COPYRIGHT file distributed with this work for additional
+# information regarding copyright ownership.
+
+from . import check
+from . import query
diff --git a/bin/tests/system/isctest/check.py b/bin/tests/system/isctest/check.py
new file mode 100644 (file)
index 0000000..1fabad7
--- /dev/null
@@ -0,0 +1,34 @@
+# Copyright (C) Internet Systems Consortium, Inc. ("ISC")
+#
+# SPDX-License-Identifier: MPL-2.0
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0.  If a copy of the MPL was not distributed with this
+# file, you can obtain one at https://mozilla.org/MPL/2.0/.
+#
+# See the COPYRIGHT file distributed with this work for additional
+# information regarding copyright ownership.
+
+from typing import Any
+
+import dns.rcode
+import dns.message
+
+
+# compatiblity with dnspython<2.0.0
+try:
+    # In dnspython>=2.0.0, dns.rcode.Rcode class is available
+    # pylint: disable=invalid-name
+    dns_rcode = dns.rcode.Rcode  # type: Any
+except AttributeError:
+    # In dnspython<2.0.0, selected rcodes are available as integers directly
+    # from dns.rcode
+    dns_rcode = dns.rcode
+
+
+def rcode(message: dns.message.Message, expected_rcode) -> None:
+    assert message.rcode() == expected_rcode, str(message)
+
+
+def noerror(message: dns.message.Message) -> None:
+    rcode(message, dns_rcode.NOERROR)
diff --git a/bin/tests/system/isctest/query.py b/bin/tests/system/isctest/query.py
new file mode 100644 (file)
index 0000000..5da1ef8
--- /dev/null
@@ -0,0 +1,35 @@
+# Copyright (C) Internet Systems Consortium, Inc. ("ISC")
+#
+# SPDX-License-Identifier: MPL-2.0
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0.  If a copy of the MPL was not distributed with this
+# file, you can obtain one at https://mozilla.org/MPL/2.0/.
+#
+# See the COPYRIGHT file distributed with this work for additional
+# information regarding copyright ownership.
+
+import os
+from typing import Optional
+
+import dns.query
+import dns.message
+
+
+QUERY_TIMEOUT = 10
+
+
+def udp(
+    message: dns.message.Message, ip: str, port: Optional[int] = None
+) -> dns.message.Message:
+    if port is None:
+        port = int(os.environ["PORT"])
+    return dns.query.udp(message, ip, QUERY_TIMEOUT, port=port)
+
+
+def tcp(
+    message: dns.message.Message, ip: str, port: Optional[int] = None
+) -> dns.message.Message:
+    if port is None:
+        port = int(os.environ["PORT"])
+    return dns.query.tcp(message, ip, QUERY_TIMEOUT, port=port)
index 1d077d2ce036013f8d24ac517b2b9dc4ce57e255..ee77f13cd1156e9e822c03f382e7def98f1ea0ef 100644 (file)
@@ -462,6 +462,7 @@ for testname in testnames:
         not os.path.isdir(dirpath)
         or testname.startswith(".")
         or testname.startswith("_")
+        or testname == "isctest"
     ):
         continue
     if "_" in testname: