go_study/fabric-main/discovery/support/chaincode/support_test.go

96 lines
3.0 KiB
Go

/*
Copyright IBM Corp. All Rights Reserved.
SPDX-License-Identifier: Apache-2.0
*/
package chaincode
import (
"testing"
"github.com/hyperledger/fabric-protos-go/common"
"github.com/hyperledger/fabric-protos-go/msp"
"github.com/hyperledger/fabric/common/chaincode"
"github.com/hyperledger/fabric/common/policies"
"github.com/hyperledger/fabric/common/policies/inquire"
"github.com/hyperledger/fabric/protoutil"
"github.com/stretchr/testify/require"
)
type mockMetadataRetriever struct {
res *chaincode.Metadata
}
func (r *mockMetadataRetriever) Metadata(channel string, cc string, collections ...string) *chaincode.Metadata {
return r.res
}
func TestSupport(t *testing.T) {
emptySignaturePolicyEnvelope := &common.SignaturePolicyEnvelope{}
ccmd1 := &chaincode.Metadata{Policy: protoutil.MarshalOrPanic(emptySignaturePolicyEnvelope)}
notEmptySignaturePolicyEnvelope := &common.SignaturePolicyEnvelope{
Rule: &common.SignaturePolicy{},
Identities: []*msp.MSPPrincipal{{Principal: []byte("principal-1")}},
}
ccmd2 := &chaincode.Metadata{Policy: protoutil.MarshalOrPanic(notEmptySignaturePolicyEnvelope)}
notEmptySignaturePolicyEnvelope2 := &common.SignaturePolicyEnvelope{
Rule: &common.SignaturePolicy{},
Identities: []*msp.MSPPrincipal{{Principal: []byte("principal-2")}},
}
ccmd3 := &chaincode.Metadata{
Policy: protoutil.MarshalOrPanic(notEmptySignaturePolicyEnvelope),
CollectionPolicies: map[string][]byte{"col1": protoutil.MarshalOrPanic(notEmptySignaturePolicyEnvelope2)},
}
tests := []struct {
name string
input *chaincode.Metadata
collNames []string
expectedReturn []policies.InquireablePolicy
}{
{
name: "Nil instantiatedChaincode",
input: nil,
collNames: nil,
expectedReturn: nil,
},
{
name: "Invalid policy bytes",
input: &chaincode.Metadata{Policy: []byte{1, 2, 3}},
collNames: nil,
expectedReturn: nil,
},
{
name: "Empty signature policy envelope",
input: ccmd1,
collNames: nil,
expectedReturn: nil,
},
{
name: "Not Empty signature policy envelope",
input: ccmd2,
collNames: nil,
expectedReturn: []policies.InquireablePolicy{inquire.NewInquireableSignaturePolicy(notEmptySignaturePolicyEnvelope)},
},
{
name: "Not Empty signature policy envelopes with existing collection policy",
input: ccmd3,
collNames: []string{"col1"},
expectedReturn: []policies.InquireablePolicy{inquire.NewInquireableSignaturePolicy(notEmptySignaturePolicyEnvelope2)},
},
}
for _, test := range tests {
test := test
t.Run(test.name, func(t *testing.T) {
sup := NewDiscoverySupport(&mockMetadataRetriever{res: test.input})
res := sup.PoliciesByChaincode("", "", test.collNames...)
require.Equal(t, len(res), len(test.expectedReturn))
for i := 0; i < len(test.expectedReturn); i++ {
require.Equal(t, res[i].SatisfiedBy(), test.expectedReturn[i].SatisfiedBy())
}
})
}
}