Files
minstrel/internal/logging/recent_test.go
T
bvandeusenandClaude Opus 5.5 c1305a547d
release / govulncheck (push) Successful in 17s
release / web (push) Successful in 1m35s
release / go (push) Successful in 2m0s
release / integration (push) Successful in 5m40s
release / android (push) Successful in 6m15s
release / Build signed APK (releases and dev) (push) Successful in 6m30s
release / Attach APK to the Release (tag releases only) (push) Skipped
release / Build + push container image (push) Successful in 25s
release / Verify release artifacts (tag releases only) (push) Skipped
feat: the admin Overview shows who is listening, downloads, the library and its disk, and the server's version, uptime and recent errors; a download waiting on you, a client not answering or a full disk count in its verdict (M504 #5627 #5628 #5629 #5630)
The version moves to internal/buildinfo, so /rest/ping reports the build
instead of "dev".

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 14:51:41 -04:00

50 lines
1.3 KiB
Go

package logging
import (
"bytes"
"log/slog"
"testing"
)
func TestRingHandler_KeepsErrorsNewestFirst(t *testing.T) {
ring := NewErrorRing(3)
var out bytes.Buffer
log := slog.New(newRingHandler(slog.NewTextHandler(&out, nil), ring)).With("component", "scan")
log.Info("fine")
log.Warn("odd")
for _, msg := range []string{"one", "two", "three", "four"} {
log.WithGroup("job").Error(msg, "n", len(msg))
}
got, total := ring.Snapshot()
if total != 4 {
t.Errorf("total = %d, want 4 (info and warn are not errors)", total)
}
if len(got) != 3 {
t.Fatalf("kept %d, want 3", len(got))
}
for i, want := range []string{"four", "three", "two"} {
if got[i].Message != want {
t.Errorf("kept[%d] = %q, want %q", i, got[i].Message, want)
}
}
if got[0].Attrs != "component=scan job.n=4" {
t.Errorf("attrs = %q", got[0].Attrs)
}
// Every record still reaches the log stream.
if n := bytes.Count(out.Bytes(), []byte("\n")); n != 6 {
t.Errorf("log lines = %d, want 6", n)
}
}
func TestErrorRing_BeforeItFills(t *testing.T) {
ring := NewErrorRing(5)
ring.add(LoggedError{Message: "a"})
ring.add(LoggedError{Message: "b"})
got, total := ring.Snapshot()
if total != 2 || len(got) != 2 || got[0].Message != "b" || got[1].Message != "a" {
t.Errorf("got %+v total %d, want b, a", got, total)
}
}