diff --git a/tests/functional/check-reqs.sh b/tests/functional/check-reqs.sh deleted file mode 100644 index 367f2668e..000000000 --- a/tests/functional/check-reqs.sh +++ /dev/null @@ -1,24 +0,0 @@ -source common.sh - -clearStore - -RESULT=$TEST_ROOT/result - -nix-build -o $RESULT check-reqs.nix -A test1 - -(! nix-build -o "$RESULT" check-reqs.nix -A test2) -(! nix-build -o "$RESULT" check-reqs.nix -A test3) -(! nix-build -o "$RESULT" check-reqs.nix -A test4) 2>&1 | grepQuiet 'check-reqs-dep1' -(! nix-build -o "$RESULT" check-reqs.nix -A test4) 2>&1 | grepQuiet 'check-reqs-dep2' -(! nix-build -o "$RESULT" check-reqs.nix -A test5) -(! nix-build -o "$RESULT" check-reqs.nix -A test6) - -(! nix-build -o "$RESULT" check-reqs.nix -A test6) 2>&1 | grepQuiet '└───.*/.*-check-reqs-deps' -(! nix-build -o "$RESULT" check-reqs.nix -A test6) 2>&1 | grepQuiet 'check-reqs-dep1' -(! nix-build -o "$RESULT" check-reqs.nix -A test6) 2>&1 | grepQuiet 'check-reqs-dep2' - -nix-build -o $RESULT check-reqs.nix -A test7 - -# ignoreSelfRefs is only true for drvs using structuredAttrs. -(! nix-build -o $RESULT check-reqs.nix -A test8) -nix-build -o $RESULT check-reqs.nix -A test9 diff --git a/tests/functional/meson.build b/tests/functional/meson.build index 527ed368f..98fcb6722 100644 --- a/tests/functional/meson.build +++ b/tests/functional/meson.build @@ -71,7 +71,6 @@ functional_tests_scripts = [ 'readfile-context.sh', 'nix-channel.sh', 'dependencies.sh', - 'check-reqs.sh', 'build-remote-content-addressed-fixed.sh', 'nar-access.sh', 'repl.sh', diff --git a/tests/functional/check-reqs.nix b/tests/functional2/build/assets/check-reqs.nix similarity index 100% rename from tests/functional/check-reqs.nix rename to tests/functional2/build/assets/check-reqs.nix diff --git a/tests/functional2/build/test_check_reqs.py b/tests/functional2/build/test_check_reqs.py new file mode 100644 index 000000000..37bd41dfc --- /dev/null +++ b/tests/functional2/build/test_check_reqs.py @@ -0,0 +1,57 @@ +import pytest +from pathlib import Path +from testlib.fixtures.nix import Nix +from testlib.fixtures.file_helper import CopyFile +from testlib.utils import get_global_asset +from testlib.fixtures.file_helper import with_files +import re + +check_req_files = { + "check-reqs.nix": CopyFile("assets/check-reqs.nix"), + "config.nix": get_global_asset("config.nix"), +} + + +@with_files(check_req_files) +@pytest.mark.parametrize("attr", ["test1", "test7", "test9"]) +def test_good(nix: Nix, files: Path, attr: str): + result = files / "result" + nix.nix_build(["-o", result, "check-reqs.nix", "-A", attr]).run().ok() + + assert result.exists() + + +@with_files(check_req_files) +@pytest.mark.parametrize( + "attr", + [ + "test2", + "test3", + "test5", + "test8", # ignoreSelfRefs is only true for drvs using structuredAttrs. + ], +) +def test_bad(nix: Nix, files: Path, attr: str): + res = nix.nix_build(["-o", files / "result", "check-reqs.nix", "-A", attr]).run().expect(1) + + assert "Shown below are chains that lead to the forbidden path(s)." in res.stderr_plain + assert "is not allowed to refer to the following paths:" in res.stderr_plain + + +@with_files(check_req_files) +@pytest.mark.parametrize( + ("attr", "bad_refs"), + [ + ("test4", ["check-reqs-dep1", "check-reqs-dep2"]), + ("test6", ["check-reqs-dep1", "check-reqs-dep2", "└───.*/.*-check-reqs-deps"]), + ], +) +def test_bad_deps(nix: Nix, files: Path, attr: str, bad_refs: list[str]): + res = nix.nix_build(["-o", files / "result", "check-reqs.nix", "-A", attr]).run().expect(1) + err = res.stderr_plain + + assert "Shown below are chains that lead to the forbidden path(s)." in err + assert "is not allowed to refer to the following paths:" in err + + for bad_ref in bad_refs: + assert re.search(bad_ref, err)