github.com/hechain20/hechain@v0.0.0-20220316014945-b544036ba106/gossip/util/msgs_test.go (about) 1 /* 2 Copyright hechain. All Rights Reserved. 3 4 SPDX-License-Identifier: Apache-2.0 5 */ 6 7 package util 8 9 import ( 10 "reflect" 11 "testing" 12 13 "github.com/hechain20/hechain/gossip/common" 14 "github.com/hechain20/hechain/gossip/protoext" 15 proto "github.com/hyperledger/fabric-protos-go/gossip" 16 "github.com/stretchr/testify/require" 17 ) 18 19 func init() { 20 SetupTestLogging() 21 } 22 23 func TestMembershipStore(t *testing.T) { 24 membershipStore := NewMembershipStore() 25 26 id1 := common.PKIidType("id1") 27 id2 := common.PKIidType("id2") 28 29 msg1 := &protoext.SignedGossipMessage{} 30 msg2 := &protoext.SignedGossipMessage{Envelope: &proto.Envelope{}} 31 32 // Test initially created store is empty 33 require.Nil(t, membershipStore.MsgByID(id1)) 34 require.Equal(t, membershipStore.Size(), 0) 35 // Test put works as expected 36 membershipStore.Put(id1, msg1) 37 require.NotNil(t, membershipStore.MsgByID(id1)) 38 // Test MsgByID returns the right instance stored 39 membershipStore.Put(id2, msg2) 40 require.Equal(t, msg1, membershipStore.MsgByID(id1)) 41 require.NotEqual(t, msg2, membershipStore.MsgByID(id1)) 42 // Test capacity grows 43 require.Equal(t, membershipStore.Size(), 2) 44 // Test remove works 45 membershipStore.Remove(id1) 46 require.Nil(t, membershipStore.MsgByID(id1)) 47 require.Equal(t, membershipStore.Size(), 1) 48 // Test returned instance is not a copy 49 msg3 := &protoext.SignedGossipMessage{GossipMessage: &proto.GossipMessage{}} 50 msg3Clone := &protoext.SignedGossipMessage{GossipMessage: &proto.GossipMessage{}} 51 id3 := common.PKIidType("id3") 52 membershipStore.Put(id3, msg3) 53 require.Equal(t, msg3Clone, msg3) 54 membershipStore.MsgByID(id3).Channel = []byte{0, 1, 2, 3} 55 require.NotEqual(t, msg3Clone, msg3) 56 } 57 58 func TestToSlice(t *testing.T) { 59 membershipStore := NewMembershipStore() 60 id1 := common.PKIidType("id1") 61 id2 := common.PKIidType("id2") 62 id3 := common.PKIidType("id3") 63 id4 := common.PKIidType("id4") 64 65 msg1 := &protoext.SignedGossipMessage{} 66 msg2 := &protoext.SignedGossipMessage{Envelope: &proto.Envelope{}} 67 msg3 := &protoext.SignedGossipMessage{GossipMessage: &proto.GossipMessage{}} 68 msg4 := &protoext.SignedGossipMessage{GossipMessage: &proto.GossipMessage{}, Envelope: &proto.Envelope{}} 69 70 membershipStore.Put(id1, msg1) 71 membershipStore.Put(id2, msg2) 72 membershipStore.Put(id3, msg3) 73 membershipStore.Put(id4, msg4) 74 75 require.Len(t, membershipStore.ToSlice(), 4) 76 77 existsInSlice := func(slice []*protoext.SignedGossipMessage, msg *protoext.SignedGossipMessage) bool { 78 for _, m := range slice { 79 if reflect.DeepEqual(m, msg) { 80 return true 81 } 82 } 83 return false 84 } 85 86 expectedMsgs := []*protoext.SignedGossipMessage{msg1, msg2, msg3, msg4} 87 for _, msg := range membershipStore.ToSlice() { 88 require.True(t, existsInSlice(expectedMsgs, msg)) 89 } 90 }