package Ġcom . netflix . spin n aker . ke el . services Ċ Ċ import Ġcom . netflix . spin n aker . config . BaseUrl Config Ċ import Ġcom . netflix . spin n aker . config . Lifecycle Config Ċ import Ġcom . netflix . spin n aker . ke el . api . artifacts . Artifact Metadata Ċ import Ġcom . netflix . spin n aker . ke el . api . artifacts . Build Metadata Ċ import Ġcom . netflix . spin n aker . ke el . api . artifacts . Job Ċ import Ġcom . netflix . spin n aker . ke el . front 5 0 . Front 5 0 Service Ċ import Ġcom . netflix . spin n aker . ke el . front 5 0 . model . Application Ċ import Ġcom . netflix . spin n aker . ke el . front 5 0 . model . Data Sources Ċ import Ġcom . netflix . spin n aker . ke el . ig or . Build Lifecycle Monitor Ċ import Ġcom . netflix . spin n aker . ke el . ig or . artifact . Artifact MetadataService Ċ import Ġcom . netflix . spin n aker . ke el . lifecycle . Lifecycle Event Ċ import Ġcom . netflix . spin n aker . ke el . lifecycle . Lifecycle Event Scope . PRE _ DEPLOY MENT Ċ import Ġcom . netflix . spin n aker . ke el . lifecycle . Lifecycle Event Status . ABORT ED Ċ import Ġcom . netflix . spin n aker . ke el . lifecycle . Lifecycle Event Status . FAILED Ċ import Ġcom . netflix . spin n aker . ke el . lifecycle . Lifecycle Event Status . NOT _ STARTED Ċ import Ġcom . netflix . spin n aker . ke el . lifecycle . Lifecycle Event Status . RUNNING Ċ import Ġcom . netflix . spin n aker . ke el . lifecycle . Lifecycle Event Status . SUCCEEDED Ċ import Ġcom . netflix . spin n aker . ke el . lifecycle . Lifecycle Event Status . UNKNOWN Ċ import Ġcom . netflix . spin n aker . ke el . lifecycle . Lifecycle EventType . BUILD Ċ import Ġcom . netflix . spin n aker . ke el . lifecycle . Lifecycle Monitor Repository Ċ import Ġcom . netflix . spin n aker . ke el . lifecycle . Mon itored Task Ċ import Ġcom . netflix . spin n aker . ke el . test . configured Test ObjectMapper Ċ import Ġdev . min ut est . junit . JUnit 5 Min ut ests Ċ import Ġdev . min ut est . root Context Ċ import Ġio . mock k . Called Ċ import Ġio . mock k . co Every Ċ import Ġio . mock k . mock k Ċ import Ġio . mock k . slot Ċ import Ġio . mock k . verify Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġorg . springframework . context . Application Event Publisher Ċ import Ġstri kt . api . expect That Ċ import Ġstri kt . assertions . isEqualTo Ċ import Ġstri kt . assertions . isTrue Ċ import Ġjava . time . Instant Ċ Ċ class ĠBuild Lifecycle Monitor Tests Ġ: ĠJ Unit 5 Min ut ests Ġ{ ĊĠ Ġinternal Ġclass ĠFix ture Ġ{ ĊĠĠĠ Ġval Ġmonitor Repository : ĠLifecycle Monitor Repository Ġ= Ġmock k ( relax Unit Fun Ġ= Ġtrue ) ĊĠĠĠ Ġval Ġpublisher : ĠApplication Event Publisher Ġ= Ġmock k ( relax Unit Fun Ġ= Ġtrue ) ĊĠĠĠ Ġval Ġlifecycle Config Ġ= ĠLifecycle Config () ĊĠĠĠ Ġval Ġartifact MetadataService : ĠArtifact MetadataService Ġ= Ġmock k () ĊĠĠĠ Ġval Ġfront 5 0 Service : ĠFront 5 0 Service Ġ= Ġmock k () ĊĠĠĠ Ġval Ġsp inn aker BaseUrl Ġ= Ġ" www . spin . com " ĊĠĠĠ Ġval Ġuid Ġ= Ġ" c 9 bb 7 3 6 9 - 8 4 3 3 - 4 0 1 4 - b caa - b 0 ef 8 1 4 2 3 4 c 3 " ĊĠĠĠ Ġval Ġfallback Link Ġ= Ġ" www . jenkins . com / my - build " ĊĠĠĠ Ġval ĠobjectMapper Ġ= Ġconfigured Test ObjectMapper () ĊĠĠĠ Ġval Ġbuild Number Ġ= Ġ" 4 " ĊĠĠĠ Ġval Ġcommit Id Ġ= Ġ" 5 6 2 0 3 b 1 " ĊĠĠĠ Ġval Ġoriginal Build Metadata Ġ= ĠBuild Metadata ( ĊĠĠĠĠĠ Ġid Ġ= Ġ 4 , ĊĠĠĠĠĠ Ġnumber Ġ= Ġbuild Number , ĊĠĠĠĠĠ Ġuid Ġ= Ġuid , ĊĠĠĠĠĠ Ġjob Ġ= ĠJob ( ĊĠĠĠĠĠĠĠ Ġlink Ġ= Ġfallback Link , ĊĠĠĠĠĠĠĠ Ġname Ġ= Ġ" my Ġjenkins Ġjob " ĊĠĠĠĠĠ Ġ), ĊĠĠĠĠĠ Ġstatus Ġ= Ġ" BUILD ING " ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġval Ġevent Ġ= ĠLifecycle Event ( ĊĠĠĠĠĠ Ġtype Ġ= ĠBUILD , ĊĠĠĠĠĠ Ġscope Ġ= ĠPRE _ DEPLOY MENT , ĊĠĠĠĠĠ Ġstatus Ġ= ĠNOT _ STARTED , ĊĠĠĠĠĠ Ġid Ġ= Ġ" my - build - 1 ", ĊĠĠĠĠĠ Ġdelivery Config Name Ġ= Ġ" my - config ", ĊĠĠĠĠĠ Ġartifact Reference Ġ= Ġ" my - artifact ", ĊĠĠĠĠĠ Ġartifact Version Ġ= Ġ" 1 2 3 . 4 ", ĊĠĠĠĠĠ Ġtext Ġ= Ġ" Starting Ġbuild ", ĊĠĠĠĠĠ Ġlink Ġ= Ġuid , ĊĠĠĠĠĠ Ġtimestamp Ġ= ĠInstant . now (), ĊĠĠĠĠĠ Ġdata Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠ Ġ" application " Ġto Ġ" my - app ", ĊĠĠĠĠĠĠĠ Ġ" build Number " Ġto Ġbuild Number , ĊĠĠĠĠĠĠĠ Ġ" commit Id " Ġto Ġcommit Id , ĊĠĠĠĠĠĠĠ Ġ" build Metadata " Ġto Ġoriginal Build Metadata ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġval Ġevent That Is Finished Ġ= Ġevent . copy ( ĊĠĠĠĠĠ Ġdata Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠ Ġ" application " Ġto Ġ" my - app ", ĊĠĠĠĠĠĠĠ Ġ" build Number " Ġto Ġbuild Number , ĊĠĠĠĠĠĠĠ Ġ" commit Id " Ġto Ġcommit Id , ĊĠĠĠĠĠĠĠ Ġ" build Metadata " Ġto Ġoriginal Build Metadata . copy ( status Ġ= Ġ" SUCCESS ") ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġval Ġapp Ġ= ĠApplication ( ĊĠĠĠĠĠ Ġname Ġ= Ġ" myapp ", ĊĠĠĠĠĠ Ġemail Ġ= Ġ" blah @ blah . com ", ĊĠĠĠĠĠ Ġdata Sources Ġ= ĠData Sources ( enabled Ġ= Ġempty List (), Ġdisabled Ġ= ĠlistOf (" integration ")) ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġval Ġtask Ġ= ĠMon itored Task ( ĊĠĠĠĠĠ Ġlink Ġ= Ġuid , ĊĠĠĠĠĠ Ġtriggering Event Ġ= Ġevent , ĊĠĠĠĠĠ Ġtriggering Event Uid Ġ= Ġ" uid - i - am " ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġval Ġsubject Ġ= ĠBuild Lifecycle Monitor ( ĊĠĠĠĠĠ Ġmonitor Repository , ĊĠĠĠĠĠ Ġpublisher , ĊĠĠĠĠĠ Ġlifecycle Config , ĊĠĠĠĠĠ ĠobjectMapper , ĊĠĠĠĠĠ Ġartifact MetadataService , ĊĠĠĠĠĠ Ġfront 5 0 Service , ĊĠĠĠĠĠ ĠBase Url Config () ĊĠĠĠ Ġ) ĊĠ Ġ} ĊĊĠ Ġfun Ġtests () Ġ= Ġroot Context < Fixture > Ġ{ ĊĠĠĠ Ġfixture Ġ{ ĠFix ture () Ġ} ĊĊĠĠĠ Ġtest (" handles Ġbuilds ") Ġ{ ĊĠĠĠĠĠ Ġexpect That ( subject . handles ( BUILD )). isTrue () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcontext (" updating Ġstatus ") Ġ{ ĊĠĠĠĠĠ Ġbefore Ġ{ ĊĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġfront 5 0 Service . application ByName ( any ()) Ġ} Ġreturns Ġapp ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġcontext (" building ") Ġ{ ĊĠĠĠĠĠĠĠ Ġbefore Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġartifact MetadataService . get Artifact Metadata ( build Number , Ġcommit Id ) Ġ} Ġreturns Ġget Artifact Metadata (" BUILD ING ") ĊĠĠĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ Ġsubject . monitor ( task ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtest (" em its Ġrunning Ġevent ") Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġval Ġslot Ġ= Ġslot < Lifecycle Event >() ĊĠĠĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpublisher . publish Event ( capture ( slot )) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġexpect That ( slot . captured . status ). isEqualTo ( RUNNING ) ĊĠĠĠĠĠĠĠĠĠ Ġexpect That ( slot . captured . start Monitoring ). isEqualTo ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġcontext (" success ") Ġ{ ĊĠĠĠĠĠĠĠ Ġbefore Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġartifact MetadataService . get Artifact Metadata ( build Number , Ġcommit Id ) Ġ} Ġreturns ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Artifact Metadata (" SUCCESS ") ĊĠĠĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ Ġsubject . monitor ( task ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtest (" em its Ġsucceeded Ġevent ") Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġval Ġslot Ġ= Ġslot < Lifecycle Event >() ĊĠĠĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpublisher . publish Event ( capture ( slot )) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġexpect That ( slot . captured . status ). isEqualTo ( SUCCEEDED ) ĊĠĠĠĠĠĠĠĠĠ Ġexpect That ( slot . captured . start Monitoring ). isEqualTo ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġcontext (" failure ") Ġ{ ĊĠĠĠĠĠĠĠ Ġbefore Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġartifact MetadataService . get Artifact Metadata ( build Number , Ġcommit Id ) Ġ} Ġreturns ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Artifact Metadata (" FAILURE ") ĊĠĠĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ Ġsubject . monitor ( task ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtest (" em its Ġfailed Ġevent ") Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġval Ġslot Ġ= Ġslot < Lifecycle Event >() ĊĠĠĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpublisher . publish Event ( capture ( slot )) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġexpect That ( slot . captured . status ). isEqualTo ( FAILED ) ĊĠĠĠĠĠĠĠĠĠ Ġexpect That ( slot . captured . start Monitoring ). isEqualTo ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġcontext (" abort ed ") Ġ{ ĊĠĠĠĠĠĠĠ Ġbefore Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġartifact MetadataService . get Artifact Metadata ( build Number , Ġcommit Id ) Ġ} Ġreturns ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Artifact Metadata (" ABORT ED ") ĊĠĠĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ Ġsubject . monitor ( task ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtest (" em its Ġaborted Ġevent ") Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġval Ġslot Ġ= Ġslot < Lifecycle Event >() ĊĠĠĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpublisher . publish Event ( capture ( slot )) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġexpect That ( slot . captured . status ). isEqualTo ( ABORT ED ) ĊĠĠĠĠĠĠĠĠĠ Ġexpect That ( slot . captured . start Monitoring ). isEqualTo ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġcontext (" UN ST ABLE ") Ġ{ ĊĠĠĠĠĠĠĠ Ġbefore Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġartifact MetadataService . get Artifact Metadata ( build Number , Ġcommit Id ) Ġ} Ġreturns ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Artifact Metadata (" UN ST ABLE ") ĊĠĠĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ Ġsubject . monitor ( task ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtest (" em its Ġsucceeded Ġevent ") Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġval Ġslot Ġ= Ġslot < Lifecycle Event >() ĊĠĠĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpublisher . publish Event ( capture ( slot )) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġexpect That ( slot . captured . status ). isEqualTo ( SUCCEEDED ) ĊĠĠĠĠĠĠĠĠĠ Ġexpect That ( slot . captured . start Monitoring ). isEqualTo ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġcontext (" garbage ") Ġ{ ĊĠĠĠĠĠĠĠ Ġbefore Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġartifact MetadataService . get Artifact Metadata ( build Number , Ġcommit Id ) Ġ} Ġreturns ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Artifact Metadata (" BL AH HH HH H ") ĊĠĠĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ Ġsubject . monitor ( task ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtest (" em its Ġunknown Ġevent ") Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġval Ġslot Ġ= Ġslot < Lifecycle Event >() ĊĠĠĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpublisher . publish Event ( capture ( slot )) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġexpect That ( slot . captured . status ). isEqualTo ( UNKNOWN ) ĊĠĠĠĠĠĠĠĠĠ Ġexpect That ( slot . captured . start Monitoring ). isEqualTo ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġcontext (" job Ġalready Ġcomplete ") Ġ{ ĊĠĠĠĠĠĠĠ Ġbefore Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ Ġsubject . monitor ( task . copy ( trigger ing Event Ġ= Ġevent That Is Finished )) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtest (" artifact Ġmetadata Ġservice Ġnot Ġcalled ") Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġverify Ġ{ Ġartifact MetadataService Ġwas Not ĠCalled } ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtest (" em its Ġsuccess Ġevent ") Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġval Ġslot Ġ= Ġslot < Lifecycle Event >() ĊĠĠĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpublisher . publish Event ( capture ( slot )) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġexpect That ( slot . captured . status ). isEqualTo ( SUCCEEDED ) ĊĠĠĠĠĠĠĠĠĠ Ġexpect That ( slot . captured . start Monitoring ). isEqualTo ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcontext (" handle Ġfailure ") Ġ{ ĊĠĠĠĠĠ Ġbefore Ġ{ ĊĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġartifact MetadataService . get Artifact Metadata ( build Number , Ġcommit Id ) Ġ} Ġthrows ĊĠĠĠĠĠĠĠĠĠ ĠRuntimeException (" this Ġis Ġemb arr ass ing .. ") ĊĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġfront 5 0 Service . application ByName ( any ()) Ġ} Ġreturns Ġapp ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġtest (" failure Ġis Ġmarked ") Ġ{ ĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ Ġsubject . monitor ( task ) Ġ} ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġmonitor Repository . mark Failure Getting Status ( task ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġtest (" monitoring Ġis Ġended Ġafter Ġmax Ġnumber Ġis Ġhit ") Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġslot Ġ= Ġslot < Lifecycle Event >() ĊĠĠĠĠĠĠĠ Ġval Ġfailing Task Ġ= Ġtask . copy ( num Failures Ġ= Ġ 4 ) ĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ Ġsubject . monitor ( fail ing Task ) Ġ} ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġpublisher . publish Event ( capture ( slot )) ĊĠĠĠĠĠĠĠĠĠ Ġmonitor Repository . delete ( fail ing Task ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġexpect That ( slot . captured . status ). isEqualTo ( UNKNOWN ) ĊĠĠĠĠĠĠĠ Ġexpect That ( slot . captured . start Monitoring ). isEqualTo ( false ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcontext (" handling Ġinter mitt ent Ġfailure ") Ġ{ ĊĠĠĠĠĠ Ġbefore Ġ{ ĊĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġartifact MetadataService . get Artifact Metadata ( build Number , Ġcommit Id ) Ġ} Ġreturns ĊĠĠĠĠĠĠĠĠĠ Ġget Artifact Metadata (" BUILD ING ") ĊĠĠĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġfront 5 0 Service . application ByName ( any ()) Ġ} Ġreturns Ġapp ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġtest (" failure Ġcount Ġis Ġcleared Ġafter Ġa Ġsuccess ") Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfailing Task Ġ= Ġtask . copy ( num Failures Ġ= Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ Ġsubject . monitor ( fail ing Task ) Ġ} ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġmonitor Repository . clear Failures Getting Status ( fail ing Task ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcontext (" cho osing Ġlink ") Ġ{ ĊĠĠĠĠĠ Ġbefore Ġ{ ĊĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġartifact MetadataService . get Artifact Metadata ( build Number , Ġcommit Id ) Ġ} Ġreturns Ġget Artifact Metadata (" BUILD ING ") ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġcontext (" integration Ġshut Ġoff ") Ġ{ ĊĠĠĠĠĠĠĠ Ġbefore Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġfront 5 0 Service . application ByName ( any ()) Ġ} Ġreturns Ġapp ĊĠĠĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ Ġsubject . monitor ( task ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtest (" link Ġis Ġjenkins ") Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġval Ġslot Ġ= Ġslot < Lifecycle Event >() ĊĠĠĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpublisher . publish Event ( capture ( slot )) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġexpect That ( slot . captured . link ?. contains (" jenkins ")). isEqualTo ( true ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġcontext (" integration Ġnot Ġconfigured ") Ġ{ ĊĠĠĠĠĠĠĠ Ġbefore Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġfront 5 0 Service . application ByName ( any ()) Ġ} Ġreturns ĠApplication ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" myapp ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemail Ġ= Ġ" blah @ blah . com ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata Sources Ġ= ĠData Sources ( enabled Ġ= Ġempty List (), Ġdisabled Ġ= Ġempty List ()) ĊĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ Ġsubject . monitor ( task ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtest (" link Ġis Ġjenkins ") Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġval Ġslot Ġ= Ġslot < Lifecycle Event >() ĊĠĠĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpublisher . publish Event ( capture ( slot )) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġexpect That ( slot . captured . link ?. contains (" jenkins ")). isEqualTo ( true ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġcontext (" integration Ġconfigured ") Ġ{ ĊĠĠĠĠĠĠĠ Ġbefore Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġfront 5 0 Service . application ByName ( any ()) Ġ} Ġreturns ĠApplication ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" myapp ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemail Ġ= Ġ" blah @ blah . com ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata Sources Ġ= ĠData Sources ( enabled Ġ= Ġempty List (), Ġdisabled Ġ= Ġempty List ()), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepo Type Ġ= Ġ" stash ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepo Project Key Ġ= Ġ" project ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepo Slug Ġ= Ġ" repo " ĊĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ Ġsubject . monitor ( task ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtest (" link Ġconstructed Ġfrom Ġbuild Ġid ") Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġval Ġslot Ġ= Ġslot < Lifecycle Event >() ĊĠĠĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpublisher . publish Event ( capture ( slot )) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġexpect That ( slot . captured . link ?. contains ( uid )). isEqualTo ( true ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġget Artifact Metadata ( status : ĠString ): ĠArtifact Metadata Ġ= ĊĠĠĠ ĠArtifact Metadata ( ĊĠĠĠĠĠ Ġbuild Metadata Ġ= ĠBuild Metadata ( ĊĠĠĠĠĠĠĠ Ġid Ġ= Ġ 4 , ĊĠĠĠĠĠĠĠ Ġnumber Ġ= Ġ" 4 ", ĊĠĠĠĠĠĠĠ Ġuid Ġ= Ġ" c 9 bb 7 3 6 9 - 8 4 3 3 - 4 0 1 4 - b caa - b 0 ef 8 1 4 2 3 4 c 3 ", ĊĠĠĠĠĠĠĠ Ġstatus Ġ= Ġstatus ĊĠĠĠĠĠ Ġ), ĊĠĠĠĠĠ Ġgit Metadata Ġ= Ġnull ĊĠĠĠ Ġ) Ċ } Ċ