Trading-Plattform-Pruefung: Bestaetigung ohne Host bricht die Sicherung ab, als Fall belegt (Paket NT, Task 739)
- abendkontrolle_dockerhost_angriffe.py: Fall eine_bestaetigung_ohne_host_bricht_die_sicherung_ab und Mutant E739-01 (39 Faelle, 57 Mutanten, keiner ueberlebt). - abendkontrolle.py: Docstring von ssh_lauf nennt den Vorbehalt zu Win32-OpenSSH. Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_0126RDfXiECscXipzf67uypJ
This commit is contained in:
1 parent
88ec4fd40f
commit
ef8059903c
2 files changed
+34
-1
No files matched your search
@@ -253,7 +253,8 @@ def ssh_lauf(befehl: str, timeout, stdout=None) -> subprocess.CompletedProcess:
|
||||
|
||||
Eigene Funktion, damit die Angriffsfaelle Zeitlimit und Dauer jedes Befehls sehen. Seit Paket NT
|
||||
(Quorum 4, G1): abendkontrolle-lesen.sh endet mit 0 bis 4. Exit 255 meldet ssh selbst: keine
|
||||
Verbindung oder Anmeldung, aber auch ein Befehl, den auf dem Host ein Signal beendet. Er und ein
|
||||
Verbindung oder Anmeldung, laut Quelltext von OpenSSH-portable 9.5p1 auch ein Befehl, den auf dem
|
||||
Host ein Signal beendet (fuer Win32-OpenSSH 9.5p2 auf diesem Rechner nicht nachgelesen). Er und ein
|
||||
abgelaufenes Zeitlimit heissen: Der Docker-Host ist nicht erreichbar (HostNichtErreichbar).
|
||||
"""
|
||||
try:
|
||||
|
||||
@@ -1155,6 +1155,32 @@ def ein_zeitlimit_beim_archiv_laesst_nur_diese_instanz_scheitern():
|
||||
assert "Docker-Host nicht erreichbar" not in zeile, zeile
|
||||
|
||||
|
||||
@fall
|
||||
def eine_bestaetigung_ohne_host_bricht_die_sicherung_ab():
|
||||
# Kritische Pruefung NT, Befund 1: Auch die Bestaetigung gehoert zur Grenze "Docker-Host nicht
|
||||
# erreichbar" (Entscheidung 1 in Task 729), nicht nur die Summe. Nach Summe und Archiv von alpaca
|
||||
# ist der Host weg, die Bestaetigung endet mit 255. Das Archiv liegt dann ohne Summendatei auf D:,
|
||||
# nichts ist bestaetigt, und die Sicherung endet mit genau einer Zeile von heute.
|
||||
with tempfile.TemporaryDirectory() as ordner:
|
||||
wurzel = Path(ordner)
|
||||
host = host_ablage(wurzel)
|
||||
modul = lade()
|
||||
ergebnisse_liegen(modul, wurzel)
|
||||
code, notiz, befehle, _ = sicherungslauf(wurzel, "--jetzt", "2026-10-05T23:30", modul=modul, host_weg="2")
|
||||
summe = host_summe(host, "alpaca")
|
||||
assert code == 1, (code, notiz)
|
||||
assert befehle == [
|
||||
f"sicherung-summe {TAG}-alpaca", f"sicherung {TAG}-alpaca", f"sicherung-bestaetigt {TAG}-alpaca {summe}"
|
||||
], befehle
|
||||
assert einzige_zeile(notiz) == (
|
||||
f"- 23:30 Uhr — {KOPF}: **gescheitert** #needs-review. Docker-Host nicht erreichbar "
|
||||
f"(sicherung-bestaetigt {TAG}-alpaca {summe}: Exit 255; {HOST_WEG}), Sicherung abgebrochen. "
|
||||
"Der nächste Lauf versucht es erneut."
|
||||
), notiz
|
||||
assert namen(wurzel / "ziel" / TAG) == ["alpaca.tar"], namen(wurzel / "ziel" / TAG)
|
||||
assert namen(host / "bestaetigt") == [], namen(host / "bestaetigt")
|
||||
|
||||
|
||||
@fall
|
||||
def kein_kommentar_beginnt_mit_s3():
|
||||
# Paket NT (Quorum 4): Die Kommentarzeile ueber SICHERUNG_NACHHOLEN_TAGE begann mit "(S3).", einem
|
||||
@@ -1295,6 +1321,12 @@ MUTANTEN = [
|
||||
" except ZeroDivisionError as abbruch:",
|
||||
["ein_zeitlimit_beim_archiv_laesst_nur_diese_instanz_scheitern",
|
||||
"eine_abgebrochene_uebertragung_hinterlaesst_nichts"]),
|
||||
# Seit der kritischen Pruefung NT, Befund 1: Eine Bestaetigung ohne Host bricht die Sicherung ab.
|
||||
("E739-01 Bestaetigung ohne Host nur fuer die Instanz",
|
||||
' lauf = ssh_lauf(f"sicherung-bestaetigt {name} {summe}", SSH_TIMEOUT_S)',
|
||||
' try:\n lauf = ssh_lauf(f"sicherung-bestaetigt {name} {summe}", SSH_TIMEOUT_S)\n'
|
||||
' except HostNichtErreichbar as abbruch:\n raise RuntimeError(f"nicht bestaetigt ({abbruch})") from None',
|
||||
["eine_bestaetigung_ohne_host_bricht_die_sicherung_ab"]),
|
||||
("Name der Summendatei beim Host egal", ' if treffer is None or treffer.group(2) != f"{name}.tar":',
|
||||
" if treffer is None:", ["eine_summendatei_des_hosts_in_falscher_form_holt_kein_archiv"]),
|
||||
("Grossbuchstaben in der Summe", r'SUMMENZEILE = re.compile(r"([0-9a-f]{64}) (\S+)\n")',
|
||||
|
||||
Reference in new issue
Block a user