From cba5a1d62cb053a928e06fa5fb30f6ffca1f4940 Mon Sep 17 00:00:00 2001 From: Tom Krizek Date: Mon, 4 Dec 2023 18:05:50 +0100 Subject: [PATCH] Add system test utility package isctest 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. --- bin/tests/system/conftest.py | 3 +++ bin/tests/system/isctest/__init__.py | 13 +++++++++++ bin/tests/system/isctest/check.py | 34 +++++++++++++++++++++++++++ bin/tests/system/isctest/query.py | 35 ++++++++++++++++++++++++++++ dangerfile.py | 1 + 5 files changed, 86 insertions(+) create mode 100644 bin/tests/system/isctest/__init__.py create mode 100644 bin/tests/system/isctest/check.py create mode 100644 bin/tests/system/isctest/query.py diff --git a/bin/tests/system/conftest.py b/bin/tests/system/conftest.py index ac14893a2b..9a741b1cc8 100644 --- a/bin/tests/system/conftest.py +++ b/bin/tests/system/conftest.py @@ -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 index 0000000000..0f2eae1fb1 --- /dev/null +++ b/bin/tests/system/isctest/__init__.py @@ -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 index 0000000000..1fabad7477 --- /dev/null +++ b/bin/tests/system/isctest/check.py @@ -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 index 0000000000..5da1ef8423 --- /dev/null +++ b/bin/tests/system/isctest/query.py @@ -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) diff --git a/dangerfile.py b/dangerfile.py index 1d077d2ce0..ee77f13cd1 100644 --- a/dangerfile.py +++ b/dangerfile.py @@ -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: