88 lines
2.0 KiB
Go
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)
|
|
}
|
|
}
|