mirror of
https://github.com/gin-gonic/gin.git
synced 2026-07-07 10:51:26 +08:00
Merge 7b26a5211d31dc1a3682aeee1d193922d113c472 into c3d5a28ed6d3849da820195b6774d212bcc038a9
This commit is contained in:
commit
c53bc49366
@ -68,6 +68,12 @@ func CustomRecoveryWithWriter(out io.Writer, handle RecoveryFunc) HandlerFunc {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if e, ok := err.(error); ok {
|
||||||
|
// ErrAbortHandler should be treated as broken pipe too.
|
||||||
|
if errors.Is(e, http.ErrAbortHandler) {
|
||||||
|
brokenPipe = true
|
||||||
|
}
|
||||||
|
}
|
||||||
if logger != nil {
|
if logger != nil {
|
||||||
const stackSkip = 3
|
const stackSkip = 3
|
||||||
if brokenPipe {
|
if brokenPipe {
|
||||||
|
|||||||
@ -142,6 +142,28 @@ func TestPanicWithBrokenPipe(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TestPanicWithAbortHandler asserts that recovery handles http.ErrAbortHandler as broken pipe
|
||||||
|
func TestPanicWithAbortHandler(t *testing.T) {
|
||||||
|
const expectCode = 204
|
||||||
|
|
||||||
|
var buf strings.Builder
|
||||||
|
router := New()
|
||||||
|
router.Use(RecoveryWithWriter(&buf))
|
||||||
|
router.GET("/recovery", func(c *Context) {
|
||||||
|
// Start writing response
|
||||||
|
c.Header("X-Test", "Value")
|
||||||
|
c.Status(expectCode)
|
||||||
|
|
||||||
|
// Panic with ErrAbortHandler which should be treated as broken pipe
|
||||||
|
panic(http.ErrAbortHandler)
|
||||||
|
})
|
||||||
|
// RUN
|
||||||
|
w := PerformRequest(router, http.MethodGet, "/recovery")
|
||||||
|
// TEST
|
||||||
|
assert.Equal(t, expectCode, w.Code)
|
||||||
|
assert.Contains(t, buf.String(), "net/http: abort Handler")
|
||||||
|
}
|
||||||
|
|
||||||
func TestCustomRecoveryWithWriter(t *testing.T) {
|
func TestCustomRecoveryWithWriter(t *testing.T) {
|
||||||
errBuffer := new(strings.Builder)
|
errBuffer := new(strings.Builder)
|
||||||
buffer := new(strings.Builder)
|
buffer := new(strings.Builder)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user