2026-07-29 15:26:40 +12:00
|
|
|
package logging
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"bytes"
|
|
|
|
|
"log/slog"
|
|
|
|
|
"strings"
|
|
|
|
|
"testing"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
func TestNewWritesReadableStructuredText(t *testing.T) {
|
|
|
|
|
var output bytes.Buffer
|
|
|
|
|
New(&output, slog.LevelInfo).Info("server ready", "listen", ":8080")
|
|
|
|
|
|
|
|
|
|
line := output.String()
|
|
|
|
|
if strings.HasPrefix(strings.TrimSpace(line), "{") {
|
|
|
|
|
t.Fatalf("expected text output, got JSON: %s", line)
|
|
|
|
|
}
|
|
|
|
|
for _, want := range []string{`level=INFO`, `msg="server ready"`, `listen=:8080`} {
|
|
|
|
|
if !strings.Contains(line, want) {
|
|
|
|
|
t.Errorf("output %q does not contain %q", line, want)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func TestBufferedLoggerRetainsStructuredEventsWithCursorPagination(t *testing.T) {
|
|
|
|
|
var output bytes.Buffer
|
|
|
|
|
logger, buffer := NewBuffered(&output, slog.LevelDebug, 3)
|
|
|
|
|
for i := 1; i <= 5; i++ {
|
|
|
|
|
logger.Info("request complete", "number", i)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
first := buffer.Events(0, 2)
|
|
|
|
|
if first.Dropped != 2 || len(first.Events) != 2 || !first.HasMore {
|
|
|
|
|
t.Fatalf("unexpected first page: %+v", first)
|
|
|
|
|
}
|
|
|
|
|
if first.Events[0].Sequence != 3 || first.Events[0].Attributes["number"] != "3" {
|
|
|
|
|
t.Fatalf("oldest retained event was not delivered: %+v", first.Events[0])
|
|
|
|
|
}
|
|
|
|
|
second := buffer.Events(first.Next, 2)
|
|
|
|
|
if len(second.Events) != 1 || second.Events[0].Sequence != 5 || second.HasMore {
|
|
|
|
|
t.Fatalf("unexpected second page: %+v", second)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func TestParseLevel(t *testing.T) {
|
|
|
|
|
tests := map[string]slog.Level{
|
|
|
|
|
"": slog.LevelInfo,
|
|
|
|
|
"debug": slog.LevelDebug,
|
|
|
|
|
"WARNING": slog.LevelWarn,
|
|
|
|
|
"error": slog.LevelError,
|
|
|
|
|
"unknown": slog.LevelInfo,
|
|
|
|
|
}
|
|
|
|
|
for input, want := range tests {
|
|
|
|
|
if got := ParseLevel(input); got != want {
|
|
|
|
|
t.Errorf("ParseLevel(%q) = %v, want %v", input, got, want)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2026-08-02 22:10:19 +12:00
|
|
|
|
|
|
|
|
func TestParseCapacity(t *testing.T) {
|
|
|
|
|
if got := ParseCapacity("1000", 5); got != 1000 {
|
|
|
|
|
t.Fatalf("capacity = %d", got)
|
|
|
|
|
}
|
|
|
|
|
if got := ParseCapacity("-1", 5); got != 5 {
|
|
|
|
|
t.Fatalf("negative capacity = %d", got)
|
|
|
|
|
}
|
|
|
|
|
}
|