From 5e1ee4be5385d7a99b3a3b08390020b17b975d64 Mon Sep 17 00:00:00 2001 From: Zijie Lu Date: Mon, 8 Jun 2020 15:48:38 -0400 Subject: [PATCH] tsweb: fix JSONHandler nil response Signed-off-by: Zijie Lu --- tsweb/jsonhandler.go | 4 +++- tsweb/jsonhandler_test.go | 21 +++++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/tsweb/jsonhandler.go b/tsweb/jsonhandler.go index f8531bf20..677d49eda 100644 --- a/tsweb/jsonhandler.go +++ b/tsweb/jsonhandler.go @@ -113,7 +113,9 @@ func JSONHandler(fn interface{}) http.Handler { } case 2: if vs[1].IsNil() { - writeResponse(w, http.StatusOK, responseSuccess(vs[0].Interface())) + if !vs[0].IsNil() { + writeResponse(w, http.StatusOK, responseSuccess(vs[0].Interface())) + } } else { err := vs[1].Interface().(error) writeResponse(w, http.StatusBadRequest, responseError(err.Error())) diff --git a/tsweb/jsonhandler_test.go b/tsweb/jsonhandler_test.go index 8379491ed..9d78d93ce 100644 --- a/tsweb/jsonhandler_test.go +++ b/tsweb/jsonhandler_test.go @@ -5,6 +5,7 @@ package tsweb import ( + "bytes" "encoding/json" "errors" "net/http" @@ -172,4 +173,24 @@ func TestNewJSONHandler(t *testing.T) { return nil, "panic" }) }) + + t.Run("2 2 forbidden", func(t *testing.T) { + code := http.StatusForbidden + body := []byte("forbidden") + h := JSONHandler(func(w http.ResponseWriter, r *http.Request) (*Data, error) { + w.WriteHeader(code) + w.Write(body) + return nil, nil + }) + + w := httptest.NewRecorder() + r := httptest.NewRequest("GET", "/", nil) + h.ServeHTTP(w, r) + if w.Code != http.StatusForbidden { + t.Fatalf("wrong code: %d %d", w.Code, code) + } + if !bytes.Equal(w.Body.Bytes(), []byte("forbidden")) { + t.Fatalf("wrong body: %s %s", w.Body.Bytes(), body) + } + }) }