/* Ċ Ġ* ĠMIT ĠLicense Ċ Ġ* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 0 Ġat large - research Ċ Ġ* Ċ Ġ* ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ċ Ġ* Ġof Ġthis Ġsoftware Ġand Ġassociated Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ċ Ġ* Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ġrights Ċ Ġ* Ġto Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ċ Ġ* Ġcopies Ġof Ġthe ĠSoftware , Ġand Ġto Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ċ Ġ* Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ Ġ* Ċ Ġ* ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ġall Ċ Ġ* Ġcopies Ġor Ġsubstantial Ġportions Ġof Ġthe ĠSoftware . Ċ Ġ* Ċ Ġ* ĠTHE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR Ċ Ġ* ĠIMPLIED , ĠINCLUDING ĠBUT ĠNOT ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , Ċ Ġ* ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE Ċ Ġ* ĠAUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER Ċ Ġ* ĠLIABILITY , ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , Ċ Ġ* ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN ĠTHE Ċ Ġ* ĠSOFTWARE . Ċ Ġ*/ Ċ Ċ package Ġcom . at large . opend c . workflows . service Ċ Ċ import Ġcom . at large . od cs im . Simulation Engine Provider Ċ import Ġcom . at large . od cs im . simulation Context Ċ import Ġcom . at large . opend c . compute . metal . service . Provisioning Service Ċ import Ġcom . at large . opend c . format . environment . sc 1 8 . Sc 1 8 Environment Reader Ċ import Ġcom . at large . opend c . format . trace . gw f . G wf Trace Reader Ċ import Ġcom . at large . opend c . workflows . service . stage . job . Null Job Ad mission Policy Ċ import Ġcom . at large . opend c . workflows . service . stage . job . Submission Time Job Order Policy Ċ import Ġcom . at large . opend c . workflows . service . stage . resource . First Fit Resource Selection Policy Ċ import Ġcom . at large . opend c . workflows . service . stage . resource . Functional Resource Filter Policy Ċ import Ġcom . at large . opend c . workflows . service . stage . task . Null Task El ig ibility Policy Ċ import Ġcom . at large . opend c . workflows . service . stage . task . Submission Time Task Order Policy Ċ import Ġkotlinx . coroutines . async Ċ import Ġkotlinx . coroutines . delay Ċ import Ġkotlinx . coroutines . flow . collect Ċ import Ġkotlinx . coroutines . flow . on Each Ċ import Ġkotlinx . coroutines . launch Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġorg . junit . jupiter . api . Assertions . assertEquals Ċ import Ġorg . junit . jupiter . api . DisplayName Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġjava . util . Service Loader Ċ import Ġkotlin . math . max Ċ Ċ /** Ċ Ġ* ĠIntegration Ġtest Ġsuite Ġfor Ġthe Ġ[ Stage Workflow Service ]. Ċ Ġ*/ Ċ @ DisplayName (" Stage Workflow Service ") Ċ internal Ġclass ĠStage Workflow Scheduler IntegrationTest Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠA Ġlarge Ġintegration Ġtest Ġwhere Ġwe Ġcheck Ġwhether Ġall Ġtasks Ġin Ġsome Ġtrace Ġare Ġexecuted Ġcorrectly . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġexecute Ġall Ġtasks Ġin Ġtrace `() Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġjobs Submitted Ġ= Ġ 0 L ĊĠĠĠĠĠĠĠ Ġvar Ġjobs Started Ġ= Ġ 0 L ĊĠĠĠĠĠĠĠ Ġvar Ġjobs Finished Ġ= Ġ 0 L ĊĠĠĠĠĠĠĠ Ġvar Ġtasks Started Ġ= Ġ 0 L ĊĠĠĠĠĠĠĠ Ġvar Ġtasks Finished Ġ= Ġ 0 L ĊĊĠĠĠĠĠĠĠ Ġval Ġprovider Ġ= ĠService Loader . load ( Simulation Engine Provider :: class . java ). first () ĊĠĠĠĠĠĠĠ Ġval Ġsystem Ġ= Ġprovider ( name Ġ= Ġ" sim ") ĊĊĠĠĠĠĠĠĠ Ġval Ġscheduler Domain Ġ= Ġsystem . new Domain ( name Ġ= Ġ" scheduler ") ĊĠĠĠĠĠĠĠ Ġval Ġscheduler Async Ġ= Ġscheduler Domain . async Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġenvironment Ġ= ĠSc 1 8 Environment Reader ( object Ġ{} . java Class . getResource AsStream ("/ environment . json ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. use Ġ{ Ġit . construct ( system . new Domain (" topology ")) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠStage Workflow Service ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscheduler Domain , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenvironment . platforms [ 0 ]. zones [ 0 ]. services [ Provisioning Service ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmode Ġ= ĠWorkflow Scheduler Mode . Batch ( 1 0 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjob Ad mission Policy Ġ= ĠNull Job Ad mission Policy , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjob Order Policy Ġ= ĠSubmission Time Job Order Policy (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtask El ig ibility Policy Ġ= ĠNull Task El ig ibility Policy , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtask Order Policy Ġ= ĠSubmission Time Task Order Policy (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresource Filter Policy Ġ= ĠFunctional Resource Filter Policy , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresource Selection Policy Ġ= ĠFirst Fit Resource Selection Policy ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġbroker Ġ= Ġsystem . new Domain ( name Ġ= Ġ" broker ") ĊĊĠĠĠĠĠĠĠ Ġbroker . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscheduler Ġ= Ġscheduler Async . await () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscheduler . events ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Each Ġ{ Ġevent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠWorkflow Event . Job Started Ġ-> Ġjobs Started ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠWorkflow Event . Job Finished Ġ-> Ġjobs Finished ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠWorkflow Event . Task Started Ġ-> Ġtasks Started ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠWorkflow Event . Task Finished Ġ-> Ġtasks Finished ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. collect () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbroker . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġctx Ġ= Ġsimulation Context ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreader Ġ= ĠG wf Trace Reader ( object Ġ{} . java Class . getResource AsStream ("/ trace . gw f ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscheduler Ġ= Ġscheduler Async . await () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( reader . hasNext ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( time , Ġjob ) Ġ= Ġreader . next () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjobs Submitted ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( max ( 0 , Ġtime Ġ* Ġ 1 0 0 0 Ġ- Ġctx . clock . millis ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscheduler . submit ( job ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsystem . run () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsystem . terminate () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( jobs Submitted , Ġjobs Started , Ġ" Not Ġall Ġsubmitted Ġjobs Ġstarted ") ĊĠĠĠĠĠĠĠ ĠassertEquals ( jobs Submitted , Ġjobs Finished , Ġ" Not Ġall Ġstarted Ġjobs Ġfinished ") ĊĠĠĠĠĠĠĠ ĠassertEquals ( tasks Started , Ġtasks Finished , Ġ" Not Ġall Ġstarted Ġtasks Ġfinished ") ĊĠĠĠ Ġ} Ċ } Ċ