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  }