github.com/osdi23p228/fabric@v0.0.0-20221218062954-77808885f5db/core/common/privdata/membershipinfo_test.go (about) 1 /* 2 Copyright IBM Corp. All Rights Reserved. 3 4 SPDX-License-Identifier: Apache-2.0 5 */ 6 7 package privdata 8 9 import ( 10 "testing" 11 12 "github.com/hyperledger/fabric-protos-go/peer" 13 "github.com/osdi23p228/fabric/common/policydsl" 14 "github.com/osdi23p228/fabric/msp" 15 "github.com/osdi23p228/fabric/protoutil" 16 "github.com/stretchr/testify/assert" 17 ) 18 19 func TestMembershipInfoProvider(t *testing.T) { 20 mspID := "peer0" 21 peerSelfSignedData := protoutil.SignedData{ 22 Identity: []byte("peer0"), 23 Signature: []byte{1, 2, 3}, 24 Data: []byte{4, 5, 6}, 25 } 26 emptyPeerSelfSignedData := protoutil.SignedData{} 27 28 identityDeserializer := func(chainID string) msp.IdentityDeserializer { 29 return &mockDeserializer{} 30 } 31 32 // verify membership provider pass simple check returns true 33 membershipProvider := NewMembershipInfoProvider(mspID, emptyPeerSelfSignedData, identityDeserializer) 34 res, err := membershipProvider.AmMemberOf("test1", getAccessPolicy([]string{"peer0", "peer1"})) 35 assert.True(t, res) 36 assert.Nil(t, err) 37 38 // verify membership provider fall back to default access policy evaluation returns false 39 membershipProvider = NewMembershipInfoProvider(mspID, peerSelfSignedData, identityDeserializer) 40 res, err = membershipProvider.AmMemberOf("test1", getAccessPolicy([]string{"peer2", "peer3"})) 41 assert.False(t, res) 42 assert.Nil(t, err) 43 44 // verify membership provider returns false and nil when collection policy config is nil 45 res, err = membershipProvider.AmMemberOf("test1", nil) 46 assert.False(t, res) 47 assert.Nil(t, err) 48 49 // verify membership provider returns false and nil when collection policy config is invalid 50 res, err = membershipProvider.AmMemberOf("test1", getBadAccessPolicy([]string{"signer0"}, 1)) 51 assert.False(t, res) 52 assert.Nil(t, err) 53 54 // verify membership provider with empty mspID and fall back to default access policy evaluation returns true 55 membershipProvider = NewMembershipInfoProvider("", peerSelfSignedData, identityDeserializer) 56 res, err = membershipProvider.AmMemberOf("test1", getAccessPolicy([]string{"peer0", "peer1"})) 57 assert.True(t, res) 58 assert.Nil(t, err) 59 60 // verify membership provider with empty mspID and fall back to default access policy evaluation returns false 61 res, err = membershipProvider.AmMemberOf("test1", getAccessPolicy([]string{"peer2", "peer3"})) 62 assert.False(t, res) 63 assert.Nil(t, err) 64 } 65 66 func getAccessPolicy(signers []string) *peer.CollectionPolicyConfig { 67 var data [][]byte 68 for _, signer := range signers { 69 data = append(data, []byte(signer)) 70 } 71 policyEnvelope := policydsl.Envelope(policydsl.Or(policydsl.SignedBy(0), policydsl.SignedBy(1)), data) 72 return createCollectionPolicyConfig(policyEnvelope) 73 } 74 75 func getBadAccessPolicy(signers []string, badIndex int32) *peer.CollectionPolicyConfig { 76 var data [][]byte 77 for _, signer := range signers { 78 data = append(data, []byte(signer)) 79 } 80 // use a out of range index to trigger error 81 policyEnvelope := policydsl.Envelope(policydsl.Or(policydsl.SignedBy(0), policydsl.SignedBy(badIndex)), data) 82 return createCollectionPolicyConfig(policyEnvelope) 83 }