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