package runtimelogs import ( "context" "os" "path/filepath" "testing" "evobgp/internal/store" ) func TestEstimateAndRunAutoCleanup(t *testing.T) { dir := t.TempDir() small := filepath.Join(dir, "small.log") large := filepath.Join(dir, "large.log") if err := os.WriteFile(small, []byte("x"), 0o644); err != nil { t.Fatal(err) } payload := make([]byte, 2*1024*1024) if err := os.WriteFile(large, payload, 0o644); err != nil { t.Fatal(err) } svc := NewService(Config{RootDir: dir, ServiceName: ServiceNameAll}) policy := AutoPolicy{ Enabled: true, MaxFileBytes: 1024 * 1024, Mode: store.RuntimeLogCleanupTruncate, } est, err := EstimateAutoCleanup(svc, policy) if err != nil { t.Fatal(err) } if len(est) != 2 { t.Fatalf("estimates=%d", len(est)) } var would int for _, e := range est { if e.WouldCleanup { would++ if e.Filename != "large.log" { t.Fatalf("unexpected cleanup target %q", e.Filename) } } } if would != 1 { t.Fatalf("would=%d", would) } mem := store.NewMemory() tenant := "tenant-a" result, err := RunAutoCleanup(context.Background(), AutoCleanupDeps{ Service: svc, Store: mem, TenantID: tenant, }, policy, false, "test") if err != nil { t.Fatal(err) } if result["cleaned_count"] != 1 { t.Fatalf("cleaned=%v", result["cleaned_count"]) } st, err := os.Stat(large) if err != nil { t.Fatal(err) } if st.Size() != 0 { t.Fatalf("expected truncated large.log, size=%d", st.Size()) } items, _, _, err := mem.ListRuntimeLogCleanupAudit(tenant, "", 10) if err != nil { t.Fatal(err) } if len(items) != 1 { t.Fatalf("audit rows=%d", len(items)) } if items[0].ActorPrefix != autoSchedulerActor { t.Fatalf("actor=%q", items[0].ActorPrefix) } }