Files
jarvis-home/internal/debugtrace/logger_test.go
2026-08-29 17:02:35 +02:00

58 lines
1.6 KiB
Go

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))
}
}