github.com/pf-qiu/concourse/v6@v6.7.3-0.20201207032516-1f455d73275f/atc/engine/get_delegate_test.go (about) 1 package engine_test 2 3 import ( 4 "errors" 5 "time" 6 7 . "github.com/onsi/ginkgo" 8 . "github.com/onsi/gomega" 9 10 "code.cloudfoundry.org/clock/fakeclock" 11 "code.cloudfoundry.org/lager/lagertest" 12 "github.com/pf-qiu/concourse/v6/atc" 13 "github.com/pf-qiu/concourse/v6/atc/db" 14 "github.com/pf-qiu/concourse/v6/atc/db/dbfakes" 15 "github.com/pf-qiu/concourse/v6/atc/engine" 16 "github.com/pf-qiu/concourse/v6/atc/event" 17 "github.com/pf-qiu/concourse/v6/atc/exec" 18 "github.com/pf-qiu/concourse/v6/atc/policy/policyfakes" 19 "github.com/pf-qiu/concourse/v6/atc/runtime" 20 "github.com/pf-qiu/concourse/v6/vars" 21 ) 22 23 var _ = Describe("GetDelegate", func() { 24 var ( 25 logger *lagertest.TestLogger 26 fakeBuild *dbfakes.FakeBuild 27 fakePipeline *dbfakes.FakePipeline 28 fakeResource *dbfakes.FakeResource 29 fakeClock *fakeclock.FakeClock 30 fakePolicyChecker *policyfakes.FakeChecker 31 32 state exec.RunState 33 34 now = time.Date(1991, 6, 3, 5, 30, 0, 0, time.UTC) 35 delegate exec.GetDelegate 36 info runtime.VersionResult 37 exitStatus exec.ExitStatus 38 ) 39 40 BeforeEach(func() { 41 logger = lagertest.NewTestLogger("test") 42 43 fakeBuild = new(dbfakes.FakeBuild) 44 fakePipeline = new(dbfakes.FakePipeline) 45 fakeResource = new(dbfakes.FakeResource) 46 fakeClock = fakeclock.NewFakeClock(now) 47 credVars := vars.StaticVariables{ 48 "source-param": "super-secret-source", 49 "git-key": "{\n123\n456\n789\n}\n", 50 } 51 state = exec.NewRunState(noopStepper, credVars, true) 52 53 info = runtime.VersionResult{ 54 Version: atc.Version{"foo": "bar"}, 55 Metadata: []atc.MetadataField{{Name: "baz", Value: "shmaz"}}, 56 } 57 58 fakePolicyChecker = new(policyfakes.FakeChecker) 59 60 delegate = engine.NewGetDelegate(fakeBuild, "some-plan-id", state, fakeClock, fakePolicyChecker) 61 }) 62 63 Describe("Finished", func() { 64 JustBeforeEach(func() { 65 delegate.Finished(logger, exitStatus, info) 66 }) 67 68 It("saves an event", func() { 69 Expect(fakeBuild.SaveEventCallCount()).To(Equal(1)) 70 Expect(fakeBuild.SaveEventArgsForCall(0)).To(Equal(event.FinishGet{ 71 Origin: event.Origin{ID: event.OriginID("some-plan-id")}, 72 Time: now.Unix(), 73 ExitStatus: int(exitStatus), 74 FetchedVersion: info.Version, 75 FetchedMetadata: info.Metadata, 76 })) 77 }) 78 }) 79 80 Describe("UpdateVersion", func() { 81 JustBeforeEach(func() { 82 plan := atc.GetPlan{Resource: "some-resource"} 83 delegate.UpdateVersion(logger, plan, info) 84 }) 85 86 Context("when retrieving the pipeline fails", func() { 87 BeforeEach(func() { 88 fakeBuild.PipelineReturns(nil, false, errors.New("nope")) 89 }) 90 91 It("doesn't update the metadata", func() { 92 Expect(fakeResource.UpdateMetadataCallCount()).To(Equal(0)) 93 }) 94 }) 95 96 Context("when retrieving the pipeline succeeds", func() { 97 98 Context("when the pipeline is not found", func() { 99 BeforeEach(func() { 100 fakeBuild.PipelineReturns(nil, false, nil) 101 }) 102 103 It("doesn't update the metadata", func() { 104 Expect(fakeResource.UpdateMetadataCallCount()).To(Equal(0)) 105 }) 106 }) 107 108 Context("when the pipeline is found", func() { 109 BeforeEach(func() { 110 fakeBuild.PipelineReturns(fakePipeline, true, nil) 111 }) 112 113 Context("when retrieving the resource fails", func() { 114 BeforeEach(func() { 115 fakePipeline.ResourceReturns(nil, false, errors.New("nope")) 116 }) 117 118 It("doesn't update the metadata", func() { 119 Expect(fakeResource.UpdateMetadataCallCount()).To(Equal(0)) 120 }) 121 }) 122 123 Context("when retrieving the resource succeeds", func() { 124 125 It("retrives the resource by name", func() { 126 Expect(fakePipeline.ResourceArgsForCall(0)).To(Equal("some-resource")) 127 }) 128 129 Context("when the resource is not found", func() { 130 BeforeEach(func() { 131 fakePipeline.ResourceReturns(nil, false, nil) 132 }) 133 134 It("doesn't update the metadata", func() { 135 Expect(fakeResource.UpdateMetadataCallCount()).To(Equal(0)) 136 }) 137 }) 138 139 Context("when the resource is found", func() { 140 BeforeEach(func() { 141 fakePipeline.ResourceReturns(fakeResource, true, nil) 142 }) 143 144 It("updates the metadata", func() { 145 Expect(fakeResource.UpdateMetadataCallCount()).To(Equal(1)) 146 version, metadata := fakeResource.UpdateMetadataArgsForCall(0) 147 Expect(version).To(Equal(info.Version)) 148 Expect(metadata).To(Equal(db.NewResourceConfigMetadataFields(info.Metadata))) 149 }) 150 }) 151 }) 152 }) 153 }) 154 }) 155 })