github.com/hechain20/hechain@v0.0.0-20220316014945-b544036ba106/orderer/common/multichannel/chainsupport_test.go (about)

     1  /*
     2  Copyright hechain. All Rights Reserved.
     3  
     4  SPDX-License-Identifier: Apache-2.0
     5  */
     6  
     7  package multichannel
     8  
     9  import (
    10  	"testing"
    11  
    12  	"github.com/hechain20/hechain/orderer/common/localconfig"
    13  	"github.com/hechain20/hechain/orderer/common/msgprocessor"
    14  	"github.com/hechain20/hechain/orderer/common/types"
    15  
    16  	"github.com/hechain20/hechain/bccsp/sw"
    17  	msgprocessormocks "github.com/hechain20/hechain/orderer/common/msgprocessor/mocks"
    18  	"github.com/hechain20/hechain/orderer/common/multichannel/mocks"
    19  	"github.com/hyperledger/fabric-protos-go/common"
    20  	"github.com/pkg/errors"
    21  	"github.com/stretchr/testify/require"
    22  )
    23  
    24  func TestConsensusMetadataValidation(t *testing.T) {
    25  	oldConsensusMetadata := []byte("old consensus metadata")
    26  	newConsensusMetadata := []byte("new consensus metadata")
    27  	mockValidator := &mocks.ConfigTXValidator{}
    28  	mockValidator.ChannelIDReturns("mychannel")
    29  	mockValidator.ProposeConfigUpdateReturns(testConfigEnvelope(t), nil)
    30  	mockOrderer := &mocks.OrdererConfig{}
    31  	mockOrderer.ConsensusMetadataReturns(oldConsensusMetadata)
    32  	mockResources := &mocks.Resources{}
    33  	mockResources.ConfigtxValidatorReturns(mockValidator)
    34  	mockResources.OrdererConfigReturns(mockOrderer, true)
    35  
    36  	ms := &mutableResourcesMock{
    37  		Resources:               mockResources,
    38  		newConsensusMetadataVal: newConsensusMetadata,
    39  	}
    40  	cryptoProvider, err := sw.NewDefaultSecurityLevelWithKeystore(sw.NewDummyKeyStore())
    41  	require.NoError(t, err)
    42  	mv := &msgprocessormocks.MetadataValidator{}
    43  	cs := &ChainSupport{
    44  		ledgerResources: &ledgerResources{
    45  			configResources: &configResources{
    46  				mutableResources: ms,
    47  				bccsp:            cryptoProvider,
    48  			},
    49  		},
    50  		MetadataValidator: mv,
    51  		BCCSP:             cryptoProvider,
    52  	}
    53  
    54  	// case 1: valid consensus metadata update
    55  	_, err = cs.ProposeConfigUpdate(&common.Envelope{})
    56  	require.NoError(t, err)
    57  
    58  	// validate arguments to ValidateConsensusMetadata
    59  	require.Equal(t, 1, mv.ValidateConsensusMetadataCallCount())
    60  	om, nm, nc := mv.ValidateConsensusMetadataArgsForCall(0)
    61  	require.False(t, nc)
    62  	require.Equal(t, oldConsensusMetadata, om.ConsensusMetadata())
    63  	require.Equal(t, newConsensusMetadata, nm.ConsensusMetadata())
    64  
    65  	// case 2: invalid consensus metadata update
    66  	mv.ValidateConsensusMetadataReturns(errors.New("bananas"))
    67  	_, err = cs.ProposeConfigUpdate(&common.Envelope{})
    68  	require.EqualError(t, err, "consensus metadata update for channel config update is invalid: bananas")
    69  }
    70  
    71  func TestNewOnboardingChainSupport(t *testing.T) {
    72  	mockResources := &mocks.Resources{}
    73  	mockValidator := &mocks.ConfigTXValidator{}
    74  	mockValidator.ChannelIDReturns("mychannel")
    75  	mockResources.ConfigtxValidatorReturns(mockValidator)
    76  
    77  	ms := &mutableResourcesMock{
    78  		Resources: mockResources,
    79  	}
    80  	cryptoProvider, err := sw.NewDefaultSecurityLevelWithKeystore(sw.NewDummyKeyStore())
    81  	require.NoError(t, err)
    82  
    83  	mockRW := &mocks.ReadWriter{}
    84  	mockRW.HeightReturns(7)
    85  	ledgerRes := &ledgerResources{
    86  		configResources: &configResources{
    87  			mutableResources: ms,
    88  			bccsp:            cryptoProvider,
    89  		},
    90  		ReadWriter: mockRW,
    91  	}
    92  
    93  	cs, err := newOnBoardingChainSupport(ledgerRes, localconfig.TopLevel{}, cryptoProvider)
    94  	require.NoError(t, err)
    95  	require.NotNil(t, cs)
    96  
    97  	errStr := "system channel creation pending: server requires restart"
    98  	require.EqualError(t, cs.Order(nil, 0), errStr)
    99  	require.EqualError(t, cs.Configure(nil, 0), errStr)
   100  	require.EqualError(t, cs.WaitReady(), errStr)
   101  	require.NotPanics(t, cs.Start)
   102  	require.NotPanics(t, cs.Halt)
   103  	_, open := <-cs.Errored()
   104  	require.False(t, open)
   105  
   106  	cRel, status := cs.StatusReport()
   107  	require.Equal(t, types.ConsensusRelationConsenter, cRel)
   108  	require.Equal(t, types.StatusInactive, status)
   109  
   110  	require.Equal(t, uint64(7), cs.Height(), "ledger ReadWriter is initialized")
   111  	require.Equal(t, "mychannel", cs.ConfigtxValidator().ChannelID(), "ChannelConfig is initialized")
   112  	require.Equal(t, msgprocessor.ConfigUpdateMsg,
   113  		cs.ClassifyMsg(&common.ChannelHeader{
   114  			Type:      int32(common.HeaderType_CONFIG_UPDATE),
   115  			ChannelId: "mychannel",
   116  		}), "Message processor is initialized")
   117  }