aaa111dd20
Add a context with timeout to handle graceful shutdown of the HTTP server. Update error handling during the server's close to include context-aware shutdown. Ensure that the server properly logs only non-closed errors when listening.
49 lines
895 B
Go
49 lines
895 B
Go
package logging
|
|
|
|
import (
|
|
"bytes"
|
|
"log/slog"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func NewMockLogger() *MockLogger {
|
|
logged := &bytes.Buffer{}
|
|
|
|
return &MockLogger{
|
|
logged: logged,
|
|
logger: slog.New(slog.NewTextHandler(logged, &slog.HandlerOptions{
|
|
ReplaceAttr: func(groups []string, a slog.Attr) slog.Attr {
|
|
if a.Key == "time" {
|
|
return slog.Attr{}
|
|
}
|
|
return a
|
|
},
|
|
})),
|
|
}
|
|
}
|
|
|
|
type MockLogger struct {
|
|
logger *slog.Logger
|
|
logged *bytes.Buffer
|
|
}
|
|
|
|
func (m *MockLogger) Logger() *slog.Logger {
|
|
return m.logger
|
|
}
|
|
|
|
func (m *MockLogger) Check(t testing.TB, wantLogged []string) {
|
|
var gotLogged []string
|
|
if m.logged.String() != "" {
|
|
gotLogged = strings.Split(m.logged.String(), "\n")
|
|
gotLogged = gotLogged[:len(gotLogged)-1]
|
|
}
|
|
if len(wantLogged) == 0 {
|
|
assert.Empty(t, gotLogged)
|
|
return
|
|
}
|
|
assert.Equal(t, wantLogged, gotLogged)
|
|
}
|