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
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>
50 lines
1.3 KiB
Go
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)
|
|
}
|
|
}
|