mirror of
https://github.com/truewhile/MeBox.git
synced 2026-09-28 11:16:37 +08:00
53 lines
1.7 KiB
Go
53 lines
1.7 KiB
Go
package service
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestRedactSensitiveURL(t *testing.T) {
|
|
raw := "https://user:secret@media.example/emby/Items/1/Images/primary?api_key=abc123&X-Emby-Token=xyz&X-Amz-Signature=sig123&quality=90"
|
|
got := redactSensitiveURL(raw)
|
|
for _, secret := range []string{"secret", "abc123", "xyz", "sig123"} {
|
|
if strings.Contains(got, secret) {
|
|
t.Fatalf("redacted URL still contains %q: %s", secret, got)
|
|
}
|
|
}
|
|
if !strings.Contains(got, "quality=90") {
|
|
t.Fatalf("non-sensitive query value was removed: %s", got)
|
|
}
|
|
}
|
|
|
|
func TestRedactSensitiveTextCoversJSONAndHeaders(t *testing.T) {
|
|
raw := `{"AccessToken":"json-token","quality":"90"} Authorization: Bearer bearer-token; X-Emby-Token=header-token`
|
|
got := redactSensitiveText(raw)
|
|
for _, secret := range []string{"json-token", "bearer-token", "header-token"} {
|
|
if strings.Contains(got, secret) {
|
|
t.Fatalf("redacted text still contains %q: %s", secret, got)
|
|
}
|
|
}
|
|
if !strings.Contains(got, `"quality":"90"`) {
|
|
t.Fatalf("non-sensitive JSON value was removed: %s", got)
|
|
}
|
|
}
|
|
|
|
func TestRedactSensitiveErrorPreservesWrapping(t *testing.T) {
|
|
base := errors.New(`Get "https://media.example/item?token=secret&quality=90": context canceled`)
|
|
err := redactSensitiveError(context.Canceled)
|
|
if !errors.Is(err, context.Canceled) {
|
|
t.Fatal("redacted error lost context.Canceled")
|
|
}
|
|
if strings.Contains(err.Error(), "secret") {
|
|
t.Fatalf("redacted error leaked token: %s", err.Error())
|
|
}
|
|
redactedBase := redactSensitiveError(base)
|
|
if strings.Contains(redactedBase.Error(), "secret") {
|
|
t.Fatalf("redacted base error leaked token: %s", redactedBase.Error())
|
|
}
|
|
if !errors.Is(redactedBase, base) {
|
|
t.Fatal("redacted error lost original error identity")
|
|
}
|
|
}
|