/* Ċ Ġ* ĠCopyright Ġ 2 0 2 1 ĠLINE ĠCorporation Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġcom . line corp . lich . okhttp Ċ Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġkotlinx . coroutines . with Timeout OrNull Ċ import Ġokhttp 3 . Ok HttpClient Ċ import Ġokhttp 3 . Request Ċ import Ġokhttp 3 . RequestBody . Companion . to RequestBody Ċ import Ġokhttp 3 . mock webserver . Mock Response Ċ import Ġokhttp 3 . mock webserver . Mock WebServer Ċ import Ġok io . Buffer Ċ import Ġorg . junit . After Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Test Ċ import Ġjava . util . concurrent . TimeUnit Ċ import Ġkotlin . test . assert Content Equals Ċ import Ġkotlin . test . assertEquals Ċ import Ġkotlin . test . assert Fails With Ċ import Ġkotlin . test . assertNull Ċ import Ġkotlin . test . assertTrue Ċ import Ġkotlin . test . fail Ċ Ċ class ĠCall Test Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġserver : ĠMock WebServer ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġok HttpClient : ĠOk HttpClient ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun ĠsetUp () Ġ{ ĊĠĠĠĠĠĠĠ Ġserver Ġ= ĠMock WebServer () ĊĠĠĠĠĠĠĠ Ġok HttpClient Ġ= ĠOk HttpClient () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ After ĊĠĠĠ Ġfun ĠtearDown () Ġ{ ĊĠĠĠĠĠĠĠ Ġserver . shutdown () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Download () Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= ĠByteArray ( 2 0 0 0 0 ) Ġ{ Ġit . to Byte () Ġ} ĊĊĠĠĠĠĠĠĠ Ġserver . enqueue ( Mock Response (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Body ( Buffer (). write ( data )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrottle Body ( 1 0 0 0 , Ġ 5 0 , ĠTimeUnit . MILLISECONDS ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġserver . start () ĊĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠRequest . Builder (). url ( server . url ("/ foo ")). build () ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġok HttpClient . call ( request ) Ġ{ Ġresponse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( response . is Successful ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠcheckNotNull ( response . body ). bytes () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġserver . take Request () ĊĊĠĠĠĠĠĠĠ Ġassert Content Equals ( data , Ġresult ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Upload () Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= ĠByteArray ( 2 0 0 0 0 ) Ġ{ Ġit . to Byte () Ġ} ĊĊĠĠĠĠĠĠĠ Ġserver . enqueue ( Mock Response (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Body (" DONE .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrottle Body ( 1 0 0 0 , Ġ 5 0 , ĠTimeUnit . MILLISECONDS ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġserver . start () ĊĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠRequest . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. url ( server . url ("/ foo ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. post ( data . to RequestBody ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġok HttpClient . call ( request ) Ġ{ Ġresponse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( response . is Successful ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠcheckNotNull ( response . body ). string () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠassertEquals (" DONE .", Ġresult ) ĊĠĠĠĠĠĠĠ Ġassert Content Equals ( data , Ġserver . take Request (). body . read ByteArray ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Cancel () Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= ĠByteArray ( 2 0 0 0 0 ) Ġ{ Ġit . to Byte () Ġ} ĊĊĠĠĠĠĠĠĠ Ġserver . enqueue ( Mock Response (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Body ( Buffer (). write ( data )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrottle Body ( 1 0 0 0 , Ġ 1 0 0 , ĠTimeUnit . MILLISECONDS ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġserver . start () ĊĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠRequest . Builder (). url ( server . url ("/ foo ")). build () ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġwith Timeout OrNull ( 2 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġok HttpClient . call ( request ) Ġ{ Ġresponse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( response . is Successful ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠcheckNotNull ( response . body ). bytes () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfail (" This Ġcall Ġshould Ġbe Ġcancelled Ġbefore Ġ` ResponseBody . bytes ()` Ġcompletes .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġserver . take Request () ĊĊĠĠĠĠĠĠĠ ĠassertNull ( result ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Error StatusCode () Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġserver . enqueue ( Mock Response (). set Response Code ( 5 0 0 )) ĊĠĠĠĠĠĠĠ Ġserver . start () ĊĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠRequest . Builder (). url ( server . url ("/ foo ")). build () ĊĠĠĠĠĠĠĠ Ġassert Fails With < ResponseStatus Exception > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġok HttpClient . call ( request ) Ġ{ Ġresponse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! response . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠResponse Status Exception ( response . code ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfail (" Not Ġreached .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. let Ġ{ Ġexception Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 5 0 0 , Ġexception . code ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest RuntimeException () Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġserver . enqueue ( Mock Response ()) ĊĠĠĠĠĠĠĠ Ġserver . start () ĊĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠRequest . Builder (). url ( server . url ("/ foo ")). build () ĊĠĠĠĠĠĠĠ Ġassert Fails With < RuntimeException > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġok HttpClient . call ( request ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException (" FOO ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. let Ġ{ Ġexception Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" FOO ", Ġexception . message ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ