func (build *execBuild) Resume(logger lager.Logger) { stepFactory := build.buildStepFactory(logger, build.metadata.Plan) source := stepFactory.Using(&exec.NoopStep{}, exec.NewSourceRepository()) defer source.Release() process := ifrit.Background(source) exited := process.Wait() aborted := false var succeeded exec.Success for { select { case err := <-exited: if aborted { succeeded = false } else if !source.Result(&succeeded) { logger.Error("step-had-no-result", errors.New("step failed to provide us with a result")) succeeded = false } build.delegate.Finish(logger.Session("finish"), err, succeeded, aborted) return case sig := <-build.signals: process.Signal(sig) if sig == os.Kill { aborted = true } } } }
ensureStep exec.Step ) BeforeEach(func() { stepFactory = &fakes.FakeStepFactory{} hookFactory = &fakes.FakeStepFactory{} step = &fakes.FakeStep{} hook = &fakes.FakeStep{} previousStep = &fakes.FakeStep{} stepFactory.UsingReturns(step) hookFactory.UsingReturns(hook) repo = exec.NewSourceRepository() ensureFactory = exec.Ensure(stepFactory, hookFactory) ensureStep = ensureFactory.Using(previousStep, repo) }) It("runs the ensure hook if the step succeeds", func() { step.ResultStub = successResult(true) process := ifrit.Background(ensureStep) Eventually(step.RunCallCount).Should(Equal(1)) Eventually(hook.RunCallCount).Should(Equal(1)) Eventually(process.Wait()).Should(Receive(noError())) })