#!/usr/bin/env sh # G-01/G-02/G-03 generations validation, run inside the VM. Prints nina's output # alongside ground-truth system-profile state so the host can judge pass/fail. # Ground truth uses the SYSTEM profile explicitly (-p), which is what # nixos-rebuild manages. set -u N=/root/nina sysgens() { nix-env -p /nix/var/nix/profiles/system --list-generations 2>/dev/null | wc -l | tr -d ' '; } syscur() { readlink /nix/var/nix/profiles/system | sed -n 's/.*system-\([0-9][0-9]*\)-link/\1/p'; } echo "KILN_GEN_TEST_BEGIN" echo "GROUND before: sysgens=$(sysgens) syscur=$(syscur)" echo "### T-001 nina apply (expect exit 0, system generation increments)" $N apply; echo "T001_RC=$?" echo "GROUND after apply#1: sysgens=$(sysgens) syscur=$(syscur)" echo "### T-002 nina apply again (expect generation increments again)" $N apply; echo "T002_RC=$?" echo "GROUND after apply#2: sysgens=$(sysgens) syscur=$(syscur)" echo "### T-015 nina history (expect all system generations, current marked)" $N history; echo "HIST_RC=$?" echo "### T-017 nina gen current (expect current system generation number)" $N gen current; echo "GENCUR_RC=$?" echo "### T-010 nina back (expect system generation decrements)" $N back; echo "BACK_RC=$?" echo "GROUND after back: syscur=$(syscur)" echo "### T-012 nina go (return forward)" TARGET=$(( $(syscur) + 1 )) $N go "$TARGET"; echo "GO_RC=$?" echo "GROUND after go $TARGET: syscur=$(syscur)" echo "### T-030 nina clean (expect exit 0, garbage collected)" $N clean; echo "CLEAN_RC=$?" echo "GROUND after clean: sysgens=$(sysgens)" echo "KILN_GEN_TEST_END"