package Ġcom . netflix . spin n aker . ke el . ec 2 . vet os Ċ Ċ import Ġcom . netflix . spin n aker . ke el . api . Loc atable Ċ import Ġcom . netflix . spin n aker . ke el . api . Mon iker Ċ import Ġcom . netflix . spin n aker . ke el . api . Resource Ċ import Ġcom . netflix . spin n aker . ke el . api . Resource Kind Ċ import Ġcom . netflix . spin n aker . ke el . api . Resource Spec Ċ import Ġcom . netflix . spin n aker . ke el . api . Simple Locations Ċ import Ġcom . netflix . spin n aker . ke el . api . Simple Region Spec Ċ import Ġcom . netflix . spin n aker . ke el . api . Subnet Aware Locations Ċ import Ġcom . netflix . spin n aker . ke el . api . Subnet Aware Region Spec Ċ import Ġcom . netflix . spin n aker . ke el . api . ec 2 . Cluster Dependencies Ċ import Ġcom . netflix . spin n aker . ke el . api . ec 2 . Cluster Spec Ċ import Ġcom . netflix . spin n aker . ke el . api . ec 2 . Cluster Spec . Server Group Spec Ċ import Ġcom . netflix . spin n aker . ke el . api . ec 2 . EC 2 _ SECURITY _ GROUP _ V 1 Ċ import Ġcom . netflix . spin n aker . ke el . api . ec 2 . SecurityGroup Spec Ċ import Ġcom . netflix . spin n aker . ke el . clo udd river . Cloud Driver Cache Ċ import Ġcom . netflix . spin n aker . ke el . clo udd river . Cloud Driver Service Ċ import Ġcom . netflix . spin n aker . ke el . clo udd river . model . Application LoadBalancer Model Ċ import Ġcom . netflix . spin n aker . ke el . clo udd river . model . Application LoadBalancer Model . Target Group Ċ import Ġcom . netflix . spin n aker . ke el . clo udd river . model . Application LoadBalancer Model . Target Group Attributes Ċ import Ġcom . netflix . spin n aker . ke el . clo udd river . model . Application LoadBalancer Model . Target Group Matcher Ċ import Ġcom . netflix . spin n aker . ke el . clo udd river . model . Classic LoadBalancer Model Ċ import Ġcom . netflix . spin n aker . ke el . clo udd river . model . Classic LoadBalancer Model . Classic LoadBalancer HealthCheck Ċ import Ġcom . netflix . spin n aker . ke el . clo udd river . model . Network Ċ import Ġcom . netflix . spin n aker . ke el . clo udd river . model . Network LoadBalancer Model Ċ import Ġcom . netflix . spin n aker . ke el . core . api . DEFAULT _ SERVICE _ ACCOUNT Ċ import Ġcom . netflix . spin n aker . ke el . test . resource Ċ import Ġcom . netflix . spin n aker . ke el . vet o . Veto Response Ċ 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 . mock k Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġstri kt . api . Assertion Ċ import Ġstri kt . api . expect That Ċ import Ġstri kt . assertions . contains Ċ import Ġstri kt . assertions . isNotNull Ċ import Ġstri kt . assertions . isNull OrEmpty Ċ import Ġio . mock k . co Every Ġas Ġevery Ċ import Ġio . mock k . co Verify Ġas Ġverify Ċ Ċ internal Ġclass ĠRequired LoadBalancer Veto Tests Ġ: ĠJ Unit 5 Min ut ests Ġ{ ĊĊĠ Ġdata Ġclass ĠFix ture < out ĠSPEC Ġ: ĠResource Spec >( ĊĠĠĠ Ġval Ġresource Kind : ĠResource Kind , ĊĠĠĠ Ġval Ġresource Spec : ĠSPEC , ĊĠĠĠ Ġval Ġcloud Driver : ĠCloud Driver Service Ġ= Ġmock k (), ĊĠĠĠ Ġval Ġcloud Driver Cache : ĠCloud Driver Cache Ġ= Ġmock k () ĊĠ Ġ) Ġ{ ĊĠĠĠ Ġval Ġresource : ĠResource < SPEC > ĊĠĠĠĠĠ Ġget () Ġ= Ġresource ( resource Kind , Ġresource Spec ) ĊĊĠĠĠ Ġval Ġvpc Ids Ġ= Ġmap Of ( ĊĠĠĠĠĠ Ġ(" prod " Ġto Ġ" ap - south - 1 ") Ġto Ġ" vpc - 1 1 1 1 1 1 1 ", ĊĠĠĠĠĠ Ġ(" prod " Ġto Ġ" af - south - 1 ") Ġto Ġ" vpc - 2 2 2 2 2 2 2 ", ĊĠĠĠĠĠ Ġ(" test " Ġto Ġ" ap - south - 1 ") Ġto Ġ" vpc - 3 3 3 3 3 3 3 ", ĊĠĠĠĠĠ Ġ(" test " Ġto Ġ" af - south - 1 ") Ġto Ġ" vpc - 4 4 4 4 4 4 4 " ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġval Ġv eto Ġ= ĠRequired LoadBalancer Veto ( cloud Driver , Ġcloud Driver Cache ) ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġv eto Response : ĠV eto Response ĊĊĠĠĠ Ġfun Ġcheck () Ġ{ ĊĠĠĠĠĠ Ġv eto Response Ġ= Ġrun Blocking Ġ{ Ġv eto . check ( resource ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġresponse : ĠAssertion . Builder < Veto Response > ĊĠĠĠĠĠ Ġget () Ġ= Ġexpect That ( vet o Response ) ĊĠ Ġ} ĊĊĠ Ġfun Ġtests () Ġ= Ġroot Context Ġ{ ĊĠĠĠ Ġderived Context < Fixture < SecurityGroup Spec >> (" a Ġresource Ġthat Ġcannot Ġhave Ġload Ġbalancer Ġdependencies ") Ġ{ ĊĠĠĠĠĠ Ġfixture Ġ{ ĊĠĠĠĠĠĠĠ ĠFix ture ( ĊĠĠĠĠĠĠĠĠĠ ĠEC 2 _ SECURITY _ GROUP _ V 1 . kind , ĊĠĠĠĠĠĠĠĠĠ ĠSecurity Group Spec ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmon iker Ġ= ĠMon iker ( app Ġ= Ġ" fn ord "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocations Ġ= ĠSimple Locations ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaccount Ġ= Ġ" prod ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregions Ġ= Ġset Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSimple Region Spec (" ap - south - 1 "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSimple Region Spec (" af - south - 1 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġ" a Ġresource Ġwith Ġno Ġdependencies " ĊĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġbefore Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck () ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġtest (" the Ġresource Ġis Ġnot Ġv eto ed ") Ġ{ ĊĠĠĠĠĠĠĠ Ġresponse . is Allowed () ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġtest (" no Ġcall Ġis Ġmade Ġto ĠCloud Driver ") Ġ{ ĊĠĠĠĠĠĠĠ Ġverify Ġ{ Ġcloud Driver Ġwas Not ĠCalled Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġderived Context < Fixture < Cluster Spec >> (" a Ġresource Ġthat Ġcan Ġhave Ġload Ġbalancer Ġdependencies ") Ġ{ ĊĠĠĠĠĠ Ġfixture Ġ{ ĊĠĠĠĠĠĠĠ ĠFix ture ( ĊĠĠĠĠĠĠĠĠĠ ĠEC 2 _ SECURITY _ GROUP _ V 1 . kind , ĊĠĠĠĠĠĠĠĠĠ ĠCluster Spec ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmon iker Ġ= ĠMon iker (" fn ord ", Ġ" dev "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocations Ġ= ĠSub net Aware Locations ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaccount Ġ= Ġ" prod ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregions Ġ= Ġset Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSub net Aware Region Spec (" ap - south - 1 "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSub net Aware Region Spec (" af - south - 1 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubnet Ġ= Ġ" vpc 0 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ defaults Ġ= ĠServer Group Spec (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverrides Ġ= Ġmap Of () ĊĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġcontext (" âĢ¦ but Ġdoes Ġnot Ġhave Ġany ") Ġ{ ĊĠĠĠĠĠĠĠ Ġbefore Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġcheck () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtest (" the Ġresource Ġis Ġnot Ġv eto ed ") Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġresponse . is Allowed () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtest (" no Ġcall Ġis Ġmade Ġto ĠCloud Driver ") Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġverify Ġ{ Ġcloud Driver Ġwas Not ĠCalled Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtest (" there Ġis Ġno Ġmessage Ġfrom Ġthe Ġv eto ") Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġresponse . message . isNull OrEmpty () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġcontext (" âĢ¦ and Ġdoes Ġhave Ġsome ") Ġ{ ĊĠĠĠĠĠĠĠ Ġderive Fixture Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġcopy ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresource Spec Ġ= Ġresource Spec . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ defaults Ġ= Ġresource Spec . defaults . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdependencies Ġ= ĠCluster Dependencies ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload Balancer Names Ġ= Ġset Of (" fn ord - ext ", Ġ" fn ord - int "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtarget Groups Ġ= Ġset Of (" fn ord - target - group ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġmocks Ġneed Ġto Ġbe Ġcopied Ġover Ġotherwise Ġany Ġstub bing Ġis Ġlost ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcloud Driver Ġ= Ġcloud Driver , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcloud Driver Cache Ġ= Ġcloud Driver Cache ĊĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbefore Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġcloud Driver Cache . network By ( any ()) Ġ} Ġanswers Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvpc Id Ġ= Ġfirst Arg < String >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( account , Ġregion ) Ġ= Ġvpc Ids . filter Values Ġ{ Ġit Ġ== Ġvpc Id Ġ}. keys . first () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNetwork (" aws ", Ġvpc Id , Ġnull , Ġaccount , Ġregion ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcontext (" the Ġdependencies Ġexist ") Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġbefore Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstub Load Bal ancers ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload Balancer Names Ġ= Ġresource Spec . all LoadBalancer Names , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġal b Target Group Names Ġ= Ġresource Spec . all Target Group Names ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck () ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠ Ġtest (" the Ġresource Ġis Ġnot Ġv eto ed ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . is Allowed () ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠ Ġtest (" there Ġis Ġno Ġmessage Ġfrom Ġthe Ġv eto ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . message . isNull OrEmpty () ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcontext (" the Ġdependencies Ġexist Ġbut Ġone Ġof Ġthem Ġis Ġan ĠN LB ") Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġbefore Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstub Load Bal ancers ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload Balancer Names Ġ= Ġresource Spec . all LoadBalancer Names , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġn lb Target Group Names Ġ= Ġresource Spec . all Target Group Names ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck () ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠ Ġtest (" the Ġresource Ġis Ġnot Ġv eto ed ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . is Allowed () ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠ Ġtest (" there Ġis Ġno Ġmessage Ġfrom Ġthe Ġv eto ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . message . isNull OrEmpty () ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcontext (" the Ġdependencies Ġdo Ġnot Ġexist ") Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġbefore Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstub Load Bal ancers () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck () ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠ Ġtest (" the Ġresource Ġis Ġv eto ed ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . is Denied () ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠ Ġtest (" the Ġv eto Ġmessage Ġspecifies Ġthe Ġmissing Ġresources ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlb Names Ġ= Ġresource Spec . all LoadBalancer Names ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtg Names Ġ= Ġresource Spec . all Target Group Names ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmissing Regions Ġ= Ġresource Spec . locations . regions . map Ġ{ Ġit . name Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . message ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. isNotNull () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlb Names . forEach Ġ{ Ġlb Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontains (" Load Ġbalancer Ġ$ lb Ġis Ġnot Ġfound Ġin Ġ${ resource Spec . locations . account } Ġ/ Ġ${ missing Regions . join ToString () }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtg Names . forEach Ġ{ Ġtg Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontains (" Target Ġgroup Ġ$ tg Ġis Ġnot Ġfound Ġin Ġ${ resource Spec . locations . account } Ġ/ Ġ${ missing Regions . join ToString () }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcontext (" the Ġdependencies Ġare Ġmissing Ġin Ġsome Ġregions ") Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġbefore Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstub Load Bal ancers ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload Balancer Names Ġ= Ġresource Spec . all LoadBalancer Names , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġal b Target Group Names Ġ= Ġresource Spec . all Target Group Names , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregions Ġ= Ġresource Spec . locations . regions . take ( 1 ). map ( Subnet Aware Region Spec :: name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck () ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠ Ġtest (" the Ġresource Ġis Ġv eto ed ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . is Denied () ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠ Ġtest (" the Ġv eto Ġmessage Ġspecifies Ġthe Ġmissing Ġresources ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlb Names Ġ= Ġresource Spec . all LoadBalancer Names ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtg Names Ġ= Ġresource Spec . all Target Group Names ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmissing Regions Ġ= Ġresource Spec ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. locations ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. regions ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. drop ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map ( Subnet Aware Region Spec :: name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . message ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. isNotNull () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlb Names . forEach Ġ{ Ġlb Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontains (" Load Ġbalancer Ġ$ lb Ġis Ġnot Ġfound Ġin Ġ${ resource Spec . locations . account } Ġ/ Ġ${ missing Regions . join ToString () }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtg Names . forEach Ġ{ Ġtg Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontains (" Target Ġgroup Ġ$ tg Ġis Ġnot Ġfound Ġin Ġ${ resource Spec . locations . account } Ġ/ Ġ${ missing Regions . join ToString () }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcontext (" the Ġdependencies Ġexist Ġbut Ġin Ġa Ġdifferent Ġaccount ") Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġbefore Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstub Load Bal ancers ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresource Spec . all LoadBalancer Names , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresource Spec . all Target Group Names , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaccount Ġ= Ġ" test " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck () ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠ Ġtest (" the Ġresource Ġis Ġv eto ed ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . is Denied () ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠ Ġtest (" the Ġv eto Ġmessage Ġspecifies Ġthe Ġmissing Ġresources ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlb Names Ġ= Ġresource Spec . all LoadBalancer Names ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtg Names Ġ= Ġresource Spec . all Target Group Names ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġall Regions Ġ= Ġresource Spec . locations . regions . map ( Subnet Aware Region Spec :: name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . message ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. isNotNull () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlb Names . forEach Ġ{ Ġlb Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontains (" Load Ġbalancer Ġ$ lb Ġis Ġnot Ġfound Ġin Ġ${ resource Spec . locations . account } Ġ/ Ġ${ all Regions . join ToString () }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtg Names . forEach Ġ{ Ġtg Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontains (" Target Ġgroup Ġ$ tg Ġis Ġnot Ġfound Ġin Ġ${ resource Spec . locations . account } Ġ/ Ġ${ all Regions . join ToString () }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠSets Ġup Ġa Ġstub Ġfor Ġ[ Cloud Driver Service . getClass ic LoadBalancer ] Ġfor Ġall Ġload Ġbalancer Ġnames Ġin ĊĠĠ Ġ* Ġ[ load Balancer Names ] Ġin Ġevery Ġregion Ġof Ġthe Ġfixture . ĊĠĠ Ġ*/ ĊĠ Ġprivate Ġfun ĠFix ture < Loc atable < Subnet Aware Locations >> . stub Load Bal ancers ( ĊĠĠĠ Ġload Balancer Names : ĠCollection < String > Ġ= Ġempty List (), ĊĠĠĠ Ġal b Target Group Names : ĠCollection < String > Ġ= Ġempty List (), ĊĠĠĠ Ġn lb Target Group Names : ĠCollection < String > Ġ= Ġempty List (), ĊĠĠĠ Ġaccount : ĠString Ġ= Ġthis . resource Spec . locations . account , ĊĠĠĠ Ġregions : ĠCollection < String > Ġ= Ġthis . resource Spec . locations . regions . map ( Subnet Aware Region Spec :: name ) ĊĠ Ġ) Ġ{ ĊĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠ Ġcloud Driver . load Bal ancers For Application ( ĊĠĠĠĠĠĠĠ Ġuser Ġ= ĠDEFAULT _ SERVICE _ ACCOUNT , ĊĠĠĠĠĠĠĠ Ġapplication Ġ= Ġresource Spec . application ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ġanswers Ġ{ ĊĠĠĠĠĠ Ġregions . flatMap Ġ{ Ġregion Ġ-> ĊĠĠĠĠĠĠĠ Ġload Balancer Names . map Ġ{ Ġload Balancer Name Ġ-> ĊĠĠĠĠĠĠĠĠĠ Ġclassic LoadBalancer ( load Balancer Name , Ġaccount , Ġregion ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} Ġ+ Ġif Ġ( al b Target Group Names . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġregions . map Ġ{ Ġregion Ġ-> ĊĠĠĠĠĠĠĠĠĠ Ġapplication LoadBalancer Model ( al b Target Group Names , Ġaccount , Ġregion ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġempty List () ĊĠĠĠĠĠ Ġ} Ġ+ Ġif Ġ( nl b Target Group Names . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġregions . map Ġ{ Ġregion Ġ-> ĊĠĠĠĠĠĠĠĠĠ Ġnetwork LoadBalancer Model ( nl b Target Group Names , Ġaccount , Ġregion ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġempty List () ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun ĠFix ture < Loc atable < Subnet Aware Locations >> . classic LoadBalancer ( ĊĠĠĠ Ġload Balancer Name : ĠString , ĊĠĠĠ Ġaccount : ĠString , ĊĠĠĠ Ġregion : ĠString ĊĠ Ġ) Ġ= ĠClass ic LoadBalancer Model ( ĊĠĠĠ Ġmon iker Ġ= ĠMon iker (" fn ord ", Ġ" el b "), Ġ// ĠTODO : Ġparse Ġfrom Ġname ĊĠĠĠ Ġload Balancer Name Ġ= Ġload Balancer Name , ĊĠĠĠ Ġavailability Zones Ġ= Ġset Of (" a ", Ġ" b ", Ġ" c "). map Ġ{ Ġ"$ region $ it " Ġ}. toSet (), ĊĠĠĠ Ġvpc Id Ġ= Ġvpc Ids . getValue ( account Ġto Ġregion ), ĊĠĠĠ Ġsubnet s Ġ= Ġset Of (), ĊĠĠĠ Ġscheme Ġ= Ġ" internal ", ĊĠĠĠ Ġidle Timeout Ġ= Ġ 0 , ĊĠĠĠ Ġsecurity Groups Ġ= Ġset Of (), ĊĠĠĠ Ġlistener Descriptions Ġ= ĠlistOf (), ĊĠĠĠ Ġhealth Check Ġ= ĠClass ic LoadBalancer HealthCheck ( ĊĠĠĠĠĠ Ġtarget Ġ= Ġ"", ĊĠĠĠĠĠ Ġinterval Ġ= Ġ 0 , ĊĠĠĠĠĠ Ġtimeout Ġ= Ġ 0 , ĊĠĠĠĠĠ Ġun healthy Threshold Ġ= Ġ 0 , ĊĠĠĠĠĠ Ġhealthy Threshold Ġ= Ġ 0 ĊĠĠĠ Ġ) ĊĠ Ġ) ĊĊĠ Ġprivate Ġfun ĠFix ture < Loc atable < Subnet Aware Locations >> . application LoadBalancer Model ( ĊĠĠĠ Ġtarget Group Names : ĠCollection < String >, ĊĠĠĠ Ġaccount : ĠString , ĊĠĠĠ Ġregion : ĠString ĊĠ Ġ) Ġ= ĊĠĠĠ ĠApplication LoadBalancer Model ( ĊĠĠĠĠĠ Ġmon iker Ġ= ĠMon iker ( resource Spec . application , Ġ" stub ", Ġ" al b "), ĊĠĠĠĠĠ Ġload Balancer Name Ġ= Ġ"${ resource Spec . application }- stub - al b ", ĊĠĠĠĠĠ Ġtarget Groups Ġ= Ġtarget Group Names . map Ġ{ Ġtarget GroupName Ġ-> ĊĠĠĠĠĠĠĠ ĠTarget Group ( ĊĠĠĠĠĠĠĠĠĠ Ġtarget GroupName Ġ= Ġtarget GroupName , ĊĠĠĠĠĠĠĠĠĠ Ġload Balancer Names Ġ= Ġempty List (), ĊĠĠĠĠĠĠĠĠĠ Ġtarget Type Ġ= Ġ" wh atever - this - is ", ĊĠĠĠĠĠĠĠĠĠ Ġmatcher Ġ= ĠTarget Group Matcher (" 2 0 0 "), ĊĠĠĠĠĠĠĠĠĠ Ġprotocol Ġ= Ġ" https ", ĊĠĠĠĠĠĠĠĠĠ Ġport Ġ= Ġ 8 0 8 0 , ĊĠĠĠĠĠĠĠĠĠ Ġhealth Check Enabled Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠ Ġhealth Check Timeout Seconds Ġ= Ġ 3 0 , ĊĠĠĠĠĠĠĠĠĠ Ġhealth Check Port Ġ= Ġ" 8 0 8 0 ", ĊĠĠĠĠĠĠĠĠĠ Ġhealth Check Protocol Ġ= Ġ" https ", ĊĠĠĠĠĠĠĠĠĠ Ġhealth Check Path Ġ= Ġ"/ health check ", ĊĠĠĠĠĠĠĠĠĠ Ġhealth Check Interval Seconds Ġ= Ġ 6 0 , ĊĠĠĠĠĠĠĠĠĠ Ġhealthy Threshold Count Ġ= Ġ 1 0 , ĊĠĠĠĠĠĠĠĠĠ Ġun healthy Threshold Count Ġ= Ġ 5 , ĊĠĠĠĠĠĠĠĠĠ Ġvpc Id Ġ= Ġvpc Ids . getValue ( account Ġto Ġregion ), ĊĠĠĠĠĠĠĠĠĠ Ġattributes Ġ= ĠTarget Group Attributes () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠ Ġavailability Zones Ġ= Ġset Of (" a ", Ġ" b ", Ġ" c "). map Ġ{ Ġ"$ region $ it " Ġ}. toSet (), ĊĠĠĠĠĠ Ġvpc Id Ġ= Ġvpc Ids . getValue ( account Ġto Ġregion ), ĊĠĠĠĠĠ Ġsubnet s Ġ= Ġempty Set (), ĊĠĠĠĠĠ Ġscheme Ġ= Ġ" https ", ĊĠĠĠĠĠ Ġidle Timeout Ġ= Ġ 6 0 , ĊĠĠĠĠĠ Ġsecurity Groups Ġ= Ġempty Set (), ĊĠĠĠĠĠ Ġlisteners Ġ= Ġempty List (), ĊĠĠĠĠĠ Ġip Address Type Ġ= Ġ" v 4 " ĊĠĠĠ Ġ) ĊĊĠ Ġprivate Ġfun ĠFix ture < Loc atable < Subnet Aware Locations >> . network LoadBalancer Model ( ĊĠĠĠ Ġtarget Group Names : ĠCollection < String >, ĊĠĠĠ Ġaccount : ĠString , ĊĠĠĠ Ġregion : ĠString ĊĠ Ġ) Ġ= ĊĠĠĠ ĠNetwork LoadBalancer Model ( ĊĠĠĠĠĠ Ġmon iker Ġ= ĠMon iker ( resource Spec . application , Ġ" stub ", Ġ" nl b "), ĊĠĠĠĠĠ Ġload Balancer Name Ġ= Ġ"${ resource Spec . application }- stub - nl b ", ĊĠĠĠĠĠ Ġvpc Id Ġ= Ġvpc Ids . getValue ( account Ġto Ġregion ), ĊĠĠĠĠĠ Ġsubnet s Ġ= Ġempty Set (), ĊĠĠĠĠĠ Ġavailability Zones Ġ= Ġset Of (" a ", Ġ" b ", Ġ" c "). map Ġ{ Ġ"$ region $ it " Ġ}. toSet (), ĊĠĠĠĠĠ Ġscheme Ġ= Ġ" https ", ĊĠĠĠĠĠ Ġtarget Groups Ġ= Ġtarget Group Names . map Ġ{ ĊĠĠĠĠĠĠĠ ĠNetwork LoadBalancer Model . Target Group ( target GroupName Ġ= Ġit ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ) ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠAll Ġthe Ġload Ġbalancer Ġnames Ġused Ġby Ġa Ġ[ Cluster Spec ] Ġregardless Ġof Ġregion . ĊĠĠ Ġ*/ ĊĠ Ġprivate Ġval ĠCluster Spec . all LoadBalancer Names : ĠSet < String > ĊĠĠĠ Ġget () Ġ= Ġ( defaults . dependencies ?. load Balancer Names Ġ?: Ġempty Set ()) Ġ+ ĊĠĠĠĠĠ Ġoverrides . values . flatMap Ġ{ ĊĠĠĠĠĠĠĠ Ġit . dependencies ?. load Balancer Names Ġ?: Ġempty Set () ĊĠĠĠĠĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠAll Ġthe Ġtarget Ġgroup Ġnames Ġused Ġby Ġa Ġ[ Cluster Spec ] Ġregardless Ġof Ġregion . ĊĠĠ Ġ*/ ĊĠ Ġprivate Ġval ĠCluster Spec . all Target Group Names : ĠSet < String > ĊĠĠĠ Ġget () Ġ= Ġ( defaults . dependencies ?. target Groups Ġ?: Ġempty Set ()) Ġ+ ĊĠĠĠĠĠ Ġoverrides . values . flatMap Ġ{ ĊĠĠĠĠĠĠĠ Ġit . dependencies ?. target Groups Ġ?: Ġempty Set () ĊĠĠĠĠĠ Ġ} ĊĊĠ Ġprivate Ġfun ĠAssertion . Builder < Veto Response >. is Allowed (): ĠAssertion . Builder < Veto Response > Ġ= ĊĠĠĠ Ġassert (" is Ġallowed ") Ġ{ ĊĠĠĠĠĠ Ġif Ġ( it . allowed ) Ġ{ ĊĠĠĠĠĠĠĠ Ġpass () ĊĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġfail ( description Ġ= Ġit . message ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠ Ġprivate Ġfun ĠAssertion . Builder < Veto Response >. is Denied (): ĠAssertion . Builder < Veto Response > Ġ= ĊĠĠĠ Ġassert (" is Ġdenied ") Ġ{ ĊĠĠĠĠĠ Ġif Ġ( it . allowed ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfail ( description Ġ= Ġ" is Ġallowed ") ĊĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġpass () ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠ Ġprivate Ġval ĠAssertion . Builder < Veto Response >. message : ĠAssertion . Builder < String ?> ĊĠĠĠ Ġget () Ġ= Ġget Ġ{ Ġmessage Ġ} Ċ } Ċ