package Ġcom . jetbrains . rd . framework . test . cases . wire Ċ Ċ import Ġcom . jetbrains . rd . framework .* Ċ import Ġcom . jetbrains . rd . framework . base . static Ċ import Ġcom . jetbrains . rd . framework . impl . Rd Optional Property Ċ import Ġcom . jetbrains . rd . framework . impl . Rd Signal Ċ import Ġcom . jetbrains . rd . framework . test . util . TestBase Ċ import Ġcom . jetbrains . rd . framework . test . util . Test Scheduler Ċ import Ġcom . jetbrains . rd . framework . util . Net Utils Ċ import Ġcom . jetbrains . rd . util . lifetime . Lifetime Ċ import Ġcom . jetbrains . rd . util . lifetime . Lifetime Definition Ċ import Ġcom . jetbrains . rd . util . spin Until Ċ import Ġorg . junit . jupiter . api . Assertions .* Ċ import Ġorg . junit . jupiter . api . BeforeEach Ċ import Ġorg . junit . jupiter . api . Disabled Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġorg . junit . jupiter . params . Parameterized Test Ċ import Ġorg . junit . jupiter . params . provider . Value Source Ċ import Ġjava . net . Inet Address Ċ import Ġjava . util . concurrent . Concurrent Linked Queue Ċ import Ġjava . util . concurrent . TimeoutException ĊĊ Ċ class ĠSocket Wire Test Ġ: ĠTest Base () Ġ{ ĊĊĠĠĠ Ġprivate Ġfun Ġ< T Ġ: ĠAny > ĠR d Optional Property < T >. wait And Assert ( expected : ĠT , Ġprev : ĠT ? Ġ= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstart Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠ Ġwhile Ġ(( System . currentTimeMillis () Ġ- Ġstart ) Ġ< Ġtimeout To Wait Condition Ms Ġ&& Ġvalue OrNull Ġ!= Ġexpected ) ĠThread . sleep ( 1 0 0 ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( value OrNull Ġ== Ġprev ) Ġthrow ĠTimeout Exception (" Timeout Ġ$ timeout To Wait Condition Ms Ġms Ġwhile Ġwaiting Ġvalue Ġ'$ expected '") ĊĠĠĠĠĠĠĠ ĠassertEquals ( expected , Ġvalue OrNull ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġinternal Ġconst Ġval Ġtop Ġ= Ġ" top " ĊĊĠĠĠĠĠĠĠ Ġinternal Ġfun Ġserver ( lifetime : ĠL ifetime , Ġport : ĠInt ? Ġ= Ġnull ): ĠProtocol Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠProtocol (" Server ", ĠSerial izers (), ĠId entities ( Id Kind . Server ), ĠTest Scheduler , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSocket Wire . Server ( lifetime , ĠTest Scheduler , Ġport , Ġ" Test Server "), Ġlifetime ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġinternal Ġfun Ġclient ( lifetime : ĠL ifetime , Ġserver Protocol : ĠProtocol ): ĠProtocol Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠProtocol (" Client ", ĠSerial izers (), ĠId entities ( Id Kind . Client ), ĠTest Scheduler , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSocket Wire . Client ( lifetime , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTest Scheduler , Ġ( server Protocol . wire Ġas ĠSocket Wire . Server ). port , Ġ" Test Client "), Ġlifetime ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinternal Ġfun Ġclient ( lifetime : ĠL ifetime , Ġport : ĠInt ): ĠProtocol Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠProtocol (" Client ", ĠSerial izers (), ĠId entities ( Id Kind . Client ), ĠTest Scheduler , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSocket Wire . Client ( lifetime , ĠTest Scheduler , Ġport , Ġ" Test Client "), Ġlifetime ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġlateinit Ġvar Ġsocket Lifetime : ĠL ifetime ĊĊĠĠĠ Ġ@ BeforeEach ĊĠĠĠ Ġfun ĠsetUp () Ġ{ ĊĠĠĠĠĠĠĠ Ġsocket Lifetime Ġ= Ġlifetime . create Nested (). lifetime Ċ // ĠĠĠĠĠĠĠ ĠConsole LoggerFactory . min Level To Log Ġ= ĠLogLevel . Trace ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun ĠTest Basic Run () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġserver Protocol Ġ= Ġserver ( socket Lifetime ) ĊĠĠĠĠĠĠĠ Ġval Ġclient Protocol Ġ= Ġclient ( socket Lifetime , Ġserver Protocol ) ĊĊĠĠĠĠĠĠĠ Ġval Ġsp Ġ= ĠR d Optional Property < Int >(). static ( 1 ). apply Ġ{ Ġbind ( lifetime , Ġserver Protocol , Ġtop ) Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġcp Ġ= ĠR d Optional Property < Int >(). static ( 1 ). apply Ġ{ Ġbind ( lifetime , Ġclient Protocol , Ġtop ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġcp . set ( 1 ) ĊĠĠĠĠĠĠĠ Ġsp . wait And Assert ( 1 ) ĊĊĠĠĠĠĠĠĠ Ġsp . set ( 2 ) ĊĠĠĠĠĠĠĠ Ġcp . wait And Assert ( 2 , Ġ 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun ĠTest Ordering () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġserver Protocol Ġ= Ġserver ( socket Lifetime ) ĊĠĠĠĠĠĠĠ Ġval Ġclient Protocol Ġ= Ġclient ( socket Lifetime , Ġserver Protocol ) ĊĊĠĠĠĠĠĠĠ Ġval Ġsp Ġ= ĠR d Optional Property < Int >(). static ( 1 ). apply Ġ{ Ġbind ( lifetime , Ġserver Protocol , Ġtop ) Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġcp Ġ= ĠR d Optional Property < Int >(). static ( 1 ). apply Ġ{ Ġbind ( lifetime , Ġclient Protocol , Ġtop ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġlog Ġ= ĠConcurrent Linked Queue < Int >() ĊĠĠĠĠĠĠĠ Ġsp . adv ise ( lifetime ) Ġ{ Ġlog . add ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġcp . set ( 1 ) ĊĠĠĠĠĠĠĠ Ġcp . set ( 2 ) ĊĠĠĠĠĠĠĠ Ġcp . set ( 3 ) ĊĠĠĠĠĠĠĠ Ġcp . set ( 4 ) ĊĠĠĠĠĠĠĠ Ġcp . set ( 5 ) ĊĊĠĠĠĠĠĠĠ Ġwhile Ġ( log . size Ġ< Ġ 5 ) ĠThread . sleep ( 1 0 0 ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( listOf ( 1 , Ġ 2 , Ġ 3 , Ġ 4 , Ġ 5 ), Ġlog . toList ()) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Disabled ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun ĠTest Disconnect () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġserver Protocol Ġ= Ġserver ( socket Lifetime ) ĊĠĠĠĠĠĠĠ Ġval Ġclient Protocol Ġ= Ġclient ( socket Lifetime , Ġserver Protocol ) ĊĊĠĠĠĠĠĠĠ Ġval Ġsp Ġ= ĠR d Signal < Int >(). static ( 1 ). apply Ġ{ Ġbind ( lifetime , Ġserver Protocol , Ġtop ) Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġcp Ġ= ĠR d Signal < Int >(). static ( 1 ). apply Ġ{ Ġbind ( lifetime , Ġclient Protocol , Ġtop ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġlog Ġ= Ġmutable ListOf < Int >() ĊĠĠĠĠĠĠĠ Ġsp . adv ise ( socket Lifetime ) Ġ{ Ġlog . add ( it ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġcp . fire ( 1 ) ĊĠĠĠĠĠĠĠ Ġcp . fire ( 2 ) ĊĊĠĠĠĠĠĠĠ Ġspin Until Ġ{ Ġlog . size Ġ== Ġ 2 Ġ} ĊĠĠĠĠĠĠĠ ĠassertEquals ( listOf ( 1 , Ġ 2 ), Ġlog ) ĊĊĠĠĠĠĠĠĠ Ġtry Close Connection ( client Protocol ) ĊĠĠĠĠĠĠĠ Ġcp . fire ( 3 ) ĊĠĠĠĠĠĠĠ Ġcp . fire ( 4 ) ĊĊĠĠĠĠĠĠĠ Ġspin Until Ġ{ Ġlog . size Ġ== Ġ 4 Ġ} ĊĠĠĠĠĠĠĠ ĠassertEquals ( listOf ( 1 , Ġ 2 , Ġ 3 , Ġ 4 ), Ġlog ) ĊĊĊĠĠĠĠĠĠĠ Ġcp . fire ( 5 ) ĊĠĠĠĠĠĠĠ Ġtry Close Connection ( server Protocol ) ĊĠĠĠĠĠĠĠ Ġcp . fire ( 6 ) ĊĠĠĠĠĠĠĠ Ġspin Until Ġ{ Ġlog . size Ġ== Ġ 6 Ġ} ĊĠĠĠĠĠĠĠ ĠassertEquals ( listOf ( 1 , Ġ 2 , Ġ 3 , Ġ 4 , Ġ 5 , Ġ 6 ), Ġlog ) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtry Close Connection ( protocol : ĠProtocol ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġwire Ġ= Ġprotocol . wire Ġas ĠSocket Wire . Base ĊĠĠĠĠĠĠĠ Ġif Ġ( spin Until ( 5 0 ) Ġ{ Ġwire . connected . value Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// if Ġwire Ġis Ġnot Ġconnected Ġshould Ġnot Ġask Ġsocket . close Ġbecause Ġit Ġcould Ġlead Ġto ĠIOException ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ ĉ at Ġjava . net . Socket . get OutputStream ( Socket . java : 9 5 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĉ at Ġcom . jetbrains . rd . framework . Socket Wire $ Base $ 1 . invoke ( Socket Wire . kt : 1 0 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwire . socket Provider . value OrNull ?. close () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun ĠTest D dos () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġserver Protocol Ġ= Ġserver ( socket Lifetime ) ĊĠĠĠĠĠĠĠ Ġval Ġclient Protocol Ġ= Ġclient ( socket Lifetime , Ġserver Protocol ) ĊĊĠĠĠĠĠĠĠ Ġval Ġsp Ġ= ĠR d Signal < Int >(). static ( 1 ). apply Ġ{ Ġbind ( lifetime , Ġserver Protocol , Ġtop ) Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġcp Ġ= ĠR d Signal < Int >(). static ( 1 ). apply Ġ{ Ġbind ( lifetime , Ġclient Protocol , Ġtop ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġvar Ġcount Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġsp . adv ise ( socket Lifetime ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( count Ġ+ Ġ 1 , Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ++ count ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval ĠC Ġ= Ġ 5 0 ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 1 .. C ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcp . fire ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ== ĠC Ġ/ Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Close Connection ( server Protocol ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġspin Until Ġ{ Ġcount Ġ== ĠC Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun ĠTest Big Buffer () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġserver Protocol Ġ= Ġserver ( socket Lifetime ) ĊĠĠĠĠĠĠĠ Ġval Ġclient Protocol Ġ= Ġclient ( socket Lifetime , Ġserver Protocol ) ĊĊĠĠĠĠĠĠĠ Ġval Ġsp Ġ= ĠR d Optional Property < String >(). static ( 1 ). apply Ġ{ Ġbind ( lifetime , Ġserver Protocol , Ġtop ) Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġcp Ġ= ĠR d Optional Property < String >(). static ( 1 ). apply Ġ{ Ġbind ( lifetime , Ġclient Protocol , Ġtop ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġcp . set (" 1 ") ĊĠĠĠĠĠĠĠ Ġsp . wait And Assert (" 1 ") ĊĊĠĠĠĠĠĠĠ Ġsp . set (" ". pad Start ( 1 0 0 0 0 0 , Ġ' 3 ')) ĊĠĠĠĠĠĠĠ Ġcp . wait And Assert (" ". pad Start ( 1 0 0 0 0 0 , Ġ' 3 '), Ġ" 1 ") ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun ĠTest RunWith Slow poke Server () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġport Ġ= ĠNet Utils . find Free Port ( 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġclient Protocol Ġ= Ġclient ( socket Lifetime , Ġport ) ĊĊĊĠĠĠĠĠĠĠ Ġval Ġcp Ġ= ĠR d Optional Property < Int >(). static ( 1 ). apply Ġ{ Ġbind ( lifetime , Ġclient Protocol , Ġtop ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġcp . set ( 1 ) ĊĊĠĠĠĠĠĠĠ ĠThread . sleep ( 2 0 0 0 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġserver Protocol Ġ= Ġserver ( socket Lifetime , Ġport ) ĊĠĠĠĠĠĠĠ Ġval Ġsp Ġ= ĠR d Optional Property < Int >(). static ( 1 ). apply Ġ{ Ġbind ( lifetime , Ġserver Protocol , Ġtop ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġprev Ġ= Ġsp . value OrNull ĊĠĠĠĠĠĠĠ Ġcp . set ( 4 ) ĊĠĠĠĠĠĠĠ Ġsp . wait And Assert ( 4 , Ġprev ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun ĠTest Server Without Client () Ġ{ ĊĠĠĠĠĠĠĠ Ġserver ( socket Lifetime ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun ĠTest Server Without Client With Delay () Ġ{ ĊĠĠĠĠĠĠĠ Ġserver ( socket Lifetime ) ĊĠĠĠĠĠĠĠ ĠThread . sleep ( 1 0 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun ĠTest Server Without Client With Delay And Messages () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprotocol Ġ= Ġserver ( socket Lifetime ) ĊĠĠĠĠĠĠĠ ĠThread . sleep ( 1 0 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġsp Ġ= ĠR d Optional Property < Int >(). static ( 1 ). apply Ġ{ Ġbind ( lifetime , Ġprotocol , Ġtop ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġsp . set ( 1 ) ĊĠĠĠĠĠĠĠ Ġsp . set ( 2 ) ĊĠĠĠĠĠĠĠ ĠThread . sleep ( 5 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun ĠTest Client Without Server () Ġ{ ĊĠĠĠĠĠĠĠ Ġclient ( socket Lifetime , ĠNet Utils . find Free Port ( 0 )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun ĠTest Client Without Server With Delay () Ġ{ ĊĠĠĠĠĠĠĠ Ġclient ( socket Lifetime , ĠNet Utils . find Free Port ( 0 )) ĊĠĠĠĠĠĠĠ ĠThread . sleep ( 1 0 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun ĠTest Client Without Server With Delay And Messages () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġclient Protocol Ġ= Ġclient ( socket Lifetime , ĠNet Utils . find Free Port ( 0 )) ĊĊĠĠĠĠĠĠĠ Ġval Ġcp Ġ= ĠR d Optional Property < Int >(). static ( 1 ). apply Ġ{ Ġbind ( lifetime , Ġclient Protocol , Ġtop ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġcp . set ( 1 ) ĊĠĠĠĠĠĠĠ Ġcp . set ( 2 ) ĊĠĠĠĠĠĠĠ ĠThread . sleep ( 5 0 ) ĊĠĠĠ Ġ} Ċ Ċ // ĠĠĠ Ġ@ Test Ċ // ĠĠĠ Ġfun Ġtest Re entrant Writes () Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġval Ġserver Protocol Ġ= Ġserver ( socket Lifetime ) Ċ // ĠĠĠĠĠĠĠ Ġval Ġclient Protocol Ġ= Ġclient ( socket Lifetime , Ġserver Protocol ) Ċ // Ċ // ĠĠĠĠĠĠĠ Ġserver Protocol . serializers . register ( Intern ing Nested Test String Model ) Ċ // ĠĠĠĠĠĠĠ Ġclient Protocol . serializers . register ( Intern ing Nested Test String Model ) Ċ // Ċ // ĠĠĠĠĠĠĠ Ġval Ġsp Ġ= ĠProperty Holder With Intern Root ( Rd Optional Property < Intern ing Nested Test String Model >(). static ( 1 ), Ġserver Protocol . serialization Context ) Ċ // ĠĠĠĠĠĠĠ Ġval Ġcp Ġ= ĠProperty Holder With Intern Root ( Rd Optional Property < Intern ing Nested Test String Model >(). static ( 1 ), Ġclient Protocol . serialization Context ) Ċ // Ċ // ĠĠĠĠĠĠĠ Ġsp . my Serialization Context Ġ= Ġsp . my Serialization Context . with Intern Roots Here ( sp , Ġ" Test ") Ċ // ĠĠĠĠĠĠĠ Ġcp . my Serialization Context Ġ= Ġcp . my Serialization Context . with Intern Roots Here ( cp , Ġ" Test ") Ċ // Ċ // ĠĠĠĠĠĠĠ Ġsp . bind ( lifetime , Ġserver Protocol , Ġ" top ") Ċ // ĠĠĠĠĠĠĠ Ġcp . bind ( lifetime , Ġclient Protocol , Ġ" top ") Ċ // Ċ // ĠĠĠĠĠĠĠ Ġval Ġmodel A Ġ= ĠIntern ing Nested Test String Model (" A ", ĠIntern ing Nested Test String Model (" B ", ĠIntern ing Nested Test String Model (" C ", Ġnull ))) Ċ // ĠĠĠĠĠĠĠ Ġcp . property . set ( model A ) Ċ // ĠĠĠĠĠĠĠ Ġsp . property . wait And Assert ( model A ) Ċ // Ċ // ĠĠĠĠĠĠĠ Ġval Ġmodel B Ġ= ĠIntern ing Nested Test String Model (" D ", ĠIntern ing Nested Test String Model (" E ", ĠIntern ing Nested Test String Model (" F ", Ġnull ))) Ċ // ĠĠĠĠĠĠĠ Ġsp . property . set ( model B ) Ċ // ĠĠĠĠĠĠĠ Ġcp . property . wait And Assert ( model B , Ġmodel A ) Ċ // ĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Remote Socket () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġserver Socket Ġ= ĠSocket Wire . Server ( lifetime , ĠTest Scheduler , Ġ 0 , Ġallow Remote Connections Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġclient Socket Ġ= ĠSocket Wire . Client ( lifetime , ĠTest Scheduler , Ġserver Socket . port , Ġhost Address Ġ= ĠInet Address . getLocal Host ()) ĊĊĠĠĠĠĠĠĠ Ġspin Until Ġ{ Ġclient Socket . connected . value Ġ} ĊĠĠĠ Ġ} ĊĊĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Socket Factory () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġs Lifetime Ġ= ĠL ifetime Definition () ĊĠĠĠĠĠĠĠ Ġval Ġfactory Ġ= ĠSocket Wire . Server Factory ( s Lifetime , ĠTest Scheduler , Ġ 0 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġlf 1 Ġ= ĠL ifetime Definition () ĊĠĠĠĠĠĠĠ ĠSocket Wire . Client ( lf 1 , ĠTest Scheduler , Ġfactory . local Port ) ĊĊĠĠĠĠĠĠĠ Ġspin Until Ġ{ Ġfactory . size Ġ== Ġ 1 Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġlf 2 Ġ= ĠL ifetime Definition () ĊĠĠĠĠĠĠĠ ĠSocket Wire . Client ( lf 2 , ĠTest Scheduler , Ġfactory . local Port ) ĊĊĠĠĠĠĠĠĠ Ġspin Until Ġ{ Ġfactory . size Ġ== Ġ 2 Ġ} ĊĊĠĠĠĠĠĠĠ Ġlf 1 . terminate () ĊĠĠĠĠĠĠĠ Ġspin Until Ġ{ Ġfactory . size Ġ== Ġ 1 Ġ} ĊĊĠĠĠĠĠĠĠ Ġs Lifetime . terminate () ĊĠĠĠĠĠĠĠ Ġspin Until Ġ{ Ġfactory . size Ġ== Ġ 0 Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Parameterized Test ĊĠĠĠ Ġ@ Value Source ( b ooleans Ġ= Ġ[ true , Ġfalse ]) ĊĠĠĠ Ġfun Ġtest Packet Loss ( is Client ToServer : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ ĠL ifetime . using Ġ{ Ġlifetime Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġserver Protocol Ġ= Ġserver ( lifetime ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġserver Wire Ġ= Ġserver Protocol . wire ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproxy Ġ= ĠSocket Proxy (" Test Proxy ", Ġlifetime , Ġserver Protocol ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġproxy . start () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclient Protocol Ġ= Ġclient ( lifetime , Ġproxy . port ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclient Wire Ġ= Ġclient Protocol . wire ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠThread . sleep ( 1 0 0 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Client ToServer ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproxy . stop Client ToServer Messaging () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproxy . stop Server To Client Messaging () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdetection Timeout Ms Ġ= Ġclient Protocol . wire . heartbeat Interval Ms Ġ* Ġ( Socket Wire . maximum Heartbeat Delay Ġ+ Ġ 3 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠThread . sleep ( detection Timeout Ms ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( server Wire . connected . value ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( client Wire . connected . value ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertFalse ( server Wire . heartbeat Alive . value ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertFalse ( client Wire . heartbeat Alive . value ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Client ToServer ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproxy . start Client ToServer Messaging () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproxy . start Server To Client Messaging () ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠThread . sleep ( detection Timeout Ms ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( server Wire . connected . value ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( client Wire . connected . value ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( server Wire . heartbeat Alive . value ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( client Wire . heartbeat Alive . value ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊ Ċ // ĠĠĠ Ġ@ BeforeClass Ċ // ĠĠĠ Ġfun Ġbefore Class () Ġ{ Ċ // ĠĠĠĠĠĠĠĠ Ġsetup Log Handler Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġif Ġ( it . get Level () Ġ== ĠLevel . ERROR ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠSystem . err . println ( it . message ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġit . throwable Information ?. throwable ?. printStackTrace () Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġprivate Ġfun Ġsetup Log Handler ( name : ĠString Ġ= Ġ" default ", Ġaction : Ġ( Logging Event ) Ġ-> ĠUnit ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠ Ġval Ġroot Logger Ġ= Ġorg . apache . log 4 j . Logger . getRoot Logger () Ċ // ĠĠĠĠĠĠĠĠ Ġroot Logger . remove Appender (" default ") Ċ // ĠĠĠĠĠĠĠĠ Ġroot Logger . add Appender ( object Ġ: ĠApp ender Skeleton () Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġinit Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠsetName ( name ) Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠĠĠ Ġoverride Ġfun Ġappend ( event : ĠLogging Event ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġaction ( event ) Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠĠĠ Ġoverride Ġfun Ġclose () Ġ{} Ċ // Ċ // ĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrequires Layout (): ĠBoolean Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠ Ġ}) Ċ // ĠĠĠ Ġ} Ċ } Ċ