| 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) |
| } |
| } |
|
|