From: Nicki Křížek Date: Tue, 30 Dec 2025 12:45:50 +0000 (+0100) Subject: Bump the minimum required python version to 3.10 X-Git-Tag: v9.21.18~21^2~4 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=ac8e2905b89d69318ef5351dbffcedcc2f8bdcf9;p=thirdparty%2Fbind9.git Bump the minimum required python version to 3.10 Drop support of EoL python versions for running system tests. The maintenance cost of supporting end of life ecosystem, especially Python 3.6 on EL8 and the related outdated packages (pytest, dnspython, ...), has become unreasonable. --- diff --git a/bin/tests/system/README.md b/bin/tests/system/README.md index 3ebc33dbef3..dc5f782779c 100644 --- a/bin/tests/system/README.md +++ b/bin/tests/system/README.md @@ -46,16 +46,11 @@ nameserver and is listed in the hints file of the others. To run system tests, make sure you have the following dependencies installed: -- python3 -- pytest +- python3 (3.10 and newer) - perl -- dnspython -- pytest-xdist (for parallel execution) -- python-jinja2 -Individual system tests might also require additional dependencies. If those -are missing, the affected tests will be skipped and should produce a message -specifying what additional prerequisites they expect. +List of required python packages and their versions can be found in +requirements.txt (can be installed with `pip3 install -r requirements.txt`). ### Network Setup diff --git a/bin/tests/system/conftest.py b/bin/tests/system/conftest.py index a9db556e9be..3a46f4d492d 100644 --- a/bin/tests/system/conftest.py +++ b/bin/tests/system/conftest.py @@ -17,6 +17,7 @@ import shutil import subprocess import tempfile import time +import sys import pytest @@ -29,6 +30,8 @@ from isctest.vars.build import SYSTEM_TEST_DIR_GIT_PATH # Silence warnings caused by passing a pytest fixture to another fixture. # pylint: disable=redefined-outer-name +if sys.version_info[1] < 10: + raise RuntimeError("Python 3.10 or newer is required to run system tests.") isctest.log.init_conftest_logger() isctest.log.avoid_duplicated_logs() @@ -359,12 +362,6 @@ def system_test_dir(request, system_test_name, expected_artifacts): assert all(res.outcome == "passed" for res in test_results.values()) return "passed" - def unlink(path): - try: - path.unlink() # missing_ok=True isn't available on Python 3.6 - except FileNotFoundError: - pass - def check_artifacts(source_dir, run_dir): def check_artifacts_recursive(dcmp): def artifact_expected(path, expected): @@ -409,7 +406,7 @@ def system_test_dir(request, system_test_name, expected_artifacts): # Create a convenience symlink with a stable and predictable name module_name = SYMLINK_REPLACEMENT_RE.sub(r"\1", str(request.node.path)) symlink_dst = system_test_root / module_name - unlink(symlink_dst) + symlink_dst.unlink(missing_ok=True) symlink_dst.symlink_to(os.path.relpath(testdir, start=system_test_root)) isctest.log.init_module_logger(system_test_name, testdir) @@ -461,7 +458,7 @@ def system_test_dir(request, system_test_name, expected_artifacts): isctest.log.deinit_module_logger() if not keep: shutil.rmtree(testdir) - unlink(symlink_dst) + symlink_dst.unlink(missing_ok=True) @pytest.fixture(scope="module")