github.com/icyphox/x@v0.0.355-0.20220311094250-029bd783e8b8/healthx/handler_test.go (about) 1 /* 2 * Copyright © 2015-2018 Aeneas Rekkas <aeneas+oss@aeneas.io> 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 * 16 * @author Aeneas Rekkas <aeneas+oss@aeneas.io> 17 * @Copyright 2017-2018 Aeneas Rekkas <aeneas+oss@aeneas.io> 18 * @license Apache-2.0 19 */ 20 21 package healthx 22 23 import ( 24 "encoding/json" 25 "errors" 26 "io/ioutil" 27 "net/http" 28 "net/http/httptest" 29 "strings" 30 "testing" 31 32 "github.com/julienschmidt/httprouter" 33 "github.com/stretchr/testify/assert" 34 "github.com/stretchr/testify/require" 35 36 "github.com/ory/herodot" 37 ) 38 39 func TestHealth(t *testing.T) { 40 alive := errors.New("not alive") 41 handler := &Handler{ 42 H: herodot.NewJSONWriter(nil), 43 VersionString: "test version", 44 ReadyChecks: map[string]ReadyChecker{ 45 "test": func(r *http.Request) error { 46 return alive 47 }, 48 }, 49 } 50 router := httprouter.New() 51 handler.SetHealthRoutes(router, true) 52 handler.SetVersionRoutes(router) 53 ts := httptest.NewServer(router) 54 c := http.DefaultClient 55 56 var healthBody swaggerHealthStatus 57 response, err := c.Get(ts.URL + AliveCheckPath) 58 require.NoError(t, err) 59 require.EqualValues(t, http.StatusOK, response.StatusCode) 60 require.NoError(t, json.NewDecoder(response.Body).Decode(&healthBody)) 61 assert.EqualValues(t, "ok", healthBody.Status) 62 63 var versionBody swaggerVersion 64 response, err = c.Get(ts.URL + VersionPath) 65 require.NoError(t, err) 66 require.EqualValues(t, http.StatusOK, response.StatusCode) 67 require.NoError(t, json.NewDecoder(response.Body).Decode(&versionBody)) 68 require.EqualValues(t, versionBody.Version, handler.VersionString) 69 70 response, err = c.Get(ts.URL + ReadyCheckPath) 71 require.NoError(t, err) 72 require.EqualValues(t, http.StatusServiceUnavailable, response.StatusCode) 73 out, err := ioutil.ReadAll(response.Body) 74 require.NoError(t, err) 75 assert.EqualValues(t, "ok", healthBody.Status) 76 assert.Equal(t, `{"errors":{"test":"not alive"}}`, strings.TrimSpace(string(out))) 77 78 alive = nil 79 response, err = c.Get(ts.URL + ReadyCheckPath) 80 require.NoError(t, err) 81 require.EqualValues(t, http.StatusOK, response.StatusCode) 82 require.NoError(t, json.NewDecoder(response.Body).Decode(&versionBody)) 83 require.EqualValues(t, versionBody.Version, handler.VersionString) 84 }