go_study/fabric-main/integration/e2e/e2e_signal_test.go

95 lines
2.9 KiB
Go

/*
Copyright IBM Corp All Rights Reserved.
SPDX-License-Identifier: Apache-2.0
*/
package e2e
import (
"io/ioutil"
"os"
"syscall"
docker "github.com/fsouza/go-dockerclient"
"github.com/hyperledger/fabric/integration/nwo"
. "github.com/onsi/ginkgo/v2"
. "github.com/onsi/gomega"
"github.com/onsi/gomega/gbytes"
"github.com/tedsuo/ifrit"
ginkgomon "github.com/tedsuo/ifrit/ginkgomon_v2"
)
var _ = Describe("SignalHandling", func() {
var (
testDir string
client *docker.Client
network *nwo.Network
peerRunner, ordererRunner *ginkgomon.Runner
peerProcess, ordererProcess ifrit.Process
)
BeforeEach(func() {
var err error
testDir, err = ioutil.TempDir("", "e2e-sigs")
Expect(err).NotTo(HaveOccurred())
client, err = docker.NewClientFromEnv()
Expect(err).NotTo(HaveOccurred())
network = nwo.New(nwo.BasicEtcdRaft(), testDir, client, StartPort(), components)
network.GenerateConfigTree()
network.Bootstrap()
ordererRunner = network.OrdererRunner(network.Orderers[0])
ordererProcess = ifrit.Invoke(ordererRunner)
Eventually(ordererProcess.Ready(), network.EventuallyTimeout).Should(BeClosed())
peerRunner = network.PeerRunner(network.Peers[0])
peerProcess = ifrit.Invoke(peerRunner)
Eventually(peerProcess.Ready(), network.EventuallyTimeout).Should(BeClosed())
})
AfterEach(func() {
if peerProcess != nil {
peerProcess.Signal(syscall.SIGKILL)
}
if ordererProcess != nil {
ordererProcess.Signal(syscall.SIGKILL)
}
if network != nil {
network.Cleanup()
}
os.RemoveAll(testDir)
})
It("handles signals", func() {
By("verifying SIGUSR1 to the peer dumps go routines")
peerProcess.Signal(syscall.SIGUSR1)
Eventually(peerRunner.Err(), network.EventuallyTimeout).Should(gbytes.Say("Received signal: "))
Eventually(peerRunner.Err(), network.EventuallyTimeout).Should(gbytes.Say(`Go routines report`))
By("verifying SIGUSR1 to the orderer dumps go routines")
ordererProcess.Signal(syscall.SIGUSR1)
Eventually(ordererRunner.Err(), network.EventuallyTimeout).Should(gbytes.Say("Received signal: "))
Eventually(ordererRunner.Err(), network.EventuallyTimeout).Should(gbytes.Say(`Go routines report`))
By("verifying SIGUSR1 does not terminate processes")
Consistently(peerProcess.Wait()).ShouldNot(Receive())
Consistently(ordererProcess.Wait()).ShouldNot(Receive())
By("verifying SIGTERM to the peer stops the process")
peerProcess.Signal(syscall.SIGTERM)
Eventually(peerRunner.Err(), network.EventuallyTimeout).Should(gbytes.Say("Received signal: "))
Eventually(peerProcess.Wait(), network.EventuallyTimeout).Should(Receive())
peerProcess = nil
By("verifying SIGTERM to the orderer stops the process")
ordererProcess.Signal(syscall.SIGTERM)
Eventually(ordererRunner.Err(), network.EventuallyTimeout).Should(gbytes.Say("Received signal: "))
Eventually(ordererProcess.Wait(), network.EventuallyTimeout).Should(Receive())
ordererProcess = nil
})
})