signal2 = childRunner2.WaitForCall() childRunner2.TriggerReady() signal3 = childRunner3.WaitForCall() childRunner3.TriggerReady() Eventually(started).Should(BeClosed()) }) Describe("when it receives a signal", func() { BeforeEach(func() { groupProcess.Signal(syscall.SIGUSR2) }) It("doesn't send any more signals to remaining child processes", func() { Eventually(signal3).Should(Receive(Equal(syscall.SIGUSR2))) childRunner2.TriggerExit(nil) Consistently(signal3).ShouldNot(Receive()) }) }) Describe("when a process exits cleanly", func() { BeforeEach(func() { childRunner1.TriggerExit(nil) }) It("sends an interrupt signal to the other processes", func() { Eventually(signal3).Should(Receive(Equal(os.Interrupt))) childRunner3.TriggerExit(nil) Eventually(signal2).Should(Receive(Equal(os.Interrupt))) })
case runner := <-loadedRunners: return runner default: return nil } } loadedRunner = fake_runner.NewTestRunner() loadedRunners <- loadedRunner }) AfterEach(func() { loadedRunner.EnsureExit() }) It("executes the returned Runner", func() { testRunner.TriggerExit(nil) loadedRunner.TriggerExit(nil) }) }) Context("when load returns nil", func() { BeforeEach(func() { restarter.Load = func(runner ifrit.Runner, err error) ifrit.Runner { return nil } }) It("exits after running the initial Runner", func() { testRunner.TriggerExit(nil) Eventually(process.Wait()).Should(Receive(BeNil())) })