/* Ċ Ġ* ĠCopyright ĠÂ© Ġ 2 0 2 0 - 2 0 2 1 , ĠSimp lex ion , ĠH ung ary Ġand Ġcontributors . ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense . Ċ Ġ*/ Ċ package Ġz ak ad ab ar . lib . schedule . business Ċ Ċ import Ġkotlinx . coroutines . channels . Channel Ċ import Ġkotlinx . coroutines . delay Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġkotlinx . serialization . json . Json Ċ import Ġorg . junit . After Class Ċ import Ġorg . junit . BeforeClass Ċ import Ġorg . junit . Test Ċ import Ġz ak ad ab ar . core . module . modules Ċ import Ġz ak ad ab ar . core . testing . Test Companion Base Ċ import Ġz ak ad ab ar . core . util . default Ċ import Ġz ak ad ab ar . lib . schedule . data . Job Ċ import Ġz ak ad ab ar . lib . schedule . data . JobStatus Ċ import Ġkotlin . test . assertTrue Ċ Ċ class ĠDispatcher Test Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ: ĠTest Companion Base () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġadd Modules () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġz ak ad ab ar . lib . schedule . install () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodules Ġ+= ĠWorker Bl () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodules Ġ+= ĠWorker Bl (" worker 1 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodules Ġ+= ĠWorker Bl (" worker 2 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodules Ġ+= ĠAction Bl () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon After Started () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthis Ġcode Ġruns Ġafter Ġthe Ġserver Ġhas Ġbeen Ġstarted ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġoptional ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ BeforeClass ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġsetup () Ġ= Ġsuper . setup () ĊĊĠĠĠĠĠĠĠ Ġ@ After Class ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġteardown () Ġ= Ġsuper . teardown () ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Job () Ġ= Ġrun Blocking Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġaction Bl Ġ= Ġmodules . first < Action Bl >() ĊĠĠĠĠĠĠĠ Ġaction Bl . channel Ġ= ĠChannel () ĊĊĠĠĠĠĠĠĠ Ġval Ġvalues Ġ= Ġmutable ListOf < Long >() ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdefault < Job > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Ġ= ĠJob Status . Pending ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaction Namespace Ġ= ĠAction . bo Namespace ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaction Type Ġ= ĠAction :: class . simple Name Ġ!! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaction Data Ġ= ĠJson . encode ToString ( Action . serializer (), ĠAction ( 1 2 L Ġ+ Ġi )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. create () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalues Ġ+= Ġ 1 2 L Ġ+ Ġi ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġvar Ġvalue : ĠLong ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġ 1 .. 2 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġaction Bl . channel . try Receive (). get OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Ġ!= Ġnull ) Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( 1 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( values . remove ( value ), Ġ" value Ġ= Ġ$ value ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġwait Ġuntil Ġthe Ġjob Ġcompletes , Ġso Ġwe Ġavoid Ġexceptions ĊĠĠĠĠĠĠĠ Ġ// ĠFIXME Ġthis Ġshould Ġbe Ġhandled Ġby Ġon Module Stop ĊĊĠĠĠĠĠĠĠ Ġmodules . find < Worker Bl >(). forEach Ġ{ Ġit . job ?. join () Ġ} ĊĊĠĠĠ Ġ} ĊĊ Ċ } Ċ