/* Ċ Ġ* ĠCopyright Ġ 2 0 1 4 - 2 0 2 1 ĠJetBrains Ġs . r . o Ġand Ġcontributors . ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense . Ċ Ġ*/ Ċ Ċ package Ġio . ktor . network . sockets . tests Ċ Ċ import Ġio . ktor . network . sockets .* Ċ import Ġio . ktor . util .* Ċ import Ġio . ktor . utils . io .* Ċ import Ġkotlinx . coroutines .* Ċ import Ġkotlin . test .* Ċ Ċ class ĠTcp Socket Test Ġ{ ĊĊĠĠĠ Ġ@ Opt In ( Internal API :: class ) ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Echo () Ġ= Ġtest Sockets Ġ{ Ġselector Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġtcp Ġ= Ġa Socket ( selector ). tcp () ĊĠĠĠĠĠĠĠ Ġval Ġserver Ġ= Ġtcp . bind (" localhost ", Ġ 8 0 0 0 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġserver Connection Promise Ġ= Ġasync Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġserver . accept () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġclient Connection Ġ= Ġtcp . connect (" localhost ", Ġ 8 0 0 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġserver Connection Ġ= Ġserver Connection Promise . await () ĊĊĠĠĠĠĠĠĠ Ġval Ġclient Output Ġ= Ġclient Connection . open Write Channel () ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclient Output . writeString Utf 8 (" Hello , Ġworld \ n ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclient Output . flush () ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclient Output . close () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġserver Input Ġ= Ġserver Connection . open Read Channel () ĊĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġserver Input . read UTF 8 Line () ĊĠĠĠĠĠĠĠ ĠassertEquals (" Hello , Ġworld ", Ġmessage ) ĊĊĠĠĠĠĠĠĠ Ġval Ġserver Output Ġ= Ġserver Connection . open Write Channel () ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġserver Output . writeString Utf 8 (" Hello ĠFrom ĠServer \ n ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġserver Output . flush () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclient Input Ġ= Ġclient Connection . open Read Channel () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġecho Ġ= Ġclient Input . read UTF 8 Line () ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" Hello ĠFrom ĠServer ", Ġecho ) ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġserver Output . close () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġserver Connection . close () ĊĠĠĠĠĠĠĠ Ġclient Connection . close () ĊĊĠĠĠĠĠĠĠ Ġserver . close () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Echo Over Unix Sockets () Ġ= Ġtest Sockets Ġ{ Ġselector Ġ-> ĊĠĠĠĠĠĠĠ Ġif Ġ(! supports Unix Domain Sockets ()) Ġreturn @ test Sockets ĊĊĠĠĠĠĠĠĠ Ġval Ġsocket Path Ġ= Ġcreate Temp FilePath (" ktor - echo - test ") ĊĊĠĠĠĠĠĠĠ Ġval Ġtcp Ġ= Ġa Socket ( selector ). tcp () ĊĠĠĠĠĠĠĠ Ġval Ġserver Ġ= Ġtcp . bind ( Unix SocketAddress ( socket Path )) ĊĊĠĠĠĠĠĠĠ Ġval Ġserver Connection Promise Ġ= Ġasync Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġserver . accept () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġclient Connection Ġ= Ġtcp . connect ( Unix SocketAddress ( socket Path )) ĊĠĠĠĠĠĠĠ Ġval Ġserver Connection Ġ= Ġserver Connection Promise . await () ĊĊĠĠĠĠĠĠĠ Ġval Ġclient Output Ġ= Ġclient Connection . open Write Channel () ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclient Output . writeString Utf 8 (" Hello , Ġworld \ n ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclient Output . flush () ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclient Output . close () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġserver Input Ġ= Ġserver Connection . open Read Channel () ĊĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġserver Input . read UTF 8 Line () ĊĠĠĠĠĠĠĠ ĠassertEquals (" Hello , Ġworld ", Ġmessage ) ĊĊĠĠĠĠĠĠĠ Ġval Ġserver Output Ġ= Ġserver Connection . open Write Channel () ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġserver Output . writeString Utf 8 (" Hello ĠFrom ĠServer \ n ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġserver Output . flush () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclient Input Ġ= Ġclient Connection . open Read Channel () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġecho Ġ= Ġclient Input . read UTF 8 Line () ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" Hello ĠFrom ĠServer ", Ġecho ) ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġserver Output . close () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġserver Connection . close () ĊĠĠĠĠĠĠĠ Ġclient Connection . close () ĊĊĠĠĠĠĠĠĠ Ġserver . close () ĊĊĠĠĠĠĠĠĠ Ġremove File ( socket Path ) ĊĠĠĠ Ġ} Ċ } Ċ