fix(station): Anzeigedienst bleibt ueber on/off hinweg durchgehend an
'off' stoppte bisher den Anzeigedienst und leerte das Panel, aber kein 'on'-Pfad hat ihn je wieder gestartet - ab dem zweiten Ein/Aus blieb das Panel bis zum naechsten Pi-Neustart dunkel. Die Begruendung dafuer trug nicht: der Anzeigedienst erkennt den ausgeschalteten Zustand selbst (systemctl is-active ninlight-station) und zeichnet von sich aus "Station aus". 'off' fasst den Anzeigedienst jetzt nicht mehr an; er laeuft durchgehend (wie seit dem Booten ohnehin) und zeigt den jeweils aktuellen Zustand. display_off() bleibt fuer den expliziten Diagnosebefehl 'ninlight-station display off' erhalten. Enthaelt zusaetzlich die schon im Arbeitsbaum liegende PHASE_LABELS-Korrektur in render.py (HORCHT -> LISTEN).
This commit is contained in:
@@ -50,7 +50,7 @@ TEXT_MARGIN_PX = 2
|
|||||||
# Panelbreite. Invertiert kostet auf e-Paper nichts (bistabil, kein
|
# Panelbreite. Invertiert kostet auf e-Paper nichts (bistabil, kein
|
||||||
# Stromverbrauch pro Pixel) und trennt die Kopfzeile auf einen Blick
|
# Stromverbrauch pro Pixel) und trennt die Kopfzeile auf einen Blick
|
||||||
# vom Rest.
|
# vom Rest.
|
||||||
# header_phase - die Phase (AUTO/HORCHT/FREIGEGEBEN), NUR im Migrationsmodus und
|
# header_phase - die Phase (AUTO/LISTEN/FREIGEGEBEN), NUR im Migrationsmodus und
|
||||||
# nur, wenn eine Phase bekannt ist. Steht in derselben Kopfzeile wie
|
# nur, wenn eine Phase bekannt ist. Steht in derselben Kopfzeile wie
|
||||||
# header, rechtsbuendig, in kleinerer Schrift (zweite Hardware-Abnahme:
|
# header, rechtsbuendig, in kleinerer Schrift (zweite Hardware-Abnahme:
|
||||||
# die Phase ging als eigene kleine Zeile unter dem Lampennamen unter).
|
# die Phase ging als eigene kleine Zeile unter dem Lampennamen unter).
|
||||||
@@ -153,7 +153,7 @@ FONT_SEARCH_PATHS = (
|
|||||||
MODE_LABELS = {"recovery": "RETTUNG", "migration": "MIGRATION"}
|
MODE_LABELS = {"recovery": "RETTUNG", "migration": "MIGRATION"}
|
||||||
# "armed" wird gesondert behandelt (es zieht zusaetzlich eine Beiwerkzeile mit dem
|
# "armed" wird gesondert behandelt (es zieht zusaetzlich eine Beiwerkzeile mit dem
|
||||||
# Zielnamen nach sich), deshalb hier nicht gelistet.
|
# Zielnamen nach sich), deshalb hier nicht gelistet.
|
||||||
PHASE_LABELS = {"auto": "AUTO", "listen": "HORCHT"}
|
PHASE_LABELS = {"auto": "AUTO", "listen": "LISTEN"}
|
||||||
|
|
||||||
# Dritte Hardware-Abnahme, Befund I2: in der Kopfzeile stand frueher
|
# Dritte Hardware-Abnahme, Befund I2: in der Kopfzeile stand frueher
|
||||||
# "FREIGEGEBEN: <zielname>" - der Platz neben dem Modus reicht dafuer nicht (mit DejaVu
|
# "FREIGEGEBEN: <zielname>" - der Platz neben dem Modus reicht dafuer nicht (mit DejaVu
|
||||||
|
|||||||
@@ -608,16 +608,36 @@ display_handover() {
|
|||||||
return "$_rc"
|
return "$_rc"
|
||||||
}
|
}
|
||||||
|
|
||||||
# Nimmt die Anzeige mit aus. Reihenfolge: erst den Dienst stoppen, dann das Panel leeren -
|
# Stoppt den Anzeigedienst dauerhaft und leert danach das Panel. Reihenfolge: erst der
|
||||||
# umgekehrt zeichnet der noch laufende Daemon binnen 5 s sein altes Bild wieder darauf.
|
# Dienst, dann das Leeren - umgekehrt zeichnet der noch laufende Daemon binnen 5 s sein
|
||||||
|
# altes Bild wieder darauf.
|
||||||
#
|
#
|
||||||
# Warum leeren und nicht "Station aus" stehen lassen: der Anzeigedienst erkennt den
|
# Frueher hing diese Funktion auch in full_off() (also in jedem "off") und stuetzte das
|
||||||
# ausgeschalteten Zustand zwar selbst (systemctl is-active), aber ein laufender
|
# auf die Annahme, ein weiterlaufender Anzeigedienst wuerde nach "off" ein stehen-
|
||||||
# Anzeigedienst nach "off" bedeutet, dass "off" eben NICHT alles abgeschaltet hat. Ein
|
# gebliebenes "MIGRATION"-Bild zeigen, das einen Betriebszustand behauptet, den es nicht
|
||||||
# leeres Panel behauptet dagegen gar nichts - und das ist bei einer Station, die Lampen
|
# mehr gibt - ein leeres Panel sei da die einzig ungefaehrliche Richtung. Die Praemisse
|
||||||
# ungefragt Firmware unterschieben kann, die einzig ungefaehrliche Richtung: ein
|
# stimmt nicht: der Anzeigedienst erkennt den ausgeschalteten Zustand selbst
|
||||||
# stehengebliebenes "MIGRATION"-Bild wuerde einen Betriebszustand behaupten, den es nicht
|
# (_service_active() in display.py fragt "systemctl is-active ninlight-station") und
|
||||||
# mehr gibt, waehrend ein leeres Panel hoechstens nach "aus" aussieht - was es ist.
|
# zeichnet dann von sich aus "Station aus" - am Geraet so bestaetigt. Es gab also nie ein
|
||||||
|
# stehenbleibendes Bild, gegen das zu schuetzen waere. Der tatsaechliche Effekt war ein
|
||||||
|
# anderer, ungewollter: der Dienst blieb nach dem ersten "off" gestoppt, und KEIN "on"-Pfad
|
||||||
|
# (recovery_on/migrate_on/die Kurzform "on") hat ihn je wieder gestartet - ab dem zweiten
|
||||||
|
# Durchgang blieb das Panel bis zum naechsten Neustart des Pi dunkel, obwohl die Station
|
||||||
|
# wieder lief.
|
||||||
|
#
|
||||||
|
# Jetzt laesst full_off() den Anzeigedienst laufen (er startet ohnehin beim Booten und
|
||||||
|
# zeichnet den jeweils aktuellen Zustand selbst) - symmetrisch, ohne dass "on" ihn eigens
|
||||||
|
# wiederanfahren muesste, und ohne dass "off" ihn extra stoppen muesste. Diese Funktion
|
||||||
|
# bleibt nur fuer den EXPLIZITEN Diagnosebefehl 'ninlight-station display off' erhalten,
|
||||||
|
# mit dem man den Dienst bewusst und dauerhaft stilllegen kann (z.B. um das Panel zu
|
||||||
|
# schonen) - dafuer braucht es weiterhin Stop+Leeren in dieser Reihenfolge.
|
||||||
|
#
|
||||||
|
# Preis der Entscheidung, den Dienst durchlaufen zu lassen: er ruft alle
|
||||||
|
# POLL_INTERVAL_S=5s (display.py) 'systemctl is-active' auf - dauerhaft, auch waehrend die
|
||||||
|
# Station aus ist, nicht nur waehrend sie an ist wie bisher. Das ist ein einzelner lokaler
|
||||||
|
# D-Bus-Aufruf ohne Netzwerk; auf einem Pi Zero W (ARMv6, ein Kern) kostet ein Fork+Exec
|
||||||
|
# davon alle 5 s spuerbar, aber nicht ernsthaft etwas - derselbe Takt laeuft schon waehrend
|
||||||
|
# jedes "an"-Zustands, und ein ansonsten untaetiger Kern hat davon reichlich Luft. Vertretbar.
|
||||||
display_off() {
|
display_off() {
|
||||||
sudo systemctl stop ninlight-display 2>/dev/null || true
|
sudo systemctl stop ninlight-display 2>/dev/null || true
|
||||||
# Kein Abbruch, wenn das Panel fehlt: display.py beendet sich dann selbst mit 0, und
|
# Kein Abbruch, wenn das Panel fehlt: display.py beendet sich dann selbst mit 0, und
|
||||||
@@ -633,14 +653,11 @@ full_off() {
|
|||||||
# stehenlaesst.
|
# stehenlaesst.
|
||||||
autooff_clear
|
autooff_clear
|
||||||
sudo systemctl stop ninlight-station 2>/dev/null || true
|
sudo systemctl stop ninlight-station 2>/dev/null || true
|
||||||
# VOR ap_switch, nicht danach: ap_switch "" bricht bei einem haengenden
|
# Am Anzeigedienst wird hier bewusst NICHTS getan (siehe display_off()'s Kommentar):
|
||||||
# NetworkManager mit Fehler ab, und unter "set -e" kaeme danach nichts mehr. Genau
|
# er laeuft weiter und zeichnet "Station aus" von selbst, sobald sein naechster Poll
|
||||||
# dann - Zugangspunkt laesst sich nicht abschalten - waere die Anzeige sonst der
|
# (spaetestens 5 s) "systemctl is-active ninlight-station" als inaktiv sieht. Das
|
||||||
# letzte Rest von "off", der nie ausgefuehrt wird: Daemon laeuft weiter, Panel zeigt
|
# macht "off" unabhaengig vom Anzeigedienst - ob der installiert, aktiv oder gerade
|
||||||
# unveraendert "MIGRATION". Ein leeres Panel behauptet dagegen nichts; die Wahrheit
|
# gescheitert ist, hat auf das Abschalten der Station keinen Einfluss.
|
||||||
# ueber den noch offenen Zugangspunkt steht in ap_switch's Fehlermeldung, wo man sie
|
|
||||||
# liest, statt auf einem Panel, das man auch fuer aktuell halten koennte.
|
|
||||||
display_off
|
|
||||||
ap_switch ""
|
ap_switch ""
|
||||||
if nmcli -t -f NAME con show | grep -Fqx "$HOME_CONNECTION"; then
|
if nmcli -t -f NAME con show | grep -Fqx "$HOME_CONNECTION"; then
|
||||||
if sudo nmcli con up "$HOME_CONNECTION" >/dev/null; then
|
if sudo nmcli con up "$HOME_CONNECTION" >/dev/null; then
|
||||||
@@ -901,7 +918,9 @@ usage() {
|
|||||||
echo " Ein laufender Anzeigedienst wird dafuer kurz gestoppt und" >&2
|
echo " Ein laufender Anzeigedienst wird dafuer kurz gestoppt und" >&2
|
||||||
echo " danach wieder gestartet (er haelt sonst die GPIO-Leitungen)." >&2
|
echo " danach wieder gestartet (er haelt sonst die GPIO-Leitungen)." >&2
|
||||||
echo " display clear Panel leeren (ebenfalls mit kurzer Unterbrechung des Dienstes)." >&2
|
echo " display clear Panel leeren (ebenfalls mit kurzer Unterbrechung des Dienstes)." >&2
|
||||||
echo " display off Anzeigedienst stoppen und das Panel leeren (macht 'off' mit)." >&2
|
echo " display off Anzeigedienst dauerhaft stoppen und das Panel leeren. 'on'/'off'" >&2
|
||||||
|
echo " der Station brauchen das nicht - der Anzeigedienst laeuft" >&2
|
||||||
|
echo " unabhaengig davon durch und zeichnet den Zustand selbst." >&2
|
||||||
}
|
}
|
||||||
|
|
||||||
_cmd=${1:-}
|
_cmd=${1:-}
|
||||||
|
|||||||
@@ -140,6 +140,16 @@ case "\$1" in
|
|||||||
exit "\$code"
|
exit "\$code"
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
|
start)
|
||||||
|
# Testschalter fuer die Resilienz-Faelle: bildet nach, dass "ninlight-display"
|
||||||
|
# gar nicht installiert oder absichtlich maskiert ist (systemctl gibt dann einen
|
||||||
|
# Fehler zurueck statt still zu tun, als waere alles gut).
|
||||||
|
if [ "\$2" = "ninlight-display" ] && [ -n "\${FAKE_DISPLAY_SERVICE_MISSING:-}" ]; then
|
||||||
|
echo "Failed to start ninlight-display.service: Unit not found." >&2
|
||||||
|
exit 5
|
||||||
|
fi
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
restart|stop)
|
restart|stop)
|
||||||
# Bildet systemds RuntimeDirectory-Verhalten nach (Fixrunde 1, C1): ohne
|
# Bildet systemds RuntimeDirectory-Verhalten nach (Fixrunde 1, C1): ohne
|
||||||
# RuntimeDirectoryPreserve=restart in der Unit leert systemd das
|
# RuntimeDirectoryPreserve=restart in der Unit leert systemd das
|
||||||
@@ -157,6 +167,10 @@ case "\$1" in
|
|||||||
rm -rf "\$RUN_DIR"
|
rm -rf "\$RUN_DIR"
|
||||||
mkdir -p "\$RUN_DIR"
|
mkdir -p "\$RUN_DIR"
|
||||||
fi
|
fi
|
||||||
|
if [ "\$2" = "ninlight-display" ] && [ -n "\${FAKE_DISPLAY_SERVICE_MISSING:-}" ]; then
|
||||||
|
echo "Failed to stop ninlight-display.service: Unit not found." >&2
|
||||||
|
exit 5
|
||||||
|
fi
|
||||||
if [ "\$1" = "restart" ]; then
|
if [ "\$1" = "restart" ]; then
|
||||||
exit "\${FAKE_SYSTEMCTL_RESTART_EXIT:-0}"
|
exit "\${FAKE_SYSTEMCTL_RESTART_EXIT:-0}"
|
||||||
fi
|
fi
|
||||||
@@ -795,10 +809,14 @@ else
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
echo
|
echo
|
||||||
echo "=== Fall D4 (Task 6b, Punkt 4): 'off' nimmt die Anzeige mit - Dienst gestoppt, Panel geleert ==="
|
echo "=== Fall D4 (Befund Task 7f): 'off' fasst den Anzeigedienst nicht mehr an ==="
|
||||||
# Ohne das behauptet das stehengebliebene Bild einen Betriebszustand ("MIGRATION"),
|
# Frueher stoppte 'off' den Anzeigedienst und leerte das Panel - mit der Begruendung,
|
||||||
# den es nicht mehr gibt - bei einer Station, die Lampen ungefragt Firmware
|
# ein stehengebliebenes "MIGRATION"-Bild wuerde einen Betriebszustand behaupten, den es
|
||||||
# unterschieben kann, die gefaehrliche Richtung.
|
# nicht mehr gibt. Die Begruendung trug nicht: der Anzeigedienst erkennt den
|
||||||
|
# ausgeschalteten Zustand selbst (systemctl is-active ninlight-station) und zeichnet dann
|
||||||
|
# "Station aus". Das eigentliche Ergebnis des Stoppens war ein anderes: kein "on"-Pfad hat
|
||||||
|
# den Dienst je wieder gestartet, und das Panel blieb ab dem zweiten Durchgang bis zum
|
||||||
|
# naechsten Pi-Neustart dunkel. Jetzt laesst 'off' den Dienst laufen.
|
||||||
SBX="$TMPROOT/tD4"
|
SBX="$TMPROOT/tD4"
|
||||||
setup_sandbox "$SBX"
|
setup_sandbox "$SBX"
|
||||||
echo "dummy" >"$SBX/images/migrate/gu10_rgb_prod.img"
|
echo "dummy" >"$SBX/images/migrate/gu10_rgb_prod.img"
|
||||||
@@ -809,57 +827,50 @@ OUT=$(run_cli "$SBX" off 2>&1)
|
|||||||
RC=$?
|
RC=$?
|
||||||
set -e
|
set -e
|
||||||
[ "$RC" -eq 0 ] && pass "Exit-Code 0" || fail "Exit-Code $RC, Ausgabe: $OUT"
|
[ "$RC" -eq 0 ] && pass "Exit-Code 0" || fail "Exit-Code $RC, Ausgabe: $OUT"
|
||||||
grep -Fq "STUB systemctl stop ninlight-display" "$SBX/cmd.log" && pass "'off' stoppt den Anzeigedienst" || fail "'off' stoppt den Anzeigedienst nicht: $(cat "$SBX/cmd.log")"
|
grep -Fq "STUB systemctl stop ninlight-display" "$SBX/cmd.log" && fail "'off' stoppt den Anzeigedienst weiterhin: $(cat "$SBX/cmd.log")" || pass "'off' stoppt den Anzeigedienst nicht mehr"
|
||||||
grep -Fq "STUB display.py --clear" "$SBX/cmd.log" && pass "'off' leert das Panel" || fail "'off' leert das Panel nicht: $(cat "$SBX/cmd.log")"
|
grep -Fq "STUB display.py --clear" "$SBX/cmd.log" && fail "'off' leert weiterhin das Panel: $(cat "$SBX/cmd.log")" || pass "'off' leert das Panel nicht mehr (der Dienst zeichnet 'Station aus' selbst)"
|
||||||
STOP_LINE=$(grep -n "STUB systemctl stop ninlight-display" "$SBX/cmd.log" | head -n1 | cut -d: -f1 || true)
|
|
||||||
CLEAR_LINE=$(grep -n "STUB display.py --clear" "$SBX/cmd.log" | head -n1 | cut -d: -f1 || true)
|
|
||||||
if [ -n "$STOP_LINE" ] && [ -n "$CLEAR_LINE" ] && [ "$STOP_LINE" -lt "$CLEAR_LINE" ]; then
|
|
||||||
pass "auch bei 'off': erst stoppen, dann leeren"
|
|
||||||
else
|
|
||||||
fail "Reihenfolge bei 'off' falsch (stop=$STOP_LINE, clear=$CLEAR_LINE): $(cat "$SBX/cmd.log")"
|
|
||||||
fi
|
|
||||||
# Das Panel muss geleert sein, BEVOR ap_switch das Ergebnis von "off" verkuenden kann -
|
|
||||||
# und vor allem, bevor ap_switch bei haengendem NetworkManager abbricht (Fall D6).
|
|
||||||
UP_LINE=$(grep -n "nmcli con up home-wifi" "$SBX/cmd.log" | head -n1 | cut -d: -f1 || true)
|
|
||||||
if [ -n "$UP_LINE" ] && [ "$CLEAR_LINE" -lt "$UP_LINE" ]; then
|
|
||||||
pass "Panel ist geleert, bevor wlan0 ins Heim-WLAN zurueckgeschaltet wird"
|
|
||||||
else
|
|
||||||
fail "Panel wurde erst nach dem Zurueckschalten geleert (clear=$CLEAR_LINE, up=$UP_LINE)"
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo
|
echo
|
||||||
echo "=== Fall D5: ein Fehler beim Leeren des Panels haelt 'off' nicht auf ==="
|
echo "=== Fall D4b (die Zusage aus Task 7f): 'off' und ein erneutes 'on' lassen den Anzeigedienst durchgehend an ==="
|
||||||
# Ein fehlendes/kaputtes Panel darf das Ausschalten der Station nie blockieren -
|
# Genau das ist die Zusage: nach 'off' und einem erneuten 'on' ist die Anzeige wieder in
|
||||||
# sonst bliebe ausgerechnet der Zugangspunkt an, weil die Anzeige klemmt.
|
# Betrieb - und zwar OHNE dass irgendwer den Dienst zwischendurch neu gestartet haben
|
||||||
SBX="$TMPROOT/tD5"
|
# muesste, weil er nie gestoppt wurde. Ein/Aus/Ein durchspielen und ueber die gesamte
|
||||||
|
# Sequenz pruefen, dass 'ninlight-display' kein einziges Mal gestoppt wird.
|
||||||
|
SBX="$TMPROOT/tD4b"
|
||||||
setup_sandbox "$SBX"
|
setup_sandbox "$SBX"
|
||||||
: >"$SBX/cmd.log"
|
: >"$SBX/cmd.log"
|
||||||
set +e
|
set +e
|
||||||
OUT=$(FAKE_DISPLAY_EXIT=1 run_cli "$SBX" off 2>"$SBX/stderr.log")
|
run_cli "$SBX" on >/dev/null 2>&1
|
||||||
RC=$?
|
RC1=$?
|
||||||
|
run_cli "$SBX" off >/dev/null 2>&1
|
||||||
|
RC2=$?
|
||||||
|
run_cli "$SBX" on >/dev/null 2>&1
|
||||||
|
RC3=$?
|
||||||
set -e
|
set -e
|
||||||
ERR=$(cat "$SBX/stderr.log")
|
[ "$RC1" -eq 0 ] && [ "$RC2" -eq 0 ] && [ "$RC3" -eq 0 ] \
|
||||||
[ "$RC" -eq 0 ] && pass "Exit-Code 0 trotz fehlgeschlagenem Leeren" || fail "Exit-Code $RC, stderr: $ERR"
|
&& pass "on/off/on liefern alle Exit-Code 0" \
|
||||||
echo "$ERR" | grep -q "Warnung" && pass "Warnung ueber das nicht geleerte Panel steht auf stderr" || fail "keine Warnung auf stderr: $ERR"
|
|| fail "on/off/on: Exit-Codes $RC1/$RC2/$RC3, Log: $(cat "$SBX/cmd.log")"
|
||||||
grep -Fq "nmcli con up home-wifi" "$SBX/cmd.log" && pass "'off' hat trotzdem bis zum Zurueckschalten ins Heim-WLAN durchgezogen" || fail "'off' ist am Anzeigefehler haengengeblieben: $(cat "$SBX/cmd.log")"
|
grep -Fq "STUB systemctl stop ninlight-display" "$SBX/cmd.log" \
|
||||||
|
&& fail "der Anzeigedienst wurde waehrend on/off/on gestoppt - nach 'off' bliebe das Panel dunkel: $(cat "$SBX/cmd.log")" \
|
||||||
|
|| pass "der Anzeigedienst blieb ueber on/off/on hinweg durchgehend an"
|
||||||
|
|
||||||
echo
|
echo
|
||||||
echo "=== Fall D6: haengender NetworkManager - das Panel wird trotzdem noch geleert ==="
|
echo "=== Fall D9: ein fehlender/scheiternder Anzeigedienst haelt weder 'on' noch 'off' auf ==="
|
||||||
# ap_switch "" bricht hier mit Fehler ab; unter "set -e" laeuft danach nichts mehr.
|
# FAKE_DISPLAY_SERVICE_MISSING bildet nach, dass 'ninlight-display' gar nicht installiert
|
||||||
# Genau deshalb steht display_off VOR ap_switch: sonst bliebe ein "MIGRATION"-Bild
|
# oder absichtlich deaktiviert ist (systemctl meldet dann einen Fehler statt still
|
||||||
# stehen, waehrend der Zugangspunkt noch sendet und niemand mehr etwas abschaltet.
|
# mitzuspielen). Das darf 'on' und 'off' nicht scheitern lassen - eine tragende Zusage
|
||||||
SBX="$TMPROOT/tD6"
|
# dieses Projekts.
|
||||||
|
SBX="$TMPROOT/tD9"
|
||||||
setup_sandbox "$SBX"
|
setup_sandbox "$SBX"
|
||||||
echo "dummy" >"$SBX/images/migrate/gu10_rgb_prod.img"
|
|
||||||
run_cli "$SBX" migrate on >/dev/null 2>&1
|
|
||||||
: >"$SBX/cmd.log"
|
: >"$SBX/cmd.log"
|
||||||
set +e
|
set +e
|
||||||
OUT=$(FAKE_NMCLI_STUCK=1 run_cli "$SBX" off 2>"$SBX/stderr.log")
|
OUT_ON=$(FAKE_DISPLAY_SERVICE_MISSING=1 FAKE_DISPLAY_SERVICE_ACTIVE_EXIT=4 run_cli "$SBX" on 2>&1)
|
||||||
RC=$?
|
RC_ON=$?
|
||||||
|
OUT_OFF=$(FAKE_DISPLAY_SERVICE_MISSING=1 FAKE_DISPLAY_SERVICE_ACTIVE_EXIT=4 run_cli "$SBX" off 2>&1)
|
||||||
|
RC_OFF=$?
|
||||||
set -e
|
set -e
|
||||||
ERR=$(cat "$SBX/stderr.log")
|
[ "$RC_ON" -eq 0 ] && pass "'on' gelingt trotz fehlendem Anzeigedienst" || fail "'on' scheitert am fehlenden Anzeigedienst, Exit $RC_ON: $OUT_ON"
|
||||||
[ "$RC" -ne 0 ] && pass "Exit-Code != 0 (der Zugangspunkt liess sich nicht abschalten)" || fail "Exit-Code 0, obwohl der Zugangspunkt noch aktiv ist: $OUT"
|
[ "$RC_OFF" -eq 0 ] && pass "'off' gelingt trotz fehlendem Anzeigedienst" || fail "'off' scheitert am fehlenden Anzeigedienst, Exit $RC_OFF: $OUT_OFF"
|
||||||
grep -Fq "STUB display.py --clear" "$SBX/cmd.log" && pass "Panel wurde trotz haengendem NetworkManager geleert" || fail "Panel blieb stehen, waehrend der Zugangspunkt noch sendet: $(cat "$SBX/cmd.log")"
|
|
||||||
|
|
||||||
echo
|
echo
|
||||||
echo "=== Fall D7: 'display' ohne/mit unbekanntem Unterbefehl -> Hilfetext, Exit 2 ==="
|
echo "=== Fall D7: 'display' ohne/mit unbekanntem Unterbefehl -> Hilfetext, Exit 2 ==="
|
||||||
|
|||||||
Reference in New Issue
Block a user