github.com/adnan-c/fabric_e2e_couchdb@v0.6.1-preview.0.20170228180935-21ce6b23cf91/protos/gossip/extensions_test.go (about) 1 /* 2 Copyright IBM Corp. 2017 All Rights Reserved. 3 4 Licensed under the Apache License, Version 2.0 (the "License"); 5 you may not use this file except in compliance with the License. 6 You may obtain a copy of the License at 7 8 http://www.apache.org/licenses/LICENSE-2.0 9 10 Unless required by applicable law or agreed to in writing, software 11 distributed under the License is distributed on an "AS IS" BASIS, 12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 See the License for the specific language governing permissions and 14 limitations under the License. 15 */ 16 17 package gossip 18 19 import ( 20 "fmt" 21 "testing" 22 23 "github.com/stretchr/testify/assert" 24 ) 25 26 func TestToString(t *testing.T) { 27 // Ensure we don't print the byte content when we 28 // log messages. 29 // Each payload or signature contains '2' so we would've logged 30 // them if not for the overloading of the String() method in SignedGossipMessage 31 32 // The following line proves that the envelopes constructed in this test 33 // have "2" in them when they are printed 34 assert.Contains(t, fmt.Sprintf("%v", envelopes()[0]), "2") 35 // and the following does the same for payloads: 36 dMsg := &DataMessage{ 37 Payload: &Payload{ 38 SeqNum: 3, 39 Data: []byte{2, 2, 2, 2, 2}, 40 }, 41 } 42 assert.Contains(t, fmt.Sprintf("%v", dMsg), "2") 43 44 // Now we construct all types of messages that have envelopes or payloads in them 45 // and see that "2" is not outputted into their formatting even though it is found 46 // as a sub-message of the outer message. 47 48 sMsg := &SignedGossipMessage{ 49 GossipMessage: &GossipMessage{ 50 Tag: GossipMessage_EMPTY, 51 Nonce: 5, 52 Channel: []byte("A"), 53 Content: &GossipMessage_DataMsg{ 54 DataMsg: &DataMessage{ 55 Payload: &Payload{ 56 SeqNum: 3, 57 Data: []byte{2, 2, 2, 2, 2}, 58 }, 59 }, 60 }, 61 }, 62 Envelope: &Envelope{ 63 Payload: []byte{0, 1, 2, 3, 4, 5, 6}, 64 Signature: []byte{0, 1, 2}, 65 SecretEnvelope: &SecretEnvelope{ 66 Payload: []byte{0, 1, 2, 3, 4, 5}, 67 Signature: []byte{0, 1, 2}, 68 }, 69 }, 70 } 71 assert.NotContains(t, fmt.Sprintf("%v", sMsg), "2") 72 73 sMsg = &SignedGossipMessage{ 74 GossipMessage: &GossipMessage{ 75 Channel: []byte("A"), 76 Tag: GossipMessage_EMPTY, 77 Nonce: 5, 78 Content: &GossipMessage_DataUpdate{ 79 DataUpdate: &DataUpdate{ 80 Nonce: 11, 81 MsgType: PullMsgType_BlockMessage, 82 Data: envelopes(), 83 }, 84 }, 85 }, 86 Envelope: envelopes()[0], 87 } 88 assert.NotContains(t, fmt.Sprintf("%v", sMsg), "2") 89 90 sMsg = &SignedGossipMessage{ 91 GossipMessage: &GossipMessage{ 92 Channel: []byte("A"), 93 Tag: GossipMessage_EMPTY, 94 Nonce: 5, 95 Content: &GossipMessage_MemRes{ 96 MemRes: &MembershipResponse{ 97 Alive: envelopes(), 98 Dead: envelopes(), 99 }, 100 }, 101 }, 102 Envelope: envelopes()[0], 103 } 104 assert.NotContains(t, fmt.Sprintf("%v", sMsg), "2") 105 106 sMsg = &SignedGossipMessage{ 107 GossipMessage: &GossipMessage{ 108 Channel: []byte("A"), 109 Tag: GossipMessage_EMPTY, 110 Nonce: 5, 111 Content: &GossipMessage_StateSnapshot{ 112 StateSnapshot: &StateInfoSnapshot{ 113 Elements: envelopes(), 114 }, 115 }, 116 }, 117 Envelope: envelopes()[0], 118 } 119 assert.NotContains(t, fmt.Sprintf("%v", sMsg), "2") 120 121 sMsg = &SignedGossipMessage{ 122 GossipMessage: &GossipMessage{ 123 Channel: []byte("A"), 124 Tag: GossipMessage_EMPTY, 125 Nonce: 5, 126 Content: &GossipMessage_StateResponse{ 127 StateResponse: &RemoteStateResponse{ 128 Payloads: []*Payload{ 129 {Data: []byte{2, 2, 2}}, 130 }, 131 }, 132 }, 133 }, 134 Envelope: envelopes()[0], 135 } 136 assert.NotContains(t, fmt.Sprintf("%v", sMsg), "2") 137 } 138 139 func envelopes() []*Envelope { 140 return []*Envelope{ 141 {Payload: []byte{2, 2, 2}, 142 Signature: []byte{2, 2, 2}, 143 SecretEnvelope: &SecretEnvelope{ 144 Payload: []byte{2, 2, 2}, 145 Signature: []byte{2, 2, 2}, 146 }, 147 }, 148 } 149 }