289 lines
7.1 KiB
Go
289 lines
7.1 KiB
Go
/*
|
|
Copyright IBM Corp. All Rights Reserved.
|
|
|
|
SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
package nwo
|
|
|
|
// BasicConfig is a configuration with two organizations and one peer per org.
|
|
// This configuration does not specify a consensus type.
|
|
func BasicConfig() *Config {
|
|
return &Config{
|
|
Organizations: []*Organization{{
|
|
Name: "OrdererOrg",
|
|
MSPID: "OrdererMSP",
|
|
Domain: "example.com",
|
|
EnableNodeOUs: false,
|
|
Users: 0,
|
|
CA: &CA{Hostname: "ca"},
|
|
}, {
|
|
Name: "Org1",
|
|
MSPID: "Org1MSP",
|
|
Domain: "org1.example.com",
|
|
EnableNodeOUs: true,
|
|
Users: 2,
|
|
CA: &CA{Hostname: "ca"},
|
|
}, {
|
|
Name: "Org2",
|
|
MSPID: "Org2MSP",
|
|
Domain: "org2.example.com",
|
|
EnableNodeOUs: true,
|
|
Users: 2,
|
|
CA: &CA{Hostname: "ca"},
|
|
}},
|
|
Consensus: &Consensus{},
|
|
Orderers: []*Orderer{
|
|
{Name: "orderer", Organization: "OrdererOrg"},
|
|
},
|
|
Channels: []*Channel{
|
|
{Name: "testchannel", Profile: "TwoOrgsChannel"},
|
|
},
|
|
Peers: []*Peer{{
|
|
Name: "peer0",
|
|
Organization: "Org1",
|
|
Channels: []*PeerChannel{
|
|
{Name: "testchannel", Anchor: true},
|
|
},
|
|
}, {
|
|
Name: "peer0",
|
|
Organization: "Org2",
|
|
Channels: []*PeerChannel{
|
|
{Name: "testchannel", Anchor: true},
|
|
},
|
|
}},
|
|
Profiles: []*Profile{
|
|
{
|
|
Name: "TwoOrgsOrdererGenesis",
|
|
Orderers: []string{"orderer"},
|
|
},
|
|
{
|
|
Name: "TwoOrgsChannel",
|
|
Consortium: "SampleConsortium",
|
|
Organizations: []string{"Org1", "Org2"},
|
|
},
|
|
},
|
|
}
|
|
}
|
|
|
|
// Utility methods for tests without the system channel.
|
|
// These methods start from BasicConfig() and only use each other progressively.
|
|
|
|
func BasicEtcdRaft() *Config {
|
|
config := BasicConfig()
|
|
|
|
config.Consensus.Type = "etcdraft"
|
|
config.Profiles = []*Profile{
|
|
{
|
|
Name: "TwoOrgsAppChannelEtcdRaft",
|
|
Consortium: "SampleConsortium",
|
|
Orderers: []string{"orderer"},
|
|
Organizations: []string{"Org1", "Org2"},
|
|
},
|
|
}
|
|
config.Channels = []*Channel{{Name: "testchannel", Profile: "TwoOrgsAppChannelEtcdRaft"}}
|
|
|
|
return config
|
|
}
|
|
|
|
func MultiChannelEtcdRaft() *Config {
|
|
config := BasicConfig()
|
|
|
|
config.Consensus.Type = "etcdraft"
|
|
config.Profiles = []*Profile{
|
|
{
|
|
Name: "TwoOrgsAppChannelEtcdRaft",
|
|
Consortium: "SampleConsortium",
|
|
Orderers: []string{"orderer"},
|
|
Organizations: []string{"Org1", "Org2"},
|
|
},
|
|
}
|
|
config.Channels = []*Channel{
|
|
{Name: "testchannel", Profile: "TwoOrgsAppChannelEtcdRaft"},
|
|
{Name: "testchannel2", Profile: "TwoOrgsAppChannelEtcdRaft"},
|
|
}
|
|
|
|
for _, peer := range config.Peers {
|
|
peer.Channels = []*PeerChannel{
|
|
{Name: "testchannel", Anchor: true},
|
|
{Name: "testchannel2", Anchor: true},
|
|
}
|
|
}
|
|
|
|
return config
|
|
}
|
|
|
|
func MinimalRaft() *Config {
|
|
config := BasicEtcdRaft()
|
|
|
|
config.Peers[1].Channels = nil
|
|
config.Channels = []*Channel{
|
|
{Name: "testchannel", Profile: "OneOrgChannelEtcdRaft"},
|
|
}
|
|
config.Profiles = []*Profile{{
|
|
Name: "OneOrgChannelEtcdRaft",
|
|
Orderers: []string{"orderer"},
|
|
Consortium: "SampleConsortium",
|
|
Organizations: []string{"Org1"},
|
|
}}
|
|
|
|
return config
|
|
}
|
|
|
|
// FullEtcdRaft is a configuration with two organizations and two peers per org.
|
|
func FullEtcdRaft() *Config {
|
|
config := BasicEtcdRaft()
|
|
|
|
config.Peers = append(
|
|
config.Peers,
|
|
&Peer{
|
|
Name: "peer1",
|
|
Organization: "Org1",
|
|
Channels: []*PeerChannel{
|
|
{Name: "testchannel", Anchor: false},
|
|
},
|
|
},
|
|
&Peer{
|
|
Name: "peer1",
|
|
Organization: "Org2",
|
|
Channels: []*PeerChannel{
|
|
{Name: "testchannel", Anchor: false},
|
|
},
|
|
},
|
|
)
|
|
|
|
return config
|
|
}
|
|
|
|
func MultiNodeBFT() *Config {
|
|
config := BasicConfig()
|
|
|
|
config.Consensus.Type = "BFT"
|
|
config.Orderers = []*Orderer{
|
|
{Name: "orderer1", Organization: "OrdererOrg"},
|
|
{Name: "orderer2", Organization: "OrdererOrg"},
|
|
{Name: "orderer3", Organization: "OrdererOrg"},
|
|
}
|
|
config.Profiles = []*Profile{
|
|
{
|
|
Name: "TwoOrgsAppChannelBFT",
|
|
Consortium: "SampleConsortium",
|
|
Organizations: []string{"Org1", "Org2"},
|
|
Orderers: []string{"orderer1", "orderer2", "orderer3"},
|
|
ChannelCapabilities: []string{"V3_0"},
|
|
},
|
|
}
|
|
config.Channels = []*Channel{{Name: "testchannel", Profile: "TwoOrgsAppChannelBFT"}}
|
|
|
|
return config
|
|
}
|
|
|
|
// ThreeOrgEtcdRaft returns a simple configuration with three organizations instead of two.
|
|
func ThreeOrgEtcdRaft() *Config {
|
|
config := BasicEtcdRaft()
|
|
config.Organizations = append(
|
|
config.Organizations,
|
|
&Organization{
|
|
Name: "Org3",
|
|
MSPID: "Org3MSP",
|
|
Domain: "org3.example.com",
|
|
Users: 2,
|
|
CA: &CA{Hostname: "ca"},
|
|
},
|
|
)
|
|
|
|
config.Channels[0].Profile = "ThreeOrgsAppChannel"
|
|
config.Peers = append(
|
|
config.Peers,
|
|
&Peer{
|
|
Name: "peer0",
|
|
Organization: "Org3",
|
|
Channels: []*PeerChannel{
|
|
{Name: "testchannel", Anchor: true},
|
|
},
|
|
},
|
|
)
|
|
config.Profiles = []*Profile{{
|
|
Name: "ThreeOrgsAppChannel",
|
|
Orderers: []string{"orderer"},
|
|
Organizations: []string{"Org1", "Org2", "Org3"},
|
|
}}
|
|
|
|
return config
|
|
}
|
|
|
|
func BasicEtcdRaftWithIdemix() *Config {
|
|
config := BasicEtcdRaft()
|
|
|
|
// Add idemix organization
|
|
config.Organizations = append(config.Organizations, &Organization{
|
|
Name: "Org3",
|
|
MSPID: "Org3MSP",
|
|
MSPType: "idemix",
|
|
Domain: "org3.example.com",
|
|
EnableNodeOUs: false,
|
|
Users: 0,
|
|
CA: &CA{Hostname: "ca"},
|
|
})
|
|
// Add idemix organization
|
|
config.Profiles[0].Organizations = append(config.Profiles[0].Organizations, "Org3")
|
|
|
|
return config
|
|
}
|
|
|
|
func MultiNodeEtcdRaft() *Config {
|
|
config := BasicEtcdRaft()
|
|
config.Orderers = []*Orderer{
|
|
{Name: "orderer1", Organization: "OrdererOrg"},
|
|
{Name: "orderer2", Organization: "OrdererOrg"},
|
|
{Name: "orderer3", Organization: "OrdererOrg"},
|
|
}
|
|
config.Profiles[0].Orderers = []string{"orderer1", "orderer2", "orderer3"}
|
|
|
|
return config
|
|
}
|
|
|
|
func BasicSmartBFT() *Config {
|
|
config := BasicConfig()
|
|
config.Consensus.Type = "BFT"
|
|
config.Profiles = []*Profile{{
|
|
Name: "SampleDevModeSmartBFT",
|
|
Orderers: []string{"orderer"},
|
|
}, {
|
|
Name: "TwoOrgsChannel",
|
|
Consortium: "SampleConsortium",
|
|
Organizations: []string{"Org1", "Org2"},
|
|
}}
|
|
return config
|
|
}
|
|
|
|
func MultiNodeSmartBFT() *Config {
|
|
config := BasicSmartBFT()
|
|
config.Orderers = []*Orderer{
|
|
{Name: "orderer1", Organization: "OrdererOrg", Id: 1},
|
|
{Name: "orderer2", Organization: "OrdererOrg", Id: 2},
|
|
{Name: "orderer3", Organization: "OrdererOrg", Id: 3},
|
|
{Name: "orderer4", Organization: "OrdererOrg", Id: 4},
|
|
}
|
|
config.Profiles = []*Profile{{
|
|
ChannelCapabilities: []string{"V3_0"},
|
|
Name: "SampleDevModeSmartBFT",
|
|
Orderers: []string{"orderer1", "orderer2", "orderer3", "orderer4"},
|
|
Organizations: []string{"Org1", "Org2"},
|
|
AppCapabilities: []string{"V2_0"},
|
|
}}
|
|
|
|
config.Channels = []*Channel{
|
|
{Name: "testchannel1", Profile: "SampleDevModeSmartBFT"},
|
|
{Name: "testchannel2", Profile: "SampleDevModeSmartBFT"},
|
|
}
|
|
|
|
for _, peer := range config.Peers {
|
|
peer.Channels = []*PeerChannel{
|
|
{Name: "testchannel1", Anchor: true},
|
|
{Name: "testchannel2", Anchor: true},
|
|
}
|
|
}
|
|
return config
|
|
}
|