diff --git a/tests/e2e/test_nix_build_pkgmgr.py b/tests/e2e/test_nix_build_pkgmgr.py new file mode 100644 index 0000000..472d278 --- /dev/null +++ b/tests/e2e/test_nix_build_pkgmgr.py @@ -0,0 +1,86 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +""" +E2E test to inspect the Nix environment and build the pkgmgr flake +in *every* distro container. + +Commands executed inside the container (for all distros): + + nix --version + nix show-config | grep sandbox + id + nix build .#pkgmgr -L + +No docker is called from here – the outer test harness +(scripts/test/test-e2e.sh) is responsible for starting the container. +""" + +from __future__ import annotations + +import os +import subprocess +import unittest + + +# Resolve project root (the repo where flake.nix lives, e.g. /src) +PROJECT_ROOT = os.path.abspath( + os.path.join(os.path.dirname(__file__), "..", "..") +) + + +def _run_cmd(cmd: list[str]) -> subprocess.CompletedProcess: + """ + Run a command in a subprocess, capture stdout/stderr and print them. + + Does NOT raise by itself – the caller checks returncode. + """ + print("\n[TEST] Running command:", " ".join(cmd)) + proc = subprocess.run( + cmd, + text=True, + capture_output=True, + ) + print("[STDOUT]\n", proc.stdout) + print("[STDERR]\n", proc.stderr) + print("[RETURN CODE]", proc.returncode) + return proc + + +class TestNixBuildPkgmgrAllDistros(unittest.TestCase): + """ + E2E test that runs the same Nix diagnostics + flake build + in all distro containers. + """ + + def test_nix_env_and_build_pkgmgr(self) -> None: + # Ensure we are in the project root (where flake.nix resides) + original_cwd = os.getcwd() + try: + os.chdir(PROJECT_ROOT) + + # --- Nix version --- + _run_cmd(["nix", "--version"]) + + # --- Nix sandbox setting --- + _run_cmd(["sh", "-c", "nix show-config | grep sandbox || true"]) + + # --- Current user --- + _run_cmd(["id"]) + + # --- nix build .#pkgmgr -L --- + proc = _run_cmd(["nix", "build", ".#pkgmgr", "-L"]) + + if proc.returncode != 0: + raise AssertionError( + "nix build .#pkgmgr -L failed inside the test container.\n" + f"Exit code: {proc.returncode}\n" + "See STDOUT/STDERR above for Nix diagnostics." + ) + + finally: + os.chdir(original_cwd) + + +if __name__ == "__main__": + unittest.main()