mirror of
https://github.com/router-for-me/CLIProxyAPI.git
synced 2026-02-03 04:50:52 +08:00
61 lines
1.3 KiB
Go
61 lines
1.3 KiB
Go
package logging
|
|
|
|
import (
|
|
"errors"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"testing"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
func TestGinLogrusRecoveryRepanicsErrAbortHandler(t *testing.T) {
|
|
gin.SetMode(gin.TestMode)
|
|
|
|
engine := gin.New()
|
|
engine.Use(GinLogrusRecovery())
|
|
engine.GET("/abort", func(c *gin.Context) {
|
|
panic(http.ErrAbortHandler)
|
|
})
|
|
|
|
req := httptest.NewRequest(http.MethodGet, "/abort", nil)
|
|
recorder := httptest.NewRecorder()
|
|
|
|
defer func() {
|
|
recovered := recover()
|
|
if recovered == nil {
|
|
t.Fatalf("expected panic, got nil")
|
|
}
|
|
err, ok := recovered.(error)
|
|
if !ok {
|
|
t.Fatalf("expected error panic, got %T", recovered)
|
|
}
|
|
if !errors.Is(err, http.ErrAbortHandler) {
|
|
t.Fatalf("expected ErrAbortHandler, got %v", err)
|
|
}
|
|
if err != http.ErrAbortHandler {
|
|
t.Fatalf("expected exact ErrAbortHandler sentinel, got %v", err)
|
|
}
|
|
}()
|
|
|
|
engine.ServeHTTP(recorder, req)
|
|
}
|
|
|
|
func TestGinLogrusRecoveryHandlesRegularPanic(t *testing.T) {
|
|
gin.SetMode(gin.TestMode)
|
|
|
|
engine := gin.New()
|
|
engine.Use(GinLogrusRecovery())
|
|
engine.GET("/panic", func(c *gin.Context) {
|
|
panic("boom")
|
|
})
|
|
|
|
req := httptest.NewRequest(http.MethodGet, "/panic", nil)
|
|
recorder := httptest.NewRecorder()
|
|
|
|
engine.ServeHTTP(recorder, req)
|
|
if recorder.Code != http.StatusInternalServerError {
|
|
t.Fatalf("expected 500, got %d", recorder.Code)
|
|
}
|
|
}
|