package mock import ( "context" "net" "os" "path/filepath" "tera-clone/services/tera-api/internal/domain" "tera-clone/services/tera-api/internal/logservice" "tera-clone/services/tera-api/internal/logstorage" "testing" ) func TestSystemClearInvalidatesAllAPICachesAndPreservesAudit(t *testing.T) { journal, err := logstorage.Open(logstorage.Options{Root: t.TempDir(), Clock: fixedClock}) if err != nil { t.Fatal(err) } dir, err := os.MkdirTemp("", "sys-clear-") if err != nil { t.Fatal(err) } defer os.RemoveAll(dir) socket := filepath.Join(dir, "log.sock") listener, err := net.Listen("unix", socket) if err != nil { t.Fatal(err) } done := make(chan error, 1) go func() { done <- (logservice.Server{Store: journal}).Serve(listener) }() defer func() { listener.Close(); <-done }() options := StoreOptions{LogJournal: logservice.NewClient(socket)} first, err := NewStoreWithOptions(fixedClock, options) if err != nil { t.Fatal(err) } defer first.Close() second, err := NewStoreWithOptions(fixedClock, options) if err != nil { t.Fatal(err) } defer second.Close() ctx := context.Background() if _, err := first.RecordSystemLog(ctx, domain.SystemLogEvent{Category: "system", Severity: "info", Source: "test", Message: "old"}); err != nil { t.Fatal(err) } id, err := first.RecordAudit(ctx, domain.AuditEvent{Action: "auth.login", Target: "login", Result: "failed", Message: "keep"}) if err != nil { t.Fatal(err) } if rows, err := second.SystemLogEvents(ctx, domain.SystemLogFilter{}); err != nil || len(rows) != 2 { t.Fatalf("prime cache=%+v,%v", rows, err) } if result, err := first.ClearSystemLogs(ctx); err != nil || result.Deleted != 1 { t.Fatalf("clear=%+v,%v", result, err) } rows, err := second.SystemLogEvents(ctx, domain.SystemLogFilter{}) if err != nil || len(rows) != 1 || rows[0].AuditID != id || !rows[0].AuditProtected { t.Fatalf("stale cache or lost audit=%+v,%v", rows, err) } if _, err := second.RecordSystemLog(ctx, domain.SystemLogEvent{Category: "system", Severity: "info", Source: "test", Message: "new"}); err != nil { t.Fatal(err) } rows, err = first.SystemLogEvents(ctx, domain.SystemLogFilter{}) if err != nil || len(rows) != 2 { t.Fatalf("new capture=%+v,%v", rows, err) } }