github.com/hechain20/hechain@v0.0.0-20220316014945-b544036ba106/internal/pkg/gateway/endpoint_test.go (about)

     1  /*
     2  Copyright hechain. All Rights Reserved.
     3  SPDX-License-Identifier: Apache-2.0
     4  */
     5  
     6  package gateway
     7  
     8  import (
     9  	"testing"
    10  	"time"
    11  
    12  	"github.com/hechain20/hechain/common/crypto/tlsgen"
    13  	"github.com/hechain20/hechain/gossip/common"
    14  	"github.com/hechain20/hechain/internal/pkg/comm"
    15  	"github.com/stretchr/testify/require"
    16  )
    17  
    18  func TestMutualTLS(t *testing.T) {
    19  	ca, err := tlsgen.NewCA()
    20  	require.NoError(t, err, "failed to create CA")
    21  
    22  	serverPair, err := ca.NewServerCertKeyPair("127.0.0.1")
    23  	require.NoError(t, err, "failed to create server key pair")
    24  
    25  	clientPair, err := ca.NewClientCertKeyPair()
    26  	require.NoError(t, err, "failed to create client key pair")
    27  
    28  	rootTLSCert := ca.CertBytes()
    29  
    30  	server, err := comm.NewGRPCServer("127.0.0.1:0", comm.ServerConfig{
    31  		SecOpts: comm.SecureOptions{
    32  			UseTLS:            true,
    33  			RequireClientCert: true,
    34  			Certificate:       serverPair.Cert,
    35  			Key:               serverPair.Key,
    36  			ClientRootCAs:     [][]byte{rootTLSCert},
    37  		},
    38  	})
    39  	require.NoError(t, err)
    40  
    41  	go server.Start()
    42  	defer server.Stop()
    43  
    44  	factory := &endpointFactory{
    45  		timeout:    10 * time.Second,
    46  		clientCert: clientPair.Cert,
    47  		clientKey:  clientPair.Key,
    48  	}
    49  
    50  	endorser, err := factory.newEndorser(common.PKIidType{}, server.Address(), "msp1", [][]byte{rootTLSCert})
    51  	require.NoError(t, err, "failed to make mTLS connection to server")
    52  
    53  	err = endorser.closeConnection()
    54  	require.NoError(t, err, "failed to close connection")
    55  }