github.com/bestchains/fabric-ca@v2.0.0-alpha+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  }