#!/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()