🚀 Improve error handling for net error(s) (#2421)

* improve error handling for net error(s)
fixes: reverse proxy support #2419

* Update app.go

Co-authored-by: leonklingele <git@leonklingele.de>

* improve error handling for net error(s)
fixes: reverse proxy support #2419

* improve error handling for net error(s)
fixes: reverse proxy support #2419

* improve error handling for net error(s)
fixes: reverse proxy support #2419

---------

Co-authored-by: leonklingele <git@leonklingele.de>
pull/2426/head
RW 2023-04-21 13:41:19 +02:00 committed by GitHub
parent c4d2876d64
commit 9feaf2296e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 20 additions and 1 deletions

7
app.go
View File

@ -1052,13 +1052,18 @@ func (app *App) serverErrorHandler(fctx *fasthttp.RequestCtx, err error) {
c := app.AcquireCtx(fctx)
defer app.ReleaseCtx(c)
var errNetOP *net.OpError
var (
errNetOP *net.OpError
netErr net.Error
)
switch {
case errors.As(err, new(*fasthttp.ErrSmallBuffer)):
err = ErrRequestHeaderFieldsTooLarge
case errors.As(err, &errNetOP) && errNetOP.Timeout():
err = ErrRequestTimeout
case errors.As(err, &netErr):
err = ErrBadGateway
case errors.Is(err, fasthttp.ErrBodyTooLarge):
err = ErrRequestEntityTooLarge
case errors.Is(err, fasthttp.ErrGetOnly):

View File

@ -268,6 +268,20 @@ func Test_App_serverErrorHandler_Internal_Error(t *testing.T) {
utils.AssertEqual(t, c.fasthttp.Response.StatusCode(), StatusBadRequest)
}
func Test_App_serverErrorHandler_Network_Error(t *testing.T) {
t.Parallel()
app := New()
c := app.AcquireCtx(&fasthttp.RequestCtx{})
defer app.ReleaseCtx(c)
app.serverErrorHandler(c.fasthttp, &net.DNSError{
Err: "test error",
Name: "test host",
IsTimeout: false,
})
utils.AssertEqual(t, string(c.fasthttp.Response.Body()), utils.StatusMessage(StatusBadGateway))
utils.AssertEqual(t, c.fasthttp.Response.StatusCode(), StatusBadGateway)
}
func Test_App_Nested_Params(t *testing.T) {
t.Parallel()
app := New()