(new): sneklog v2
Golang lint / lint (push) Successful in 1m39s

This commit is contained in:
2026-04-27 10:23:54 +03:00
parent 3aee299869
commit a34734366d
23 changed files with 245 additions and 185 deletions
+48 -22
View File
@@ -13,7 +13,7 @@ import (
"time"
"git.scuroneko.dev/scuroneko/laniakea/tgapi"
"git.scuroneko.dev/scuroneko/slog"
"git.scuroneko.dev/scuroneko/sneklog/v2"
)
type pollingRoundTripFunc func(*http.Request) (*http.Response, error)
@@ -59,7 +59,7 @@ func TestGetUpdateTypesReturnsCopy(t *testing.T) {
}
func TestAddPluginsSnapshotsConfiguration(t *testing.T) {
bot := &Bot[NoData]{logger: slog.CreateLogger()}
bot := &Bot[NoData]{logger: sneklog.CreateLogger()}
plugin := NewPlugin[NoData]("demo")
cmd := plugin.NewCommand(func(ctx *MsgContext, db NoData) error { return nil }, "start")
@@ -100,7 +100,7 @@ func TestBotPayloadTypeConfiguration(t *testing.T) {
}
func TestAddPluginsSkipsNilPlugin(t *testing.T) {
bot := &Bot[NoData]{logger: slog.CreateLogger()}
bot := &Bot[NoData]{logger: sneklog.CreateLogger()}
plugin := NewPlugin[NoData]("demo")
bot.AddPlugins(nil, plugin)
@@ -126,10 +126,10 @@ func TestInitLoggersFallsBackToStdoutLoggerOnFileError(t *testing.T) {
if bot.logger == nil {
t.Fatal("expected main logger fallback")
}
if bot.RequestLogger == nil {
if bot.requestLogger == nil {
t.Fatal("expected request logger fallback")
}
if err := bot.RequestLogger.Close(); err != nil {
if err := bot.requestLogger.Close(); err != nil {
t.Fatalf("failed to close request logger: %v", err)
}
if err := bot.logger.Close(); err != nil {
@@ -177,11 +177,11 @@ func TestInitLoggersAppliesTokenReplacerToFileLoggers(t *testing.T) {
bot.uploader.GetLogger().AddWriter(bot.uploader.GetLogger().CreateTextWriter(uploaderFile))
bot.logger.Infoln("main secret-token")
bot.RequestLogger.Infoln("request secret-token")
bot.requestLogger.Infoln("request secret-token")
bot.api.GetLogger().Infoln("api secret-token")
bot.uploader.GetLogger().Infoln("uploader secret-token")
if err := bot.RequestLogger.Close(); err != nil {
if err := bot.requestLogger.Close(); err != nil {
t.Fatalf("failed to close request logger: %v", err)
}
if err := bot.logger.Close(); err != nil {
@@ -226,7 +226,7 @@ func TestInitLoggersAppliesTokenReplacerToFileLoggers(t *testing.T) {
func TestAddPluginsAppliesTokenReplacerToPluginLogger(t *testing.T) {
bot := &Bot[NoData]{
token: "secret-token",
logger: slog.CreateLogger(),
logger: sneklog.CreateLogger(),
}
defer func() { _ = bot.logger.Close() }()
@@ -276,10 +276,10 @@ func TestNextPollRetryDelay(t *testing.T) {
}
func TestAddDatabaseLoggerWriterSkipsWhenAppDataIsUnset(t *testing.T) {
bot := &Bot[NoData]{logger: slog.CreateLogger()}
bot := &Bot[NoData]{logger: sneklog.CreateLogger()}
called := false
bot.AddAppDataLoggerWriter(func(db NoData) slog.LoggerWriter {
bot.AddAppDataLoggerWriter(func(db NoData) sneklog.LoggerWriter {
called = true
return nil
})
@@ -292,12 +292,12 @@ func TestAddDatabaseLoggerWriterSkipsWhenAppDataIsUnset(t *testing.T) {
func TestAddDatabaseLoggerWriterSkipsWhenAppDataIsNil(t *testing.T) {
type testDB struct{}
bot := &Bot[*testDB]{logger: slog.CreateLogger()}
bot := &Bot[*testDB]{logger: sneklog.CreateLogger()}
var db *testDB
bot.SetAppData(db)
called := false
bot.AddAppDataLoggerWriter(func(db *testDB) slog.LoggerWriter {
bot.AddAppDataLoggerWriter(func(db *testDB) sneklog.LoggerWriter {
called = true
return nil
})
@@ -336,13 +336,13 @@ func TestShouldWarnOnValueAppData(t *testing.T) {
func TestSetAppDataMarksValueWarningOnce(t *testing.T) {
type testDB struct{}
bot := &Bot[testDB]{logger: slog.CreateLogger()}
bot := &Bot[testDB]{logger: sneklog.CreateLogger()}
bot.SetAppData(testDB{})
if !bot.warnedValueData {
t.Fatal("expected value-typed app data to mark warning state")
}
ptrBot := &Bot[*testDB]{logger: slog.CreateLogger()}
ptrBot := &Bot[*testDB]{logger: sneklog.CreateLogger()}
ptrBot.SetAppData(&testDB{})
if ptrBot.warnedValueData {
t.Fatal("did not expect pointer-typed app data to mark warning state")
@@ -350,7 +350,7 @@ func TestSetAppDataMarksValueWarningOnce(t *testing.T) {
}
func TestSetObserverAndGetObserver(t *testing.T) {
bot := &Bot[NoData]{logger: slog.CreateLogger()}
bot := &Bot[NoData]{logger: sneklog.CreateLogger()}
observer := testObserver{}
if got := bot.GetObserver(); got != nil {
@@ -364,7 +364,7 @@ func TestSetObserverAndGetObserver(t *testing.T) {
}
func TestSetObserverNilClearsObserver(t *testing.T) {
bot := &Bot[NoData]{logger: slog.CreateLogger()}
bot := &Bot[NoData]{logger: sneklog.CreateLogger()}
bot.SetObserver(testObserver{})
if bot.GetObserver() == nil {
@@ -382,7 +382,7 @@ func TestRunWithContextRejectsSecondRun(t *testing.T) {
cancel()
bot := &Bot[NoData]{
logger: slog.CreateLogger(),
logger: sneklog.CreateLogger(),
prefixes: []string{"/"},
plugins: []Plugin[NoData]{{name: "demo"}},
updateQueue: make(chan *tgapi.Update, 1),
@@ -397,6 +397,32 @@ func TestRunWithContextRejectsSecondRun(t *testing.T) {
}
}
func TestRunWithContextKeepsEnabledRequestLogger(t *testing.T) {
ctx, cancel := context.WithCancel(context.Background())
cancel()
requestLogger := sneklog.CreateLogger()
bot := &Bot[NoData]{
logger: sneklog.CreateLogger(),
requestLogger: requestLogger,
useReqLogger: true,
prefixes: []string{"/"},
plugins: []Plugin[NoData]{{name: "demo"}},
updateQueue: make(chan *tgapi.Update, 1),
maxWorkers: 1,
}
t.Cleanup(func() {
_ = bot.Close()
})
if err := bot.RunWithContext(ctx); err != nil {
t.Fatalf("RunWithContext returned error: %v", err)
}
if got := bot.GetRequestLogger(); got != requestLogger {
t.Fatalf("expected enabled request logger to be preserved, got %#v", got)
}
}
func TestCloseDoesNotDeleteWebhook(t *testing.T) {
requests := 0
client := &http.Client{
@@ -418,8 +444,8 @@ func TestCloseDoesNotDeleteWebhook(t *testing.T) {
uploader := tgapi.NewUploader(api)
bot := &Bot[NoData]{
logger: slog.CreateLogger(),
webHookLogger: slog.CreateLogger(),
logger: sneklog.CreateLogger(),
webHookLogger: sneklog.CreateLogger(),
api: api,
uploader: uploader,
}
@@ -457,7 +483,7 @@ func TestRunWithContextEmitsPollingRetryAndErrorEvents(t *testing.T) {
}()
bot := &Bot[NoData]{
logger: slog.CreateLogger(),
logger: sneklog.CreateLogger(),
api: api,
prefixes: []string{"/"},
plugins: []Plugin[NoData]{{name: "demo"}},
@@ -489,7 +515,7 @@ func TestBotConfigurationFreezesAfterRunStarts(t *testing.T) {
makeBot := func() *Bot[*testDB] {
return &Bot[*testDB]{
logger: slog.CreateLogger(),
logger: sneklog.CreateLogger(),
prefixes: []string{"/"},
updateTypes: []tgapi.UpdateType{tgapi.UpdateTypeMessage},
payloadType: BotPayloadBase64,
@@ -681,7 +707,7 @@ func TestBotConfigurationFreezesAfterRunStarts(t *testing.T) {
func TestAddPluginsAndRuntimeRegistrationsNoOpAfterRunStarts(t *testing.T) {
bot := &Bot[NoData]{
logger: slog.CreateLogger(),
logger: sneklog.CreateLogger(),
prefixes: []string{"/"},
middlewares: []Middleware[NoData]{NewMiddleware("base", func(ctx *MsgContext, db NoData) bool { return true })},
runners: []Runner[NoData]{NewRunner("base", func(bot *Bot[NoData]) error { return nil })},