/* Ċ Ġ* ĠCopyright Ġ 2 0 1 6 - 2 0 1 8 ĠJetBrains Ġs . r . o . ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense . Ċ Ġ*/ Ċ Ċ package Ġkotlinx . coroutines . channels Ċ Ċ import Ġkotlinx . coroutines .* Ċ import Ġkotlinx . coroutines . channels .* Ċ import Ġorg . junit .* Ċ import Ġorg . junit . Test Ċ import Ġjava . util . concurrent .* Ċ import Ġjava . util . concurrent . atomic .* Ċ import Ġkotlin . coroutines .* Ċ import Ġkotlin . test .* Ċ Ċ class ĠInvoke On Close St ress Test Ġ: ĠTest Base (), ĠCor outine Scope Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġiterations Ġ= Ġ 1 0 0 0 Ġ* Ġstress Test Multiplier ĊĊĠĠĠ Ġprivate Ġval Ġpool Ġ= Ġnew Fixed ThreadPool Context ( 3 , Ġ" Invoke On Close St ress Test ") ĊĠĠĠ Ġoverride Ġval Ġcoroutine Context : ĠCor outine Context ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġpool ĊĊĠĠĠ Ġ@ After ĊĠĠĠ Ġfun ĠtearDown () Ġ{ ĊĠĠĠĠĠĠĠ Ġpool . close () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Inv oked Exactly Once () Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġrun St ress Test ( Test Channel Kind . ARRAY _ 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Inv oked Exactly Once Broadcast () Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġrun St ress Test ( Test Channel Kind . CON FL ATED _ BRO ADCAST ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġrun St ress Test ( kind : ĠTest Channel Kind ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrepeat ( iterations ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcounter Ġ= ĠAtomicInteger ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchannel Ġ= Ġkind . create < Int >() ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġl atch Ġ= ĠCount DownLatch ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġj 1 Ġ= Ġasync Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġl atch . await () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchannel . close () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġj 2 Ġ= Ġasync Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġl atch . await () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchannel . invoke On Close Ġ{ Ġcounter . increment AndGet () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġj 3 Ġ= Ġasync Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġl atch . await () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchannel . invoke On Close Ġ{ Ġcounter . increment AndGet () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġl atch . count Down () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjoin All ( j 1 , Ġj 2 , Ġj 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġcounter . get ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ