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