internal/restoretest wiederholt BAK-03s eigene Pruefdiskt als Produktcode: echter Restore der neuesten Sicherung, echter Kurzstart einer isolierten Postgres-Instanz, echte SELECT-1-Abfrage; Objekt-Seite echter restic-Restore + Inhaltspruefung. JSONL-Historie (append-only), sichtbare Warnung ueber denselben OPS-05-Pull-Weg wie BAK-08, eigenes /metrics-Modul (archive-restoretest). Zwei reale Defekte gefunden und behoben: Unix-Socket-Pfadlaenge unter tief verschachtelten Testpfaden, restic-stderr-Vermischung beim JSON-Parsen unter dem Dienstnutzer. Real auf 131 verdrahtet und ausgeloest (beide Testarten erfolgreich, End-zu-Ende ueber OPS-03 bestaetigt).
50 lines
1.6 KiB
Go
50 lines
1.6 KiB
Go
package restoretest
|
|
|
|
import (
|
|
"path/filepath"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
// TestHistory_ShowsMultiplePastRunsInOrder ist Pruefung 3: Protokoll-
|
|
// historie zeigt mehrere zurueckliegende Testlaeufe nachvollziehbar an.
|
|
func TestHistory_ShowsMultiplePastRunsInOrder(t *testing.T) {
|
|
logPath := filepath.Join(t.TempDir(), "restoretest.log")
|
|
|
|
results := []Result{
|
|
{Timestamp: time.Now().UTC(), Kind: KindDatabase, Source: "gen-1", Success: true, Detail: "ok"},
|
|
{Timestamp: time.Now().UTC().Add(time.Hour), Kind: KindObjects, Source: "snap-1", Success: false, Detail: "kaputt"},
|
|
{Timestamp: time.Now().UTC().Add(2 * time.Hour), Kind: KindDatabase, Source: "gen-2", Success: true, Detail: "ok"},
|
|
}
|
|
for _, r := range results {
|
|
if err := AppendHistory(logPath, r); err != nil {
|
|
t.Fatalf("appendHistory: %v", err)
|
|
}
|
|
}
|
|
|
|
got, err := ReadHistory(logPath)
|
|
if err != nil {
|
|
t.Fatalf("readHistory: %v", err)
|
|
}
|
|
if len(got) != len(results) {
|
|
t.Fatalf("erwartet %d eintraege, habe %d", len(results), len(got))
|
|
}
|
|
for i, want := range results {
|
|
if got[i].Source != want.Source || got[i].Success != want.Success || got[i].Kind != want.Kind {
|
|
t.Fatalf("eintrag %d = %+v, want %+v", i, got[i], want)
|
|
}
|
|
}
|
|
}
|
|
|
|
// TestReadHistory_MissingFileReturnsEmpty - noch kein Testlauf ist kein
|
|
// Fehlerzustand.
|
|
func TestReadHistory_MissingFileReturnsEmpty(t *testing.T) {
|
|
got, err := ReadHistory(filepath.Join(t.TempDir(), "nicht-vorhanden.log"))
|
|
if err != nil {
|
|
t.Fatalf("erwartet keinen fehler, habe: %v", err)
|
|
}
|
|
if len(got) != 0 {
|
|
t.Fatalf("erwartet leere historie, habe %d eintraege", len(got))
|
|
}
|
|
}
|