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