package Ġworld . greg s . rs 2 . file Ċ Ċ import Ġio . ktor . network . sockets .* Ċ import Ġio . ktor . utils . io .* Ċ import Ġio . mock k .* Ċ import Ġkotlinx . coroutines . Experimental Cor outines Api Ċ import Ġkotlinx . coroutines . test . run Blocking Test Ċ import Ġorg . junit . jupiter . api . Assertions .* Ċ import Ġorg . junit . jupiter . api . Dynamic Test . dynamic Test Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġorg . junit . jupiter . api . Test Factory Ċ Ċ @ Experimental Cor outines Api Ċ internal Ġclass ĠNetwork Test Ġ{ ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Connect , Ġsync , Ġack Ġand Ġfulfill `() Ġ= Ġrun Blocking Test Ġ{ ĊĠĠĠĠĠĠĠ Ġmock k Static (" world . greg s . rs 2 . file . J age x Types Kt ") ĊĠĠĠĠĠĠĠ Ġmock k Static (" io . ktor . network . sockets . Sockets Kt ") ĊĠĠĠĠĠĠĠ Ġval Ġnetwork Ġ= Ġspy k ( Network ( mock k (), Ġint ArrayOf (), Ġ 0 , Ġ 0 , Ġ 0 )) ĊĠĠĠĠĠĠĠ Ġval Ġsocket : ĠSocket Ġ= Ġmock k () ĊĠĠĠĠĠĠĠ Ġval Ġread : ĠByte Read Channel Ġ= Ġmock k () ĊĠĠĠĠĠĠĠ Ġval Ġwrite : ĠByte Write Channel Ġ= Ġmock k () ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġsocket . open Read Channel () Ġ} Ġreturns Ġread ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġsocket . open Write Channel ( any ()) Ġ} Ġreturns Ġwrite ĊĊĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġnetwork . synchron ise ( read , Ġwrite ) Ġ} Ġjust ĠRuns ĊĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġnetwork . ack nowledge ( read , Ġwrite ) Ġ} Ġreturns Ġtrue ĊĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġnetwork . read Requests ( read , Ġwrite ) Ġ} Ġjust ĠRuns ĊĊĠĠĠĠĠĠĠ Ġnetwork . connect ( socket ) ĊĊĠĠĠĠĠĠĠ Ġco Verify Order Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnetwork . synchron ise ( read , Ġwrite ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnetwork . ack nowledge ( read , Ġwrite ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnetwork . read Requests ( read , Ġwrite ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Failed Ġack Ġwon 't Ġfulfill `() Ġ= Ġrun Blocking Test Ġ{ ĊĠĠĠĠĠĠĠ Ġmock k Static (" world . greg s . rs 2 . file . J age x Types Kt ") ĊĠĠĠĠĠĠĠ Ġmock k Static (" io . ktor . network . sockets . Sockets Kt ") ĊĠĠĠĠĠĠĠ Ġval Ġnetwork Ġ= Ġspy k ( Network ( mock k (), Ġint ArrayOf (), Ġ 0 , Ġ 0 , Ġ 0 )) ĊĠĠĠĠĠĠĠ Ġval Ġsocket : ĠSocket Ġ= Ġmock k () ĊĠĠĠĠĠĠĠ Ġval Ġread : ĠByte Read Channel Ġ= Ġmock k () ĊĠĠĠĠĠĠĠ Ġval Ġwrite : ĠByte Write Channel Ġ= Ġmock k () ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġsocket . open Read Channel () Ġ} Ġreturns Ġread ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġsocket . open Write Channel ( any ()) Ġ} Ġreturns Ġwrite ĊĊĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġnetwork . synchron ise ( read , Ġwrite ) Ġ} Ġjust ĠRuns ĊĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġnetwork . ack nowledge ( read , Ġwrite ) Ġ} Ġreturns Ġfalse ĊĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġnetwork . read Requests ( read , Ġwrite ) Ġ} Ġjust ĠRuns ĊĊĠĠĠĠĠĠĠ Ġnetwork . connect ( socket ) ĊĊĠĠĠĠĠĠĠ Ġco Verify Order Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnetwork . synchron ise ( read , Ġwrite ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnetwork . ack nowledge ( read , Ġwrite ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġco Verify ( exact ly Ġ= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnetwork . read Requests ( read , Ġwrite ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Synchron ise Ġclient Ġand Ġserver `() Ġ= Ġrun Blocking Test Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrevision Ġ= Ġ 1 3 3 7 ĊĠĠĠĠĠĠĠ Ġval Ġkeys Ġ= Ġint ArrayOf ( 0 xffff , Ġ 0 xfff , Ġ 0 xff , Ġ 0 xf ) ĊĠĠĠĠĠĠĠ Ġval Ġnetwork Ġ= ĠNetwork ( mock k (), Ġkeys , Ġrevision , Ġ 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġread : ĠByte Read Channel Ġ= Ġmock k () ĊĠĠĠĠĠĠĠ Ġval Ġwrite : ĠByte Write Channel Ġ= Ġmock k () ĊĊĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġwrite . write Byte ( any ()) Ġ} Ġjust ĠRuns ĊĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġwrite . writeInt ( any ()) Ġ} Ġjust ĠRuns ĊĊĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġread . read Byte () Ġ} Ġreturns Ġ 1 5 ĊĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġread . readInt () Ġ} Ġreturns Ġrevision ĊĊĠĠĠĠĠĠĠ Ġnetwork . synchron ise ( read , Ġwrite ) ĊĊĠĠĠĠĠĠĠ Ġco Verify Order Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwrite . write Byte ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwrite . writeInt ( 0 xffff ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwrite . writeInt ( 0 xfff ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwrite . writeInt ( 0 xff ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwrite . writeInt ( 0 xf ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Fail Ġto Ġsynchron ise Ġwith Ġwrong Ġrevision `() Ġ= Ġrun Blocking Test Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrevision Ġ= Ġ 1 0 ĊĠĠĠĠĠĠĠ Ġval Ġnetwork Ġ= ĠNetwork ( mock k (), Ġint ArrayOf (), Ġrevision , Ġ 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġread : ĠByte Read Channel Ġ= Ġmock k () ĊĠĠĠĠĠĠĠ Ġval Ġwrite : ĠByte Write Channel Ġ= Ġmock k () ĊĊĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġwrite . write Byte ( any ()) Ġ} Ġjust ĠRuns ĊĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġwrite . close () Ġ} Ġreturns Ġtrue ĊĊĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġread . read Byte () Ġ} Ġreturns Ġ 1 5 ĊĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġread . readInt () Ġ} Ġreturns Ġ 1 3 ĊĊĠĠĠĠĠĠĠ Ġnetwork . synchron ise ( read , Ġwrite ) ĊĊĠĠĠĠĠĠĠ Ġco Verify Order Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwrite . write Byte ( 6 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwrite . close () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġco Verify ( exact ly Ġ= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwrite . write Byte ( 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Fail Ġto Ġsynchron ise Ġwith Ġwrong Ġid `() Ġ= Ġrun Blocking Test Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrevision Ġ= Ġ 4 2 0 ĊĠĠĠĠĠĠĠ Ġval Ġnetwork Ġ= ĠNetwork ( mock k (), Ġint ArrayOf (), Ġrevision , Ġ 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġread : ĠByte Read Channel Ġ= Ġmock k () ĊĠĠĠĠĠĠĠ Ġval Ġwrite : ĠByte Write Channel Ġ= Ġmock k () ĊĊĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġwrite . write Byte ( any ()) Ġ} Ġjust ĠRuns ĊĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġwrite . close () Ġ} Ġreturns Ġtrue ĊĊĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġread . read Byte () Ġ} Ġreturns Ġ 1 2 3 ĊĊĠĠĠĠĠĠĠ Ġnetwork . synchron ise ( read , Ġwrite ) ĊĊĠĠĠĠĠĠĠ Ġco Verify Order Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwrite . write Byte ( 1 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwrite . close () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġread . readInt () Ġwas Not ĠCalled ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Ack nowledge Ġclient `() Ġ= Ġrun Blocking Test Ġ{ ĊĠĠĠĠĠĠĠ Ġmock k Static (" world . greg s . rs 2 . file . J age x Types Kt ") ĊĠĠĠĠĠĠĠ Ġval Ġnetwork Ġ= ĠNetwork ( mock k (), Ġint ArrayOf (), Ġ 0 , Ġ 3 , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġread : ĠByte Read Channel Ġ= Ġmock k () ĊĠĠĠĠĠĠĠ Ġval Ġwrite : ĠByte Write Channel Ġ= Ġmock k () ĊĊĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġread . read Byte () Ġ} Ġreturns Ġ 6 ĊĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġread . read Medium () Ġ} Ġreturns Ġ 3 ĊĊĠĠĠĠĠĠĠ Ġval Ġacknowled ged Ġ= Ġnetwork . ack nowledge ( read , Ġwrite ) ĊĊĠĠĠĠĠĠĠ ĠassertTrue ( ack nowled ged ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Don 't Ġacknowledge Ġwrong Ġopcode `() Ġ= Ġrun Blocking Test Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnetwork Ġ= ĠNetwork ( mock k (), Ġint ArrayOf (), Ġ 0 , Ġ 3 , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġread : ĠByte Read Channel Ġ= Ġmock k () ĊĠĠĠĠĠĠĠ Ġval Ġwrite : ĠByte Write Channel Ġ= Ġmock k () ĊĊĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġwrite . write Byte ( any ()) Ġ} Ġjust ĠRuns ĊĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġwrite . close () Ġ} Ġreturns Ġtrue ĊĊĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġread . read Byte () Ġ} Ġreturns Ġ 5 ĊĊĠĠĠĠĠĠĠ Ġval Ġacknowled ged Ġ= Ġnetwork . ack nowledge ( read , Ġwrite ) ĊĊĠĠĠĠĠĠĠ ĠassertFalse ( ack nowled ged ) ĊĠĠĠĠĠĠĠ Ġco Verify Order Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwrite . write Byte ( 1 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwrite . close () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Don 't Ġacknowledge Ġwrong Ġsession Ġid `() Ġ= Ġrun Blocking Test Ġ{ ĊĠĠĠĠĠĠĠ Ġmock k Static (" world . greg s . rs 2 . file . J age x Types Kt ") ĊĠĠĠĠĠĠĠ Ġval Ġnetwork Ġ= ĠNetwork ( mock k (), Ġint ArrayOf (), Ġ 0 , Ġ 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġread : ĠByte Read Channel Ġ= Ġmock k () ĊĠĠĠĠĠĠĠ Ġval Ġwrite : ĠByte Write Channel Ġ= Ġmock k () ĊĊĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġwrite . write Byte ( any ()) Ġ} Ġjust ĠRuns ĊĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġwrite . close () Ġ} Ġreturns Ġtrue ĊĊĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġread . read Byte () Ġ} Ġreturns Ġ 6 ĊĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġread . read Medium () Ġ} Ġreturns Ġ 1 2 ĊĊĠĠĠĠĠĠĠ Ġval Ġacknowled ged Ġ= Ġnetwork . ack nowledge ( read , Ġwrite ) ĊĊĠĠĠĠĠĠĠ ĠassertFalse ( ack nowled ged ) ĊĠĠĠĠĠĠĠ Ġco Verify Order Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwrite . write Byte ( 1 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwrite . close () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Factory ĊĠĠĠ Ġfun Ġ` Verify Ġstatus Ġupdate `() Ġ= Ġint ArrayOf ( 3 , Ġ 2 ). map Ġ{ Ġopcode Ġ-> ĊĠĠĠĠĠĠĠ Ġmock k Static (" world . greg s . rs 2 . file . J age x Types Kt ") ĊĠĠĠĠĠĠĠ Ġdynamic Test (" Verify Ġstatus Ġlogged Ġ${ if Ġ( opcode Ġ== Ġ 3 ) Ġ" out " Ġelse Ġ" in "} ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Blocking Test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnetwork Ġ= ĠNetwork ( mock k (), Ġint ArrayOf (), Ġ 0 , Ġ 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġread : ĠByte Read Channel Ġ= Ġmock k () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwrite : ĠByte Write Channel Ġ= Ġmock k () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġwrite . write Byte ( any ()) Ġ} Ġjust ĠRuns ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġread . read Byte () Ġ} Ġreturns Ġopcode . to Byte () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġread . read Medium () Ġ} Ġreturns Ġ 0 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnetwork . read Request ( read , Ġwrite ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġco Verify ( exact ly Ġ= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrite . write Byte ( 1 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrite . close () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Factory ĊĠĠĠ Ġfun Ġ` Invalid Ġstatus Ġupdate Ġsession Ġid `() Ġ= Ġint ArrayOf ( 3 , Ġ 2 ). map Ġ{ Ġopcode Ġ-> ĊĠĠĠĠĠĠĠ Ġmock k Static (" world . greg s . rs 2 . file . J age x Types Kt ") ĊĠĠĠĠĠĠĠ Ġdynamic Test (" Invalid Ġstatus Ġlogged Ġ${ if Ġ( opcode Ġ== Ġ 3 ) Ġ" out " Ġelse Ġ" in "} ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Blocking Test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnetwork Ġ= ĠNetwork ( mock k (), Ġint ArrayOf (), Ġ 0 , Ġ 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġread : ĠByte Read Channel Ġ= Ġmock k () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwrite : ĠByte Write Channel Ġ= Ġmock k () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġwrite . write Byte ( any ()) Ġ} Ġjust ĠRuns ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġwrite . close () Ġ} Ġreturns Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġread . read Byte () Ġ} Ġreturns Ġopcode . to Byte () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġread . read Medium () Ġ} Ġreturns Ġ 1 2 3 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnetwork . read Request ( read , Ġwrite ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġco Verify Order Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrite . write Byte ( 1 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrite . close () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }