fix(station): stat-Reihenfolge, Phase nur im Migrationsmodus, eingerueckte Konfig-Werte, kein /tmp-Zugriff im Test
Fixrunde 2 zu Task 4:
- N1 (wichtig): file_mode() in test_cli.sh/test_setup_pi.sh probierte
"stat -f '%Lp'" vor "stat -c '%a'" - auf GNU-coreutils (dem Pi) deutet
"-f" dort "Dateisystemstatus" und liefert Muell statt der Rechte-Zahl,
faellt aber trotzdem in den "||"-Zweig durch, der zusaetzlich "644"
anhaengt. Reihenfolge umgedreht und mit einem per gstat erzwungenen
GNU-Testlauf zusaetzlich abgesichert.
- N2 (wichtig): status zeigte nach einem Wechsel zurueck in den
Rettungsmodus weiterhin die letzte Migrationsphase aus einer liegen
gebliebenen control.json (moeglich seit RuntimeDirectoryPreserve=
restart aus Fixrunde 1). Phase wird jetzt nur noch angezeigt, wenn
Modus tatsaechlich "migration" ist.
- N3 (klein): die Schluesselerkennung in setup_pi.sh war rein
zeilenverankert ("^KEY=") und haette einen eingerueckten Bestandswert
als fehlend gewertet - beim naechsten Sourcen der Konfiguration haette
die zusaetzlich angehaengte Vorlagenzeile das eigene Passwort
ueberschrieben. Muster auf fuehrenden Leerraum/export gehaertet.
- N4 (klein): test_setup_pi.sh liess setup_pi.sh ueber den scp-Stub echte
Dateien im /tmp des Entwicklungsrechners anlegen und wieder loeschen.
Neue Variable NINLIGHT_STAGE_DIR biegt das auf eine Sandbox um.
Alle vier Punkte mit Regressionstests, N2 und N3 zusaetzlich per
Mutationsprobe (Fix zurueckgenommen, Test wird rot) verifiziert.
This commit is contained in:
@@ -373,7 +373,22 @@ PY
|
||||
# wer die Phase dort ablesen wuerde, saehe nach einer erfolgreichen Freigabe
|
||||
# weiterhin die Phase von vor dem letzten Dienststart und koennte "arm" fuer
|
||||
# gescheitert halten oder faelschlich glauben, nichts sei mehr scharf.
|
||||
if [ -r "$_control_file" ]; then
|
||||
#
|
||||
# ABER: Phase ist ein Konzept, das nur im Migrationsmodus existiert - control.json
|
||||
# kann von einem frueheren "arm"/"migrate on" liegen bleiben (RuntimeDirectoryPreserve=
|
||||
# restart aus Fixrunde 1, C1 laesst es Neustarts jetzt ausdruecklich ueberleben),
|
||||
# auch nachdem laengst wieder in den Rettungsmodus zurueckgeschaltet wurde -
|
||||
# "recovery on" raeumt die Datei bewusst nicht auf, weil der Dienst sie im
|
||||
# Rettungsmodus ohnehin ignoriert (server.py liest sie nur im Migrationsmodus).
|
||||
# Ohne diese Bedingung wuerde status nach "migrate on --listen; arm X; on" ein
|
||||
# irrefuehrendes "Phase: armed" im Rettungsmodus zeigen (Fixrunde 2, N2) - genau
|
||||
# in der sicherheitsrelevanten Dimension "scharf/nicht scharf", die I1 eigentlich
|
||||
# klarstellen sollte. Deshalb wird control.json nur gelesen, wenn Modus wirklich
|
||||
# "migration" ist; sonst ist die Phase per Definition "-", unabhaengig davon, was
|
||||
# noch in control.json steht.
|
||||
if [ "$_modus" != "migration" ]; then
|
||||
_phase="-"
|
||||
elif [ -r "$_control_file" ]; then
|
||||
_phase=$(python3 - "$_control_file" <<'PY'
|
||||
import json
|
||||
import sys
|
||||
|
||||
Reference in New Issue
Block a user