From 5026faf4edb7d667504da973dd175126fa9ef5fc Mon Sep 17 00:00:00 2001 From: Martin Polden Date: Sat, 28 Dec 2019 20:10:04 +0100 Subject: Add support for resetting cache through REST API --- http/http.go | 10 ++++++++++ http/http_test.go | 32 ++++++++++++++++++++++++++++---- 2 files changed, 38 insertions(+), 4 deletions(-) (limited to 'http') diff --git a/http/http.go b/http/http.go index 98e6616..8ab4101 100644 --- a/http/http.go +++ b/http/http.go @@ -53,6 +53,7 @@ func (s *Server) handler() http.Handler { r := newRouter() r.route("GET", "/cache/v1/", s.cacheHandler) r.route("GET", "/log/v1/", s.logHandler) + r.route("DELETE", "/cache/v1/", s.cacheResetHandler) return r.handler() } @@ -82,6 +83,15 @@ func (s *Server) cacheHandler(w http.ResponseWriter, r *http.Request) (interface return entries, nil } +func (s *Server) cacheResetHandler(w http.ResponseWriter, r *http.Request) (interface{}, *httpError) { + s.cache.Reset() + return struct { + Message string `json:"message"` + }{ + "Cleared cache", + }, nil +} + func (s *Server) logHandler(w http.ResponseWriter, r *http.Request) (interface{}, *httpError) { logEntries, err := s.logger.Get(listCountFrom(r)) if err != nil { diff --git a/http/http_test.go b/http/http_test.go index bdeb213..2c1a6ae 100644 --- a/http/http_test.go +++ b/http/http_test.go @@ -52,6 +52,27 @@ func httpGet(url string) (*http.Response, string, error) { return res, string(data), nil } +func httpRequest(method, url, body string) (*http.Response, string, error) { + r, err := http.NewRequest(method, url, strings.NewReader(body)) + if err != nil { + return nil, "", err + } + res, err := http.DefaultClient.Do(r) + if err != nil { + return nil, "", err + } + defer res.Body.Close() + data, err := ioutil.ReadAll(res.Body) + if err != nil { + return nil, "", err + } + return res, string(data), nil +} + +func httpDelete(url, body string) (*http.Response, string, error) { + return httpRequest(http.MethodDelete, url, body) +} + func TestRequests(t *testing.T) { httpSrv, srv := testServer() defer httpSrv.Close() @@ -80,28 +101,31 @@ func TestRequests(t *testing.T) { {http.MethodGet, "/cache/v1/", cr1, 200}, {http.MethodGet, "/cache/v1/?n=foo", cr1, 200}, {http.MethodGet, "/cache/v1/?n=1", cr2, 200}, + {http.MethodDelete, "/cache/v1/", `{"message":"Cleared cache"}`, 200}, } for i, tt := range tests { var ( - resp *http.Response + res *http.Response data string err error ) switch tt.method { case http.MethodGet: - resp, data, err = httpGet(httpSrv.URL + tt.url) + res, data, err = httpGet(httpSrv.URL + tt.url) + case http.MethodDelete: + res, data, err = httpDelete(httpSrv.URL+tt.url, "") default: t.Fatalf("#%d: invalid method: %s", i, tt.method) } if err != nil { t.Fatal(err) } - if got := resp.StatusCode; got != tt.status { + if got := res.StatusCode; got != tt.status { t.Errorf("#%d: %s %s returned status %d, want %d", i, tt.method, tt.url, got, tt.status) } - if got, want := resp.Header.Get("Content-Type"), "application/json"; got != want { + if got, want := res.Header.Get("Content-Type"), "application/json"; got != want { t.Errorf("#%d: got Content-Type %q, want %q", i, got, want) } -- cgit v1.2.3