Files
2026-09-21 16:46:55 +08:00

88 lines
2.0 KiB
Go

package logger
import (
"os"
"path/filepath"
"strings"
"testing"
"time"
)
func TestRedactURLToken(t *testing.T) {
raw := "http://ntunnel.example.com/?token=secret-token-value"
got := RedactURL(raw)
if strings.Contains(got, "secret-token-value") {
t.Fatalf("token leaked: %s", got)
}
}
func TestRedactTextPasswordAndToken(t *testing.T) {
in := `login failed password=hunter2 token=abc123 url=https://x.example/?token=zzz`
got := RedactText(in)
for _, secret := range []string{"hunter2", "abc123", "zzz"} {
if strings.Contains(got, secret) {
t.Fatalf("secret %q leaked in %q", secret, got)
}
}
}
func TestParseLevel(t *testing.T) {
if ParseLevel("DEBUG") != LevelDebug {
t.Fatal("debug")
}
if ParseLevel("nope") != LevelInfo {
t.Fatal("default")
}
}
func TestDatedPath(t *testing.T) {
day := time.Date(2026, 9, 21, 15, 0, 0, 0, time.Local)
got := DatedPath(filepath.Join("logs", "tunnel.log"), day)
want := filepath.Join("logs", "tunnel-2026-09-21.log")
if got != want {
t.Fatalf("got %s want %s", got, want)
}
}
func TestDailyRotateAndPurge(t *testing.T) {
dir := t.TempDir()
base := filepath.Join(dir, "tunnel.log")
now := time.Date(2026, 9, 21, 10, 0, 0, 0, time.Local)
keepDay := now.AddDate(0, 0, -3)
dropDay := now.AddDate(0, 0, -8)
keepPath := DatedPath(base, keepDay)
dropPath := DatedPath(base, dropDay)
if err := os.WriteFile(keepPath, []byte("keep\n"), 0o640); err != nil {
t.Fatal(err)
}
if err := os.WriteFile(dropPath, []byte("drop\n"), 0o640); err != nil {
t.Fatal(err)
}
l, err := New(base, "info", false)
if err != nil {
t.Fatal(err)
}
defer l.Close()
l.mu.Lock()
if err := l.rotateLocked(now); err != nil {
l.mu.Unlock()
t.Fatal(err)
}
l.mu.Unlock()
l.Info("hello")
today := DatedPath(base, now)
if _, err := os.Stat(today); err != nil {
t.Fatalf("today log missing: %v", err)
}
if _, err := os.Stat(keepPath); err != nil {
t.Fatalf("recent log should remain: %v", err)
}
if _, err := os.Stat(dropPath); !os.IsNotExist(err) {
t.Fatalf("old log should be purged, err=%v", err)
}
}