github.com/suchongming/fabric@v2.1.1+incompatible/integration/e2e/e2e_signal_test.go (about) 1 /* 2 Copyright IBM Corp All Rights Reserved. 3 4 SPDX-License-Identifier: Apache-2.0 5 */ 6 7 package e2e 8 9 import ( 10 "io/ioutil" 11 "os" 12 "syscall" 13 14 docker "github.com/fsouza/go-dockerclient" 15 "github.com/hyperledger/fabric/integration/nwo" 16 . "github.com/onsi/ginkgo" 17 . "github.com/onsi/gomega" 18 "github.com/onsi/gomega/gbytes" 19 "github.com/tedsuo/ifrit" 20 "github.com/tedsuo/ifrit/ginkgomon" 21 ) 22 23 var _ = Describe("SignalHandling", func() { 24 var ( 25 testDir string 26 client *docker.Client 27 network *nwo.Network 28 29 peerRunner, ordererRunner *ginkgomon.Runner 30 peerProcess, ordererProcess ifrit.Process 31 ) 32 33 BeforeEach(func() { 34 var err error 35 testDir, err = ioutil.TempDir("", "e2e-sigs") 36 Expect(err).NotTo(HaveOccurred()) 37 38 client, err = docker.NewClientFromEnv() 39 Expect(err).NotTo(HaveOccurred()) 40 41 network = nwo.New(nwo.BasicSolo(), testDir, client, StartPort(), components) 42 network.GenerateConfigTree() 43 network.Bootstrap() 44 45 ordererRunner = network.OrdererRunner(network.Orderers[0]) 46 ordererProcess = ifrit.Invoke(ordererRunner) 47 Eventually(ordererProcess.Ready(), network.EventuallyTimeout).Should(BeClosed()) 48 49 peerRunner = network.PeerRunner(network.Peers[0]) 50 peerProcess = ifrit.Invoke(peerRunner) 51 Eventually(peerProcess.Ready(), network.EventuallyTimeout).Should(BeClosed()) 52 }) 53 54 AfterEach(func() { 55 if peerProcess != nil { 56 peerProcess.Signal(syscall.SIGKILL) 57 } 58 if ordererProcess != nil { 59 ordererProcess.Signal(syscall.SIGKILL) 60 } 61 if network != nil { 62 network.Cleanup() 63 } 64 os.RemoveAll(testDir) 65 }) 66 67 It("handles signals", func() { 68 By("verifying SIGUSR1 to the peer dumps go routines") 69 peerProcess.Signal(syscall.SIGUSR1) 70 Eventually(peerRunner.Err(), network.EventuallyTimeout).Should(gbytes.Say("Received signal: ")) 71 Eventually(peerRunner.Err(), network.EventuallyTimeout).Should(gbytes.Say(`Go routines report`)) 72 73 By("verifying SIGUSR1 to the orderer dumps go routines") 74 ordererProcess.Signal(syscall.SIGUSR1) 75 Eventually(ordererRunner.Err(), network.EventuallyTimeout).Should(gbytes.Say("Received signal: ")) 76 Eventually(ordererRunner.Err(), network.EventuallyTimeout).Should(gbytes.Say(`Go routines report`)) 77 78 By("verifying SIGUSR1 does not terminate processes") 79 Consistently(peerProcess.Wait()).ShouldNot(Receive()) 80 Consistently(ordererProcess.Wait()).ShouldNot(Receive()) 81 82 By("verifying SIGTERM to the peer stops the process") 83 peerProcess.Signal(syscall.SIGTERM) 84 Eventually(peerRunner.Err(), network.EventuallyTimeout).Should(gbytes.Say("Received signal: ")) 85 Eventually(peerProcess.Wait(), network.EventuallyTimeout).Should(Receive()) 86 peerProcess = nil 87 88 By("verifying SIGTERM to the orderer stops the process") 89 ordererProcess.Signal(syscall.SIGTERM) 90 Eventually(ordererRunner.Err(), network.EventuallyTimeout).Should(gbytes.Say("Received signal: ")) 91 Eventually(ordererProcess.Wait(), network.EventuallyTimeout).Should(Receive()) 92 ordererProcess = nil 93 }) 94 })