86 lines
2.2 KiB
Go
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")
|
|
}
|
|
})
|
|
}
|