Files
ninlight-w600/tools/test_host.sh
T
Michael Sauer 47532a6820 fix(station): ehrliche Abbruchmeldung, apt-update darf scheitern
Fixrunde 2 zu Task 6b.

- Die Vorbedingung "display.py liegt in der Ablage" steht jetzt VOR dem
  ersten sudo install. Vorher stand sie dahinter, und die Meldung "Nichts
  installiert" war schlicht unwahr: server.py, products.py, das CLI und
  die Stations-Unit lagen dann schon auf dem Pi. Ausgerechnet an dem
  Werkbank-Moment, fuer den die Pruefung gedacht ist, log das Skript den
  Bediener an. Die Ablage raeumt ein EXIT-Trap jetzt auf beiden Wegen aus
  dem Block ab, nicht nur im Erfolgsfall.
- "apt-get update" ist keine Voraussetzung mehr fuer "apt-get install":
  update meldet schon dann einen Fehler, wenn eine einzige Quelle nicht
  erreichbar ist, und ein Pi, auf dem das Paket aus dem Cache gekommen
  waere, bekam so still kein Pillow.
- Die Signalhandler beenden jetzt selbst (130/143/129). Ein Handler ohne
  exit laesst bash weiterlaufen - ein Strg-C konnte in "fertig, Exit 0"
  muenden. Die Begruendung im Kommentar war falsch und ist korrigiert:
  zum Aufraeumen haette der EXIT-Trap allein genuegt.
- test_host.sh ruft die Shell-Suiten aus einer Liste auf, und der
  Coverage-Test prueft diese Liste gegen das Dateisystem statt im
  Skripttext nach Dateinamen zu suchen - ein nachgestellter Kommentar
  hebelte die alte Regel aus. Er deckt jetzt ganz tools/ ab, nicht nur
  station/tests.
- Neue Szenarien: Wahrheitsgehalt der Abbruchmeldung, apt-update-Fall,
  und ein Strg-C, das aus den Trap-Zeilen des Skripts selbst geprueft
  wird.
2026-09-14 00:45:04 +02:00

45 lines
2.1 KiB
Bash
Executable File

#!/usr/bin/env bash
# Builds and runs all host unit tests.
set -euo pipefail
ROOT=$(cd "$(dirname "$0")/.." && pwd)
cmake -S "$ROOT/test" -B "$ROOT/build/host" -G Ninja >/dev/null
cmake --build "$ROOT/build/host"
ctest --test-dir "$ROOT/build/host" --output-on-failure "$@"
if python3 -c 'import pytest' 2>/dev/null; then
# tools/mkimage als GANZES Verzeichnis, nicht nur tools/mkimage/tests: die 19 Tests in
# tools/mkimage/test_nl_mkimage.py liegen direkt daneben und liefen sonst in keiner
# Suite mit - darunter test_stays_python38_compatible, die Wache fuer die bindende
# 3.8-Randbedingung des Docker-Build-Containers.
#
# Diese Wache braucht das Paket "vermin" und schlaegt ohne es HART fehl (kein Skip):
# eine Wache, die sich beim Fehlen ihres Werkzeugs stillschweigend abschaltet, haette
# den Build-Bruch von damals genauso durchgelassen wie gar kein Test. Fehlt vermin,
# nachinstallieren:
# pip install vermin (oder: pip3 install --user vermin)
python3 -m pytest "$ROOT/tools/mkimage" "$ROOT/tools/station/tests" -q
else
echo "Hinweis: pytest fehlt - Python-Tests uebersprungen" >&2
echo " Installation: pip install pytest vermin (vermin braucht" >&2
echo " tools/mkimage/test_nl_mkimage.py::test_stays_python38_compatible)" >&2
fi
# Alle Shell-Suiten - test_deploy.sh fehlte hier und lief damit nur bei Handaufruf
# (Task 6b F1, I3): dieselbe Klasse von Luecke wie die aus keiner Suite gefallene
# test_nl_mkimage.py, nur eine Ebene hoeher. Mit ihr liefen 95 Zusagen nirgends mit,
# darunter die komplette Deploy-Haelfte der Anzeige-Auslieferung.
#
# Als ausdrueckliche Liste, nicht als lose Folge von Aufrufen (Task 6b F2): so gibt es
# EINE Stelle, die vollstaendig sein muss, und
# tools/mkimage/tests/test_suite_coverage.py kann sie gegen das Dateisystem pruefen,
# statt im Skripttext nach Dateinamen zu suchen - eine Textsuche haelt schon ein
# nachgestellter Kommentar zum Narren.
SHELL_SUITES=(
"$ROOT/tools/station/tests/test_cli.sh"
"$ROOT/tools/station/tests/test_deploy.sh"
"$ROOT/tools/station/tests/test_setup_pi.sh"
)
for suite in "${SHELL_SUITES[@]}"; do
"$suite"
done