}) BeforeEach(func() { started = make(chan struct{}) go func() { groupProcess = ifrit.Invoke(groupRunner) close(started) }() }) It("runs the first runner, then the second, then becomes ready", func() { Eventually(childRunner1.RunCallCount).Should(Equal(1)) Consistently(childRunner2.RunCallCount, Δ).Should(BeZero()) Consistently(started, Δ).ShouldNot(BeClosed()) childRunner1.TriggerReady() Eventually(childRunner2.RunCallCount).Should(Equal(1)) Consistently(childRunner3.RunCallCount, Δ).Should(BeZero()) Consistently(started, Δ).ShouldNot(BeClosed()) childRunner2.TriggerReady() Eventually(childRunner3.RunCallCount).Should(Equal(1)) Consistently(started, Δ).ShouldNot(BeClosed()) childRunner3.TriggerReady() Eventually(started).Should(BeClosed()) })
JustBeforeEach(func() { process = ifrit.Background(restarter) }) AfterEach(func() { process.Signal(os.Kill) testRunner.EnsureExit() Eventually(process.Wait()).Should(Receive()) }) Describe("Process Behavior", func() { It("waits for the internal runner to be ready", func() { Consistently(process.Ready()).ShouldNot(BeClosed()) testRunner.TriggerReady() Eventually(process.Ready()).Should(BeClosed()) }) }) Describe("Load", func() { Context("when load returns a runner", func() { var loadedRunner *fake_runner.TestRunner var loadedRunners chan *fake_runner.TestRunner BeforeEach(func() { loadedRunners = make(chan *fake_runner.TestRunner, 1) restarter.Load = func(runner ifrit.Runner, err error) ifrit.Runner { select { case runner := <-loadedRunners: