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

     1  package exec_test
     2  
     3  import (
     4  	"context"
     5  	"errors"
     6  
     7  	"github.com/pf-qiu/concourse/v6/atc"
     8  	"github.com/pf-qiu/concourse/v6/atc/db/dbfakes"
     9  	"github.com/pf-qiu/concourse/v6/atc/exec"
    10  	"github.com/pf-qiu/concourse/v6/atc/exec/build"
    11  	"github.com/pf-qiu/concourse/v6/atc/worker/workerfakes"
    12  	"github.com/pf-qiu/concourse/v6/vars"
    13  	. "github.com/onsi/ginkgo"
    14  	. "github.com/onsi/gomega"
    15  )
    16  
    17  var _ = Describe("ArtifactInputStep", func() {
    18  	var (
    19  		ctx    context.Context
    20  		cancel func()
    21  
    22  		state exec.RunState
    23  
    24  		step             exec.Step
    25  		stepOk           bool
    26  		stepErr          error
    27  		plan             atc.Plan
    28  		fakeBuild        *dbfakes.FakeBuild
    29  		fakeWorkerClient *workerfakes.FakeClient
    30  	)
    31  
    32  	BeforeEach(func() {
    33  		ctx, cancel = context.WithCancel(context.Background())
    34  
    35  		state = exec.NewRunState(noopStepper, vars.StaticVariables{}, false)
    36  
    37  		fakeBuild = new(dbfakes.FakeBuild)
    38  		fakeWorkerClient = new(workerfakes.FakeClient)
    39  
    40  		plan = atc.Plan{ArtifactInput: &atc.ArtifactInputPlan{34, "some-input-artifact-name"}}
    41  		step = exec.NewArtifactInputStep(plan, fakeBuild, fakeWorkerClient)
    42  	})
    43  
    44  	AfterEach(func() {
    45  		cancel()
    46  	})
    47  
    48  	JustBeforeEach(func() {
    49  		stepOk, stepErr = step.Run(ctx, state)
    50  	})
    51  
    52  	Context("when looking up the build artifact errors", func() {
    53  		BeforeEach(func() {
    54  			fakeBuild.ArtifactReturns(nil, errors.New("nope"))
    55  		})
    56  		It("returns the error", func() {
    57  			Expect(stepErr).To(HaveOccurred())
    58  		})
    59  	})
    60  
    61  	Context("when looking up the build artifact succeeds", func() {
    62  		var fakeWorkerArtifact *dbfakes.FakeWorkerArtifact
    63  
    64  		BeforeEach(func() {
    65  			fakeWorkerArtifact = new(dbfakes.FakeWorkerArtifact)
    66  			fakeBuild.ArtifactReturns(fakeWorkerArtifact, nil)
    67  		})
    68  
    69  		Context("when looking up the db volume fails", func() {
    70  			BeforeEach(func() {
    71  				fakeWorkerArtifact.VolumeReturns(nil, false, errors.New("nope"))
    72  			})
    73  			It("returns the error", func() {
    74  				Expect(stepErr).To(HaveOccurred())
    75  			})
    76  		})
    77  
    78  		Context("when the db volume does not exist", func() {
    79  			BeforeEach(func() {
    80  				fakeWorkerArtifact.VolumeReturns(nil, false, nil)
    81  			})
    82  			It("returns the error", func() {
    83  				Expect(stepErr).To(HaveOccurred())
    84  			})
    85  		})
    86  
    87  		Context("when the db volume does exist", func() {
    88  			var fakeVolume *dbfakes.FakeCreatedVolume
    89  
    90  			BeforeEach(func() {
    91  				fakeVolume = new(dbfakes.FakeCreatedVolume)
    92  				fakeWorkerArtifact.VolumeReturns(fakeVolume, true, nil)
    93  			})
    94  
    95  			Context("when looking up the worker volume fails", func() {
    96  				BeforeEach(func() {
    97  					fakeWorkerClient.FindVolumeReturns(nil, false, errors.New("nope"))
    98  				})
    99  				It("returns the error", func() {
   100  					Expect(stepErr).To(HaveOccurred())
   101  				})
   102  			})
   103  
   104  			Context("when the worker volume does not exist", func() {
   105  				BeforeEach(func() {
   106  					fakeWorkerClient.FindVolumeReturns(nil, false, nil)
   107  				})
   108  				It("returns the error", func() {
   109  					Expect(stepErr).To(HaveOccurred())
   110  				})
   111  			})
   112  
   113  			Context("when the volume does exist", func() {
   114  				var fakeWorkerVolume *workerfakes.FakeVolume
   115  				var fakeDBWorkerArtifact *dbfakes.FakeWorkerArtifact
   116  				var fakeDBCreatedVolume *dbfakes.FakeCreatedVolume
   117  
   118  				BeforeEach(func() {
   119  					fakeWorkerVolume = new(workerfakes.FakeVolume)
   120  					fakeWorkerClient.FindVolumeReturns(fakeWorkerVolume, true, nil)
   121  
   122  					fakeDBWorkerArtifact = new(dbfakes.FakeWorkerArtifact)
   123  					fakeDBCreatedVolume = new(dbfakes.FakeCreatedVolume)
   124  					fakeDBCreatedVolume.HandleReturns("some-volume-handle")
   125  					fakeDBWorkerArtifact.VolumeReturns(fakeDBCreatedVolume, true, nil)
   126  					fakeBuild.ArtifactReturns(fakeDBWorkerArtifact, nil)
   127  				})
   128  
   129  				It("registers the artifact", func() {
   130  					artifact, found := state.ArtifactRepository().ArtifactFor(build.ArtifactName("some-input-artifact-name"))
   131  
   132  					Expect(stepErr).NotTo(HaveOccurred())
   133  					Expect(found).To(BeTrue())
   134  
   135  					Expect(artifact.ID()).To(Equal("some-volume-handle"))
   136  				})
   137  
   138  				It("succeeds", func() {
   139  					Expect(stepOk).To(BeTrue())
   140  				})
   141  			})
   142  		})
   143  	})
   144  })