github.com/pf-qiu/concourse/v6@v6.7.3-0.20201207032516-1f455d73275f/atc/exec/on_error_test.go (about)

     1  package exec_test
     2  
     3  import (
     4  	"context"
     5  	"errors"
     6  
     7  	"github.com/pf-qiu/concourse/v6/atc/exec"
     8  	"github.com/pf-qiu/concourse/v6/atc/exec/build"
     9  	"github.com/pf-qiu/concourse/v6/atc/exec/execfakes"
    10  	"github.com/hashicorp/go-multierror"
    11  	. "github.com/onsi/ginkgo"
    12  	. "github.com/onsi/gomega"
    13  )
    14  
    15  var _ = Describe("On Error Step", func() {
    16  	var (
    17  		ctx    context.Context
    18  		cancel func()
    19  
    20  		step *execfakes.FakeStep
    21  		hook *execfakes.FakeStep
    22  
    23  		repo  *build.Repository
    24  		state *execfakes.FakeRunState
    25  
    26  		onErrorStep exec.Step
    27  
    28  		stepOk  bool
    29  		stepErr error
    30  
    31  		disaster error
    32  	)
    33  
    34  	BeforeEach(func() {
    35  		ctx, cancel = context.WithCancel(context.Background())
    36  
    37  		step = &execfakes.FakeStep{}
    38  		hook = &execfakes.FakeStep{}
    39  
    40  		repo = build.NewRepository()
    41  		state = new(execfakes.FakeRunState)
    42  		state.ArtifactRepositoryReturns(repo)
    43  
    44  		onErrorStep = exec.OnError(step, hook)
    45  
    46  		stepErr = nil
    47  
    48  		disaster = multierror.Append(disaster, errors.New("disaster"))
    49  	})
    50  
    51  	AfterEach(func() {
    52  		cancel()
    53  	})
    54  
    55  	JustBeforeEach(func() {
    56  		stepOk, stepErr = onErrorStep.Run(ctx, state)
    57  	})
    58  
    59  	Context("when the step errors", func() {
    60  		BeforeEach(func() {
    61  			step.RunReturns(false, disaster)
    62  		})
    63  
    64  		It("runs the error hook", func() {
    65  			Expect(stepErr).To(Equal(disaster))
    66  			Expect(hook.RunCallCount()).To(Equal(1))
    67  			Expect(step.RunCallCount()).To(Equal(1))
    68  		})
    69  	})
    70  
    71  	Context("when the step succeeds", func() {
    72  		BeforeEach(func() {
    73  			step.RunReturns(true, nil)
    74  		})
    75  
    76  		It("is successful", func() {
    77  			Expect(stepOk).To(BeTrue())
    78  		})
    79  
    80  		It("does not run the error hook", func() {
    81  			Expect(hook.RunCallCount()).To(Equal(0))
    82  		})
    83  	})
    84  
    85  	Context("when the step fails", func() {
    86  		BeforeEach(func() {
    87  			step.RunReturns(false, nil)
    88  		})
    89  
    90  		It("is not successful", func() {
    91  			Expect(stepOk).ToNot(BeTrue())
    92  		})
    93  
    94  		It("does not run the error hook", func() {
    95  			Expect(step.RunCallCount()).To(Equal(1))
    96  			Expect(hook.RunCallCount()).To(Equal(0))
    97  		})
    98  	})
    99  })