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
|
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
|
(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).
|
abgelaufenes Zeitlimit heissen: Der Docker-Host ist nicht erreichbar (HostNichtErreichbar).
|
||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
|
|||||||
@@ -1155,6 +1155,32 @@ def ein_zeitlimit_beim_archiv_laesst_nur_diese_instanz_scheitern():
|
|||||||
assert "Docker-Host nicht erreichbar" not in zeile, zeile
|
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
|
@fall
|
||||||
def kein_kommentar_beginnt_mit_s3():
|
def kein_kommentar_beginnt_mit_s3():
|
||||||
# Paket NT (Quorum 4): Die Kommentarzeile ueber SICHERUNG_NACHHOLEN_TAGE begann mit "(S3).", einem
|
# Paket NT (Quorum 4): Die Kommentarzeile ueber SICHERUNG_NACHHOLEN_TAGE begann mit "(S3).", einem
|
||||||
@@ -1295,6 +1321,12 @@ MUTANTEN = [
|
|||||||
" except ZeroDivisionError as abbruch:",
|
" except ZeroDivisionError as abbruch:",
|
||||||
["ein_zeitlimit_beim_archiv_laesst_nur_diese_instanz_scheitern",
|
["ein_zeitlimit_beim_archiv_laesst_nur_diese_instanz_scheitern",
|
||||||
"eine_abgebrochene_uebertragung_hinterlaesst_nichts"]),
|
"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":',
|
("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"]),
|
" 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")',
|
("Grossbuchstaben in der Summe", r'SUMMENZEILE = re.compile(r"([0-9a-f]{64}) (\S+)\n")',
|
||||||
|
|||||||
Reference in new issue
Block a user