85 lines
2.3 KiB
Go
85 lines
2.3 KiB
Go
package logredact
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestRedactText_JSONLike(t *testing.T) {
|
|
in := `{"access_token":"ya29.a0AfH6SMDUMMY","refresh_token":"1//0gDUMMY","other":"ok"}`
|
|
out := RedactText(in)
|
|
if out == in {
|
|
t.Fatalf("expected redaction, got unchanged")
|
|
}
|
|
if want := `"access_token":"***"`; !strings.Contains(out, want) {
|
|
t.Fatalf("expected %q in %q", want, out)
|
|
}
|
|
if want := `"refresh_token":"***"`; !strings.Contains(out, want) {
|
|
t.Fatalf("expected %q in %q", want, out)
|
|
}
|
|
}
|
|
|
|
func TestRedactText_QueryLike(t *testing.T) {
|
|
in := "access_token=ya29.a0AfH6SMDUMMY refresh_token=1//0gDUMMY"
|
|
out := RedactText(in)
|
|
if strings.Contains(out, "ya29") || strings.Contains(out, "1//0") {
|
|
t.Fatalf("expected tokens redacted, got %q", out)
|
|
}
|
|
}
|
|
|
|
func TestRedactText_GOCSPX(t *testing.T) {
|
|
in := "client_secret=GOCSPX-your-client-secret"
|
|
out := RedactText(in)
|
|
if strings.Contains(out, "your-client-secret") {
|
|
t.Fatalf("expected secret redacted, got %q", out)
|
|
}
|
|
if !strings.Contains(out, "client_secret=***") {
|
|
t.Fatalf("expected key redacted, got %q", out)
|
|
}
|
|
}
|
|
|
|
func TestRedactText_ExtraKeyCacheUsesNormalizedSortedKey(t *testing.T) {
|
|
clearExtraTextPatternCache()
|
|
|
|
out1 := RedactText("custom_secret=abc", "Custom_Secret", " custom_secret ")
|
|
out2 := RedactText("custom_secret=xyz", "custom_secret")
|
|
if !strings.Contains(out1, "custom_secret=***") {
|
|
t.Fatalf("expected custom key redacted in first call, got %q", out1)
|
|
}
|
|
if !strings.Contains(out2, "custom_secret=***") {
|
|
t.Fatalf("expected custom key redacted in second call, got %q", out2)
|
|
}
|
|
|
|
if got := countExtraTextPatternCacheEntries(); got != 1 {
|
|
t.Fatalf("expected 1 cached pattern set, got %d", got)
|
|
}
|
|
}
|
|
|
|
func TestRedactText_DefaultPathDoesNotUseExtraCache(t *testing.T) {
|
|
clearExtraTextPatternCache()
|
|
|
|
out := RedactText("access_token=abc")
|
|
if !strings.Contains(out, "access_token=***") {
|
|
t.Fatalf("expected default key redacted, got %q", out)
|
|
}
|
|
if got := countExtraTextPatternCacheEntries(); got != 0 {
|
|
t.Fatalf("expected extra cache to remain empty, got %d", got)
|
|
}
|
|
}
|
|
|
|
func clearExtraTextPatternCache() {
|
|
extraTextPatternCache.Range(func(key, value any) bool {
|
|
extraTextPatternCache.Delete(key)
|
|
return true
|
|
})
|
|
}
|
|
|
|
func countExtraTextPatternCacheEntries() int {
|
|
count := 0
|
|
extraTextPatternCache.Range(func(key, value any) bool {
|
|
count++
|
|
return true
|
|
})
|
|
return count
|
|
}
|