Add monthly offsite restore tests and automatic cleanup

This commit is contained in:
admin committed 2026-09-12 19:47:32 +02:00
1 parent 64eab1d3c2
commit f0c761213d
18 files changed
+1386 -16

No files matched your search

+23 -1
View File
@@ -553,9 +553,31 @@ Die Entfernung der drei DB-Dateien aus dem aktuellen Baum löscht deren Historie
## Prüfung und Abnahme
### Monatliche automatisierte Restore-Probe
Die neue [Restore-Test-Betriebsanleitung](RESTORE_TEST.md) beschreibt den
vollständigen Offsite-Test mit isoliertem MariaDB-Import. Ein neuer Scheduler
verwendet die gemeinsame Backup-/Restore-/Update-Sperre. Archive werden einzeln
geprüft und entpackt; komprimierte Eingaben werden vor DB-Imports entfernt.
Temporäre Dateien und DB-Container werden bei Erfolg, Fehler und Abbruch
bereinigt; systemd und eine Boot-Einheit übernehmen die Nachbereinigung.
Die Defaults von 4 GiB Arbeitsbudget und 2 GiB freier Reserve sind an den
tatsächlichen Platz und die größte Komponente anzupassen. Die Überwachung ist
keine harte Dateisystemquote. Ein nicht passender Sicherungssatz führt zu FAIL,
nicht zu einer unbemerkten Teilprüfung. Protokolle und Berichte bleiben klein;
ein vorab bereitgestelltes DB-Image bleibt als Abhängigkeit installiert.
Der Test ergänzt die bisherige technische Archivprüfung um tatsächliches
Entpacken und DB-Import mit Tabellenprüfung. Fachliche Anwendungswiederherstellung
auf einer isolierten VM und unabhängige Überwachung des letzten Erfolgs bleiben
separate Abnahmen. Aktivierung und Prüfung auf Gemini erfolgen nach Installation.
### Entwicklungstests
Reproduzierbar mit `tests/Dockerfile` und `tests/run.sh`. Der Container bekommt das Repository nur lesbar und benötigt während der Tests kein Netzwerk. Die MariaDB läuft ohne TCP-Port in einem temporären Verzeichnis. systemd/occ werden simuliert; alle eigentlichen Archive, Dateikopien, Dumps/Imports und Crypt-Operationen sind real.
Verifikation am 12.09.2026: **68 Testfälle abgedeckt**. Im Gesamtlauf (741,0 Sekunden) bestanden 63 Fälle direkt. Fünf Mail-Testprüfungen erwarteten LF statt der korrekten SMTP-Zeilenumbrüche CRLF; nach Korrektur dieser Prüfungen bestanden alle 13 gezielt wiederholten Mail-/Installertests (155,9 Sekunden), einschließlich der fünf betroffenen Fälle. Geprüft sind Hostname-Override bei Erfolg und Fehler, leerer/fehlender Wert, unveränderter Absender, Header-Schutz und Paketupdate mit erhaltener Einstellung. Shell-Syntax und ShellCheck ohne Befund. Testumgebung: Debian 13.6, MariaDB 11.8.6, rclone 1.60.1-DEV (Distributionspaket), ShellCheck 0.10.0. Diese Versionsangaben beschreiben die Testumgebung, keine Empfehlung für die Produktivversion. Der MTA wird durch eine lokale Nachrichten-Attrappe ersetzt; es wurden keine echten E-Mails versendet. Die Zustellung auf Gemini ist nach Installation zu prüfen.
Verifikation am 12.09.2026: **Standardlauf erfolgreich** (81 Fälle, davon 80 erfolgreich und ein separater Docker-Test planmäßig übersprungen; 704,8 Sekunden). Zusätzlich bestanden alle **19 gezielten Restore-Tests** mit echten DB-Containern und der Paketupdate-/Rollback-Test mit aktiviertem Restore-Timer. Die gezielten Tests prüfen insbesondere Platzgrenzen, ungültiges SQL, SIGTERM, SIGKILL, defekte Statusdateien, einen unerreichbaren Docker-Daemon und anschließende vollständige Bereinigung. Shell-Syntax, ShellCheck und systemd-Unit-Prüfung ohne Befund. Basis-Testumgebung: Debian 13.6, MariaDB 11.8.6, rclone 1.60.1-DEV und ShellCheck 0.10.0. Test-Mails werden nur lokal erfasst. Die tatsächliche Rocky-/OneDrive-/MTA-Abnahme des neuen Monatslaufs auf Gemini steht nach Installation noch aus.
Die Regressionstests für `RCLONE_SIZE_ONLY` und zusätzliche Marker-Zeilenumbrüche scheiterten vor den jeweiligen Korrekturen mit einem fälschlich erfolgreichen Backup und bestanden danach. Upload-/Markerfehler werden an den Befehlsgrenzen injiziert, während Crypt-Übertragung und Inhaltsvergleich real bleiben. Die Tests bilden keine OneDrive-API nach; das tatsächliche HTTP-409-Wiederholungsverhalten ist durch den Betreiberlauf und den rclone-1.74.3-Quellcode separat belegt.