github.com/true-sqn/fabric@v2.1.1+incompatible/internal/peer/common/ordererclient_test.go (about)

     1  /*
     2  Copyright IBM Corp. 2016-2017 All Rights Reserved.
     3  
     4  SPDX-License-Identifier: Apache-2.0
     5  */
     6  package common_test
     7  
     8  import (
     9  	"net"
    10  	"os"
    11  	"path/filepath"
    12  	"testing"
    13  	"time"
    14  
    15  	"github.com/hyperledger/fabric/internal/peer/common"
    16  	"github.com/hyperledger/fabric/internal/pkg/comm"
    17  	"github.com/spf13/viper"
    18  	"github.com/stretchr/testify/assert"
    19  )
    20  
    21  func initOrdererTestEnv(t *testing.T) (cleanup func()) {
    22  	t.Helper()
    23  	cfgPath := "./testdata"
    24  	os.Setenv("FABRIC_CFG_PATH", cfgPath)
    25  	viper.Reset()
    26  	_ = common.InitConfig("test")
    27  
    28  	return func() {
    29  		err := os.Unsetenv("FABRIC_CFG_PATH")
    30  		assert.NoError(t, err)
    31  		viper.Reset()
    32  	}
    33  }
    34  
    35  func TestNewOrdererClientFromEnv(t *testing.T) {
    36  	cleanup := initOrdererTestEnv(t)
    37  	defer cleanup()
    38  
    39  	oClient, err := common.NewOrdererClientFromEnv()
    40  	assert.NoError(t, err)
    41  	assert.NotNil(t, oClient)
    42  
    43  	viper.Set("orderer.tls.enabled", true)
    44  	oClient, err = common.NewOrdererClientFromEnv()
    45  	assert.NoError(t, err)
    46  	assert.NotNil(t, oClient)
    47  
    48  	viper.Set("orderer.tls.enabled", true)
    49  	viper.Set("orderer.tls.clientAuthRequired", true)
    50  	oClient, err = common.NewOrdererClientFromEnv()
    51  	assert.NoError(t, err)
    52  	assert.NotNil(t, oClient)
    53  
    54  	// bad key file
    55  	badKeyFile := filepath.Join("certs", "bad.key")
    56  	viper.Set("orderer.tls.clientKey.file", badKeyFile)
    57  	oClient, err = common.NewOrdererClientFromEnv()
    58  	assert.Contains(t, err.Error(), "failed to create OrdererClient from config")
    59  	assert.Nil(t, oClient)
    60  
    61  	// bad cert file path
    62  	viper.Set("orderer.tls.clientCert.file", "./nocert.crt")
    63  	oClient, err = common.NewOrdererClientFromEnv()
    64  	assert.Contains(t, err.Error(), "unable to load orderer.tls.clientCert.file")
    65  	assert.Contains(t, err.Error(), "failed to load config for OrdererClient")
    66  	assert.Nil(t, oClient)
    67  
    68  	// bad key file path
    69  	viper.Set("orderer.tls.clientKey.file", "./nokey.key")
    70  	oClient, err = common.NewOrdererClientFromEnv()
    71  	assert.Contains(t, err.Error(), "unable to load orderer.tls.clientKey.file")
    72  	assert.Nil(t, oClient)
    73  
    74  	// bad ca path
    75  	viper.Set("orderer.tls.rootcert.file", "noroot.crt")
    76  	oClient, err = common.NewOrdererClientFromEnv()
    77  	assert.Contains(t, err.Error(), "unable to load orderer.tls.rootcert.file")
    78  	assert.Nil(t, oClient)
    79  }
    80  
    81  func TestOrdererClient(t *testing.T) {
    82  	cleanup := initOrdererTestEnv(t)
    83  	defer cleanup()
    84  
    85  	lis, err := net.Listen("tcp", "localhost:0")
    86  	if err != nil {
    87  		t.Fatalf("error creating listener for test: %v", err)
    88  	}
    89  	defer lis.Close()
    90  	srv, err := comm.NewGRPCServerFromListener(lis, comm.ServerConfig{})
    91  	if err != nil {
    92  		t.Fatalf("error creating gRPC server for test: %v", err)
    93  	}
    94  	go srv.Start()
    95  	defer srv.Stop()
    96  	viper.Set("orderer.address", lis.Addr().String())
    97  	oClient, err := common.NewOrdererClientFromEnv()
    98  	if err != nil {
    99  		t.Fatalf("failed to create OrdererClient for test: %v", err)
   100  	}
   101  	bc, err := oClient.Broadcast()
   102  	assert.NoError(t, err)
   103  	assert.NotNil(t, bc)
   104  	dc, err := oClient.Deliver()
   105  	assert.NoError(t, err)
   106  	assert.NotNil(t, dc)
   107  }
   108  
   109  func TestOrdererClientTimeout(t *testing.T) {
   110  	t.Run("OrdererClient.Broadcast() timeout", func(t *testing.T) {
   111  		cleanup := initOrdererTestEnv(t)
   112  		viper.Set("orderer.client.connTimeout", 10*time.Millisecond)
   113  		defer cleanup()
   114  		oClient, err := common.NewOrdererClientFromEnv()
   115  		if err != nil {
   116  			t.Fatalf("failed to create OrdererClient for test: %v", err)
   117  		}
   118  		_, err = oClient.Broadcast()
   119  		assert.Contains(t, err.Error(), "orderer client failed to connect")
   120  	})
   121  	t.Run("OrdererClient.Deliver() timeout", func(t *testing.T) {
   122  		cleanup := initOrdererTestEnv(t)
   123  		viper.Set("orderer.client.connTimeout", 10*time.Millisecond)
   124  		defer cleanup()
   125  		oClient, err := common.NewOrdererClientFromEnv()
   126  		if err != nil {
   127  			t.Fatalf("failed to create OrdererClient for test: %v", err)
   128  		}
   129  		_, err = oClient.Deliver()
   130  		assert.Contains(t, err.Error(), "orderer client failed to connect")
   131  	})
   132  }