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  }