mirror of https://github.com/gofiber/fiber.git
🚀 v3 Feature: Make app.Test accept a time.Duration timeout (#2269)
app: make app.Test accept a time.Duration timeout Cases found by running semgrep with an empty .semgrepignore file semgrep --lang=go -e '$O.Test($X, $Y)'pull/2538/head
parent
fd1a29ea79
commit
6334f2c9ff
14
app.go
14
app.go
|
@ -865,11 +865,11 @@ func (app *App) Hooks() *Hooks {
|
|||
|
||||
// Test is used for internal debugging by passing a *http.Request.
|
||||
// Timeout is optional and defaults to 1s, -1 will disable it completely.
|
||||
func (app *App) Test(req *http.Request, msTimeout ...int) (resp *http.Response, err error) {
|
||||
func (app *App) Test(req *http.Request, timeout ...time.Duration) (resp *http.Response, err error) {
|
||||
// Set timeout
|
||||
timeout := 1000
|
||||
if len(msTimeout) > 0 {
|
||||
timeout = msTimeout[0]
|
||||
to := 1 * time.Second
|
||||
if len(timeout) > 0 {
|
||||
to = timeout[0]
|
||||
}
|
||||
|
||||
// Add Content-Length if not provided with body
|
||||
|
@ -908,12 +908,12 @@ func (app *App) Test(req *http.Request, msTimeout ...int) (resp *http.Response,
|
|||
}()
|
||||
|
||||
// Wait for callback
|
||||
if timeout >= 0 {
|
||||
if to >= 0 {
|
||||
// With timeout
|
||||
select {
|
||||
case err = <-channel:
|
||||
case <-time.After(time.Duration(timeout) * time.Millisecond):
|
||||
return nil, fmt.Errorf("test: timeout error %vms", timeout)
|
||||
case <-time.After(to):
|
||||
return nil, fmt.Errorf("test: timeout error after %s", to)
|
||||
}
|
||||
} else {
|
||||
// Without timeout
|
||||
|
|
|
@ -1230,7 +1230,7 @@ func Test_Test_Timeout(t *testing.T) {
|
|||
return nil
|
||||
})
|
||||
|
||||
_, err = app.Test(httptest.NewRequest(MethodGet, "/timeout", nil), 20)
|
||||
_, err = app.Test(httptest.NewRequest(MethodGet, "/timeout", nil), 20*time.Millisecond)
|
||||
require.True(t, err != nil, "app.Test(req)")
|
||||
}
|
||||
|
||||
|
|
|
@ -7,6 +7,7 @@ import (
|
|||
"net/http/httptest"
|
||||
"os"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/gofiber/fiber/v3"
|
||||
"github.com/stretchr/testify/require"
|
||||
|
@ -112,7 +113,7 @@ func Test_Compress_Brotli(t *testing.T) {
|
|||
req := httptest.NewRequest("GET", "/", nil)
|
||||
req.Header.Set("Accept-Encoding", "br")
|
||||
|
||||
resp, err := app.Test(req, 10000)
|
||||
resp, err := app.Test(req, 10*time.Second)
|
||||
require.NoError(t, err, "app.Test(req)")
|
||||
require.Equal(t, 200, resp.StatusCode, "Status code")
|
||||
require.Equal(t, "br", resp.Header.Get(fiber.HeaderContentEncoding))
|
||||
|
|
|
@ -5,6 +5,7 @@ import (
|
|||
"io"
|
||||
"net/http/httptest"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/gofiber/fiber/v3"
|
||||
"github.com/stretchr/testify/require"
|
||||
|
@ -104,7 +105,7 @@ func Test_Pprof_Subs(t *testing.T) {
|
|||
if sub == "profile" {
|
||||
target += "?seconds=1"
|
||||
}
|
||||
resp, err := app.Test(httptest.NewRequest(fiber.MethodGet, target, nil), 5000)
|
||||
resp, err := app.Test(httptest.NewRequest(fiber.MethodGet, target, nil), 5*time.Second)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, 200, resp.StatusCode)
|
||||
})
|
||||
|
@ -131,7 +132,7 @@ func Test_Pprof_Subs_WithPrefix(t *testing.T) {
|
|||
if sub == "profile" {
|
||||
target += "?seconds=1"
|
||||
}
|
||||
resp, err := app.Test(httptest.NewRequest(fiber.MethodGet, target, nil), 5000)
|
||||
resp, err := app.Test(httptest.NewRequest(fiber.MethodGet, target, nil), 5*time.Second)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, 200, resp.StatusCode)
|
||||
})
|
||||
|
|
|
@ -77,7 +77,7 @@ func Test_Proxy(t *testing.T) {
|
|||
func(c fiber.Ctx) error { return c.SendStatus(fiber.StatusTeapot) }, t,
|
||||
)
|
||||
|
||||
resp, err := target.Test(httptest.NewRequest("GET", "/", nil), 2000)
|
||||
resp, err := target.Test(httptest.NewRequest("GET", "/", nil), 2*time.Second)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, fiber.StatusTeapot, resp.StatusCode)
|
||||
|
||||
|
@ -297,7 +297,7 @@ func Test_Proxy_Timeout_Slow_Server(t *testing.T) {
|
|||
Timeout: 3 * time.Second,
|
||||
}))
|
||||
|
||||
resp, err := app.Test(httptest.NewRequest("GET", "/", nil), 5000)
|
||||
resp, err := app.Test(httptest.NewRequest("GET", "/", nil), 5*time.Second)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, fiber.StatusOK, resp.StatusCode)
|
||||
|
||||
|
@ -321,7 +321,7 @@ func Test_Proxy_With_Timeout(t *testing.T) {
|
|||
Timeout: 100 * time.Millisecond,
|
||||
}))
|
||||
|
||||
resp, err := app.Test(httptest.NewRequest("GET", "/", nil), 2000)
|
||||
resp, err := app.Test(httptest.NewRequest("GET", "/", nil), 2*time.Second)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, fiber.StatusInternalServerError, resp.StatusCode)
|
||||
|
||||
|
@ -475,7 +475,7 @@ func Test_ProxyBalancer_Custom_Client(t *testing.T) {
|
|||
func(c fiber.Ctx) error { return c.SendStatus(fiber.StatusTeapot) }, t,
|
||||
)
|
||||
|
||||
resp, err := target.Test(httptest.NewRequest("GET", "/", nil), 2000)
|
||||
resp, err := target.Test(httptest.NewRequest("GET", "/", nil), 2*time.Second)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, fiber.StatusTeapot, resp.StatusCode)
|
||||
|
||||
|
|
Loading…
Reference in New Issue