github.com/hechain20/hechain@v0.0.0-20220316014945-b544036ba106/gossip/comm/mock/mock_comm_test.go (about) 1 /* 2 Copyright hechain. 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/hechain20/hechain/gossip/comm" 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 TestMockComm(t *testing.T) { 20 first := &socketMock{"first", make(chan interface{})} 21 second := &socketMock{"second", make(chan interface{})} 22 members := make(map[string]*socketMock) 23 24 members[first.endpoint] = first 25 members[second.endpoint] = second 26 27 comm1 := NewCommMock(first.endpoint, members) 28 defer comm1.Stop() 29 30 msgCh := comm1.Accept(func(message interface{}) bool { 31 return message.(protoext.ReceivedMessage).GetGossipMessage().GetStateRequest() != nil || 32 message.(protoext.ReceivedMessage).GetGossipMessage().GetStateResponse() != nil 33 }) 34 35 comm2 := NewCommMock(second.endpoint, members) 36 defer comm2.Stop() 37 38 sMsg, _ := protoext.NoopSign(&proto.GossipMessage{ 39 Content: &proto.GossipMessage_StateRequest{StateRequest: &proto.RemoteStateRequest{ 40 StartSeqNum: 1, 41 EndSeqNum: 3, 42 }}, 43 }) 44 comm2.Send(sMsg, &comm.RemotePeer{Endpoint: "first", PKIID: common.PKIidType("first")}) 45 46 msg := <-msgCh 47 48 require.NotNil(t, msg.GetGossipMessage().GetStateRequest()) 49 require.Equal(t, "first", string(comm1.GetPKIid())) 50 } 51 52 func TestMockComm_PingPong(t *testing.T) { 53 members := make(map[string]*socketMock) 54 55 members["peerA"] = &socketMock{"peerA", make(chan interface{})} 56 members["peerB"] = &socketMock{"peerB", make(chan interface{})} 57 58 peerA := NewCommMock("peerA", members) 59 peerB := NewCommMock("peerB", members) 60 61 all := func(interface{}) bool { 62 return true 63 } 64 65 rcvChA := peerA.Accept(all) 66 rcvChB := peerB.Accept(all) 67 68 sMsg, _ := protoext.NoopSign(&proto.GossipMessage{ 69 Content: &proto.GossipMessage_DataMsg{ 70 DataMsg: &proto.DataMessage{ 71 Payload: &proto.Payload{ 72 SeqNum: 1, 73 Data: []byte("Ping"), 74 }, 75 }, 76 }, 77 }) 78 peerA.Send(sMsg, &comm.RemotePeer{Endpoint: "peerB", PKIID: common.PKIidType("peerB")}) 79 80 msg := <-rcvChB 81 dataMsg := msg.GetGossipMessage().GetDataMsg() 82 data := string(dataMsg.Payload.Data) 83 require.Equal(t, "Ping", data) 84 85 msg.Respond(&proto.GossipMessage{ 86 Content: &proto.GossipMessage_DataMsg{ 87 DataMsg: &proto.DataMessage{ 88 Payload: &proto.Payload{ 89 SeqNum: 1, 90 Data: []byte("Pong"), 91 }, 92 }, 93 }, 94 }) 95 96 msg = <-rcvChA 97 dataMsg = msg.GetGossipMessage().GetDataMsg() 98 data = string(dataMsg.Payload.Data) 99 require.Equal(t, "Pong", data) 100 }