Files
ai-ops/internal/middleware/logging_recovery_test.go
2026-05-12 17:48:22 +08:00

42 lines
1.2 KiB
Go

package middleware
import (
"net/http"
"net/http/httptest"
"testing"
)
func TestLoggingCapturesStatusCode(t *testing.T) {
h := Logging(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusCreated)
_, _ = w.Write([]byte("created"))
}))
w := httptest.NewRecorder()
h.ServeHTTP(w, httptest.NewRequest(http.MethodPost, "/x", nil))
if w.Code != http.StatusCreated || w.Body.String() != "created" {
t.Fatalf("response = %d %q", w.Code, w.Body.String())
}
}
func TestRecoveryConvertsPanicToInternalError(t *testing.T) {
h := Recovery(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
panic("boom")
}))
w := httptest.NewRecorder()
h.ServeHTTP(w, httptest.NewRequest(http.MethodGet, "/panic", nil))
if w.Code != http.StatusInternalServerError {
t.Fatalf("status = %d body=%s", w.Code, w.Body.String())
}
}
func TestRecoveryPassesThroughNormalRequest(t *testing.T) {
h := Recovery(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusAccepted)
}))
w := httptest.NewRecorder()
h.ServeHTTP(w, httptest.NewRequest(http.MethodGet, "/ok", nil))
if w.Code != http.StatusAccepted {
t.Fatalf("status = %d", w.Code)
}
}