package Ġe ece 5 1 3 . server Ċ Ċ import Ġcom . n ha ar man . mockito _ kotlin . any Ċ import Ġcom . n ha ar man . mockito _ kotlin . mock Ċ import Ġcom . n ha ar man . mockito _ kotlin . times Ċ import Ġcom . n ha ar man . mockito _ kotlin . verify Ċ import Ġe ece 5 1 3 . Dummy Logger Ċ import Ġorg . junit . Test Ċ Ċ import Ġjava . net . Inet Address Ċ import Ġjava . net . Socket Ċ import Ġjava . util . concurrent . atomic . Atomic Boolean Ċ import Ġkotlin . concurrent . thread Ċ Ċ class ĠSocket Connection Listener Test Ġ{ ĊĠĠĠ Ġprivate Ġval Ġip Ġ= ĠInet Address . get ByName (" 1 2 7 . 0 . 0 . 1 ") ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġlisten __ invoke _ callback _ on _ socket _ connection () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġon Query Ġ= Ġmock <( Server . Connection Listener . Connection ) Ġ-> ĠUnit >() ĊĠĠĠĠĠĠĠ Ġval Ġloop Ġ= ĠAtomic Boolean ( true ) ĊĊĠĠĠĠĠĠĠ Ġval Ġthread Ġ= Ġthread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSocket Connection Listener ( 6 9 6 8 , ĠDummy Logger (), Ġloop ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. listen ( on Query ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġgive Ġthe Ġlistener Ġtime Ġto Ġstart ĊĠĠĠĠĠĠĠ ĠThread . sleep ( 5 0 0 ) ĊĊĠĠĠĠĠĠĠ ĠSocket ( ip , Ġ 6 9 6 8 ). use Ġ{ Ġ/* Ġdo Ġnothing Ġ*/ Ġ} ĊĊĠĠĠĠĠĠĠ Ġloop . set ( false ) ĊĠĠĠĠĠĠĠ Ġthread . join () ĊĊĠĠĠĠĠĠĠ Ġverify ( on Query ). invoke ( any ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġlisten __ list ens _ for _ new _ connect _ when _ old _ clo ses () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġon Query Ġ= Ġmock <( Server . Connection Listener . Connection ) Ġ-> ĠUnit >() ĊĠĠĠĠĠĠĠ Ġval Ġloop Ġ= ĠAtomic Boolean ( true ) ĊĊĠĠĠĠĠĠĠ Ġval Ġthread Ġ= Ġthread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSocket Connection Listener ( 6 9 6 9 , ĠDummy Logger (), Ġloop ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. listen ( on Query ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġgive Ġthe Ġlistener Ġtime Ġto Ġstart ĊĠĠĠĠĠĠĠ ĠThread . sleep ( 5 0 0 ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġfirst Ġconnection ĊĠĠĠĠĠĠĠ ĠSocket ( ip , Ġ 6 9 6 9 ). use Ġ{ Ġ/* Ġdo Ġnothing Ġ*/ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġgive Ġthe Ġlistener Ġtime Ġto Ġcleanup Ġbefore Ġaccepting Ġnew Ġconnections ĊĠĠĠĠĠĠĠ ĠThread . sleep ( 5 0 0 ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġsecond Ġconnection ĊĠĠĠĠĠĠĠ ĠSocket ( ip , Ġ 6 9 6 9 ). use Ġ{ Ġ/* Ġdo Ġnothing Ġ*/ Ġ} ĊĊĠĠĠĠĠĠĠ Ġloop . set ( false ) ĊĠĠĠĠĠĠĠ Ġthread . join () ĊĊĠĠĠĠĠĠĠ Ġverify ( on Query , Ġtimes ( 2 )). invoke ( any ()) ĊĠĠĠ Ġ} Ċ }