Skip to content

Commit

Permalink
Make system tests compatible with pytest 8.0.0+
Browse files Browse the repository at this point in the history
The pytest collection mechanism has been overhauled in pytest 8.0.0,
resulting in a different node tree when collecting the tests. Ensure the
paths / names we're using that are derived from the node tree are
consistent across different pytest versions.

Particularly, this has affected the convenience symlink name (which is
supposed to be in the form of e.g. dns64_sh_dns64 for the dns64 module
and tests_sh_dns64.py module) and the test name that's logged at the
start of the test, which is supposed to include the system test
directory relative to the root system test directory as well as the
module name (e.g. dns64/tests_sh_dns64.py).

Related pytest-dev/pytest#7777

(cherry picked from commit 7118cbe)
  • Loading branch information
nicki-krizek committed Oct 24, 2024
1 parent c1b82c1 commit 04200e4
Showing 1 changed file with 11 additions and 2 deletions.
13 changes: 11 additions & 2 deletions bin/tests/system/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -355,7 +355,7 @@ def unlink(path):
isctest.vars.dirs.set_system_test_name(testdir.name)

# Create a convenience symlink with a stable and predictable name
module_name = SYMLINK_REPLACEMENT_RE.sub(r"\1", request.node.name)
module_name = SYMLINK_REPLACEMENT_RE.sub(r"\1", str(_get_node_path(request.node)))
symlink_dst = system_test_root / module_name
unlink(symlink_dst)
symlink_dst.symlink_to(os.path.relpath(testdir, start=system_test_root))
Expand Down Expand Up @@ -446,6 +446,15 @@ def _run_script(
isctest.log.debug(" exited with %d", returncode)


def _get_node_path(node) -> Path:
if isinstance(node.parent, pytest.Session):
if _pytest_major_ver >= 8:
return Path()
return Path(node.name)
assert node.parent is not None
return _get_node_path(node.parent) / node.name


@pytest.fixture(scope="module")
def shell(system_test_dir):
"""Function to call a shell script with arguments."""
Expand Down Expand Up @@ -543,7 +552,7 @@ def get_core_dumps():
isctest.log.error("Found core dumps or sanitizer reports")
pytest.fail(f"get_core_dumps.sh exited with {exc.returncode}")

isctest.log.info(f"test started: {request.node.name}")
isctest.log.info(f"test started: {_get_node_path(request.node)}")
port = int(os.environ["PORT"])
isctest.log.info(
"using port range: <%d, %d>", port, port + isctest.vars.ports.PORTS_PER_TEST - 1
Expand Down

0 comments on commit 04200e4

Please sign in to comment.