package debugtrace import ( "context" "encoding/json" "strings" "testing" ) func TestLoggerWritesTraceAndRedactsSecrets(t *testing.T) { l, err := New(Config{Enabled: true, Dir: t.TempDir(), MaxBytes: 1 << 20, KeepFiles: 2, MaxString: 1000}) if err != nil { t.Fatal(err) } ctx := WithTrace(context.Background(), "trace_test") l.Record(ctx, "planner", "request", "input", "info", map[string]any{"message": "Montag Nudeln", "authorization": "Bearer secret", "enrollment_token": "mesh-bootstrap-secret", "access_token": "worker-session-secret"}, nil, 0) evs, err := l.Events(10) if err != nil { t.Fatal(err) } if len(evs) != 1 { t.Fatalf("events=%d", len(evs)) } var ev Event if err := json.Unmarshal(evs[0], &ev); err != nil { t.Fatal(err) } if ev.TraceID != "trace_test" || ev.Component != "planner" || ev.Stage != "request" { t.Fatalf("event=%+v", ev) } b, _ := json.Marshal(ev.Data) s := string(b) if strings.Contains(s, "Bearer secret") || strings.Contains(s, "mesh-bootstrap-secret") || strings.Contains(s, "worker-session-secret") || !strings.Contains(s, "REDACTED") { t.Fatalf("secret not redacted: %s", s) } if !strings.Contains(s, "Montag Nudeln") { t.Fatalf("message missing: %s", s) } } func TestLoggerClear(t *testing.T) { l, err := New(Config{Enabled: true, Dir: t.TempDir()}) if err != nil { t.Fatal(err) } l.Record(WithTrace(context.Background(), "x"), "http", "request", "input", "info", map[string]any{"a": 1}, nil, 0) if err := l.Clear(); err != nil { t.Fatal(err) } evs, err := l.Events(10) if err != nil { t.Fatal(err) } if len(evs) != 0 { t.Fatalf("events=%d", len(evs)) } }