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  }