homelab: „Rückweg testen“ — Snapshot anlegen, absichtlich rot werten, zurück, nachprüfen

Neuer Baustein „probe“ (POST /api/homelab/ziele/{id}/rueckweg-probe): legt den
Rückweg an wie vor einem Update, wertet die Prüfung absichtlich als rot, geht
zurück und prüft danach, ob das Gerät läuft und antwortet. Kein Update dabei;
Meldung grün bzw. dringend rot. Die Probe steht im Protokoll, nicht im
Update-Verlauf und nicht unter „Zuletzt eingespielt“. Der Snapshot bleibt
liegen (wie nach einem echten Rückweg).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Hitonabi
2026-09-25 14:58:34 +02:00
co-authored by Claude Opus 5.5
parent b816fe6d32
commit 77ecb35a6d
6 changed files with 92 additions and 14 deletions
+24
View File
@@ -222,6 +222,30 @@ def test_update_ohne_neue_version_ist_rot(ausfuehrer):
assert lauf["ergebnis"] == "zurueckgerollt" and "unverändert" in lauf["text"]
def test_rueckweg_probe_gruen(ausfuehrer):
starten, protokoll, meldungen, verlauf = ausfuehrer
starten("1.27.2")
lauf = _auf_ende(updates.starten("ct-104", "probe")["lauf"])
# Kein Update: Snapshot, zurück auf ihn, frischer Bericht — und die Probe steht nicht im Update-Verlauf.
assert protokoll == ["snapshot", "zurueck", "bericht"]
assert lauf["ergebnis"] == "probe-gruen" and "zurück auf den Snapshot mc2-20260924-190000" in lauf["text"]
assert meldungen == [(lauf["text"], False)] and verlauf == []
def test_rueckweg_probe_rot_meldet_dringend(ausfuehrer, monkeypatch):
starten, _, meldungen, _ = ausfuehrer
monkeypatch.setattr(inventar, "erreichbar", lambda url: False)
starten("1.27.2")
lauf = _auf_ende(updates.starten("ct-104", "probe")["lauf"])
assert lauf["ergebnis"] == "fehler" and "Rückweg-Probe rot" in lauf["text"] and "antwortet nicht" in lauf["text"]
assert meldungen[0][1] is True
def test_rueckweg_probe_nur_mit_rueckweg(ausfuehrer):
assert updates.starten("pve", "probe")["detail"].startswith("Für den Proxmox-Host")
assert updates.starten("vm-106", "probe")["detail"].startswith("Dieses Gerät ist nicht freigegeben")
def test_nicht_freigegeben_und_unbekannt(ausfuehrer):
assert updates.starten("vm-106", "app")["detail"].startswith("Dieses Gerät ist nicht freigegeben")
assert updates.starten("ct-999", "app")["ok"] is False