github.com/kaituanwang/hyperledger@v2.0.1+incompatible/core/comm/config_test.go (about)

     1  /*
     2  Copyright IBM Corp. All Rights Reserved.
     3  
     4  SPDX-License-Identifier: Apache-2.0
     5  */
     6  
     7  package comm
     8  
     9  import (
    10  	"testing"
    11  	"time"
    12  
    13  	"github.com/stretchr/testify/assert"
    14  	"google.golang.org/grpc"
    15  	"google.golang.org/grpc/keepalive"
    16  )
    17  
    18  func TestServerKeepaliveOptions(t *testing.T) {
    19  	t.Parallel()
    20  
    21  	kap := keepalive.ServerParameters{
    22  		Time:    DefaultKeepaliveOptions.ServerInterval,
    23  		Timeout: DefaultKeepaliveOptions.ServerTimeout,
    24  	}
    25  	kep := keepalive.EnforcementPolicy{
    26  		MinTime:             DefaultKeepaliveOptions.ServerMinInterval,
    27  		PermitWithoutStream: true,
    28  	}
    29  	expectedOpts := []grpc.ServerOption{
    30  		grpc.KeepaliveParams(kap),
    31  		grpc.KeepaliveEnforcementPolicy(kep),
    32  	}
    33  	opts := ServerKeepaliveOptions(DefaultKeepaliveOptions)
    34  	assert.ObjectsAreEqual(expectedOpts, opts)
    35  
    36  }
    37  
    38  func TestClientKeepaliveOptions(t *testing.T) {
    39  	t.Parallel()
    40  
    41  	kap := keepalive.ClientParameters{
    42  		Time:                DefaultKeepaliveOptions.ClientInterval,
    43  		Timeout:             DefaultKeepaliveOptions.ClientTimeout,
    44  		PermitWithoutStream: true,
    45  	}
    46  	expectedOpts := []grpc.DialOption{grpc.WithKeepaliveParams(kap)}
    47  	opts := ClientKeepaliveOptions(DefaultKeepaliveOptions)
    48  	assert.ObjectsAreEqual(expectedOpts, opts)
    49  
    50  }
    51  
    52  func TestClientConfigClone(t *testing.T) {
    53  	origin := ClientConfig{
    54  		KaOpts: KeepaliveOptions{
    55  			ClientInterval: time.Second,
    56  		},
    57  		SecOpts: SecureOptions{
    58  			Key: []byte{1, 2, 3},
    59  		},
    60  		Timeout:      time.Second,
    61  		AsyncConnect: true,
    62  	}
    63  
    64  	clone := origin.Clone()
    65  
    66  	// Same content, different inner fields references.
    67  	assert.Equal(t, origin, clone)
    68  
    69  	// We change the contents of the fields and ensure it doesn't
    70  	// propagate across instances.
    71  	origin.AsyncConnect = false
    72  	origin.KaOpts.ServerInterval = time.Second
    73  	origin.KaOpts.ClientInterval = time.Hour
    74  	origin.SecOpts.Certificate = []byte{1, 2, 3}
    75  	origin.SecOpts.Key = []byte{5, 4, 6}
    76  	origin.Timeout = time.Second * 2
    77  
    78  	clone.SecOpts.UseTLS = true
    79  	clone.KaOpts.ServerMinInterval = time.Hour
    80  
    81  	expectedOriginState := ClientConfig{
    82  		KaOpts: KeepaliveOptions{
    83  			ClientInterval: time.Hour,
    84  			ServerInterval: time.Second,
    85  		},
    86  		SecOpts: SecureOptions{
    87  			Key:         []byte{5, 4, 6},
    88  			Certificate: []byte{1, 2, 3},
    89  		},
    90  		Timeout: time.Second * 2,
    91  	}
    92  
    93  	expectedCloneState := ClientConfig{
    94  		KaOpts: KeepaliveOptions{
    95  			ClientInterval:    time.Second,
    96  			ServerMinInterval: time.Hour,
    97  		},
    98  		SecOpts: SecureOptions{
    99  			Key:    []byte{1, 2, 3},
   100  			UseTLS: true,
   101  		},
   102  		Timeout:      time.Second,
   103  		AsyncConnect: true,
   104  	}
   105  
   106  	assert.Equal(t, expectedOriginState, origin)
   107  	assert.Equal(t, expectedCloneState, clone)
   108  }