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 })