Something went wrong. Try again.
An ATProto Powered Reputation Network
Something went wrong. Try again.
2.6 kB · 81 lines
Go
at master
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182package logging
import ( "bytes" "context" "encoding/json" "errors" "fmt" "log/slog" "strings" "testing"
"provenance/internal/domain")
func TestErrorRedaction(t *testing.T) { var output bytes.Buffer const key = "test-key-with/special+characters" logger := New(&output, slog.LevelDebug, "appview", []string{key}) err := domain.FailIndex(domain.IndexUpstream, fmt.Errorf("getBlock: %w", errors.New(`HTTP 503 https://user:password@archive.example/getBlock?token=query-secret#fragment Bearer bearer-secret access_token=token-secret `+key))) logger.Error("replay failed", "error", err, "api_key", key) logger.Error("replay failed", "error", Error(err)) for _, secret := range []string{key, "query-secret", "bearer-secret", "token-secret", "password@", "#fragment"} { if strings.Contains(output.String(), secret) { t.Fatalf("log exposed %s", secret) } } for _, detail := range []string{"HTTP 503", "archive.example/getBlock", "getBlock", "domain.IndexError", "appview"} { if !strings.Contains(output.String(), detail) { t.Errorf("missing error detail: %s", detail) } } decoder := json.NewDecoder(&output) for range 2 { var record map[string]any if err := decoder.Decode(&record); err != nil { t.Fatal(err) } if _, ok := record["error"].(map[string]any); !ok { t.Fatal("error lacks structured context") } }}
func TestLogLevel(t *testing.T) { var output bytes.Buffer logger := New(&output, slog.LevelInfo, "appview", nil) logger.Debug("batch committed") logger.Info("replay complete") if strings.Contains(output.String(), "batch committed") || !strings.Contains(output.String(), "replay complete") { t.Fatal("log level filter failed") }}
func TestSetupLevel(t *testing.T) { previous := slog.Default() t.Cleanup(func() { slog.SetDefault(previous) }) for _, level := range []string{"debug", "info", "warn", "error"} { t.Setenv("PROVENANCE_LOG_LEVEL", level) if err := Setup("appview"); err != nil { t.Fatal(err) } if slog.Default().Enabled(context.Background(), slog.LevelDebug) != (level == "debug") { t.Fatalf("incorrect level: %s", level) } } t.Setenv("PROVENANCE_LOG_LEVEL", "invalid") if err := Setup("appview"); err == nil { t.Fatal("invalid log level accepted") }}
func TestFieldLimit(t *testing.T) { var output bytes.Buffer const key = "secret-value" logger := New(&output, slog.LevelInfo, "appview", []string{key}) logger.Error("replay failed", "error", errors.New(strings.Repeat("x", maxFieldBytes-3)+key)) if strings.Contains(output.String(), "sec") { t.Fatal("field truncation exposed part of a secret") }}