github.com/defanghe/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 }