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  }