mirror of
https://github.com/datarhei/core.git
synced 2025-10-03 23:26:39 +08:00
101 lines
2.6 KiB
Go
101 lines
2.6 KiB
Go
package cache
|
|
|
|
import (
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/datarhei/core/v16/http/cache"
|
|
|
|
"github.com/labstack/echo/v4"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestCache(t *testing.T) {
|
|
c, err := cache.NewLRUCache(cache.LRUConfig{
|
|
TTL: 300 * time.Second,
|
|
MaxSize: 0,
|
|
MaxFileSize: 16,
|
|
AllowExtensions: []string{".js"},
|
|
BlockExtensions: []string{".ts"},
|
|
Logger: nil,
|
|
})
|
|
|
|
require.NoError(t, err)
|
|
|
|
e := echo.New()
|
|
req := httptest.NewRequest(http.MethodGet, "/found.js", nil)
|
|
rec := httptest.NewRecorder()
|
|
ctx := e.NewContext(req, rec)
|
|
|
|
handler := NewWithConfig(Config{
|
|
Cache: c,
|
|
})(func(c echo.Context) error {
|
|
if c.Request().URL.Path == "/found.js" {
|
|
c.Response().Write([]byte("test"))
|
|
} else if c.Request().URL.Path == "/toobig.js" {
|
|
c.Response().Write([]byte("testtesttesttesttest"))
|
|
} else if c.Request().URL.Path == "/blocked.ts" {
|
|
c.Response().Write([]byte("blocked"))
|
|
}
|
|
|
|
c.Response().WriteHeader(http.StatusNotFound)
|
|
return nil
|
|
})
|
|
|
|
handler(ctx)
|
|
|
|
require.Equal(t, "test", rec.Body.String())
|
|
require.Equal(t, 200, rec.Result().StatusCode)
|
|
require.Equal(t, "MISS", rec.Result().Header.Get("x-cache"))
|
|
|
|
rec = httptest.NewRecorder()
|
|
ctx = e.NewContext(req, rec)
|
|
|
|
handler(ctx)
|
|
|
|
require.Equal(t, "test", rec.Body.String())
|
|
require.Equal(t, 200, rec.Result().StatusCode)
|
|
require.Equal(t, "HIT", rec.Result().Header.Get("x-cache")[:3])
|
|
|
|
req = httptest.NewRequest(http.MethodGet, "/notfound.js", nil)
|
|
rec = httptest.NewRecorder()
|
|
ctx = e.NewContext(req, rec)
|
|
|
|
handler(ctx)
|
|
|
|
require.Equal(t, 404, rec.Result().StatusCode)
|
|
require.Equal(t, "SKIP NOTOK", rec.Result().Header.Get("x-cache"))
|
|
|
|
req = httptest.NewRequest(http.MethodGet, "/toobig.js", nil)
|
|
rec = httptest.NewRecorder()
|
|
ctx = e.NewContext(req, rec)
|
|
|
|
handler(ctx)
|
|
|
|
require.Equal(t, "testtesttesttesttest", rec.Body.String())
|
|
require.Equal(t, 200, rec.Result().StatusCode)
|
|
require.Equal(t, "SKIP TOOBIG", rec.Result().Header.Get("x-cache"))
|
|
|
|
req = httptest.NewRequest(http.MethodGet, "/blocked.ts", nil)
|
|
rec = httptest.NewRecorder()
|
|
ctx = e.NewContext(req, rec)
|
|
|
|
handler(ctx)
|
|
|
|
require.Equal(t, "blocked", rec.Body.String())
|
|
require.Equal(t, 200, rec.Result().StatusCode)
|
|
require.Equal(t, "SKIP EXT", rec.Result().Header.Get("x-cache"))
|
|
|
|
req = httptest.NewRequest(http.MethodPost, "/found.js", nil)
|
|
rec = httptest.NewRecorder()
|
|
ctx = e.NewContext(req, rec)
|
|
|
|
handler(ctx)
|
|
|
|
require.Equal(t, "test", rec.Body.String())
|
|
require.Equal(t, 200, rec.Result().StatusCode)
|
|
require.Equal(t, "SKIP ONLYGET", rec.Result().Header.Get("x-cache"))
|
|
}
|