Files
lazyhandler/middleware/httplog/log_test.go
2025-06-18 10:12:19 +08:00

86 lines
2.2 KiB
Go

package httplog
import (
"bufio"
"bytes"
"log/slog"
"net"
"net/http"
"net/http/httptest"
"testing"
)
type mockHijacker struct {
*httptest.ResponseRecorder
hijacked bool
}
func (m *mockHijacker) Hijack() (net.Conn, *bufio.ReadWriter, error) {
m.hijacked = true
// Return dummy values, not used in this test
return nil, nil, nil
}
func TestResponseRecorder_Hijack(t *testing.T) {
recorder := &responseRecorder{
ResponseWriter: &mockHijacker{ResponseRecorder: httptest.NewRecorder()},
}
_, _, err := recorder.Hijack()
if err != nil {
t.Fatalf("Hijack failed: %v", err)
}
if recorder.ResponseWriter != nil {
t.Error("ResponseWriter should be nil after Hijack")
}
}
func TestLogger(t *testing.T) {
var buf bytes.Buffer
slog.SetDefault(slog.New(slog.NewTextHandler(&buf, nil)))
handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
logger := Logger(r)
logger.Info("test message")
w.WriteHeader(http.StatusOK)
})
t.Run("with middleware", func(t *testing.T) {
buf.Reset()
logMiddleware := Log{LogStart: true, LogFinish: true}
wrappedHandler := logMiddleware.WrapHandler(handler)
req := httptest.NewRequest("GET", "/test", nil)
rr := httptest.NewRecorder()
wrappedHandler.ServeHTTP(rr, req)
if !bytes.Contains(buf.Bytes(), []byte("level=INFO msg=request")) {
t.Error("expected start log message, but not found")
}
if !bytes.Contains(buf.Bytes(), []byte("level=INFO msg=\"test message\"")) {
t.Error("expected handler log message, but not found")
}
if !bytes.Contains(buf.Bytes(), []byte("level=INFO msg=response")) {
t.Error("expected finish log message, but not found")
}
})
t.Run("without middleware", func(t *testing.T) {
buf.Reset()
req := httptest.NewRequest("GET", "/test", nil)
rr := httptest.NewRecorder()
handler.ServeHTTP(rr, req)
if !bytes.Contains(buf.Bytes(), []byte("level=INFO msg=\"test message\"")) {
t.Error("expected handler log message, but not found")
}
if bytes.Contains(buf.Bytes(), []byte("level=INFO msg=request")) {
t.Error("unexpected start log message found")
}
if bytes.Contains(buf.Bytes(), []byte("level=INFO msg=response")) {
t.Error("unexpected finish log message found")
}
})
}