From c34a2fa1762d337d9a04cb478219c2e18fdededc Mon Sep 17 00:00:00 2001 From: agoalofalife Date: Tue, 27 Jun 2023 20:47:36 +0500 Subject: [PATCH] Added extra endpoint for clear cache --- server/cache_handlers.go | 15 +++++++++++++++ server/server.go | 7 ++++--- server/server_test.go | 22 ++++++++++++++++++++++ 3 files changed, 41 insertions(+), 3 deletions(-) diff --git a/server/cache_handlers.go b/server/cache_handlers.go index 97ca02db..ee802a0d 100644 --- a/server/cache_handlers.go +++ b/server/cache_handlers.go @@ -20,6 +20,21 @@ func cacheIndexHandler() http.Handler { }) } +func cacheClearHandler() http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + clearCache(w, r) + }) +} + +func clearCache(w http.ResponseWriter, r *http.Request) { + if err := cache.Reset(); err != nil { + w.WriteHeader(http.StatusInternalServerError) + log.Printf("internal cache error: %s", err) + } + log.Println("cache is successfully cleared") + w.WriteHeader(http.StatusOK) +} + // handles get requests. func getCacheHandler(w http.ResponseWriter, r *http.Request) { target := r.URL.Path[len(cachePath):] diff --git a/server/server.go b/server/server.go index 46486a2e..a8f88601 100644 --- a/server/server.go +++ b/server/server.go @@ -18,9 +18,9 @@ const ( apiBasePath = "/api/" + apiVersion + "/" // path to cache. - cachePath = apiBasePath + "cache/" - statsPath = apiBasePath + "stats" - + cachePath = apiBasePath + "cache/" + statsPath = apiBasePath + "stats" + cacheClearPath = apiBasePath + "cache/clear" // server version. version = "1.0.0" ) @@ -76,6 +76,7 @@ func main() { logger.Print("cache initialised.") // let the middleware log. + http.Handle(cacheClearPath, serviceLoader(cacheClearHandler(), requestMetrics(logger))) http.Handle(cachePath, serviceLoader(cacheIndexHandler(), requestMetrics(logger))) http.Handle(statsPath, serviceLoader(statsIndexHandler(), requestMetrics(logger))) diff --git a/server/server_test.go b/server/server_test.go index b71ef32c..266afef7 100644 --- a/server/server_test.go +++ b/server/server_test.go @@ -158,6 +158,28 @@ func TestDeleteKey(t *testing.T) { } } +func TestClearCache(t *testing.T) { + t.Parallel() + + putRequest := httptest.NewRequest("PUT", testBaseString+"/api/v1/cache/putKey", bytes.NewBuffer([]byte("123"))) + putResponseRecorder := httptest.NewRecorder() + + putCacheHandler(putResponseRecorder, putRequest) + + requestClear := httptest.NewRequest("DELETE", testBaseString+"/api/v1/cache/clear", nil) + rr := httptest.NewRecorder() + + if err := cache.Set("testDeleteKey", []byte("123")); err != nil { + t.Errorf("can't set key for testing. %s", err) + } + + clearCache(rr, requestClear) + resp := rr.Result() + + if resp.StatusCode != 200 { + t.Errorf("want: 200; got: %d.\n\tcan't delete keys.", resp.StatusCode) + } +} func TestGetStats(t *testing.T) { t.Parallel() var testStats bigcache.Stats