go-web/framework/middleware/timeout_test.go
2024-09-25 13:52:12 +02:00

66 lines
1.4 KiB
Go

package middleware
import (
"bytes"
"io"
"log"
"net/http"
"net/http/httptest"
"testing"
"time"
"git.vinchent.xyz/vinchent/go-web/framework"
)
func TestTimeout(t *testing.T) {
t.Run("Test timeout handler", func(t *testing.T) {
timeoutHandler := Timeout(1 * time.Millisecond)
request := httptest.NewRequest(http.MethodGet, "/", nil)
response := httptest.NewRecorder()
c := framework.NewContext(response, request)
longHandler := func(c *framework.Context) error {
log.Println("TEST")
time.Sleep(2 * time.Millisecond)
return nil
}
c.SetHandlers([]framework.ControllerHandler{longHandler})
err := timeoutHandler(c)
if err != nil {
t.Fatal(err)
}
res := response.Result()
buf, _ := io.ReadAll(res.Body)
if cmp := bytes.Compare(buf, []byte("time out")); cmp != 0 {
t.Errorf("got %q, want time out", string(buf))
}
})
}
func TestRecover(t *testing.T) {
recoverer := Recovery()
request := httptest.NewRequest(http.MethodGet, "/", nil)
response := httptest.NewRecorder()
c := framework.NewContext(response, request)
panicHandler := func(c *framework.Context) error {
log.Println("TEST")
panic("panic")
}
c.SetHandlers([]framework.ControllerHandler{panicHandler})
err := recoverer(c)
if err != nil {
t.Fatal(err)
}
res := response.Result()
if res.StatusCode != http.StatusInternalServerError {
t.Errorf("status code got %d, want %d", res.StatusCode, http.StatusInternalServerError)
}
}