bt: filter anacrolix logs to errors so warnings don't corrupt the readout
webseed/peer/tracker warnings (the 403/429 chatter) go through slog, the rest through the legacy analog logger; both default to Warning, which interleaves with and corrupts the live progress block. Filter both to Error and above so only genuine errors reach stderr. quietSlogger is a small testable helper; anacrolix/log becomes a direct dependency.
This commit is contained in:
@@ -1,10 +1,38 @@
|
||||
package bt
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"context"
|
||||
"log/slog"
|
||||
"reflect"
|
||||
"strings"
|
||||
"testing"
|
||||
)
|
||||
|
||||
// TestQuietSloggerDropsWarnings: the library's warning chatter (the webseed
|
||||
// 403/429 noise) is filtered out so it can't corrupt the live display, while a
|
||||
// genuine error still gets through.
|
||||
func TestQuietSloggerDropsWarnings(t *testing.T) {
|
||||
var buf bytes.Buffer
|
||||
lg := quietSlogger(&buf)
|
||||
|
||||
lg.Warn("webseed request error", "err", "429 Too Many Requests")
|
||||
if buf.Len() != 0 {
|
||||
t.Errorf("warning leaked into output: %q", buf.String())
|
||||
}
|
||||
// anacrolix's webseed code logs via Log(ctx, level, ...); confirm that path is
|
||||
// filtered too, not just the Warn helper.
|
||||
lg.Log(context.Background(), slog.LevelWarn, "another warning")
|
||||
if buf.Len() != 0 {
|
||||
t.Errorf("Log-at-Warn leaked: %q", buf.String())
|
||||
}
|
||||
|
||||
lg.Error("real failure")
|
||||
if !strings.Contains(buf.String(), "real failure") {
|
||||
t.Errorf("error was suppressed, want it kept: %q", buf.String())
|
||||
}
|
||||
}
|
||||
|
||||
func TestParsePorts(t *testing.T) {
|
||||
tests := []struct {
|
||||
spec string
|
||||
|
||||
Reference in New Issue
Block a user