github.com/grafana/synthetic-monitoring-agent@v0.64.2/cmd/synthetic-monitoring-agent/http_test.go (about) 1 package main 2 3 import ( 4 "net/http" 5 "net/http/httptest" 6 "testing" 7 8 "github.com/stretchr/testify/require" 9 ) 10 11 func TestReadynessHandler(t *testing.T) { 12 h := NewReadynessHandler() 13 14 // Test that the handler returns a 503 when the agent is not ready. 15 var ( 16 w *httptest.ResponseRecorder 17 r *http.Request 18 ) 19 20 // A new readynessHandler should report not ready before the 21 // first call to Set(true). 22 w = httptest.NewRecorder() 23 r = httptest.NewRequest("GET", "/ready", nil) 24 h.ServeHTTP(w, r) 25 require.Equal(t, http.StatusServiceUnavailable, w.Code) 26 27 // Calling Set(false) should NOT change the readyness state. 28 h.Set(false) 29 30 // Still not ready, report not ready. 31 w = httptest.NewRecorder() 32 r = httptest.NewRequest("GET", "/ready", nil) 33 h.ServeHTTP(w, r) 34 require.Equal(t, http.StatusServiceUnavailable, w.Code) 35 36 // Set as ready. 37 h.Set(true) 38 39 // Now the handler should return a 200. 40 w = httptest.NewRecorder() 41 r = httptest.NewRequest("GET", "/ready", nil) 42 h.ServeHTTP(w, r) 43 require.Equal(t, http.StatusOK, w.Code) 44 require.Equal(t, "ready", w.Body.String()) 45 46 // Setting it as ready again. 47 h.Set(true) 48 49 // Response should not change. 50 w = httptest.NewRecorder() 51 r = httptest.NewRequest("GET", "/ready", nil) 52 h.ServeHTTP(w, r) 53 require.Equal(t, http.StatusOK, w.Code) 54 require.Equal(t, "ready", w.Body.String()) 55 56 // Setting it back to not ready. 57 h.Set(false) 58 59 // The handler should still return a 200 because the agent was 60 // marked as ready once. 61 w = httptest.NewRecorder() 62 r = httptest.NewRequest("GET", "/ready", nil) 63 h.ServeHTTP(w, r) 64 require.Equal(t, http.StatusOK, w.Code) 65 require.Equal(t, "ready", w.Body.String()) 66 }