/* Ċ Ġ* Ġ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 . client . tests Ċ Ċ import Ġio . ktor . client . content .* Ċ import Ġio . ktor . client . features . json .* Ċ import Ġio . ktor . client . features . json . serializer .* Ċ import Ġio . ktor . client . request .* Ċ import Ġio . ktor . client . statement .* Ċ import Ġio . ktor . client . tests . utils .* Ċ import Ġio . ktor . http .* Ċ import Ġio . ktor . utils . io .* Ċ import Ġio . ktor . utils . io . concurrent .* Ċ import Ġkotlinx . coroutines .* Ċ import Ġkotlinx . serialization .* Ċ import Ġkotlin . test .* Ċ Ċ class ĠObservable Body Test Ġ: ĠClient Loader () Ġ{ ĊĊĠĠĠ Ġ@ Serializable ĊĠĠĠ Ġdata Ġclass ĠUser ( val Ġname : ĠString ) ĊĊĠĠĠ Ġprivate Ġvar Ġinvoked Count : ĠLong Ġby Ġshared ( 0 ) ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun ĠtestData Class () Ġ= Ġclient Tests Ġ{ ĊĠĠĠĠĠĠĠ Ġconfig Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinstall ( Json Feature ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġserializer Ġ= ĠKotlin x Serializer () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtest Ġ{ Ġclient Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvoked Count Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlistener : ĠProgress Listener Ġ= Ġ{ Ġ_, Ġ_ Ġ-> Ġinvoked Count ++ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse : ĠHttpResponse Ġ= Ġclient . post ("$ TEST _ SERVER / content / echo ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠcontentType ( ContentType . Application . Json ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbody Ġ= Ġobservable Body Of ( User (" 1 2 3 ". repeat ( 5 0 0 0 )), Ġlistener ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( inv oked Count Ġ>= Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Channel () Ġ= Ġclient Tests Ġ{ ĊĠĠĠĠĠĠĠ Ġtest Ġ{ Ġclient Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvoked Count Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlistener : ĠProgress Listener Ġ= Ġ{ Ġcount , Ġtotal Ġ-> Ġinvoked Count ++ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchannel Ġ= ĠByte Channel () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGlobal Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchannel . write Fully ( ByteArray ( 8 Ġ* Ġ 1 0 2 5 ) Ġ{ Ġ 1 Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchannel . write Fully ( ByteArray ( 8 Ġ* Ġ 1 0 2 5 ) Ġ{ Ġ 1 Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchannel . close () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse : ĠHttpResponse Ġ= Ġclient . post ("$ TEST _ SERVER / content / echo ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbody Ġ= Ġobservable Body Of ( channel , Ġlistener ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( inv oked Count Ġ> Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest ByteArray () Ġ= Ġclient Tests Ġ{ ĊĠĠĠĠĠĠĠ Ġtest Ġ{ Ġclient Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvoked Count Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlistener : ĠProgress Listener Ġ= Ġ{ Ġcount , Ġtotal Ġ-> Ġinvoked Count ++ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse : ĠHttpResponse Ġ= Ġclient . post ("$ TEST _ SERVER / content / echo ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbody Ġ= Ġobservable Body Of ( ByteArray ( 1 0 2 5 Ġ* Ġ 1 6 ), Ġlistener ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( inv oked Count Ġ> Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Failed Channel () Ġ= Ġclient Tests Ġ{ ĊĠĠĠĠĠĠĠ Ġtest Ġ{ Ġclient Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlistener : ĠProgress Listener Ġ= Ġ{ Ġ_, Ġ_ Ġ-> Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchannel Ġ= ĠByte Channel () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGlobal Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchannel . write Fully ( ByteArray ( 8 Ġ* Ġ 1 0 2 5 ) Ġ{ Ġ 1 Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchannel . write Fully ( ByteArray ( 8 Ġ* Ġ 1 0 2 5 ) Ġ{ Ġ 1 Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchannel . close ( RuntimeException (" Error ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Fails With < RuntimeException > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse : ĠHttpResponse Ġ= Ġclient . post ("$ TEST _ SERVER / content / echo ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbody Ġ= Ġobservable Body Of ( channel , Ġlistener ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ