Skip to content

Commit 2ef1cc8

Browse files
committed
[FAB-3452] peer/gossip test-coverage (2)
This change-set addresses the second step defined in the FAB. Namely, it improves the test coverage of peer/gossip to over 85% Change-Id: Icd2827246f107fa5558e5fa13e971e08ea21260c Signed-off-by: Angelo De Caro <[email protected]>
1 parent ecc29dd commit 2ef1cc8

File tree

8 files changed

+70
-39
lines changed

8 files changed

+70
-39
lines changed

core/peer/peer_test.go

+5-1
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,11 @@ func TestCreateChainFromBlock(t *testing.T) {
9696

9797
identity, _ := mgmt.GetLocalSigningIdentityOrPanic().Serialize()
9898
messageCryptoService := peergossip.NewMCS(&mocks.ChannelPolicyManagerGetter{}, localmsp.NewSigner(), mgmt.NewDeserializersManager())
99-
service.InitGossipServiceCustomDeliveryFactory(identity, "localhost:13611", grpcServer, &mockDeliveryClientFactory{}, messageCryptoService)
99+
secAdv := peergossip.NewSecurityAdvisor(mgmt.NewDeserializersManager())
100+
service.InitGossipServiceCustomDeliveryFactory(
101+
identity, "localhost:13611", grpcServer,
102+
&mockDeliveryClientFactory{},
103+
messageCryptoService, secAdv)
100104

101105
err = CreateChainFromBlock(block)
102106
if err != nil {

core/scc/cscc/configure_test.go

+2-1
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,8 @@ func TestConfigerInvokeJoinChainCorrectParams(t *testing.T) {
166166

167167
identity, _ := mgmt.GetLocalSigningIdentityOrPanic().Serialize()
168168
messageCryptoService := peergossip.NewMCS(&mocks.ChannelPolicyManagerGetter{}, localmsp.NewSigner(), mgmt.NewDeserializersManager())
169-
service.InitGossipServiceCustomDeliveryFactory(identity, peerEndpoint, nil, &mockDeliveryClientFactory{}, messageCryptoService)
169+
secAdv := peergossip.NewSecurityAdvisor(mgmt.NewDeserializersManager())
170+
service.InitGossipServiceCustomDeliveryFactory(identity, peerEndpoint, nil, &mockDeliveryClientFactory{}, messageCryptoService, secAdv)
170171

171172
// Successful path for JoinChain
172173
blockBytes := mockConfigBlock()

gossip/service/gossip_service.go

+3-6
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ import (
3131
"github.com/hyperledger/fabric/gossip/integration"
3232
"github.com/hyperledger/fabric/gossip/state"
3333
"github.com/hyperledger/fabric/gossip/util"
34-
peergossip "github.com/hyperledger/fabric/peer/gossip"
3534
"github.com/hyperledger/fabric/protos/common"
3635
proto "github.com/hyperledger/fabric/protos/gossip"
3736
"github.com/spf13/viper"
@@ -121,17 +120,17 @@ func (jcm *joinChannelMessage) AnchorPeersOf(org api.OrgIdentityType) []api.Anch
121120
var logger = util.GetLogger(util.LoggingServiceModule, "")
122121

123122
// InitGossipService initialize gossip service
124-
func InitGossipService(peerIdentity []byte, endpoint string, s *grpc.Server, mcs api.MessageCryptoService, bootPeers ...string) {
123+
func InitGossipService(peerIdentity []byte, endpoint string, s *grpc.Server, mcs api.MessageCryptoService, secAdv api.SecurityAdvisor, bootPeers ...string) {
125124
// TODO: Remove this.
126125
// TODO: This is a temporary work-around to make the gossip leader election module load its logger at startup
127126
// TODO: in order for the flogging package to register this logger in time so it can set the log levels as requested in the config
128127
util.GetLogger(util.LoggingElectionModule, "")
129-
InitGossipServiceCustomDeliveryFactory(peerIdentity, endpoint, s, &deliveryFactoryImpl{}, mcs, bootPeers...)
128+
InitGossipServiceCustomDeliveryFactory(peerIdentity, endpoint, s, &deliveryFactoryImpl{}, mcs, secAdv, bootPeers...)
130129
}
131130

132131
// InitGossipServiceCustomDeliveryFactory initialize gossip service with customize delivery factory
133132
// implementation, might be useful for testing and mocking purposes
134-
func InitGossipServiceCustomDeliveryFactory(peerIdentity []byte, endpoint string, s *grpc.Server, factory DeliveryServiceFactory, mcs api.MessageCryptoService, bootPeers ...string) {
133+
func InitGossipServiceCustomDeliveryFactory(peerIdentity []byte, endpoint string, s *grpc.Server, factory DeliveryServiceFactory, mcs api.MessageCryptoService, secAdv api.SecurityAdvisor, bootPeers ...string) {
135134
once.Do(func() {
136135
logger.Info("Initialize gossip with endpoint", endpoint, "and bootstrap set", bootPeers)
137136
dialOpts := []grpc.DialOption{}
@@ -141,8 +140,6 @@ func InitGossipServiceCustomDeliveryFactory(peerIdentity []byte, endpoint string
141140
dialOpts = append(dialOpts, grpc.WithInsecure())
142141
}
143142

144-
secAdv := peergossip.NewSecurityAdvisor()
145-
146143
if overrideEndpoint := viper.GetString("peer.gossip.endpoint"); overrideEndpoint != "" {
147144
endpoint = overrideEndpoint
148145
}

gossip/service/gossip_service_test.go

+6-3
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,8 @@ func TestInitGossipService(t *testing.T) {
6868
for i := 0; i < 10; i++ {
6969
go func() {
7070
messageCryptoService := peergossip.NewMCS(&mocks.ChannelPolicyManagerGetter{}, localmsp.NewSigner(), mgmt.NewDeserializersManager())
71-
InitGossipService(identity, "localhost:5611", grpcServer, messageCryptoService)
71+
secAdv := peergossip.NewSecurityAdvisor(mgmt.NewDeserializersManager())
72+
InitGossipService(identity, "localhost:5611", grpcServer, messageCryptoService, secAdv)
7273

7374
wg.Done()
7475
}()
@@ -702,7 +703,8 @@ func TestInvalidInitialization(t *testing.T) {
702703
go grpcServer.Serve(socket)
703704
defer grpcServer.Stop()
704705

705-
InitGossipService(api.PeerIdentityType("IDENTITY"), "localhost:7611", grpcServer, &naiveCryptoService{})
706+
secAdv := peergossip.NewSecurityAdvisor(mgmt.NewDeserializersManager())
707+
InitGossipService(api.PeerIdentityType("IDENTITY"), "localhost:7611", grpcServer, &naiveCryptoService{}, secAdv)
706708
gService := GetGossipService().(*gossipServiceImpl)
707709
defer gService.Stop()
708710

@@ -724,7 +726,8 @@ func TestChannelConfig(t *testing.T) {
724726
go grpcServer.Serve(socket)
725727
defer grpcServer.Stop()
726728

727-
InitGossipService(api.PeerIdentityType("IDENTITY"), "localhost:6611", grpcServer, &naiveCryptoService{})
729+
secAdv := peergossip.NewSecurityAdvisor(mgmt.NewDeserializersManager())
730+
InitGossipService(api.PeerIdentityType("IDENTITY"), "localhost:6611", grpcServer, &naiveCryptoService{}, secAdv)
728731
gService := GetGossipService().(*gossipServiceImpl)
729732
defer gService.Stop()
730733

peer/gossip/mcs_test.go

+33
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,32 @@ func TestPKIidOfNil(t *testing.T) {
7676
assert.Nil(t, pkid, "PKID must be nil")
7777
}
7878

79+
func TestValidateIdentity(t *testing.T) {
80+
deserializersManager := &mocks.DeserializersManager{
81+
LocalDeserializer: &mocks.IdentityDeserializer{[]byte("Alice"), []byte("msg1")},
82+
ChannelDeserializers: map[string]msp.IdentityDeserializer{
83+
"A": &mocks.IdentityDeserializer{[]byte("Bob"), []byte("msg2")},
84+
},
85+
}
86+
msgCryptoService := NewMCS(
87+
&mocks.ChannelPolicyManagerGetterWithManager{},
88+
&mockscrypto.LocalSigner{Identity: []byte("Charlie")},
89+
deserializersManager,
90+
)
91+
92+
err := msgCryptoService.ValidateIdentity([]byte("Alice"))
93+
assert.NoError(t, err)
94+
95+
err = msgCryptoService.ValidateIdentity([]byte("Bob"))
96+
assert.NoError(t, err)
97+
98+
err = msgCryptoService.ValidateIdentity([]byte("Charlie"))
99+
assert.Error(t, err)
100+
101+
err = msgCryptoService.ValidateIdentity(nil)
102+
assert.Error(t, err)
103+
}
104+
79105
func TestSign(t *testing.T) {
80106
msgCryptoService := NewMCS(
81107
&mocks.ChannelPolicyManagerGetter{},
@@ -127,6 +153,9 @@ func TestVerify(t *testing.T) {
127153
err = msgCryptoService.Verify(api.PeerIdentityType("Dave"), sigma, msg)
128154
assert.Error(t, err)
129155
assert.Contains(t, fmt.Sprintf("%v", err), "Could not acquire policy manager")
156+
157+
// Check invalid args
158+
assert.Error(t, msgCryptoService.Verify(nil, sigma, msg))
130159
}
131160

132161
func TestVerifyBlock(t *testing.T) {
@@ -173,6 +202,10 @@ func TestVerifyBlock(t *testing.T) {
173202

174203
// - Verify block
175204
assert.Error(t, msgCryptoService.VerifyBlock([]byte("C"), blockRaw))
205+
206+
// Check invalid args
207+
assert.Error(t, msgCryptoService.VerifyBlock([]byte("C"), []byte{0, 1, 2, 3, 4}))
208+
assert.Error(t, msgCryptoService.VerifyBlock([]byte("C"), nil))
176209
}
177210

178211
func mockBlock(t *testing.T, channel string, localSigner crypto.LocalSigner, dataHash []byte) ([]byte, []byte) {

peer/gossip/sa.go

+5-4
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,13 @@ var saLogger = flogging.MustGetLogger("peer/gossip/sa")
3333
//
3434
// This implementation assumes that these mechanisms are all in place and working.
3535
type mspSecurityAdvisor struct {
36+
deserializer mgmt.DeserializersManager
3637
}
3738

3839
// NewSecurityAdvisor creates a new instance of mspSecurityAdvisor
3940
// that implements MessageCryptoService
40-
func NewSecurityAdvisor() api.SecurityAdvisor {
41-
return &mspSecurityAdvisor{}
41+
func NewSecurityAdvisor(deserializer mgmt.DeserializersManager) api.SecurityAdvisor {
42+
return &mspSecurityAdvisor{deserializer: deserializer}
4243
}
4344

4445
// OrgByPeerIdentity returns the OrgIdentityType
@@ -64,13 +65,13 @@ func (advisor *mspSecurityAdvisor) OrgByPeerIdentity(peerIdentity api.PeerIdenti
6465
// namely the identity's MSP identifier be returned (Identity.GetMSPIdentifier())
6566

6667
// First check against the local MSP.
67-
identity, err := mgmt.GetLocalMSP().DeserializeIdentity([]byte(peerIdentity))
68+
identity, err := advisor.deserializer.GetLocalDeserializer().DeserializeIdentity([]byte(peerIdentity))
6869
if err == nil {
6970
return []byte(identity.GetMSPIdentifier())
7071
}
7172

7273
// Check against managers
73-
for chainID, mspManager := range mgmt.GetDeserializers() {
74+
for chainID, mspManager := range advisor.deserializer.GetChannelDeserializers() {
7475
// Deserialize identity
7576
identity, err := mspManager.DeserializeIdentity([]byte(peerIdentity))
7677
if err != nil {

peer/gossip/sa_test.go

+13-23
Original file line numberDiff line numberDiff line change
@@ -19,32 +19,22 @@ package gossip
1919
import (
2020
"testing"
2121

22-
"fmt"
23-
"os"
24-
25-
"github.com/hyperledger/fabric/gossip/api"
26-
"github.com/hyperledger/fabric/msp/mgmt"
27-
"github.com/hyperledger/fabric/msp/mgmt/testtools"
22+
"github.com/hyperledger/fabric/msp"
23+
"github.com/hyperledger/fabric/peer/gossip/mocks"
2824
"github.com/stretchr/testify/assert"
2925
)
3026

31-
func TestMain(m *testing.M) {
32-
// Setup the MSP manager so that we can sign/verify
33-
err := msptesttools.LoadMSPSetupForTesting()
34-
if err != nil {
35-
fmt.Printf("Failed LoadFakeSetupWithLocalMspAndTestChainMsp [%s]", err)
36-
os.Exit(-1)
27+
func TestMspSecurityAdvisor_OrgByPeerIdentity(t *testing.T) {
28+
dm := &mocks.DeserializersManager{
29+
LocalDeserializer: &mocks.IdentityDeserializer{[]byte("Alice"), []byte("msg1")},
30+
ChannelDeserializers: map[string]msp.IdentityDeserializer{
31+
"A": &mocks.IdentityDeserializer{[]byte("Bob"), []byte("msg2")},
32+
},
3733
}
38-
os.Exit(m.Run())
39-
}
4034

41-
func TestMspSecurityAdvisor_OrgByPeerIdentity(t *testing.T) {
42-
id, err := mgmt.GetLocalMSP().GetDefaultSigningIdentity()
43-
assert.NoError(t, err, "Failed getting local default signing identity")
44-
identityRaw, err := id.Serialize()
45-
assert.NoError(t, err, "Failed serializing local default signing identity")
46-
47-
advisor := NewSecurityAdvisor()
48-
orgIdentity := advisor.OrgByPeerIdentity(api.PeerIdentityType(identityRaw))
49-
assert.NotNil(t, orgIdentity, "Organization for identity must be different from nil")
35+
advisor := NewSecurityAdvisor(dm)
36+
assert.NotNil(t, advisor.OrgByPeerIdentity([]byte("Alice")))
37+
assert.NotNil(t, advisor.OrgByPeerIdentity([]byte("Bob")))
38+
assert.Nil(t, advisor.OrgByPeerIdentity([]byte("Charlie")))
39+
assert.Nil(t, advisor.OrgByPeerIdentity(nil))
5040
}

peer/node/start.go

+3-1
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,9 @@ func serve(args []string) error {
161161
peer.NewChannelPolicyManagerGetter(),
162162
localmsp.NewSigner(),
163163
mgmt.NewDeserializersManager())
164-
service.InitGossipService(serializedIdentity, peerEndpoint.Address, peerServer.Server(), messageCryptoService, bootstrap...)
164+
secAdv := peergossip.NewSecurityAdvisor(mgmt.NewDeserializersManager())
165+
166+
service.InitGossipService(serializedIdentity, peerEndpoint.Address, peerServer.Server(), messageCryptoService, secAdv, bootstrap...)
165167
defer service.GetGossipService().Stop()
166168

167169
//initialize system chaincodes

0 commit comments

Comments
 (0)