Skip to content

Commit 337d60d

Browse files
committed
[FAB-3526]: UT to cover gossip secret message ext.
There are few extension added for gossip proto generated files, including gossip secret message structure. Need to add test to cover this functionality. This commit brings coverage of extensions.go to 94% LOC. Change-Id: If49e662ca49394d419d90723681ac35341164574 Signed-off-by: Artem Barger <[email protected]>
1 parent 07146cf commit 337d60d

File tree

1 file changed

+142
-0
lines changed

1 file changed

+142
-0
lines changed

protos/gossip/extensions_test.go

+142
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,11 @@ limitations under the License.
1717
package gossip
1818

1919
import (
20+
"errors"
2021
"fmt"
2122
"testing"
2223

24+
"github.com/golang/protobuf/proto"
2325
"github.com/hyperledger/fabric/gossip/common"
2426
"github.com/stretchr/testify/assert"
2527
)
@@ -670,6 +672,146 @@ func TestGossipMessageLeadershipMessageTagType(t *testing.T) {
670672
assert.Error(t, msg.IsTagLegal())
671673
}
672674

675+
func TestConnectionInfo_IsAuthenticated(t *testing.T) {
676+
connInfo := &ConnectionInfo{
677+
ID: common.PKIidType("peerID"),
678+
}
679+
680+
assert.False(t, connInfo.IsAuthenticated())
681+
682+
connInfo = &ConnectionInfo{
683+
ID: common.PKIidType("peerID"),
684+
Auth: &AuthInfo{},
685+
}
686+
687+
assert.True(t, connInfo.IsAuthenticated())
688+
}
689+
690+
func TestGossipMessageSign(t *testing.T) {
691+
idSigner := func(msg []byte) ([]byte, error) {
692+
return msg, nil
693+
}
694+
695+
errSigner := func(msg []byte) ([]byte, error) {
696+
return nil, errors.New("Error")
697+
}
698+
699+
msg := signedGossipMessage("testChannelID", GossipMessage_EMPTY, &GossipMessage_DataMsg{
700+
DataMsg: &DataMessage{},
701+
})
702+
703+
signedMsg := msg.Sign(idSigner)
704+
705+
// Since checking the identity signer, signature will be same as the payload
706+
assert.Equal(t, signedMsg.Payload, signedMsg.Signature)
707+
708+
defer func() {
709+
if r := recover(); r == nil {
710+
t.Error("Using error signer should lead to the panic")
711+
}
712+
}()
713+
714+
_ = msg.Sign(errSigner)
715+
}
716+
717+
func TestEnvelope_NoopSign(t *testing.T) {
718+
channelID := "testChannelID"
719+
msg := signedGossipMessage(channelID, GossipMessage_EMPTY, &GossipMessage_DataMsg{
720+
DataMsg: &DataMessage{},
721+
})
722+
723+
signedMsg := msg.NoopSign()
724+
725+
// Since checking the identity signer, signature will be same as the payload
726+
assert.Nil(t, signedMsg.Signature)
727+
}
728+
729+
func TestSignedGossipMessage_Verify(t *testing.T) {
730+
channelID := "testChannelID"
731+
peerID := []byte("peer")
732+
msg := signedGossipMessage(channelID, GossipMessage_EMPTY, &GossipMessage_DataMsg{
733+
DataMsg: &DataMessage{},
734+
})
735+
736+
assert.True(t, msg.IsSigned())
737+
738+
verifier := func(peerIdentity []byte, signature, message []byte) error {
739+
return nil
740+
}
741+
742+
res := msg.Verify(peerID, verifier)
743+
assert.Nil(t, res)
744+
745+
msg = signedGossipMessage(channelID, GossipMessage_EMPTY, &GossipMessage_DataMsg{
746+
DataMsg: &DataMessage{},
747+
})
748+
749+
env := msg.Envelope
750+
msg.Envelope = nil
751+
res = msg.Verify(peerID, verifier)
752+
assert.Error(t, res)
753+
754+
msg.Envelope = env
755+
payload := msg.Envelope.Payload
756+
msg.Envelope.Payload = nil
757+
res = msg.Verify(peerID, verifier)
758+
assert.Error(t, res)
759+
760+
msg.Envelope.Payload = payload
761+
sig := msg.Signature
762+
msg.Signature = nil
763+
res = msg.Verify(peerID, verifier)
764+
assert.Error(t, res)
765+
msg.Signature = sig
766+
767+
errVerifier := func(peerIdentity []byte, signature, message []byte) error {
768+
return errors.New("Test")
769+
}
770+
771+
res = msg.Verify(peerID, errVerifier)
772+
assert.Error(t, res)
773+
}
774+
775+
func TestEnvelope(t *testing.T) {
776+
dataMsg := &GossipMessage{
777+
Content: dataMessage(1, "hash", []byte("data")),
778+
}
779+
bytes, err := proto.Marshal(dataMsg)
780+
assert.NoError(t, err)
781+
782+
env := envelopes()[0]
783+
env.Payload = bytes
784+
785+
msg, err := env.ToGossipMessage()
786+
assert.NoError(t, err)
787+
assert.NotNil(t, msg)
788+
789+
assert.True(t, msg.IsDataMsg())
790+
}
791+
792+
func TestEnvelope_SignSecret(t *testing.T) {
793+
dataMsg := &GossipMessage{
794+
Content: dataMessage(1, "hash", []byte("data")),
795+
}
796+
bytes, err := proto.Marshal(dataMsg)
797+
assert.NoError(t, err)
798+
799+
env := envelopes()[0]
800+
env.Payload = bytes
801+
env.SecretEnvelope = nil
802+
803+
env.SignSecret(func(message []byte) ([]byte, error) {
804+
return message, nil
805+
}, &Secret{
806+
Content: &Secret_InternalEndpoint{
807+
InternalEndpoint: "localhost:5050",
808+
},
809+
})
810+
811+
assert.NotNil(t, env.SecretEnvelope)
812+
assert.Equal(t, env.SecretEnvelope.InternalEndpoint(), "localhost:5050")
813+
}
814+
673815
func envelopes() []*Envelope {
674816
return []*Envelope{
675817
{Payload: []byte{2, 2, 2},

0 commit comments

Comments
 (0)