github.com/yacovm/fabric@v2.0.0-alpha.0.20191128145320-c5d4087dc723+incompatible/common/configtx/configmap_test.go (about) 1 /* 2 Copyright IBM Corp. All Rights Reserved. 3 4 SPDX-License-Identifier: Apache-2.0 5 */ 6 7 package configtx 8 9 import ( 10 "testing" 11 12 cb "github.com/hyperledger/fabric-protos-go/common" 13 "github.com/hyperledger/fabric/protoutil" 14 "github.com/stretchr/testify/assert" 15 ) 16 17 func TestBadKey(t *testing.T) { 18 assert.Error(t, addToMap(comparable{key: "[Label]", path: []string{}}, make(map[string]comparable)), 19 "Should have errored on key with illegal characters") 20 } 21 22 func TestConfigMapMultiGroup(t *testing.T) { 23 config := protoutil.NewConfigGroup() 24 config.Groups["0"] = protoutil.NewConfigGroup() 25 config.Groups["0"].Groups["1"] = protoutil.NewConfigGroup() 26 config.Groups["0"].Groups["1"].Groups["2.1"] = protoutil.NewConfigGroup() 27 config.Groups["0"].Groups["1"].Groups["2.1"].Values["Value"] = &cb.ConfigValue{} 28 config.Groups["0"].Groups["1"].Groups["2.2"] = protoutil.NewConfigGroup() 29 config.Groups["0"].Groups["1"].Groups["2.2"].Values["Value"] = &cb.ConfigValue{} 30 31 confMap, err := mapConfig(config, "Channel") 32 assert.NoError(t, err) 33 assert.Equal(t, []string{"Channel", "0", "1", "2.1"}, confMap["[Value] /Channel/0/1/2.1/Value"].path) 34 assert.Equal(t, []string{"Channel", "0", "1", "2.2"}, confMap["[Value] /Channel/0/1/2.2/Value"].path) 35 } 36 37 func TestConfigMap(t *testing.T) { 38 config := protoutil.NewConfigGroup() 39 config.Groups["0DeepGroup"] = protoutil.NewConfigGroup() 40 config.Values["0DeepValue1"] = &cb.ConfigValue{} 41 config.Values["0DeepValue2"] = &cb.ConfigValue{} 42 config.Groups["0DeepGroup"].Policies["1DeepPolicy"] = &cb.ConfigPolicy{} 43 config.Groups["0DeepGroup"].Groups["1DeepGroup"] = protoutil.NewConfigGroup() 44 config.Groups["0DeepGroup"].Groups["1DeepGroup"].Values["2DeepValue"] = &cb.ConfigValue{} 45 46 confMap, err := mapConfig(config, "Channel") 47 assert.NoError(t, err, "Should not have errored building map") 48 49 assert.Len(t, confMap, 7, "There should be 7 entries in the config map") 50 51 assert.Equal(t, comparable{key: "Channel", path: []string{}, ConfigGroup: config}, 52 confMap["[Group] /Channel"]) 53 assert.Equal(t, comparable{key: "0DeepGroup", path: []string{"Channel"}, ConfigGroup: config.Groups["0DeepGroup"]}, 54 confMap["[Group] /Channel/0DeepGroup"]) 55 assert.Equal(t, comparable{key: "0DeepValue1", path: []string{"Channel"}, ConfigValue: config.Values["0DeepValue1"]}, 56 confMap["[Value] /Channel/0DeepValue1"]) 57 assert.Equal(t, comparable{key: "0DeepValue2", path: []string{"Channel"}, ConfigValue: config.Values["0DeepValue2"]}, 58 confMap["[Value] /Channel/0DeepValue2"]) 59 assert.Equal(t, comparable{key: "1DeepPolicy", path: []string{"Channel", "0DeepGroup"}, ConfigPolicy: config.Groups["0DeepGroup"].Policies["1DeepPolicy"]}, 60 confMap["[Policy] /Channel/0DeepGroup/1DeepPolicy"]) 61 assert.Equal(t, comparable{key: "1DeepGroup", path: []string{"Channel", "0DeepGroup"}, ConfigGroup: config.Groups["0DeepGroup"].Groups["1DeepGroup"]}, 62 confMap["[Group] /Channel/0DeepGroup/1DeepGroup"]) 63 assert.Equal(t, comparable{key: "2DeepValue", path: []string{"Channel", "0DeepGroup", "1DeepGroup"}, ConfigValue: config.Groups["0DeepGroup"].Groups["1DeepGroup"].Values["2DeepValue"]}, 64 confMap["[Value] /Channel/0DeepGroup/1DeepGroup/2DeepValue"]) 65 } 66 67 func TestMapConfigBack(t *testing.T) { 68 config := protoutil.NewConfigGroup() 69 config.Groups["0DeepGroup"] = protoutil.NewConfigGroup() 70 config.Values["0DeepValue1"] = &cb.ConfigValue{} 71 config.Values["0DeepValue2"] = &cb.ConfigValue{} 72 config.Groups["0DeepGroup"].Policies["1DeepPolicy"] = &cb.ConfigPolicy{} 73 config.Groups["0DeepGroup"].Groups["1DeepGroup"] = protoutil.NewConfigGroup() 74 config.Groups["0DeepGroup"].Groups["1DeepGroup"].Values["2DeepValue"] = &cb.ConfigValue{} 75 76 confMap, err := mapConfig(config, "Channel") 77 assert.NoError(t, err, "Should not have errored building map") 78 79 newConfig, err := configMapToConfig(confMap, "Channel") 80 assert.NoError(t, err, "Should not have errored building config") 81 82 assert.Equal(t, config, newConfig, "Should have transformed config map back from confMap") 83 84 newConfig.Values["Value"] = &cb.ConfigValue{} 85 assert.NotEqual(t, config, newConfig, "Mutating the new config should not mutate the existing config") 86 } 87 88 func TestHackInmapConfigBack(t *testing.T) { 89 config := protoutil.NewConfigGroup() 90 config.Values["ChannelValue1"] = &cb.ConfigValue{} 91 config.Values["ChannelValue2"] = &cb.ConfigValue{} 92 config.Groups["Orderer"] = protoutil.NewConfigGroup() 93 config.Groups["Orderer"].Values["Capabilities"] = &cb.ConfigValue{} 94 config.Groups["Orderer"].Policies["OrdererPolicy"] = &cb.ConfigPolicy{} 95 config.Groups["Orderer"].Groups["OrdererOrg"] = protoutil.NewConfigGroup() 96 config.Groups["Orderer"].Groups["OrdererOrg"].Values["OrdererOrgValue"] = &cb.ConfigValue{} 97 config.Groups["Application"] = protoutil.NewConfigGroup() 98 config.Groups["Application"].Policies["ApplicationPolicy"] = &cb.ConfigPolicy{} 99 config.Groups["Application"].Policies["ApplicationValue"] = &cb.ConfigPolicy{} 100 101 confMap, err := mapConfig(config, "Channel") 102 assert.NoError(t, err, "Should not have errored building map") 103 104 newConfig, err := configMapToConfig(confMap, "Channel") 105 assert.NoError(t, err, "Should not have errored building config") 106 107 var checkModPolicy func(cg *cb.ConfigGroup) 108 checkModPolicy = func(cg *cb.ConfigGroup) { 109 assert.NotEmpty(t, cg.ModPolicy, "empty group mod_policy") 110 111 for key, value := range cg.Values { 112 assert.NotEmpty(t, value.ModPolicy, "empty value mod_policy %s", key) 113 } 114 115 for key, policy := range cg.Policies { 116 assert.NotEmpty(t, policy.ModPolicy, "empty policy mod_policy %s", key) 117 } 118 119 for _, group := range cg.Groups { 120 checkModPolicy(group) 121 } 122 } 123 124 checkModPolicy(newConfig) 125 }