@@ -17,9 +17,11 @@ limitations under the License.
17
17
package gossip
18
18
19
19
import (
20
+ "errors"
20
21
"fmt"
21
22
"testing"
22
23
24
+ "github.com/golang/protobuf/proto"
23
25
"github.com/hyperledger/fabric/gossip/common"
24
26
"github.com/stretchr/testify/assert"
25
27
)
@@ -670,6 +672,146 @@ func TestGossipMessageLeadershipMessageTagType(t *testing.T) {
670
672
assert .Error (t , msg .IsTagLegal ())
671
673
}
672
674
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
+
673
815
func envelopes () []* Envelope {
674
816
return []* Envelope {
675
817
{Payload : []byte {2 , 2 , 2 },
0 commit comments