95 lines
2.9 KiB
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
|
|
})
|
|
})
|