github.com/blockchain-gm/fabric-ca@v0.0.0-20200423072702-b2c40c7ac69c/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 server.Stop() 30 defer os.RemoveAll("rootDir") 31 32 _, port, err := net.SplitHostPort(server.Operations.Addr()) 33 assert.NoError(t, err) 34 35 client := &http.Client{} 36 healthURL := fmt.Sprintf("http://127.0.0.1:%s/healthz", port) 37 38 resp, err := client.Get(healthURL) 39 assert.NoError(t, err) 40 assert.Equal(t, http.StatusOK, resp.StatusCode) 41 42 err = server.GetDB().Close() 43 assert.NoError(t, err) 44 45 resp, err = client.Get(healthURL) 46 assert.NoError(t, err) 47 48 bodyBytes, err := ioutil.ReadAll(resp.Body) 49 assert.NoError(t, err) 50 51 resp.Body.Close() 52 53 var healthStatus healthz.HealthStatus 54 err = json.Unmarshal(bodyBytes, &healthStatus) 55 assert.NoError(t, err) 56 57 assert.Equal(t, http.StatusServiceUnavailable, resp.StatusCode) 58 assert.Equal(t, "server", healthStatus.FailedChecks[0].Component) 59 assert.Equal(t, "sql: database is closed", healthStatus.FailedChecks[0].Reason) 60 }