github.com/hxx258456/fabric-ca-gm@v0.0.3-0.20221111064038-a268ad7e3a37/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  	"os"
    14  	"testing"
    15  
    16  	http "github.com/hxx258456/ccgo/gmhttp"
    17  
    18  	"github.com/hxx258456/fabric-ca-gm/lib"
    19  	"github.com/hxx258456/fabric-config-gm/healthz"
    20  
    21  	"github.com/stretchr/testify/assert"
    22  )
    23  
    24  func TestHealthCheckEndpoint(t *testing.T) {
    25  	server := lib.TestGetRootServer(t)
    26  	server.Config.Operations.ListenAddress = "127.0.0.1:0"
    27  
    28  	err := server.Start()
    29  	assert.NoError(t, err)
    30  	defer func() {
    31  		server.Stop()
    32  		os.RemoveAll("./rootDir")
    33  	}()
    34  
    35  	_, port, err := net.SplitHostPort(server.Operations.Addr())
    36  	assert.NoError(t, err)
    37  
    38  	client := &http.Client{}
    39  	healthURL := fmt.Sprintf("http://127.0.0.1:%s/healthz", port)
    40  
    41  	resp, err := client.Get(healthURL)
    42  	assert.NoError(t, err)
    43  	assert.Equal(t, http.StatusOK, resp.StatusCode)
    44  
    45  	err = server.GetDB().Close()
    46  	assert.NoError(t, err)
    47  
    48  	resp, err = client.Get(healthURL)
    49  	assert.NoError(t, err)
    50  
    51  	bodyBytes, err := ioutil.ReadAll(resp.Body)
    52  	assert.NoError(t, err)
    53  
    54  	resp.Body.Close()
    55  
    56  	var healthStatus healthz.HealthStatus
    57  	err = json.Unmarshal(bodyBytes, &healthStatus)
    58  	assert.NoError(t, err)
    59  
    60  	assert.Equal(t, http.StatusServiceUnavailable, resp.StatusCode)
    61  	assert.Equal(t, "server", healthStatus.FailedChecks[0].Component)
    62  	assert.Equal(t, "sql: database is closed", healthStatus.FailedChecks[0].Reason)
    63  }