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 }