diff --git a/middleware/cache/cache.go b/middleware/cache/cache.go index eaa0cd4c17..69c3fd5c1d 100644 --- a/middleware/cache/cache.go +++ b/middleware/cache/cache.go @@ -117,7 +117,7 @@ func New(config ...Config) fiber.Handler { // Get timestamp ts := atomic.LoadUint64(×tamp) - //Cache Entry not found + // Cache Entry not found if e != nil { // Invalidate cache if requested if cfg.CacheInvalidator != nil && cfg.CacheInvalidator(c) { diff --git a/middleware/cache/cache_test.go b/middleware/cache/cache_test.go index d529ccd9f5..e998bbbbe3 100644 --- a/middleware/cache/cache_test.go +++ b/middleware/cache/cache_test.go @@ -700,35 +700,55 @@ func Test_CustomCacheHeader(t *testing.T) { func Test_CacheInvalidation(t *testing.T) { t.Parallel() - app := fiber.New() - app.Use(New(Config{ - CacheControl: true, - CacheInvalidator: func(c fiber.Ctx) bool { - return fiber.Query[bool](c, "invalidate") - }, - })) + t.Run("Invalidation by requests", func(t *testing.T) { + t.Parallel() + app := fiber.New() + app.Use(New(Config{ + CacheControl: true, + CacheInvalidator: func(c fiber.Ctx) bool { + return fiber.Query[bool](c, "invalidate") + }, + })) + + app.Get("/", func(c fiber.Ctx) error { + return c.SendString(time.Now().String()) + }) - app.Get("/", func(c fiber.Ctx) error { - return c.SendString(time.Now().String()) - }) + resp, err := app.Test(httptest.NewRequest(fiber.MethodGet, "/", nil)) + require.NoError(t, err) + body, err := io.ReadAll(resp.Body) + require.NoError(t, err) - resp, err := app.Test(httptest.NewRequest(fiber.MethodGet, "/", nil)) - require.NoError(t, err) - body, err := io.ReadAll(resp.Body) - require.NoError(t, err) + respCached, err := app.Test(httptest.NewRequest(fiber.MethodGet, "/", nil)) + require.NoError(t, err) + bodyCached, err := io.ReadAll(respCached.Body) + require.NoError(t, err) + require.True(t, bytes.Equal(body, bodyCached)) + require.NotEmpty(t, respCached.Header.Get(fiber.HeaderCacheControl)) - respCached, err := app.Test(httptest.NewRequest(fiber.MethodGet, "/", nil)) - require.NoError(t, err) - bodyCached, err := io.ReadAll(respCached.Body) - require.NoError(t, err) - require.True(t, bytes.Equal(body, bodyCached)) - require.NotEmpty(t, respCached.Header.Get(fiber.HeaderCacheControl)) + respInvalidate, err := app.Test(httptest.NewRequest(fiber.MethodGet, "/?invalidate=true", nil)) + require.NoError(t, err) + bodyInvalidate, err := io.ReadAll(respInvalidate.Body) + require.NoError(t, err) + require.NotEqual(t, body, bodyInvalidate) + }) - respInvalidate, err := app.Test(httptest.NewRequest(fiber.MethodGet, "/?invalidate=true", nil)) - require.NoError(t, err) - bodyInvalidate, err := io.ReadAll(respInvalidate.Body) - require.NoError(t, err) - require.NotEqual(t, body, bodyInvalidate) + t.Run("Cache Invalidator should not be called if no cache entry exist ", func(t *testing.T) { + t.Parallel() + app := fiber.New() + cacheInvalidatorExecuted := false + app.Use(New(Config{ + CacheControl: true, + CacheInvalidator: func(c fiber.Ctx) bool { + cacheInvalidatorExecuted = true + return fiber.Query[bool](c, "invalidate") + }, + MaxBytes: 10 * 1024 * 1024, + })) + _, err := app.Test(httptest.NewRequest(fiber.MethodGet, "/?invalidate=true", nil)) + require.NoError(t, err) + require.False(t, cacheInvalidatorExecuted) + }) } // Because time points are updated once every X milliseconds, entries in tests can often have diff --git a/middleware/cache/manager_test.go b/middleware/cache/manager_test.go index bb1962bdb9..d792cc3444 100644 --- a/middleware/cache/manager_test.go +++ b/middleware/cache/manager_test.go @@ -1,10 +1,11 @@ package cache import ( - "github.com/gofiber/utils/v2" - "github.com/stretchr/testify/assert" "testing" "time" + + "github.com/gofiber/utils/v2" + "github.com/stretchr/testify/assert" ) func Test_manager_get(t *testing.T) {