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 }