github.com/ldc1995/fabric-ca@v2.0.0-alpha.0.20200422214819-8d49c278c386+incompatible/test/integration/healthcheck/healthcheck_test.go (about) 1 /* 2 Copyright IBM Corp. All Rights Reserved. 3 4 SPDX-License-Identifier: Apache-2.0 5 */ 6 package healthcheck 7 8 import ( 9 "encoding/json" 10 "fmt" 11 "io/ioutil" 12 "net" 13 "net/http" 14 "os" 15 "testing" 16 17 "github.com/hyperledger/fabric-ca/lib" 18 "github.com/hyperledger/fabric-lib-go/healthz" 19 20 "github.com/stretchr/testify/assert" 21 ) 22 23 func TestHealthCheckEndpoint(t *testing.T) { 24 server := lib.TestGetRootServer(t) 25 server.Config.Operations.ListenAddress = "127.0.0.1:0" 26 27 err := server.Start() 28 assert.NoError(t, err) 29 defer func() { 30 server.Stop() 31 os.RemoveAll("./rootDir") 32 }() 33 34 _, port, err := net.SplitHostPort(server.Operations.Addr()) 35 assert.NoError(t, err) 36 37 client := &http.Client{} 38 healthURL := fmt.Sprintf("http://127.0.0.1:%s/healthz", port) 39 40 resp, err := client.Get(healthURL) 41 assert.NoError(t, err) 42 assert.Equal(t, http.StatusOK, resp.StatusCode) 43 44 err = server.GetDB().Close() 45 assert.NoError(t, err) 46 47 resp, err = client.Get(healthURL) 48 assert.NoError(t, err) 49 50 bodyBytes, err := ioutil.ReadAll(resp.Body) 51 assert.NoError(t, err) 52 53 resp.Body.Close() 54 55 var healthStatus healthz.HealthStatus 56 err = json.Unmarshal(bodyBytes, &healthStatus) 57 assert.NoError(t, err) 58 59 assert.Equal(t, http.StatusServiceUnavailable, resp.StatusCode) 60 assert.Equal(t, "server", healthStatus.FailedChecks[0].Component) 61 assert.Equal(t, "sql: database is closed", healthStatus.FailedChecks[0].Reason) 62 }