github.com/lzy4123/fabric@v2.1.1+incompatible/gossip/protoext/stringers_test.go (about)

     1  /*
     2  Copyright IBM Corp. All Rights Reserved.
     3  
     4  SPDX-License-Identifier: Apache-2.0
     5  */
     6  
     7  package protoext_test
     8  
     9  import (
    10  	"testing"
    11  
    12  	"github.com/hyperledger/fabric-protos-go/gossip"
    13  	"github.com/hyperledger/fabric/gossip/protoext"
    14  	"github.com/stretchr/testify/assert"
    15  )
    16  
    17  func TestMembershipResponseToString(t *testing.T) {
    18  	mr := &gossip.MembershipResponse{
    19  		Alive: envelopes(),
    20  		Dead:  envelopes(),
    21  	}
    22  	output := "MembershipResponse with Alive: 1, Dead: 1"
    23  	assert.Equal(t, output, protoext.MembershipResponseToString(mr))
    24  }
    25  
    26  func TestMembershipRequestToString(t *testing.T) {
    27  	gossipMessage := &gossip.GossipMessage{
    28  		Nonce:   5,
    29  		Channel: []byte("A"),
    30  		Tag:     0,
    31  		Content: &gossip.GossipMessage_DataMsg{
    32  			DataMsg: &gossip.DataMessage{
    33  				Payload: &gossip.Payload{
    34  					SeqNum: 3,
    35  					Data:   []byte{2, 2, 2, 2, 2},
    36  				},
    37  			},
    38  		},
    39  	}
    40  	nn, _ := protoext.NoopSign(gossipMessage)
    41  	sMsg := &protoext.SignedGossipMessage{
    42  		GossipMessage: &gossip.GossipMessage{
    43  			Tag:     gossip.GossipMessage_EMPTY,
    44  			Nonce:   5,
    45  			Channel: []byte("A"),
    46  			Content: &gossip.GossipMessage_DataMsg{
    47  				DataMsg: &gossip.DataMessage{
    48  					Payload: &gossip.Payload{
    49  						SeqNum: 3,
    50  						Data:   []byte{2, 2, 2, 2, 2},
    51  					},
    52  				},
    53  			},
    54  		},
    55  		Envelope: &gossip.Envelope{
    56  			Payload:   nn.Envelope.Payload,
    57  			Signature: []byte{0, 1, 2},
    58  			SecretEnvelope: &gossip.SecretEnvelope{
    59  				Payload:   []byte{0, 1, 2, 3, 4, 5},
    60  				Signature: []byte{0, 1, 2},
    61  			},
    62  		},
    63  	}
    64  	mr := &gossip.MembershipRequest{
    65  		SelfInformation: sMsg.Envelope,
    66  		Known:           [][]byte{},
    67  	}
    68  
    69  	output := "Membership Request with self information of GossipMessage: Channel: A, nonce: 5, tag: UNDEFINED Block message: {Data: 5 bytes, seq: 3}, Envelope: 18 bytes, Signature: 3 bytes Secret payload: 6 bytes, Secret Signature: 3 bytes "
    70  	assert.Equal(t, output, protoext.MembershipRequestToString(mr))
    71  
    72  	mr1 := &gossip.MembershipRequest{
    73  		SelfInformation: &gossip.Envelope{
    74  			Payload:   []byte{1, 2, 3},
    75  			Signature: []byte{0, 1, 2},
    76  			SecretEnvelope: &gossip.SecretEnvelope{
    77  				Payload:   []byte{0, 1, 2, 3, 4, 5},
    78  				Signature: []byte{0, 1, 2},
    79  			},
    80  		},
    81  		Known: [][]byte{},
    82  	}
    83  	assert.Equal(t, "", protoext.MembershipRequestToString(mr1))
    84  
    85  	mr2 := &gossip.MembershipRequest{
    86  		SelfInformation: nil,
    87  		Known:           [][]byte{},
    88  	}
    89  
    90  	assert.Equal(t, "", protoext.MembershipRequestToString(mr2))
    91  }
    92  
    93  func TestToStringMember(t *testing.T) {
    94  	member := &gossip.Member{
    95  		Endpoint: "localhost",
    96  		Metadata: []byte{1, 2, 3, 4, 5},
    97  		PkiId:    []byte{15},
    98  	}
    99  	output := "Membership: Endpoint:localhost PKI-id:0f"
   100  	assert.Equal(t, output, protoext.MemberToString(member))
   101  }
   102  
   103  func TestToStringAliveMessage(t *testing.T) {
   104  	am1 := &gossip.AliveMessage{
   105  		Membership: &gossip.Member{
   106  			Endpoint: "localhost",
   107  			Metadata: []byte{1, 2, 3, 4, 5},
   108  			PkiId:    []byte{17},
   109  		},
   110  		Timestamp: &gossip.PeerTime{
   111  			IncNum: 1,
   112  			SeqNum: 1,
   113  		},
   114  		Identity: []byte("peerID1"),
   115  	}
   116  	output1 := "Alive Message:Membership: Endpoint:localhost PKI-id:11Identity:Timestamp:inc_num:1 seq_num:1 "
   117  	assert.Equal(t, output1, protoext.AliveMessageToString(am1))
   118  	am2 := &gossip.AliveMessage{
   119  		Membership: nil,
   120  		Timestamp: &gossip.PeerTime{
   121  			IncNum: 1,
   122  			SeqNum: 1,
   123  		},
   124  		Identity: []byte("peerID1"),
   125  	}
   126  	output2 := "nil Membership"
   127  	assert.Equal(t, output2, protoext.AliveMessageToString(am2))
   128  }
   129  
   130  func TestToStringStateInfoPullRequest(t *testing.T) {
   131  	// Create State info pull request
   132  	sipr := &gossip.StateInfoPullRequest{
   133  		Channel_MAC: []byte{17},
   134  	}
   135  
   136  	output := "state_info_pull_req: Channel MAC:11"
   137  	assert.Equal(t, output, protoext.StateInfoPullRequestToString(sipr))
   138  }
   139  
   140  func TestToStringStateInfo(t *testing.T) {
   141  	si := &gossip.StateInfo{
   142  		Timestamp: &gossip.PeerTime{
   143  			IncNum: 1,
   144  			SeqNum: 1,
   145  		},
   146  		PkiId:       []byte{17},
   147  		Channel_MAC: []byte{17},
   148  		Properties:  nil,
   149  	}
   150  	output := "state_info_message: Timestamp:inc_num:1 seq_num:1 PKI-id:11 channel MAC:11 properties:<nil>"
   151  	assert.Equal(t, output, protoext.StateInfoToString(si))
   152  }
   153  
   154  func TestToStringDataDigest(t *testing.T) {
   155  	dig1 := &gossip.DataDigest{
   156  		Nonce:   0,
   157  		Digests: [][]byte{[]byte("msg1"), []byte("msg2"), []byte("msg3")},
   158  		MsgType: gossip.PullMsgType_BLOCK_MSG,
   159  	}
   160  	output1 := "data_dig: nonce: 0 , Msg_type: BLOCK_MSG, digests: [msg1 msg2 msg3]"
   161  	assert.Equal(t, output1, protoext.DataDigestToString(dig1))
   162  	dig2 := &gossip.DataDigest{
   163  		Nonce:   0,
   164  		Digests: [][]byte{[]byte("msg1"), []byte("msg2"), []byte("msg3")},
   165  		MsgType: gossip.PullMsgType_IDENTITY_MSG,
   166  	}
   167  	output2 := "data_dig: nonce: 0 , Msg_type: IDENTITY_MSG, digests: [6d736731 6d736732 6d736733]"
   168  	assert.Equal(t, output2, protoext.DataDigestToString(dig2))
   169  }
   170  
   171  func TestToStringDataRequest(t *testing.T) {
   172  	dataReq1 := &gossip.DataRequest{
   173  		Nonce:   0,
   174  		Digests: [][]byte{[]byte("msg1"), []byte("msg2"), []byte("msg3")},
   175  		MsgType: gossip.PullMsgType_BLOCK_MSG,
   176  	}
   177  	output1 := "data request: nonce: 0 , Msg_type: BLOCK_MSG, digests: [msg1 msg2 msg3]"
   178  	assert.Equal(t, output1, protoext.DataRequestToString(dataReq1))
   179  	dataReq2 := &gossip.DataRequest{
   180  		Nonce:   0,
   181  		Digests: [][]byte{[]byte("msg1"), []byte("msg2"), []byte("msg3")},
   182  		MsgType: gossip.PullMsgType_IDENTITY_MSG,
   183  	}
   184  	output2 := "data request: nonce: 0 , Msg_type: IDENTITY_MSG, digests: [6d736731 6d736732 6d736733]"
   185  	assert.Equal(t, output2, protoext.DataRequestToString(dataReq2))
   186  }
   187  
   188  func TestToStringLeadershipMessage(t *testing.T) {
   189  	lm := &gossip.LeadershipMessage{
   190  		Timestamp: &gossip.PeerTime{
   191  			IncNum: 1,
   192  			SeqNum: 1,
   193  		},
   194  		PkiId:         []byte{17},
   195  		IsDeclaration: true,
   196  	}
   197  	output := "Leadership Message: PKI-id:11 Timestamp:inc_num:1 seq_num:1 Is Declaration true"
   198  	assert.Equal(t, output, protoext.LeadershipMessageToString(lm))
   199  }
   200  
   201  func TestRemotePvtDataResponseToString(t *testing.T) {
   202  	res := &gossip.RemotePvtDataResponse{
   203  		Elements: []*gossip.PvtDataElement{
   204  			{Digest: &gossip.PvtDataDigest{TxId: "tx-id"}, Payload: [][]byte{[]byte("abcde")}},
   205  		},
   206  	}
   207  
   208  	output := `[tx_id:"tx-id"  with 1 elements]`
   209  	assert.Equal(t, output, protoext.RemovePvtDataResponseToString(res))
   210  }