diff --git a/bin/tests/system/README.md b/bin/tests/system/README.md index 3ebc33dbef..dc5f782779 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 a9db556e9b..3a46f4d492 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")