fix(station): CLI prueft Rettungs- und Migrationsbildsatz getrennt, meldet Modus dauerhaft
Fixrunde 1, Befund 1: imageset_dir()/migrate_images()/imageset_status_lines() pruefen bislang IMMER die Migrationsverzeichnisse, unabhaengig vom Modus - im Rettungsbetrieb meldete "status" so faelschlich "MISSING", waehrend rescue-nocreds voll war, oder umgekehrt "vorhanden", waehrend die Rettung nichts hatte. Ein falsches "MISSING" dort verleitet dazu, auf mit-wlan umzuschalten - und dann liefert die Rettung tatsaechlich Abbilder mit dem WLAN-Passwort aus. imageset_dir() nimmt jetzt den Modus als Parameter (Vorgabe: current_mode()), dieselbe Unterscheidung wie im Panel. Befund 2: images() griff weiter flach auf $IMAGE_DIR zu, wo seit dem Deploy-Umbau nichts mehr liegt - "recovery on" warnte deshalb bei JEDEM Start "answers everything with 404". Ersetzt durch imageset_images(), das dem Bildsatz-Umschalter UND dem Modus folgt. Befund 3 (CLI-Seite): current_mode() liest die neue dauerhafte LAST_MODE_FILE statt der ephemeren RUN_DIR/mode - write_mode() schreibt jetzt beide (siehe display.py-Commit fuer die Panel-Seite derselben Ursache). tests/test_cli.sh legte weiterhin die alte flache Rettungsablage an (images/ninlight_foo_ota.img) - die Sandbox hat jetzt eigene rescue-wlan/rescue-nocreds-Verzeichnisse wie ein echter Pi nach diesem Umschalter, und run_cli() setzt NINLIGHT_LAST_MODE_FILE auf einen Sandbox-Pfad. Mehrere bestehende Bildsatz-Szenarien liefen unbemerkt gegen den Migrationssatz, obwohl kein Modus gesetzt war (Vorgabe: recovery) - angepasst, damit sie den tatsaechlich geltenden Satz pruefen.
This commit is contained in:
@@ -263,12 +263,19 @@ setup_sandbox() {
|
||||
local sandbox=$1 unitfile=${2:-$REAL_UNIT}
|
||||
rm -rf "$sandbox"
|
||||
mkdir -p "$sandbox/run" "$sandbox/images/migrate-nocreds" "$sandbox/images/migrate-wlan" \
|
||||
"$sandbox/images/rescue-nocreds" "$sandbox/images/rescue-wlan" \
|
||||
"$sandbox/bin" "$sandbox/nmstate" "$sandbox/lib/display" "$sandbox/var"
|
||||
# Je ein Image je Bildsatz - "vorhanden" heisst fuer CLI, Server und Anzeige
|
||||
# gleichermassen "mindestens ein Image darin".
|
||||
# gleichermassen "mindestens ein Image darin". Getrennte Verzeichnispaare fuer
|
||||
# Rettung (rescue-*) und Migration (migrate-*), seit der Bildsatz-Umschalter auch
|
||||
# die Rettung betrifft (Fixrunde 1, Befund 1/2) - VORHER lag hier ein flaches
|
||||
# "images/ninlight_foo_ota.img", das server.py/deploy.sh seit diesem Umschalter
|
||||
# nicht mehr benutzen; eine Testvorrichtung, die weiter diese alte Welt aufbaut,
|
||||
# haette genau die beiden Befunde verdeckt.
|
||||
echo "ohne" >"$sandbox/images/migrate-nocreds/foo_dev.img"
|
||||
echo "mit" >"$sandbox/images/migrate-wlan/foo_dev.img"
|
||||
echo "dummy" >"$sandbox/images/ninlight_foo_ota.img"
|
||||
echo "ohne" >"$sandbox/images/rescue-nocreds/ninlight_foo_ota.img"
|
||||
echo "mit" >"$sandbox/images/rescue-wlan/ninlight_foo_ota.img"
|
||||
|
||||
# NINLIGHT_STATION_LIB zeigt auf diese Sandbox statt auf tools/station selbst.
|
||||
# products.py wird gebraucht (arm prueft das Ziel dagegen) und deshalb echt kopiert;
|
||||
@@ -342,6 +349,7 @@ run_cli() {
|
||||
NINLIGHT_RUN_DIR="$sandbox/run" \
|
||||
NINLIGHT_STATION_LIB="$sandbox/lib" \
|
||||
NINLIGHT_IMAGESET_FILE="$sandbox/var/imageset" \
|
||||
NINLIGHT_LAST_MODE_FILE="$sandbox/var/last-mode" \
|
||||
"$CLI" "$@"
|
||||
}
|
||||
|
||||
@@ -1278,7 +1286,7 @@ RC=$?
|
||||
set -e
|
||||
[ "$RC" -eq 0 ] && pass "Exit-Code 0" || fail "Exit-Code $RC: $OUT"
|
||||
echo "$OUT" | grep -q "ohne-wlan" && pass "ohne Datei gilt 'ohne-wlan'" || fail "Vorgabe ist nicht 'ohne-wlan': $OUT"
|
||||
echo "$OUT" | grep -q "migrate-nocreds" && pass "und das zugehoerige Verzeichnis wird genannt" || fail "Verzeichnis fehlt in der Ausgabe: $OUT"
|
||||
echo "$OUT" | grep -q "rescue-nocreds" && pass "und das zugehoerige Verzeichnis wird genannt (Vorgabemodus: recovery)" || fail "Verzeichnis fehlt in der Ausgabe: $OUT"
|
||||
[ ! -e "$SBX/var/imageset" ] && pass "das blosse Berichten legt keine Datei an" || fail "'bildsatz' ohne Argument hat geschrieben"
|
||||
|
||||
echo
|
||||
@@ -1323,7 +1331,7 @@ setup_sandbox "$SBX"
|
||||
printf 'voellig-anderes\n' >"$SBX/var/imageset"
|
||||
OUT=$(run_cli "$SBX" bildsatz 2>&1)
|
||||
echo "$OUT" | grep -q "ohne-wlan" && pass "kaputter Inhalt -> 'ohne-wlan'" || fail "kaputter Inhalt fuehrte nicht auf die Vorgabe: $OUT"
|
||||
echo "$OUT" | grep -q "migrate-nocreds" && pass "und das Verzeichnis des sicheren Satzes" || fail "falsches Verzeichnis: $OUT"
|
||||
echo "$OUT" | grep -q "rescue-nocreds" && pass "und das Verzeichnis des sicheren Satzes (Vorgabemodus: recovery)" || fail "falsches Verzeichnis: $OUT"
|
||||
# Der Bediener muss erfahren, dass sein Eintrag NICHT gewirkt hat - sonst haelt er die
|
||||
# Station fuer umgeschaltet.
|
||||
echo "$OUT" | grep -q "unknown setting 'voellig-anderes'" \
|
||||
@@ -1340,7 +1348,7 @@ echo
|
||||
echo "=== Bildsatz E: ein gewaehlter, aber fehlender Satz wird beim Umschalten UND im Status gemeldet ==="
|
||||
SBX="$TMPROOT/bs5"
|
||||
setup_sandbox "$SBX"
|
||||
rm -rf "$SBX/images/migrate-wlan"
|
||||
rm -rf "$SBX/images/rescue-wlan" # Vorgabemodus (ohne vorheriges "on") ist recovery
|
||||
set +e
|
||||
ERR=$(run_cli "$SBX" bildsatz mit-wlan 2>&1 >/dev/null)
|
||||
RC=$?
|
||||
@@ -1354,7 +1362,7 @@ echo
|
||||
echo "=== Bildsatz F: ein LEERES Verzeichnis zaehlt genauso als fehlend ==="
|
||||
SBX="$TMPROOT/bs6"
|
||||
setup_sandbox "$SBX"
|
||||
rm -f "$SBX/images/migrate-nocreds"/*.img
|
||||
rm -f "$SBX/images/rescue-nocreds"/*.img # Vorgabemodus (ohne vorheriges "on") ist recovery
|
||||
OUT=$(run_cli "$SBX" status 2>&1)
|
||||
echo "$OUT" | grep -q "MISSING" && pass "ein leeres Bildsatzverzeichnis wird als fehlend gemeldet" || fail "ein leerer Satz gilt als vorhanden: $OUT"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user