feat(station): Rettungsabbilder folgen dem Bildsatz-Umschalter beim Deploy
deploy.sh legt Rettungsabzuege jetzt in images/rescue-wlan/ (aus build/) und images/rescue-nocreds/ (aus build-nocreds/) ab, statt sie flach in images/ abzulegen - dasselbe Muster wie migrate-wlan/migrate-nocreds, inklusive derselben --delete-Vorsicht (nur bei vollstaendigem Satz). Alter flacher Bestand wird bei jedem Deploy aufgeraeumt, auch bei einem gezielten. README beschreibt den Umschalter jetzt fuer beide Betriebsarten.
This commit is contained in:
@@ -355,10 +355,12 @@ setup_stubbin "$STUBBIN" "$LOG"
|
||||
mkdir -p "$SANDBOX/build/foo" "$SANDBOX/build/bar"
|
||||
echo "foo-image-neu" >"$SANDBOX/build/foo/ninlight_foo_ota.img"
|
||||
echo "bar-image" >"$SANDBOX/build/bar/ninlight_bar_ota.img"
|
||||
# Zielverzeichnis simuliert einen vorherigen Voll-Deploy: Images fuer foo UND bar liegen schon da.
|
||||
mkdir -p "$SANDBOX_STATE/opt/ninlight-station/images"
|
||||
echo "foo-image-alt" >"$SANDBOX_STATE/opt/ninlight-station/images/ninlight_foo_ota.img"
|
||||
echo "bar-image" >"$SANDBOX_STATE/opt/ninlight-station/images/ninlight_bar_ota.img"
|
||||
# Zielverzeichnis simuliert einen vorherigen Voll-Deploy MIT dieser Fassung von
|
||||
# deploy.sh: Rettungsabbilder fuer foo UND bar liegen schon in images/rescue-wlan/ (dem
|
||||
# "mit-wlan"-Bildsatz aus build/, siehe server.py:RESCUE_SET_DIRS).
|
||||
mkdir -p "$SANDBOX_STATE/opt/ninlight-station/images/rescue-wlan"
|
||||
echo "foo-image-alt" >"$SANDBOX_STATE/opt/ninlight-station/images/rescue-wlan/ninlight_foo_ota.img"
|
||||
echo "bar-image" >"$SANDBOX_STATE/opt/ninlight-station/images/rescue-wlan/ninlight_bar_ota.img"
|
||||
: >"$LOG"
|
||||
set +e
|
||||
OUT=$(run_deploy "$SANDBOX" pi-test foo 2>&1)
|
||||
@@ -370,13 +372,13 @@ if echo "$OUT" | grep -q "andere Geraetetypen im Zielverzeichnis bleiben erhalte
|
||||
else
|
||||
fail "Ausgabe erwaehnt den gezielten Deploy nicht"
|
||||
fi
|
||||
if [ -f "$SANDBOX_STATE/opt/ninlight-station/images/ninlight_bar_ota.img" ]; then
|
||||
if [ -f "$SANDBOX_STATE/opt/ninlight-station/images/rescue-wlan/ninlight_bar_ota.img" ]; then
|
||||
pass "Image des NICHT ausgewaehlten Geraetetyps (bar) blieb erhalten"
|
||||
else
|
||||
fail "Image des nicht ausgewaehlten Geraetetyps (bar) wurde geloescht - Critical 2 nicht behoben"
|
||||
fi
|
||||
if [ -f "$SANDBOX_STATE/opt/ninlight-station/images/ninlight_foo_ota.img" ] \
|
||||
&& [ "$(cat "$SANDBOX_STATE/opt/ninlight-station/images/ninlight_foo_ota.img")" = "foo-image-neu" ]; then
|
||||
if [ -f "$SANDBOX_STATE/opt/ninlight-station/images/rescue-wlan/ninlight_foo_ota.img" ] \
|
||||
&& [ "$(cat "$SANDBOX_STATE/opt/ninlight-station/images/rescue-wlan/ninlight_foo_ota.img")" = "foo-image-neu" ]; then
|
||||
pass "Image des ausgewaehlten Geraetetyps (foo) wurde aktualisiert"
|
||||
else
|
||||
fail "Image des ausgewaehlten Geraetetyps (foo) wurde nicht aktualisiert"
|
||||
@@ -646,7 +648,7 @@ OUT=$(run_deploy "$SANDBOX" pi-test foo 2>&1)
|
||||
RC=$?
|
||||
set -e
|
||||
if [ "$RC" -eq 0 ]; then pass "Exit-Code 0"; else fail "Exit-Code $RC, Ausgabe: $OUT"; fi
|
||||
if [ -f "$SANDBOX_STATE/opt/ninlight-station/images/ninlight_foo_ota.img" ]; then
|
||||
if [ -f "$SANDBOX_STATE/opt/ninlight-station/images/rescue-wlan/ninlight_foo_ota.img" ]; then
|
||||
pass "Rettungsimage (_ota.img) wurde trotzdem ausgeliefert"
|
||||
else
|
||||
fail "Rettungsimage fehlt: $OUT"
|
||||
@@ -901,7 +903,7 @@ OUT=$(TEST_SIGN_DIR="$SIGN_EMPTY" run_deploy "$SANDBOX" pi-test 2>&1)
|
||||
RC=$?
|
||||
set -e
|
||||
if [ "$RC" -eq 0 ]; then pass "Exit-Code 0"; else fail "Exit-Code $RC, Ausgabe: $OUT"; fi
|
||||
if [ -f "$SANDBOX_STATE/opt/ninlight-station/images/ninlight_foo_ota.img" ]; then
|
||||
if [ -f "$SANDBOX_STATE/opt/ninlight-station/images/rescue-wlan/ninlight_foo_ota.img" ]; then
|
||||
pass "Rettungsimage (_ota.img) wurde trotzdem ausgeliefert"
|
||||
else
|
||||
fail "Rettungsimage fehlt: $OUT"
|
||||
@@ -1419,6 +1421,144 @@ else
|
||||
fail "der Satz 'ohne-wlan' auf dem Pi enthaelt Zugangsdaten"
|
||||
fi
|
||||
|
||||
echo
|
||||
echo "=== Szenario 35: der Bildsatz-Umschalter gilt jetzt auch fuer die Rettung - beide Rettungssaetze werden ausgeliefert ==="
|
||||
# Analog zu Szenario 28 (Migration), aber fuer die Rettungsabbilder: rescue-wlan/ kommt
|
||||
# aus build/ (dasselbe _ota.img, das ohnehin schon fuer die Trailer-Pruefung gebraucht
|
||||
# wird), rescue-nocreds/ aus build-nocreds/ - ein eigener, unsignierter Fund.
|
||||
SANDBOX="$TMPROOT/s35"; STUBBIN="$TMPROOT/bin35"; LOG="$TMPROOT/s35.log"; SANDBOX_STATE="$TMPROOT/s35-state"
|
||||
setup_sandbox "$SANDBOX"
|
||||
setup_stubbin "$STUBBIN" "$LOG"
|
||||
mkdir -p "$SANDBOX/build/foo" "$SANDBOX/build-nocreds/foo"
|
||||
make_ota_file "$SANDBOX/build/foo/ninlight_foo_ota.img"
|
||||
python3 -c "
|
||||
import sys
|
||||
path = sys.argv[1]
|
||||
body = b'N' * 2048
|
||||
trailer = bytearray(b'\xff' * 512)
|
||||
trailer[0:4] = b'NINL'
|
||||
with open(path, 'wb') as fh:
|
||||
fh.write(body + bytes(trailer))
|
||||
" "$SANDBOX/build-nocreds/foo/ninlight_foo_ota.img"
|
||||
: >"$LOG"
|
||||
set +e
|
||||
OUT=$(run_deploy "$SANDBOX" pi-test 2>&1)
|
||||
RC=$?
|
||||
set -e
|
||||
[ "$RC" -eq 0 ] && pass "Exit-Code 0" || fail "Exit-Code $RC: $OUT"
|
||||
RESCUE_WLAN="$SANDBOX_STATE/opt/ninlight-station/images/rescue-wlan/ninlight_foo_ota.img"
|
||||
RESCUE_NOCREDS="$SANDBOX_STATE/opt/ninlight-station/images/rescue-nocreds/ninlight_foo_ota.img"
|
||||
if [ -f "$RESCUE_WLAN" ] && [ -f "$RESCUE_NOCREDS" ]; then
|
||||
pass "beide Rettungssaetze liegen getrennt auf dem Pi"
|
||||
else
|
||||
fail "mindestens ein Rettungssatz fehlt: $OUT"
|
||||
fi
|
||||
if head -c 1 "$RESCUE_WLAN" | grep -q "B"; then
|
||||
pass "rescue-wlan/ kommt wirklich aus build/"
|
||||
else
|
||||
fail "rescue-wlan/ hat nicht den erwarteten Inhalt aus build/"
|
||||
fi
|
||||
if head -c 1 "$RESCUE_NOCREDS" | grep -q "N"; then
|
||||
pass "rescue-nocreds/ kommt wirklich aus build-nocreds/"
|
||||
else
|
||||
fail "rescue-nocreds/ hat nicht den erwarteten Inhalt aus build-nocreds/"
|
||||
fi
|
||||
|
||||
echo
|
||||
echo "=== Szenario 36: ohne build-nocreds/ bleibt der Rettungssatz 'ohne-wlan' auf dem Pi unangetastet ==="
|
||||
SANDBOX="$TMPROOT/s36"; STUBBIN="$TMPROOT/bin36"; LOG="$TMPROOT/s36.log"; SANDBOX_STATE="$TMPROOT/s36-state"
|
||||
setup_sandbox "$SANDBOX"
|
||||
setup_stubbin "$STUBBIN" "$LOG"
|
||||
mkdir -p "$SANDBOX/build/foo"
|
||||
make_ota_file "$SANDBOX/build/foo/ninlight_foo_ota.img"
|
||||
mkdir -p "$SANDBOX_STATE/opt/ninlight-station/images/rescue-nocreds"
|
||||
echo "alter-rescue-nocreds-abzug" >"$SANDBOX_STATE/opt/ninlight-station/images/rescue-nocreds/ninlight_foo_ota.img"
|
||||
: >"$LOG"
|
||||
set +e
|
||||
OUT=$(run_deploy "$SANDBOX" pi-test 2>&1)
|
||||
RC=$?
|
||||
set -e
|
||||
[ "$RC" -eq 0 ] && pass "Exit-Code 0 trotz fehlendem build-nocreds/" || fail "Exit-Code $RC: $OUT"
|
||||
if [ "$(cat "$SANDBOX_STATE/opt/ninlight-station/images/rescue-nocreds/ninlight_foo_ota.img" 2>/dev/null)" \
|
||||
= "alter-rescue-nocreds-abzug" ]; then
|
||||
pass "vorhandener Rettungssatz 'ohne-wlan' blieb unangetastet"
|
||||
else
|
||||
fail "der Rettungssatz 'ohne-wlan' wurde geleert oder ueberschrieben, obwohl build-nocreds/ fehlte"
|
||||
fi
|
||||
if [ -f "$SANDBOX_STATE/opt/ninlight-station/images/rescue-wlan/ninlight_foo_ota.img" ]; then
|
||||
pass "der Rettungssatz 'mit-wlan' wurde trotzdem ausgeliefert"
|
||||
else
|
||||
fail "der Rettungssatz 'mit-wlan' fehlt: $OUT"
|
||||
fi
|
||||
if echo "$OUT" | grep -q "build-nocreds"; then
|
||||
pass "der Hinweis nennt, womit der fehlende Rettungssatz entsteht"
|
||||
else
|
||||
fail "kein Hinweis auf build-nocreds/ in der Ausgabe: $OUT"
|
||||
fi
|
||||
|
||||
echo
|
||||
echo "=== Szenario 37: gezielter Deploy ohne build-nocreds/<ziel> bricht nicht ab, sondern laesst 'ohne-wlan' fuer dieses Ziel unangetastet ==="
|
||||
SANDBOX="$TMPROOT/s37"; STUBBIN="$TMPROOT/bin37"; LOG="$TMPROOT/s37.log"; SANDBOX_STATE="$TMPROOT/s37-state"
|
||||
setup_sandbox "$SANDBOX"
|
||||
setup_stubbin "$STUBBIN" "$LOG"
|
||||
mkdir -p "$SANDBOX/build/foo"
|
||||
make_ota_file "$SANDBOX/build/foo/ninlight_foo_ota.img"
|
||||
: >"$LOG"
|
||||
set +e
|
||||
OUT=$(run_deploy "$SANDBOX" pi-test foo 2>&1)
|
||||
RC=$?
|
||||
set -e
|
||||
[ "$RC" -eq 0 ] && pass "Exit-Code 0 trotz fehlendem build-nocreds/foo" || fail "Exit-Code $RC: $OUT"
|
||||
if [ -f "$SANDBOX_STATE/opt/ninlight-station/images/rescue-wlan/ninlight_foo_ota.img" ]; then
|
||||
pass "der Rettungssatz 'mit-wlan' fuer foo wurde trotzdem ausgeliefert"
|
||||
else
|
||||
fail "der Rettungssatz 'mit-wlan' fuer foo fehlt: $OUT"
|
||||
fi
|
||||
if [ ! -e "$SANDBOX_STATE/opt/ninlight-station/images/rescue-nocreds/ninlight_foo_ota.img" ]; then
|
||||
pass "kein Rettungsimage 'ohne-wlan' fuer foo entstanden - build-nocreds/foo fehlte"
|
||||
else
|
||||
fail "es entstand ein Rettungsimage 'ohne-wlan' fuer foo, obwohl build-nocreds/foo fehlte"
|
||||
fi
|
||||
if echo "$OUT" | grep -q "bleibt im Rettungs-Bildsatz 'ohne-wlan' unveraendert"; then
|
||||
pass "Hinweis auf das fehlende build-nocreds/foo vorhanden"
|
||||
else
|
||||
fail "kein Hinweis auf das fehlende build-nocreds/foo: $OUT"
|
||||
fi
|
||||
|
||||
echo
|
||||
echo "=== Szenario 38: Altbestand - vor diesem Umschalter flach in images/ liegende Rettungsabbilder werden auch bei einem gezielten Deploy aufgeraeumt ==="
|
||||
# Anders als bei den Migrationsabbildern (die ein eigenes, benanntes Verzeichnis erst
|
||||
# seit einem frueheren Umschalter haben) gab es fuer die Rettung nie eine Uebergangsphase
|
||||
# mit --delete: der flache Bestand wird von server.py seit diesem Umschalter nicht mehr
|
||||
# gelesen (siehe rescue_dir() dort) und ist deshalb toter Ballast, sobald IRGENDEIN
|
||||
# Deploy mit dieser Fassung laeuft - auch ein gezielter, der images/ sonst nicht mit
|
||||
# --delete abgleicht.
|
||||
SANDBOX="$TMPROOT/s38"; STUBBIN="$TMPROOT/bin38"; LOG="$TMPROOT/s38.log"; SANDBOX_STATE="$TMPROOT/s38-state"
|
||||
setup_sandbox "$SANDBOX"
|
||||
setup_stubbin "$STUBBIN" "$LOG"
|
||||
mkdir -p "$SANDBOX/build/foo"
|
||||
make_ota_file "$SANDBOX/build/foo/ninlight_foo_ota.img"
|
||||
mkdir -p "$SANDBOX_STATE/opt/ninlight-station/images"
|
||||
echo "alter-flacher-bestand" >"$SANDBOX_STATE/opt/ninlight-station/images/ninlight_foo_ota.img"
|
||||
echo "alter-flacher-bestand-bar" >"$SANDBOX_STATE/opt/ninlight-station/images/ninlight_bar_ota.img"
|
||||
: >"$LOG"
|
||||
set +e
|
||||
OUT=$(run_deploy "$SANDBOX" pi-test foo 2>&1)
|
||||
RC=$?
|
||||
set -e
|
||||
[ "$RC" -eq 0 ] && pass "Exit-Code 0" || fail "Exit-Code $RC: $OUT"
|
||||
if [ ! -e "$SANDBOX_STATE/opt/ninlight-station/images/ninlight_foo_ota.img" ] \
|
||||
&& [ ! -e "$SANDBOX_STATE/opt/ninlight-station/images/ninlight_bar_ota.img" ]; then
|
||||
pass "der flache Altbestand wurde auch bei einem gezielten Deploy entfernt"
|
||||
else
|
||||
fail "flacher Altbestand liegt noch da - er wuerde von niemandem mehr gelesen, aber am Pi einen gueltigen Satz vortaeuschen"
|
||||
fi
|
||||
if [ -f "$SANDBOX_STATE/opt/ninlight-station/images/rescue-wlan/ninlight_foo_ota.img" ]; then
|
||||
pass "das neue Rettungsimage liegt an der richtigen Stelle (images/rescue-wlan/)"
|
||||
else
|
||||
fail "das neue Rettungsimage fehlt: $OUT"
|
||||
fi
|
||||
|
||||
echo
|
||||
if [ "$FAILED" -eq 0 ]; then
|
||||
echo "Alle Tests bestanden."
|
||||
|
||||
Reference in New Issue
Block a user