package Ġno . sk at te et aten . aur ora . b oo ber . utils Ċ Ċ import Ġassert k . Assert Ċ import Ġassert k . assertThat Ċ import Ġassert k . assertions . isEqualTo Ċ import Ġassert k . assertions . isInstanceOf Ċ import Ġassert k . assertions . support . expected Ċ import Ġassert k . assertions . support . show Ċ import Ġcom . fk or ot kov . kubernetes . metadata Ċ import Ġcom . fk or ot kov . kubernetes . new Container Ċ import Ġcom . fk or ot kov . kubernetes . new Env Var Ċ import Ġcom . fk or ot kov . kubernetes . new ObjectMeta Ċ import Ġcom . fk or ot kov . kubernetes . new Service Ċ import Ġcom . fk or ot kov . kubernetes . new Service Port Ċ import Ġcom . fk or ot kov . kubernetes . spec Ċ import Ġcom . fk or ot kov . openshift . custom Strategy Ċ import Ġcom . fk or ot kov . openshift . from Ċ import Ġcom . fk or ot kov . openshift . image Change Params Ċ import Ġcom . fk or ot kov . openshift . metadata Ċ import Ġcom . fk or ot kov . openshift . new Build Config Ċ import Ġcom . fk or ot kov . openshift . new Deployment Config Ċ import Ġcom . fk or ot kov . openshift . new Deployment Trigger Policy Ċ import Ġcom . fk or ot kov . openshift . new Image Stream Ċ import Ġcom . fk or ot kov . openshift . output Ċ import Ġcom . fk or ot kov . openshift . rolling Params Ċ import Ġcom . fk or ot kov . openshift . spec Ċ import Ġcom . fk or ot kov . openshift . strategy Ċ import Ġcom . fk or ot kov . openshift . template Ċ import Ġcom . fk or ot kov . openshift . to Ċ import Ġio . fabric 8 . kubernetes . api . model . Has Metadata Ċ import Ġio . fabric 8 . kubernetes . api . model . Int Or String Ċ import Ġio . fabric 8 . kubernetes . api . model . Volume Projection Ċ import Ġio . fabric 8 . openshift . api . model . Deployment Config Ċ import Ġio . mock k . clear All Mocks Ċ import Ġio . mock k . every Ċ import Ġio . mock k . mock k Ċ import Ġno . sk at te et aten . aur ora . b oo ber . feature . Feature Ċ import Ġno . sk at te et aten . aur ora . b oo ber . feature . Header Handlers Ċ import Ġno . sk at te et aten . aur ora . b oo ber . model . Application Deployment Ref Ċ import Ġno . sk at te et aten . aur ora . b oo ber . model . A ur ora Config Field Handler Ċ import Ġno . sk at te et aten . aur ora . b oo ber . model . A ur ora ConfigFile Ċ import Ġno . sk at te et aten . aur ora . b oo ber . model . A ur ora Context Command Ċ import Ġno . sk at te et aten . aur ora . b oo ber . model . A ur ora Deployment Context Ċ import Ġno . sk at te et aten . aur ora . b oo ber . model . A ur ora Deployment Spec Ċ import Ġno . sk at te et aten . aur ora . b oo ber . model . A ur ora Resource Ċ import Ġno . sk at te et aten . aur ora . b oo ber . model . A ur ora Resource Source Ċ import Ġno . sk at te et aten . aur ora . b oo ber . model . Invalid Deployment Context Ċ import Ġno . sk at te et aten . aur ora . b oo ber . model . Port Numbers Ċ import Ġno . sk at te et aten . aur ora . b oo ber . model . openshift . Application Deployment Ċ import Ġno . sk at te et aten . aur ora . b oo ber . model . openshift . Application Deployment Spec Ċ import Ġno . sk at te et aten . aur ora . b oo ber . service . A ur ora Config Ref Ċ import Ġno . sk at te et aten . aur ora . b oo ber . service . A ur ora Deployment Context Service Ċ import Ġno . sk at te et aten . aur ora . b oo ber . service . Id Service Ċ import Ġno . sk at te et aten . aur ora . b oo ber . service . Id Service Fallback Ċ import Ġno . sk at te et aten . aur ora . b oo ber . service . Multi Application ValidationException Ċ import Ġno . sk at te et aten . aur ora . b oo ber . service . openshift . Open Shift Client Ċ import Ġno . sk at te et aten . aur ora . b oo ber . utils . A ur ora Config Samples . Companion . create A ur ora Config Ċ import Ġno . sk at te et aten . aur ora . b oo ber . utils . A ur ora Config Samples . Companion . get A ur ora Config Samples Ċ import Ġorg . junit . jupiter . api . BeforeEach Ċ import Ġjava . time . Instant Ċ import Ġkotlin . reflect . K Class Ċ Ċ /* ĊĠ ĠAbstract Ġclass Ġto Ġtest Ġa Ġsingle Ġfeature ĊĠ ĠOverride Ġthe Ġfeature Ġvariable Ġwith Ġthe ĠFeature Ġyou Ġwant Ġto Ġtest ĊĊĠ ĠLook Ġat Ġthe Ġhelper Ġmethods Ġin Ġthis Ġclass Ġto Ġcreate Ġhandlers / resources Ġfor Ġthis Ġfeature ĊĊ Ġ*/ Ċ Ċ class ĠTest Default Feature Ġ: ĠFeature Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġhandlers ( header : ĠA ur ora Deployment Spec , Ġcmd : ĠA ur ora Context Command ): ĠSet < A ur ora Config Field Handler > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġempty Set () ĊĠĠĠ Ġ} Ċ } Ċ Ċ abstract Ġclass ĠAbstract Feature Test Ġ: ĠResource Loader () Ġ{ ĊĊĠĠĠ Ġabstract Ġval Ġfeature : ĠFeature ĊĊĠĠĠ Ġval Ġcluster Ġ= Ġ" ut v " ĊĠĠĠ Ġval Ġaffili ation Ġ= Ġ" pa as " ĊĠĠĠ Ġval ĠappName Ġ= Ġ" simple " ĊĠĠĠ Ġval Ġenvironment Ġ= Ġ" ut v " ĊĠĠĠ Ġval Ġkube Ns Ġ= Ġ"$ aff iliation -$ environment " ĊĠĠĠ Ġval Ġaid Ġ= ĠApplication Deployment Ref ( environment , ĠappName ) ĊĊĠĠĠ Ġval Ġopen Shift Client : ĠOpen Shift Client Ġ= Ġmock k () ĊĊĠĠĠ Ġ// ĠTODO : Ġrewrite Ġwhen Ġresources Ġare Ġnot Ġloaded Ġwith Ġpackage ĊĠĠĠ Ġval ĠFEATURE _ AB OUT Ġ= Ġget A ur ora Config Samples (). files . find Ġ{ Ġit . name Ġ== Ġ" about . json " Ġ} ?. contents ĊĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠRuntimeException (" Could Ġnot Ġfind Ġabout . json ") ĊĊĠĠĠ Ġfun Ġcreate Empty Image Stream () Ġ= ĊĠĠĠĠĠĠĠ ĠA ur ora Resource ( new Image Stream Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmetadata Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= ĠappName ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnamespace Ġ= Ġkube Ns ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġspec Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdocker Image Repository Ġ= Ġ" docker . registry / org _ test / simple " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}, Ġcreated Source Ġ= ĠA ur ora Resource Source ( Test Default Feature :: class . java )) ĊĊĠĠĠ Ġfun Ġcreate Empty Service () Ġ= ĠA ur ora Resource ( new Service Ġ{ ĊĠĠĠĠĠĠĠ Ġmetadata Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" simple " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnamespace Ġ= Ġkube Ns ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġspec Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġports Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Service Port Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" http " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprotocol Ġ= Ġ" TCP " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġport Ġ= ĠPort Numbers . HTTP _ PORT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtarget Port Ġ= ĠInt Or String ( Port Numbers . INTERNAL _ HTTP _ PORT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode Port Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġselector Ġ= Ġmap Of (" name " Ġto Ġ" simple ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= Ġ" Cluster IP " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsession Affinity Ġ= Ġ" None " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}, Ġcreated Source Ġ= ĠA ur ora Resource Source ( Test Default Feature :: class . java )) ĊĊĠĠĠ Ġfun Ġcreate Empty Build Config () Ġ= ĠA ur ora Resource ( ĊĠĠĠĠĠĠĠ Ġnew Build Config Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmetadata Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" simple " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnamespace Ġ= Ġkube Ns ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġspec Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstrategy Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= Ġ" Custom " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcustom Strategy Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfrom Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkind Ġ= Ġ" Image Stream Tag " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnamespace Ġ= Ġ" openshift " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" architect : 1 " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġenv Map Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" AR TI FACT _ ID " Ġto Ġ" simp e ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" GROUP _ ID " Ġto Ġ" org . test ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" VERSION " Ġto Ġ" 1 " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenv Ġ= Ġenv Map . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Env Var Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġit . key ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġit . value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpose Docker Socket Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġto Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkind Ġ= Ġ" Image Stream Tag " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" simple : latest " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}, Ġcreated Source Ġ= ĠA ur ora Resource Source ( Test Default Feature :: class . java ) ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġfun Ġcreate Empty Application Deployment () Ġ= ĠA ur ora Resource ( ĊĠĠĠĠĠĠĠ ĠApplication Deployment ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġspec Ġ= ĠApplication Deployment Spec (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ metadata Ġ= Ġnew ObjectMeta Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" simple " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnamespace Ġ= Ġkube Ns ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ), Ġcreated Source Ġ= ĠA ur ora Resource Source ( Test Default Feature :: class . java )) ĊĊĠĠĠ Ġ// ĠTODO : ĠThis Ġshould Ġbe Ġread Ġfrom Ġa Ġfile , Ġwe Ġshould Ġalso Ġprovide ĠIS , ĠService Ġand ĠAD Ġobjects Ġthat Ġcan Ġbe Ġmodified . ĊĠĠĠ Ġfun Ġcreate Empty Deployment Config () Ġ= ĊĠĠĠĠĠĠĠ ĠA ur ora Resource ( new Deployment Config Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġmetadata Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" simple " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnamespace Ġ= Ġkube Ns ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġspec Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstrategy Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= Ġ" Rol ling " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrolling Params Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinterval Seconds Ġ= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax Sur ge Ġ= ĠInt Or String (" 2 5 % ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax Unavailable Ġ= ĠInt Or String ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtimeout Seconds Ġ= Ġ 1 8 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Period Seconds Ġ= Ġ 1 L ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtriggers Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Deployment Trigger Policy Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= Ġ" Image Change " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage Change Params Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġautomatic Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer Names Ġ= ĠlistOf (" simple ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfrom Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" simple : default " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkind Ġ= Ġ" Image Stream Tag " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreplicas Ġ= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselector Ġ= Ġmap Of (" name " Ġto Ġ" simple ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtemplate Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġspec Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontainers Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Container Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" simple " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrestart Policy Ġ= Ġ" Always " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdns Policy Ġ= Ġ" Cluster First " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}, Ġcreated Source Ġ= ĠA ur ora Resource Source ( Test Default Feature :: class . java )) ĊĊĠĠĠ Ġval Ġconfig Ġ= Ġmutable Map Of ( ĊĠĠĠĠĠĠĠ Ġ" about . json " Ġto ĠFEATURE _ AB OUT , ĊĠĠĠĠĠĠĠ Ġ"$ environment / about . json " Ġto Ġ""" { Ġ} """, ĊĠĠĠĠĠĠĠ Ġ"$ appName . json " Ġto Ġ""" { Ġ} """, ĊĠĠĠĠĠĠĠ Ġ"$ environment /$ appName . json " Ġto Ġ""" { Ġ} """ ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ@ BeforeEach ĊĠĠĠ Ġfun Ġsetup () Ġ{ ĊĠĠĠĠĠĠĠ ĠInst ants . determine Now Ġ= Ġ{ ĠInstant . EPOCH Ġ} ĊĠĠĠĠĠĠĠ Ġclear All Mocks () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate Custom A ur ora Deployment Context ( ĊĠĠĠĠĠĠĠ Ġad r : ĠApplication Deployment Ref , ĊĠĠĠĠĠĠĠ Ġvar arg Ġfile : ĠPair < String , ĠString > ĊĠĠĠ Ġ): ĠPair < List < A ur ora Deployment Context >, ĠList < Invalid Deployment Context >> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġid Service Ġ= Ġmock k < Id Service >() ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid Service . generate Or Fetch Id ( any ()) ĊĠĠĠĠĠĠĠ Ġ} Ġreturns Ġ" 1 2 3 4 5 6 7 8 9 0 " ĊĊĠĠĠĠĠĠĠ Ġval Ġservice Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠA ur ora Deployment Context Service ( features Ġ= ĠlistOf ( feature ), Ġid Service Ġ= Ġid Service , Ġid Service Fallback Ġ= Ġnull ) ĊĠĠĠĠĠĠĠ Ġval Ġa ur ora Config Ġ= Ġcreate A ur ora Config ( file . toMap ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġdeploy Command Ġ= ĠA ur ora Context Command ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġa ur ora Config Ġ= Ġa ur ora Config , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapplication Deployment Ref Ġ= Ġad r , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġa ur ora Config Ref Ġ= ĠA ur ora Config Ref (" test ", Ġ" master ", Ġ" 1 2 3 abb "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverrides Ġ= Ġempty List () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġreturn Ġservice . create Validated A ur ora Deployment Contexts ( listOf ( deploy Command ), Ġtrue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/* ĊĠĠĠĠĠ ĠCreate Deployment Context Ġfor Ġthe Ġfeature Ġin Ġtest ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġcreate A ur ora Deployment Context ( ĊĠĠĠĠĠĠĠ Ġapp : ĠString Ġ= Ġ""" {} """, ĊĠĠĠĠĠĠĠ Ġfull Validation : ĠBoolean Ġ= Ġtrue , ĊĠĠĠĠĠĠĠ Ġfiles : ĠList < A ur ora ConfigFile > Ġ= Ġempty List (), ĊĠĠĠĠĠĠĠ Ġuse Her k imer Id Service : ĠBoolean Ġ= Ġtrue ĊĠĠĠ Ġ): ĠPair < List < A ur ora Deployment Context >, ĠList < Invalid Deployment Context >> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġid Service Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( use Her k imer Id Service ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmock k < Id Service >(). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . generate Or Fetch Id ( any ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġreturns Ġ" 1 2 3 4 5 6 7 8 9 0 " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġnull ĊĊĠĠĠĠĠĠĠ Ġval Ġid Service Fallback Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! use Her k imer Id Service ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmock k < Id Service Fallback >(). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . generate Or Fetch Id ( any (), Ġany ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġreturns Ġ" fallback id " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġservice Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠA ur ora Deployment Context Service ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfeatures Ġ= ĠlistOf ( feature ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Service Ġ= Ġid Service , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Service Fallback Ġ= Ġid Service Fallback ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġa ur ora Config Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate A ur ora Config ( config . add If NotNull ("$ environment / simple . json " Ġto Ġapp ), Ġfiles ) ĊĊĠĠĠĠĠĠĠ Ġval Ġdeploy Command Ġ= ĠA ur ora Context Command ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġa ur ora Config Ġ= Ġa ur ora Config , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapplication Deployment Ref Ġ= Ġaid , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġa ur ora Config Ref Ġ= ĠA ur ora Config Ref (" test ", Ġ" master ", Ġ" 1 2 3 abb "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverrides Ġ= Ġfiles . filter Ġ{ Ġit . override Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġreturn Ġservice . create Validated A ur ora Deployment Contexts ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( deploy Command ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfull Validation ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate A ur ora Deployment Spec For Feature ( ĊĠĠĠĠĠĠĠ Ġapp : ĠString Ġ= Ġ""" {} """, ĊĠĠĠĠĠĠĠ Ġfull Validation : ĠBoolean Ġ= Ġtrue , ĊĠĠĠĠĠĠĠ Ġfiles : ĠList < A ur ora ConfigFile > Ġ= Ġempty List () ĊĠĠĠ Ġ): ĠA ur ora Deployment Spec Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġ( valid , Ġ_) Ġ= Ġcreate A ur ora Deployment Context ( app , Ġfull Validation , Ġfiles ) ĊĊĠĠĠĠĠĠĠ Ġval Ġheaders Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalid . first (). cmd . application Deployment Ref ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. run Ġ{ ĠHeader Handlers . create ( application , Ġenvironment ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. handlers . map Ġ{ Ġit . name Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġfields Ġ= Ġvalid . first (). spec . fields ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Not Ġ{ Ġheaders . contains ( it . key ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Not Ġ{ Ġit . key Ġin ĠlistOf (" application Deployment Ref ", Ġ" config Version ") Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġvalid . first (). spec . copy ( fields Ġ= Ġfields ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġgenerate Resources ( ĊĠĠĠĠĠĠĠ Ġapp : ĠString Ġ= Ġ""" {} """, ĊĠĠĠĠĠĠĠ Ġvar arg Ġresource : ĠA ur ora Resource ĊĠĠĠ Ġ): ĠList < A ur ora Resource > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġgenerate Resources ( app , Ġresource . to Mutable Set (), Ġcreated Resources Ġ= Ġ 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/* ĊĠĠĠĠĠ ĠWill Ġnot Ġgenerate Ġany Ġresources ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġmodify Resources ( ĊĠĠĠĠĠĠĠ Ġapp : ĠString Ġ= Ġ""" {} """, ĊĠĠĠĠĠĠĠ Ġvar arg Ġresource : ĠA ur ora Resource ĊĠĠĠ Ġ): ĠList < A ur ora Resource > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġgenerate Resources ( app , Ġresource . to Mutable Set (), Ġcreated Resources Ġ= Ġ 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġgenerate Resources ( ĊĠĠĠĠĠĠĠ Ġapp : ĠString Ġ= Ġ""" {} """, ĊĠĠĠĠĠĠĠ Ġresource : ĠA ur ora Resource , ĊĠĠĠĠĠĠĠ Ġfiles : ĠList < A ur ora ConfigFile > Ġ= Ġempty List (), ĊĠĠĠĠĠĠĠ Ġcreated Resources : ĠInt Ġ= Ġ 1 ĊĠĠĠ Ġ): ĠList < A ur ora Resource > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġgenerate Resources ( app , Ġmutable Set Of ( resource ), Ġfiles , Ġcreated Resources ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġgenerate Resources ( ĊĠĠĠĠĠĠĠ Ġapp : ĠString Ġ= Ġ""" {} """, ĊĠĠĠĠĠĠĠ Ġresources : ĠMutable Set < A ur ora Resource > Ġ= Ġmutable Set Of (), ĊĠĠĠĠĠĠĠ Ġfiles : ĠList < A ur ora ConfigFile > Ġ= Ġempty List (), ĊĠĠĠĠĠĠĠ Ġcreated Resources : ĠInt Ġ= Ġ 1 ĊĠĠĠ Ġ): ĠList < A ur ora Resource > Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval ĠnumberOf Empty Resources Ġ= Ġresources . size ĊĠĠĠĠĠĠĠ Ġval Ġ( valid , Ġinvalid ) Ġ= Ġcreate A ur ora Deployment Context ( app , Ġfiles Ġ= Ġfiles ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( invalid . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠMulti Application ValidationException ( invalid . map Ġ{ Ġit . errors Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġgenerated Ġ= Ġvalid . first (). features . flatMap Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . key . generate ( it . value , Ġvalid . first (). feature Context [ it . key ] Ġ?: Ġempty Map ()) ĊĠĠĠĠĠĠĠ Ġ}. toSet () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( resources . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġgenerated . toList () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġresources . addAll ( generated ) ĊĊĠĠĠĠĠĠĠ Ġvalid . first (). features . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . key . modify ( it . value , Ġresources , Ġvalid . first (). feature Context [ it . key ] Ġ?: Ġempty Map ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠassertThat ( resources . size , Ġ" Number Ġof Ġresources "). isEqualTo ( numberOf Empty Resources Ġ+ Ġcreated Resources ) ĊĠĠĠĠĠĠĠ Ġreturn Ġresources . toList () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate A ur ora Config Field Handlers ( ĊĠĠĠĠĠĠĠ Ġapp : ĠString Ġ= Ġ""" {} """ ĊĠĠĠ Ġ): ĠA ur ora Deployment Spec Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġ( valid , Ġinvalid ) Ġ= Ġcreate A ur ora Deployment Context ( app ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( invalid . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠMulti Application ValidationException ( invalid . map Ġ{ Ġit . errors Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġvalid . first (). features . values . first () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠAssert < A ur ora Resource >. aur ora Resource Mount s Attachment ( ĊĠĠĠĠĠĠĠ Ġattachment : ĠHas Metadata , ĊĠĠĠĠĠĠĠ Ġadditional Env : ĠMap < String , ĠString > Ġ= Ġempty Map () ĊĠĠĠ Ġ): ĠAssert < A ur ora Resource > Ġ= Ġtransform Ġ{ Ġactual Ġ-> ĊĊĠĠĠĠĠĠĠ ĠassertThat ( actual . resource ). isInstanceOf ( Deployment Config :: class . java ) ĊĠĠĠĠĠĠĠ ĠassertThat ( actual ). aur ora Resource Modified By This Feature With Comment (" Added Ġenv Ġvars , Ġvolume Ġmount , Ġvolume ") ĊĊĠĠĠĠĠĠĠ Ġval Ġdc Ġ= Ġactual . resource Ġas ĠDeployment Config ĊĠĠĠĠĠĠĠ Ġval Ġpod Spec Ġ= Ġdc . spec . template . spec ĊĊĠĠĠĠĠĠĠ Ġval Ġvolume Name Ġ= Ġpod Spec . volumes [ 0 ]. name ĊĠĠĠĠĠĠĠ Ġval Ġvolume Env Name Ġ= Ġ" VOLUME _$ volume Name ". replace ("- ", Ġ"_ "). toUpperCase () ĊĠĠĠĠĠĠĠ Ġval Ġvolume Env Value Ġ= Ġpod Spec . containers [ 0 ]. volume Mount s [ 0 ]. mount Path ĊĊĠĠĠĠĠĠĠ Ġval Ġexpected Env Ġ= Ġadditional Env . add If NotNull ( volume Env Name Ġto Ġvolume Env Value ) ĊĊĠĠĠĠĠĠĠ ĠassertThat ( volume Name ). isEqualTo ( pod Spec . containers [ 0 ]. volume Mount s [ 0 ]. name ) ĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġattachment . kind Ġ== Ġ" ConfigMap " Ġ-> ĠassertThat ( pod Spec . volumes [ 0 ]. config Map . name ). isEqualTo ( attachment . metadata . name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġattachment . kind Ġ== Ġ" Secret " Ġ-> ĠassertThat ( pod Spec . volumes [ 0 ]. secret . secret Name ). isEqualTo ( attachment . metadata . name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġattachment . kind Ġ== Ġ" Persistent Volume Claim " Ġ-> ĠassertThat ( pod Spec . volumes [ 0 ]. persistent Volume Claim . claim Name ). isEqualTo ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattachment . metadata . name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġenv : ĠMap < String , ĠString > Ġ= Ġpod Spec . containers [ 0 ]. env . associate Ġ{ Ġit . name Ġto Ġit . value Ġ} ĊĠĠĠĠĠĠĠ ĠassertThat ( env , Ġ" Env Ġvars "). isEqualTo ( expected Env ) ĊĠĠĠĠĠĠĠ Ġactual ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠAssert < A ur ora Resource >. aur ora Resource Mount s P sat ( ĊĠĠĠĠĠĠĠ Ġprojection : ĠVolume Projection , ĊĠĠĠĠĠĠĠ Ġadditional Env : ĠMap < String , ĠString > Ġ= Ġempty Map () ĊĠĠĠ Ġ): ĠAssert < A ur ora Resource > Ġ= Ġtransform Ġ{ Ġactual Ġ-> ĊĊĠĠĠĠĠĠĠ ĠassertThat ( actual . resource ). isInstanceOf ( Deployment Config :: class . java ) ĊĠĠĠĠĠĠĠ ĠassertThat ( actual ). aur ora Resource Modified By This Feature With Comment (" Added Ġenv Ġvars , Ġvolume Ġmount , Ġvolume ") ĊĊĠĠĠĠĠĠĠ Ġval Ġdc Ġ= Ġactual . resource Ġas ĠDeployment Config ĊĠĠĠĠĠĠĠ Ġval Ġpod Spec Ġ= Ġdc . spec . template . spec ĊĊĠĠĠĠĠĠĠ Ġval Ġvolume Name Ġ= Ġpod Spec . volumes [ 0 ]. name ĊĠĠĠĠĠĠĠ Ġval Ġvolume Env Name Ġ= Ġ" VOLUME _$ volume Name ". replace ("- ", Ġ"_ "). toUpperCase () ĊĠĠĠĠĠĠĠ Ġval Ġvolume Env Value Ġ= Ġpod Spec . containers [ 0 ]. volume Mount s [ 0 ]. mount Path ĊĊĠĠĠĠĠĠĠ Ġval Ġexpected Env Ġ= Ġadditional Env . add If NotNull ( volume Env Name Ġto Ġvolume Env Value ) ĊĊĠĠĠĠĠĠĠ ĠassertThat ( volume Name ). isEqualTo ( pod Spec . containers [ 0 ]. volume Mount s [ 0 ]. name ) ĊĠĠĠĠĠĠĠ ĠassertThat ( pod Spec . volumes [ 0 ]. project ed . sources [ 0 ]. service Account Token . audience ). isEqualTo ( projection . service Account Token . audience ) ĊĊĠĠĠĠĠĠĠ Ġval Ġenv : ĠMap < String , ĠString > Ġ= Ġpod Spec . containers [ 0 ]. env . associate Ġ{ Ġit . name Ġto Ġit . value Ġ} ĊĠĠĠĠĠĠĠ ĠassertThat ( env , Ġ" Env Ġvars "). isEqualTo ( expected Env ) ĊĠĠĠĠĠĠĠ Ġactual ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠAssert < A ur ora Resource >. aur ora Resource CreatedBy This Feature (): ĠAssert < A ur ora Resource > Ġ= Ġtransform Ġ{ Ġactual Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= Ġfeature :: class . java ĊĠĠĠĠĠĠĠ Ġif Ġ( expected Ġ== Ġactual . created Source . feature ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactual ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . expected (": ${ show ( expected )} Ġand :${ show ( actual . created Source . feature )} Ġto Ġbe Ġthe Ġsame ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠAssert < A ur ora Resource >. aur ora Resource Modified By This Feature With Comment ( comment : ĠString , Ġindex : ĠInt Ġ= Ġ 0 ) Ġ= ĊĠĠĠĠĠĠĠ Ġtransform Ġ{ Ġar Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactual Ġ= Ġar . sources . toList ()[ index ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= ĠA ur ora Resource Source ( feature :: class . java , Ġcomment ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( actual Ġ== Ġexpected ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġar ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . expected (": ${ show ( expected )} Ġand :${ show ( actual )} Ġto Ġbe Ġthe Ġsame ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ċ } Ċ Ċ inline Ġfun Ġ< re ified ĠT Ġ: ĠHas Metadata > ĠList < A ur ora Resource >. find Resource ByType (): ĠT Ġ= ĊĠĠĠ Ġthis . find Resource ByType ( T :: class ). first OrNull () Ġ?: Ġthrow ĠException (" No Ġresource Ġof Ġspecified Ġtype Ġfound ") Ċ Ċ inline Ġfun Ġ< re ified ĠT Ġ: ĠHas Metadata > ĠList < A ur ora Resource >. find Resources ByType (): ĠList < T > Ġ= ĊĠĠĠ Ġthis . find Resource ByType ( T :: class ) Ċ Ċ fun Ġ< T Ġ: ĠAny > ĠList < A ur ora Resource >. find Resource ByType ( k class : ĠK Class < T >): ĠList < T > Ġ= ĊĠĠĠ Ġfilter Ġ{ Ġit . resource :: class Ġ== Ġk class Ġ} ĊĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġ@ Suppress (" UN CHECK ED _ CAST ") Ġit . resource Ġas ĠT Ġ} Ċ