Skip to content

Commit b3c82ba

Browse files
committed
[FAB-9228] Add Orderer Runner for tests
This CR adds the orderer runner used for executing tests using ginkgo. Change-Id: I7f48a9e23f78e23fa9927601a236c934beb776f7 Signed-off-by: Latitia M Haskins <latitia.haskins@gmail.com>
1 parent cbf0844 commit b3c82ba

File tree

5 files changed

+209
-1
lines changed

5 files changed

+209
-1
lines changed

integration/runner/orderer.go

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
/*
2+
Copyright IBM Corp All Rights Reserved.
3+
4+
SPDX-License-Identifier: Apache-2.0
5+
*/
6+
7+
package runner
8+
9+
import (
10+
"fmt"
11+
"os/exec"
12+
13+
"github.com/tedsuo/ifrit/ginkgomon"
14+
)
15+
16+
type Orderer struct {
17+
Path string
18+
ConfigDir string
19+
LedgerLocation string
20+
ConfigtxOrdererKafkaBrokers string
21+
LogLevel string
22+
}
23+
24+
func (o *Orderer) setupEnvironment(cmd *exec.Cmd) {
25+
if o.ConfigDir != "" {
26+
cmd.Env = append(cmd.Env, fmt.Sprintf("FABRIC_CFG_PATH=%s", o.ConfigDir))
27+
}
28+
if o.LedgerLocation != "" {
29+
cmd.Env = append(cmd.Env, fmt.Sprintf("ORDERER_FILELEDGER_LOCATION=%s", o.LedgerLocation))
30+
}
31+
if o.ConfigtxOrdererKafkaBrokers != "" {
32+
cmd.Env = append(cmd.Env, fmt.Sprintf("CONFIGTX_ORDERER_KAFKA_BROKERS=%s", o.ConfigtxOrdererKafkaBrokers))
33+
}
34+
if o.LogLevel != "" {
35+
cmd.Env = append(cmd.Env, fmt.Sprintf("ORDERER_GENERAL_LOGLEVEL=%s", o.LogLevel))
36+
}
37+
}
38+
39+
func (o *Orderer) New() *ginkgomon.Runner {
40+
cmd := exec.Command(o.Path)
41+
o.setupEnvironment(cmd)
42+
43+
return ginkgomon.New(ginkgomon.Config{
44+
Name: "orderer",
45+
Command: cmd,
46+
})
47+
}

integration/runner/orderer_test.go

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
/*
2+
Copyright IBM Corp All Rights Reserved.
3+
4+
SPDX-License-Identifier: Apache-2.0
5+
*/
6+
7+
package runner_test
8+
9+
import (
10+
"io/ioutil"
11+
"os"
12+
"path/filepath"
13+
"syscall"
14+
15+
"github.com/hyperledger/fabric/integration/runner"
16+
. "github.com/onsi/ginkgo"
17+
. "github.com/onsi/gomega"
18+
"github.com/onsi/gomega/gbytes"
19+
"github.com/tedsuo/ifrit"
20+
)
21+
22+
var _ = Describe("Orderer", func() {
23+
var (
24+
orderer *runner.Orderer
25+
tempDir string
26+
)
27+
28+
BeforeEach(func() {
29+
var err error
30+
tempDir, err = ioutil.TempDir("", "orderer")
31+
Expect(err).NotTo(HaveOccurred())
32+
33+
copyFile(filepath.Join("testdata", "cryptogen-config.yaml"), filepath.Join(tempDir, "cryptogen-config.yaml"))
34+
cryptogen := components.Cryptogen()
35+
cryptogen.Config = filepath.Join(tempDir, "cryptogen-config.yaml")
36+
cryptogen.Output = filepath.Join(tempDir, "crypto-config")
37+
38+
crypto := cryptogen.Generate()
39+
Expect(execute(crypto)).To(Succeed())
40+
41+
copyFile(filepath.Join("testdata", "configtx.yaml"), filepath.Join(tempDir, "configtx.yaml"))
42+
configtxgen := components.Configtxgen()
43+
configtxgen.ChannelID = "mychannel"
44+
configtxgen.Profile = "TwoOrgsOrdererGenesis"
45+
configtxgen.ConfigDir = tempDir
46+
configtxgen.Output = filepath.Join(tempDir, "mychannel.block")
47+
48+
r := configtxgen.OutputBlock()
49+
err = execute(r)
50+
Expect(err).NotTo(HaveOccurred())
51+
52+
copyFile(filepath.Join("testdata", "orderer.yaml"), filepath.Join(tempDir, "orderer.yaml"))
53+
orderer = components.Orderer()
54+
orderer.ConfigDir = tempDir
55+
orderer.LedgerLocation = tempDir
56+
orderer.LogLevel = "debug"
57+
})
58+
59+
AfterEach(func() {
60+
os.RemoveAll(tempDir)
61+
})
62+
63+
It("starts an orderer", func() {
64+
r := orderer.New()
65+
process := ifrit.Invoke(r)
66+
Eventually(process.Ready()).Should(BeClosed())
67+
Eventually(r.Err()).Should(gbytes.Say("Beginning to serve requests"))
68+
69+
Consistently(process.Wait()).ShouldNot(Receive())
70+
process.Signal(syscall.SIGTERM)
71+
Eventually(process.Wait()).Should(Receive())
72+
})
73+
})

integration/runner/testdata/configtx.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ Organizations:
4949
Orderer: &OrdererDefaults
5050
OrdererType: solo
5151
Addresses:
52-
- orderer.example.com:7050
52+
- orderer.example.com:8050
5353
BatchTimeout: 2s
5454
BatchSize:
5555
MaxMessageCount: 10
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
# Copyright IBM Corp. All Rights Reserved.
2+
#
3+
# SPDX-License-Identifier: Apache-2.0
4+
5+
---
6+
General:
7+
LedgerType: file
8+
ListenAddress: 127.0.0.1
9+
ListenPort: 8050
10+
TLS:
11+
Enabled: false
12+
PrivateKey: tls/server.key
13+
Certificate: tls/server.crt
14+
RootCAs:
15+
- tls/ca.crt
16+
ClientAuthRequired: false
17+
ClientRootCAs:
18+
Keepalive:
19+
ServerMinInterval: 60s
20+
ServerInterval: 7200s
21+
ServerTimeout: 20s
22+
LogLevel: info
23+
LogFormat: '%{color}%{time:2006-01-02 15:04:05.000 MST} [%{module}] %{shortfunc} -> %{level:.4s} %{id:03x}%{color:reset} %{message}'
24+
GenesisMethod: file
25+
GenesisProfile: TwoOrgsOrdererGenesis
26+
SystemChannel: mychannel
27+
GenesisFile: mychannel.block
28+
LocalMSPDir: crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp
29+
LocalMSPID: OrdererMSP
30+
Profile:
31+
Enabled: false
32+
Address: 0.0.0.0:6060
33+
BCCSP:
34+
Default: SW
35+
SW:
36+
Hash: SHA2
37+
Security: 256
38+
FileKeyStore:
39+
KeyStore:
40+
Authentication:
41+
TimeWindow: 15m
42+
43+
FileLedger:
44+
Location: /var/hyperledger/production/orderer
45+
Prefix: hyperledger-fabric-ordererledger
46+
47+
RAMLedger:
48+
HistorySize: 1000
49+
50+
Kafka:
51+
Retry:
52+
ShortInterval: 5s
53+
ShortTotal: 10m
54+
LongInterval: 5m
55+
LongTotal: 12h
56+
NetworkTimeouts:
57+
DialTimeout: 10s
58+
ReadTimeout: 10s
59+
WriteTimeout: 10s
60+
Metadata:
61+
RetryBackoff: 250ms
62+
RetryMax: 3
63+
Producer:
64+
RetryBackoff: 100ms
65+
RetryMax: 3
66+
Consumer:
67+
RetryBackoff: 2s
68+
Verbose: false
69+
TLS:
70+
Enabled: false
71+
PrivateKey:
72+
Certificate:
73+
RootCAs:
74+
Version:
75+
76+
Debug:
77+
BroadcastTraceDir:
78+
DeliverTraceDir:

integration/world/components.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,10 @@ func (c *Components) Build() {
2929
configtxgen, err := gexec.Build("github.com/hyperledger/fabric/common/tools/configtxgen")
3030
Expect(err).NotTo(HaveOccurred())
3131
c.Paths["configtxgen"] = configtxgen
32+
33+
orderer, err := gexec.Build("github.com/hyperledger/fabric/orderer")
34+
Expect(err).NotTo(HaveOccurred())
35+
c.Paths["orderer"] = orderer
3236
}
3337

3438
func (c *Components) Cleanup() {
@@ -49,3 +53,9 @@ func (c *Components) Configtxgen() *runner.Configtxgen {
4953
Path: c.Paths["configtxgen"],
5054
}
5155
}
56+
57+
func (c *Components) Orderer() *runner.Orderer {
58+
return &runner.Orderer{
59+
Path: c.Paths["orderer"],
60+
}
61+
}

0 commit comments

Comments
 (0)