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