Skip to content

Commit 6500a2f

Browse files
author
Jason Yellick
committed
[FAB-1961] Clean up templating in peer/msp/orderer
https://jira.hyperledger.org/browse/FAB-1961 Now that peer, msp, and orderer all generate templates to be used in the configtxtest helper, this CR goes through an factors out some common logic and makes things uniform. Change-Id: I06d6a4e6993353d8d0682b45ed3993a2a35cc8a1 Signed-off-by: Jason Yellick <[email protected]>
1 parent 6a7c188 commit 6500a2f

File tree

8 files changed

+50
-88
lines changed

8 files changed

+50
-88
lines changed

common/configtx/inspector/inspector_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ import (
2424
)
2525

2626
func TestFromTemplate(t *testing.T) {
27-
ordererTemplate := configtxtest.GetOrdererTemplate()
27+
ordererTemplate := configtxtest.OrdererTemplate()
2828
signedItems, err := ordererTemplate.Items("SampleChainID")
2929
if err != nil {
3030
t.Fatalf("Error creating signed items: %s", err)

common/configtx/test/helper.go

+36-25
Original file line numberDiff line numberDiff line change
@@ -48,59 +48,70 @@ var peerTemplate configtx.Template
4848

4949
var genesisFactory genesis.Factory
5050

51-
func readTemplate(name string) configtx.Template {
52-
gopath := os.Getenv("GOPATH")
53-
data, err := ioutil.ReadFile(gopath + "/src/github.com/hyperledger/fabric/common/configtx/test/" + name)
51+
func init() {
52+
ordererTemplate = readTemplate(OrdererTemplateName)
53+
mspTemplate = readTemplate(MSPTemplateName)
54+
peerTemplate = readTemplate(PeerTemplateName)
55+
genesisFactory = genesis.NewFactoryImpl(configtx.NewCompositeTemplate(mspTemplate, ordererTemplate, peerTemplate))
56+
}
57+
58+
func resolveName(name string) (string, []byte) {
59+
path := os.Getenv("GOPATH") + "/src/github.com/hyperledger/fabric/common/configtx/test/" + name
60+
data, err := ioutil.ReadFile(path)
61+
if err == nil {
62+
return path, data
63+
}
64+
65+
path = os.Getenv("PEER_CFG_PATH") + "/common/configtx/test/" + name
66+
data, err = ioutil.ReadFile(path)
5467
if err != nil {
55-
peerConfig := os.Getenv("PEER_CFG_PATH")
56-
data, err = ioutil.ReadFile(peerConfig + "/common/configtx/test/" + name)
57-
if err != nil {
58-
panic(err)
59-
}
68+
panic(err)
6069
}
6170

71+
return path, data
72+
}
73+
74+
func readTemplate(name string) configtx.Template {
75+
_, data := resolveName(name)
76+
6277
templateProto := &cb.ConfigurationTemplate{}
63-
err = proto.Unmarshal(data, templateProto)
78+
err := proto.Unmarshal(data, templateProto)
6479
if err != nil {
6580
panic(err)
6681
}
6782

6883
return configtx.NewSimpleTemplate(templateProto.Items...)
6984
}
7085

71-
func init() {
72-
ordererTemplate = readTemplate(OrdererTemplateName)
73-
mspTemplate = readTemplate(MSPTemplateName)
74-
peerTemplate = readTemplate(PeerTemplateName)
75-
genesisFactory = genesis.NewFactoryImpl(configtx.NewCompositeTemplate(mspTemplate, ordererTemplate, peerTemplate))
76-
}
77-
7886
// WriteTemplate takes an output file and set of config items and writes them to that file as a marshaled ConfigurationTemplate
79-
func WriteTemplate(outputFile string, items ...*cb.ConfigurationItem) {
87+
func WriteTemplate(name string, items ...*cb.ConfigurationItem) {
88+
path, _ := resolveName(name)
89+
8090
logger.Debugf("Encoding configuration template")
8191
outputData := utils.MarshalOrPanic(&cb.ConfigurationTemplate{
8292
Items: items,
8393
})
8494

85-
logger.Debugf("Writing configuration to disk")
86-
ioutil.WriteFile(outputFile, outputData, 0644)
95+
logger.Debugf("Writing configuration to %s", path)
96+
ioutil.WriteFile(path, outputData, 0644)
8797
}
8898

99+
// MakeGenesisBlock creates a genesis block using the test templates for the given chainID
89100
func MakeGenesisBlock(chainID string) (*cb.Block, error) {
90101
return genesisFactory.Block(chainID)
91102
}
92103

93-
// GetOrderererTemplate returns the test orderer template
94-
func GetOrdererTemplate() configtx.Template {
104+
// OrderererTemplate returns the test orderer template
105+
func OrdererTemplate() configtx.Template {
95106
return ordererTemplate
96107
}
97108

98-
// GetMSPerTemplate returns the test MSP template
99-
func GetMSPTemplate() configtx.Template {
109+
// MSPerTemplate returns the test MSP template
110+
func MSPTemplate() configtx.Template {
100111
return mspTemplate
101112
}
102113

103-
// GetMSPerTemplate returns the test peer template
104-
func GetPeerTemplate() configtx.Template {
114+
// MSPerTemplate returns the test peer template
115+
func PeerTemplate() configtx.Template {
105116
return peerTemplate
106117
}

core/common/validation/config_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ import (
2828

2929
func TestValidateConfigTx(t *testing.T) {
3030
chainID := util.GetTestChainID()
31-
oTemplate := test.GetOrdererTemplate()
31+
oTemplate := test.OrdererTemplate()
3232
mspcfg := configtx.NewSimpleTemplate(utils.EncodeMSPUnsigned(chainID))
3333
chainCfg := configtx.NewSimpleTemplate(chainconfig.DefaultHashingAlgorithm())
3434
chCrtTemp := configtx.NewCompositeTemplate(oTemplate, mspcfg, chainCfg)

msp/template_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -37,5 +37,5 @@ func TestTemplate(t *testing.T) {
3737
// XXX We should really get the MSP name by inspecting it, but, we know it is DEFAULT so hardcoding for now
3838
ci := &common.ConfigurationItem{Type: common.ConfigurationItem_MSP, Key: "DEFAULT", Value: confBytes}
3939

40-
configtxtest.WriteTemplate("../common/configtx/test/"+configtxtest.MSPTemplateName, ci)
40+
configtxtest.WriteTemplate(configtxtest.MSPTemplateName, ci)
4141
}

orderer/tools/configtemplate/main_test.go orderer/common/bootstrap/provisional/template_test.go

+9-2
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,21 @@ See the License for the specific language governing permissions and
1414
limitations under the License.
1515
*/
1616

17-
package main
17+
package provisional
1818

1919
import (
2020
"testing"
2121

2222
configtxtest "github.com/hyperledger/fabric/common/configtx/test"
23+
"github.com/hyperledger/fabric/orderer/localconfig"
2324
)
2425

2526
func TestUpdateTemplate(t *testing.T) {
26-
writeTemplate("../../../common/configtx/test/" + configtxtest.OrdererTemplateName)
27+
conf := config.Load()
28+
29+
generator := New(conf)
30+
31+
templateItems := generator.TemplateItems()
32+
33+
configtxtest.WriteTemplate(configtxtest.OrdererTemplateName, templateItems...)
2734
}

orderer/tools/configtemplate/main.go

-53
This file was deleted.

peer/channel/create.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ func sendCreateChainTransaction(cf *ChannelCmdFactory) error {
5454
return err
5555
}
5656
//TODO this is a temporary hack until `orderer.template` is supplied from the CLI
57-
oTemplate := configtxtest.GetOrdererTemplate()
57+
oTemplate := configtxtest.OrdererTemplate()
5858
mspTemplate := configtx.NewSimpleTemplate(utils.EncodeMSPUnsigned(chainID))
5959
gossTemplate := configtx.NewSimpleTemplate(sharedconfig.TemplateAnchorPeers(anchorPeers))
6060
chCrtTemp := configtx.NewCompositeTemplate(oTemplate, mspTemplate, gossTemplate)

peer/sharedconfig/template_test.go

+1-4
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,5 @@ import (
2323
)
2424

2525
func TestTemplate(t *testing.T) {
26-
configtxtest.WriteTemplate(
27-
"../../common/configtx/test/"+configtxtest.PeerTemplateName,
28-
DefaultAnchorPeers(),
29-
)
26+
configtxtest.WriteTemplate(configtxtest.PeerTemplateName, DefaultAnchorPeers())
3027
}

0 commit comments

Comments
 (0)