File tree Expand file tree Collapse file tree 2 files changed +33
-0
lines changed Expand file tree Collapse file tree 2 files changed +33
-0
lines changed Original file line number Diff line number Diff line change @@ -2,6 +2,7 @@ package middleware
22
33import (
44"fmt"
5+ "net/http"
56"runtime"
67
78"github.com/labstack/echo/v4"
@@ -77,6 +78,9 @@ func RecoverWithConfig(config RecoverConfig) echo.MiddlewareFunc {
7778
7879defer func () {
7980if r := recover (); r != nil {
81+ if r == http .ErrAbortHandler {
82+ panic (r )
83+ }
8084err , ok := r .(error )
8185if ! ok {
8286err = fmt .Errorf ("%v" , r )
Original file line number Diff line number Diff line change @@ -28,6 +28,35 @@ func TestRecover(t *testing.T) {
2828assert .Contains (t , buf .String (), "PANIC RECOVER" )
2929}
3030
31+ func TestRecoverErrAbortHandler (t * testing.T ) {
32+ e := echo .New ()
33+ buf := new (bytes.Buffer )
34+ e .Logger .SetOutput (buf )
35+ req := httptest .NewRequest (http .MethodGet , "/" , nil )
36+ rec := httptest .NewRecorder ()
37+ c := e .NewContext (req , rec )
38+ h := Recover ()(echo .HandlerFunc (func (c echo.Context ) error {
39+ panic (http .ErrAbortHandler )
40+ }))
41+ defer func () {
42+ r := recover ()
43+ if r == nil {
44+ assert .Fail (t , "expecting `http.ErrAbortHandler`, got `nil`" )
45+ } else {
46+ if err , ok := r .(error ); ok {
47+ assert .ErrorIs (t , err , http .ErrAbortHandler )
48+ } else {
49+ assert .Fail (t , "not of error type" )
50+ }
51+ }
52+ }()
53+
54+ h (c )
55+
56+ assert .Equal (t , http .StatusInternalServerError , rec .Code )
57+ assert .NotContains (t , buf .String (), "PANIC RECOVER" )
58+ }
59+
3160func TestRecoverWithConfig_LogLevel (t * testing.T ) {
3261tests := []struct {
3362logLevel log.Lvl
You can’t perform that action at this time.
0 commit comments