github.com/myafeier/fabric@v1.0.1-0.20170722181825-3a4b1f2bce86/gossip/comm/mock/mock_comm_test.go (about) 1 /* 2 Copyright IBM Corp. All Rights Reserved. 3 4 SPDX-License-Identifier: Apache-2.0 5 */ 6 7 package mock 8 9 import ( 10 "testing" 11 12 "github.com/hyperledger/fabric/gossip/comm" 13 "github.com/hyperledger/fabric/gossip/common" 14 proto "github.com/hyperledger/fabric/protos/gossip" 15 "github.com/stretchr/testify/assert" 16 ) 17 18 func TestMockComm(t *testing.T) { 19 first := &socketMock{"first", make(chan interface{})} 20 second := &socketMock{"second", make(chan interface{})} 21 members := make(map[string]*socketMock) 22 23 members[first.endpoint] = first 24 members[second.endpoint] = second 25 26 comm1 := NewCommMock(first.endpoint, members) 27 defer comm1.Stop() 28 29 msgCh := comm1.Accept(func(message interface{}) bool { 30 return message.(proto.ReceivedMessage).GetGossipMessage().GetStateRequest() != nil || 31 message.(proto.ReceivedMessage).GetGossipMessage().GetStateResponse() != nil 32 }) 33 34 comm2 := NewCommMock(second.endpoint, members) 35 defer comm2.Stop() 36 37 sMsg, _ := (&proto.GossipMessage{ 38 Content: &proto.GossipMessage_StateRequest{&proto.RemoteStateRequest{ 39 StartSeqNum: 1, 40 EndSeqNum: 3, 41 }}, 42 }).NoopSign() 43 comm2.Send(sMsg, &comm.RemotePeer{"first", common.PKIidType("first")}) 44 45 msg := <-msgCh 46 47 assert.NotNil(t, msg.GetGossipMessage().GetStateRequest()) 48 assert.Equal(t, "first", string(comm1.GetPKIid())) 49 } 50 51 func TestMockComm_PingPong(t *testing.T) { 52 members := make(map[string]*socketMock) 53 54 members["peerA"] = &socketMock{"peerA", make(chan interface{})} 55 members["peerB"] = &socketMock{"peerB", make(chan interface{})} 56 57 peerA := NewCommMock("peerA", members) 58 peerB := NewCommMock("peerB", members) 59 60 all := func(interface{}) bool { 61 return true 62 } 63 64 rcvChA := peerA.Accept(all) 65 rcvChB := peerB.Accept(all) 66 67 sMsg, _ := (&proto.GossipMessage{ 68 Content: &proto.GossipMessage_DataMsg{ 69 &proto.DataMessage{ 70 &proto.Payload{ 71 SeqNum: 1, 72 Data: []byte("Ping"), 73 }, 74 }}, 75 }).NoopSign() 76 peerA.Send(sMsg, &comm.RemotePeer{"peerB", common.PKIidType("peerB")}) 77 78 msg := <-rcvChB 79 dataMsg := msg.GetGossipMessage().GetDataMsg() 80 data := string(dataMsg.Payload.Data) 81 assert.Equal(t, "Ping", data) 82 83 msg.Respond(&proto.GossipMessage{ 84 Content: &proto.GossipMessage_DataMsg{ 85 &proto.DataMessage{ 86 &proto.Payload{ 87 SeqNum: 1, 88 Data: []byte("Pong"), 89 }, 90 }}, 91 }) 92 93 msg = <-rcvChA 94 dataMsg = msg.GetGossipMessage().GetDataMsg() 95 data = string(dataMsg.Payload.Data) 96 assert.Equal(t, "Pong", data) 97 98 }