From 2a92f3463cdd30875ba96c682fa15bd7c87f1986 Mon Sep 17 00:00:00 2001 From: Zoltan Bodor Date: Thu, 11 Dec 2025 10:25:25 +0200 Subject: [PATCH 1/2] Fix for checker and readiness updates Allow additions to empty checkers and readiness after NewServe is called. --- op/handlers.go | 18 ++++++++--------- op/handlers_test.go | 49 +++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 56 insertions(+), 11 deletions(-) diff --git a/op/handlers.go b/op/handlers.go index d07dc5b..b323123 100644 --- a/op/handlers.go +++ b/op/handlers.go @@ -11,11 +11,11 @@ import ( ) func newHealthCheckHandler(hc *Status) http.Handler { - if len(hc.checkers) == 0 { - return http.NotFoundHandler() - } - return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if len(hc.checkers) == 0 { + http.NotFound(w, r) + return + } w.Header().Add("Content-Type", "application/json") if err := newEncoder(w).Encode(hc.Check()); err != nil { w.WriteHeader(http.StatusInternalServerError) @@ -24,11 +24,12 @@ func newHealthCheckHandler(hc *Status) http.Handler { } func newReadyHandler(hc *Status) http.Handler { - if hc.ready == nil { - return http.NotFoundHandler() - } - return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if hc.ready == nil { + http.NotFound(w, r) + return + } + if hc.ready() { w.Header().Add("Content-Type", "text/plain") w.WriteHeader(http.StatusOK) @@ -40,7 +41,6 @@ func newReadyHandler(hc *Status) http.Handler { } func newAboutHandler(os *Status) http.Handler { - j, err := json.MarshalIndent(os.About(), " ", " ") if err != nil { panic(err) diff --git a/op/handlers_test.go b/op/handlers_test.go index 40bd963..21c1aad 100644 --- a/op/handlers_test.go +++ b/op/handlers_test.go @@ -119,6 +119,33 @@ func TestHealthCheckHandler(t *testing.T) { assert.Equal(expectedHealth, rr.Body.String()) } +func TestHealthCheckHandler_PostServeNewChecker(t *testing.T) { + assert := assert.New(t) + + st := NewStatus("name", "desc") + h := newHealthCheckHandler(st) + + req, err := http.NewRequest("GET", "/", nil) + if err != nil { + t.Fatal(err) + } + + rr := httptest.NewRecorder() + + h.ServeHTTP(rr, req) + + assert.Equal(http.StatusNotFound, rr.Code, "Expected 404 when no checkers are registered") + + st.AddChecker("check1", func(cr *CheckResponse) { + cr.Healthy("output1") + }) + + rr2 := httptest.NewRecorder() + h.ServeHTTP(rr2, req) + + assert.Equal(http.StatusOK, rr2.Code, "Expected 200 after adding a healthy checker") +} + func TestReadyHandlerReady(t *testing.T) { assert := assert.New(t) @@ -162,7 +189,6 @@ func TestReadyHandlerNotReady(t *testing.T) { } func TestReadyHandlerNone(t *testing.T) { - h := newReadyHandler(NewStatus("", "").ReadyNone()) req, err := http.NewRequest("GET", "/", nil) @@ -179,8 +205,27 @@ func TestReadyHandlerNone(t *testing.T) { } } -func TestReadyHandlerDefaults(t *testing.T) { +func TestReadyHandlerNone_PostServeHandlerReady(t *testing.T) { + st := NewStatus("", "").ReadyNone() + h := newReadyHandler(st) + + req, err := http.NewRequest("GET", "/", nil) + if err != nil { + t.Fatal(err) + } + + rr := httptest.NewRecorder() + h.ServeHTTP(rr, req) + assert.Equal(t, http.StatusNotFound, rr.Code, "Expected 404 when readiness is set to none") + st.ReadyAlways() + + rr2 := httptest.NewRecorder() + h.ServeHTTP(rr2, req) + assert.Equal(t, http.StatusOK, rr2.Code, "Expected 200 after changing readiness to always") +} + +func TestReadyHandlerDefaults(t *testing.T) { h := newReadyHandler(&Status{}) req, err := http.NewRequest("GET", "/", nil) From 0a7feb67403a3ebfd11d4d6f8d93f68d992b0159 Mon Sep 17 00:00:00 2001 From: Zoltan Bodor Date: Thu, 11 Dec 2025 11:01:02 +0200 Subject: [PATCH 2/2] Update test name --- op/handlers_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/op/handlers_test.go b/op/handlers_test.go index 21c1aad..9fd3842 100644 --- a/op/handlers_test.go +++ b/op/handlers_test.go @@ -119,7 +119,7 @@ func TestHealthCheckHandler(t *testing.T) { assert.Equal(expectedHealth, rr.Body.String()) } -func TestHealthCheckHandler_PostServeNewChecker(t *testing.T) { +func TestHealthCheckHandler_PostServeAddChecker(t *testing.T) { assert := assert.New(t) st := NewStatus("name", "desc")