Skip to content

Commit

Permalink
Merge "[FAB-6138] Add simple config policy util functions"
Browse files Browse the repository at this point in the history
  • Loading branch information
yacovm authored and Gerrit Code Review committed Oct 9, 2017
2 parents 118b890 + 79c2b99 commit fcd9ddd
Show file tree
Hide file tree
Showing 2 changed files with 110 additions and 0 deletions.
82 changes: 82 additions & 0 deletions common/policies/util.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
/*
Copyright IBM Corp. All Rights Reserved.
SPDX-License-Identifier: Apache-2.0
*/

package policies

import (
cb "github.com/hyperledger/fabric/protos/common"
"github.com/hyperledger/fabric/protos/utils"
)

// ConfigPolicy defines a common representation for different *cb.ConfigPolicy values.
type ConfigPolicy interface {
// Key is the key this value should be stored in the *cb.ConfigGroup.Policies map.
Key() string

// Value is the backing policy implementation for this ConfigPolicy
Value() *cb.Policy
}

// StandardConfigValue implements the ConfigValue interface.
type StandardConfigPolicy struct {
key string
value *cb.Policy
}

// Key is the key this value should be stored in the *cb.ConfigGroup.Values map.
func (scv *StandardConfigPolicy) Key() string {
return scv.key
}

// Value is the *cb.Policy which should be stored as the *cb.ConfigPolicy.Policy.
func (scv *StandardConfigPolicy) Value() *cb.Policy {
return scv.value
}

func makeImplicitMetaPolicy(subPolicyName string, rule cb.ImplicitMetaPolicy_Rule) *cb.Policy {
return &cb.Policy{
Type: int32(cb.Policy_IMPLICIT_META),
Value: utils.MarshalOrPanic(&cb.ImplicitMetaPolicy{
Rule: rule,
SubPolicy: subPolicyName,
}),
}
}

// ImplicitMetaAllPolicy defines an implicit meta policy whose sub_policy and key is policyname with rule ALL.
func ImplicitMetaAllPolicy(policyName string) *StandardConfigPolicy {
return &StandardConfigPolicy{
key: policyName,
value: makeImplicitMetaPolicy(policyName, cb.ImplicitMetaPolicy_ALL),
}
}

// ImplicitMetaAnyPolicy defines an implicit meta policy whose sub_policy and key is policyname with rule ANY.
func ImplicitMetaAnyPolicy(policyName string) *StandardConfigPolicy {
return &StandardConfigPolicy{
key: policyName,
value: makeImplicitMetaPolicy(policyName, cb.ImplicitMetaPolicy_ANY),
}
}

// ImplicitMetaMajorityPolicy defines an implicit meta policy whose sub_policy and key is policyname with rule MAJORITY.
func ImplicitMetaMajorityPolicy(policyName string) *StandardConfigPolicy {
return &StandardConfigPolicy{
key: policyName,
value: makeImplicitMetaPolicy(policyName, cb.ImplicitMetaPolicy_MAJORITY),
}
}

// ImplicitMetaMajorityPolicy defines a policy with key policyName and the given signature policy.
func SignaturePolicy(policyName string, sigPolicy *cb.SignaturePolicyEnvelope) *StandardConfigPolicy {
return &StandardConfigPolicy{
key: policyName,
value: &cb.Policy{
Type: int32(cb.Policy_SIGNATURE),
Value: utils.MarshalOrPanic(sigPolicy),
},
}
}
28 changes: 28 additions & 0 deletions common/policies/util_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
/*
Copyright IBM Corp. All Rights Reserved.
SPDX-License-Identifier: Apache-2.0
*/

package policies

import (
"testing"

cb "github.com/hyperledger/fabric/protos/common"

"github.com/stretchr/testify/assert"
)

func basicTest(t *testing.T, sv *StandardConfigPolicy) {
assert.NotNil(t, sv)
assert.NotEmpty(t, sv.Key())
assert.NotNil(t, sv.Value())
}

func TestUtilsBasic(t *testing.T) {
basicTest(t, ImplicitMetaAnyPolicy("foo"))
basicTest(t, ImplicitMetaAllPolicy("foo"))
basicTest(t, ImplicitMetaMajorityPolicy("foo"))
basicTest(t, SignaturePolicy("foo", &cb.SignaturePolicyEnvelope{}))
}

0 comments on commit fcd9ddd

Please sign in to comment.