File tree 2 files changed +33
-0
lines changed
2 files changed +33
-0
lines changed Original file line number Diff line number Diff line change @@ -2,6 +2,7 @@ package middleware
2
2
3
3
import (
4
4
"fmt"
5
+ "net/http"
5
6
"runtime"
6
7
7
8
"github.com/labstack/echo/v4"
@@ -77,6 +78,9 @@ func RecoverWithConfig(config RecoverConfig) echo.MiddlewareFunc {
77
78
78
79
defer func () {
79
80
if r := recover (); r != nil {
81
+ if r == http .ErrAbortHandler {
82
+ panic (r )
83
+ }
80
84
err , ok := r .(error )
81
85
if ! ok {
82
86
err = fmt .Errorf ("%v" , r )
Original file line number Diff line number Diff line change @@ -28,6 +28,35 @@ func TestRecover(t *testing.T) {
28
28
assert .Contains (t , buf .String (), "PANIC RECOVER" )
29
29
}
30
30
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
+
31
60
func TestRecoverWithConfig_LogLevel (t * testing.T ) {
32
61
tests := []struct {
33
62
logLevel log.Lvl
You can’t perform that action at this time.
0 commit comments