github.com/hechain20/hechain@v0.0.0-20220316014945-b544036ba106/discovery/support/chaincode/support_test.go (about)

     1  /*
     2  Copyright hechain. All Rights Reserved.
     3  
     4  SPDX-License-Identifier: Apache-2.0
     5  */
     6  
     7  package chaincode
     8  
     9  import (
    10  	"testing"
    11  
    12  	"github.com/hechain20/hechain/common/chaincode"
    13  	"github.com/hechain20/hechain/common/policies"
    14  	"github.com/hechain20/hechain/common/policies/inquire"
    15  	"github.com/hechain20/hechain/protoutil"
    16  	"github.com/hyperledger/fabric-protos-go/common"
    17  	"github.com/hyperledger/fabric-protos-go/msp"
    18  	"github.com/stretchr/testify/require"
    19  )
    20  
    21  type mockMetadataRetriever struct {
    22  	res *chaincode.Metadata
    23  }
    24  
    25  func (r *mockMetadataRetriever) Metadata(channel string, cc string, collections ...string) *chaincode.Metadata {
    26  	return r.res
    27  }
    28  
    29  func TestSupport(t *testing.T) {
    30  	emptySignaturePolicyEnvelope := &common.SignaturePolicyEnvelope{}
    31  	ccmd1 := &chaincode.Metadata{Policy: protoutil.MarshalOrPanic(emptySignaturePolicyEnvelope)}
    32  	notEmptySignaturePolicyEnvelope := &common.SignaturePolicyEnvelope{
    33  		Rule:       &common.SignaturePolicy{},
    34  		Identities: []*msp.MSPPrincipal{{Principal: []byte("principal-1")}},
    35  	}
    36  	ccmd2 := &chaincode.Metadata{Policy: protoutil.MarshalOrPanic(notEmptySignaturePolicyEnvelope)}
    37  	notEmptySignaturePolicyEnvelope2 := &common.SignaturePolicyEnvelope{
    38  		Rule:       &common.SignaturePolicy{},
    39  		Identities: []*msp.MSPPrincipal{{Principal: []byte("principal-2")}},
    40  	}
    41  	ccmd3 := &chaincode.Metadata{
    42  		Policy:             protoutil.MarshalOrPanic(notEmptySignaturePolicyEnvelope),
    43  		CollectionPolicies: map[string][]byte{"col1": protoutil.MarshalOrPanic(notEmptySignaturePolicyEnvelope2)},
    44  	}
    45  
    46  	tests := []struct {
    47  		name           string
    48  		input          *chaincode.Metadata
    49  		collNames      []string
    50  		expectedReturn []policies.InquireablePolicy
    51  	}{
    52  		{
    53  			name:           "Nil instantiatedChaincode",
    54  			input:          nil,
    55  			collNames:      nil,
    56  			expectedReturn: nil,
    57  		},
    58  		{
    59  			name:           "Invalid policy bytes",
    60  			input:          &chaincode.Metadata{Policy: []byte{1, 2, 3}},
    61  			collNames:      nil,
    62  			expectedReturn: nil,
    63  		},
    64  		{
    65  			name:           "Empty signature policy envelope",
    66  			input:          ccmd1,
    67  			collNames:      nil,
    68  			expectedReturn: nil,
    69  		},
    70  		{
    71  			name:           "Not Empty signature policy envelope",
    72  			input:          ccmd2,
    73  			collNames:      nil,
    74  			expectedReturn: []policies.InquireablePolicy{inquire.NewInquireableSignaturePolicy(notEmptySignaturePolicyEnvelope)},
    75  		},
    76  		{
    77  			name:           "Not Empty signature policy envelopes with existing collection policy",
    78  			input:          ccmd3,
    79  			collNames:      []string{"col1"},
    80  			expectedReturn: []policies.InquireablePolicy{inquire.NewInquireableSignaturePolicy(notEmptySignaturePolicyEnvelope2)},
    81  		},
    82  	}
    83  
    84  	for _, test := range tests {
    85  		test := test
    86  		t.Run(test.name, func(t *testing.T) {
    87  			sup := NewDiscoverySupport(&mockMetadataRetriever{res: test.input})
    88  			res := sup.PoliciesByChaincode("", "", test.collNames...)
    89  			require.Equal(t, len(res), len(test.expectedReturn))
    90  			for i := 0; i < len(test.expectedReturn); i++ {
    91  				require.Equal(t, res[i].SatisfiedBy(), test.expectedReturn[i].SatisfiedBy())
    92  			}
    93  		})
    94  	}
    95  }