...
1
20
21 package healthx
22
23 import (
24 "encoding/json"
25 "errors"
26 "io/ioutil"
27 "net/http"
28 "net/http/httptest"
29 "testing"
30
31 "github.com/julienschmidt/httprouter"
32 "github.com/stretchr/testify/assert"
33 "github.com/stretchr/testify/require"
34
35 "github.com/ory/herodot"
36 )
37
38 func TestHealth(t *testing.T) {
39 alive := errors.New("not alive")
40 handler := &Handler{
41 H: herodot.NewJSONWriter(nil),
42 VersionString: "test version",
43 ReadyChecks: map[string]ReadyChecker{
44 "test": func(r *http.Request) error {
45 return alive
46 },
47 },
48 }
49 router := httprouter.New()
50 handler.SetHealthRoutes(router, true)
51 handler.SetVersionRoutes(router)
52 ts := httptest.NewServer(router)
53 c := http.DefaultClient
54
55 var healthBody swaggerHealthStatus
56 response, err := c.Get(ts.URL + AliveCheckPath)
57 require.NoError(t, err)
58 require.EqualValues(t, http.StatusOK, response.StatusCode)
59 require.NoError(t, json.NewDecoder(response.Body).Decode(&healthBody))
60 assert.EqualValues(t, "ok", healthBody.Status)
61
62 var versionBody swaggerVersion
63 response, err = c.Get(ts.URL + VersionPath)
64 require.NoError(t, err)
65 require.EqualValues(t, http.StatusOK, response.StatusCode)
66 require.NoError(t, json.NewDecoder(response.Body).Decode(&versionBody))
67 require.EqualValues(t, versionBody.Version, handler.VersionString)
68
69 response, err = c.Get(ts.URL + ReadyCheckPath)
70 require.NoError(t, err)
71 require.EqualValues(t, http.StatusServiceUnavailable, response.StatusCode)
72 out, err := ioutil.ReadAll(response.Body)
73 require.NoError(t, err)
74 assert.EqualValues(t, "ok", healthBody.Status)
75 assert.Equal(t, `{"errors":{"test":"not alive"}}`, string(out))
76
77 alive = nil
78 response, err = c.Get(ts.URL + ReadyCheckPath)
79 require.NoError(t, err)
80 require.EqualValues(t, http.StatusOK, response.StatusCode)
81 require.NoError(t, json.NewDecoder(response.Body).Decode(&versionBody))
82 require.EqualValues(t, versionBody.Version, handler.VersionString)
83 }
84
View as plain text