package Ġorg . http 4 k . client Ċ Ċ import Ġorg . http 4 k . core . Method Ċ import Ġorg . http 4 k . core . Request Ċ import Ġorg . http 4 k . core . Response Ċ import Ġorg . http 4 k . core . Status Ċ import Ġorg . http 4 k . routing . bind Ċ import Ġorg . http 4 k . routing . path Ċ import Ġorg . http 4 k . routing . routes Ċ import Ġorg . http 4 k . server . Http 4 k Server Ċ import Ġorg . http 4 k . server . Server Config Ċ import Ġorg . http 4 k . server . as Server Ċ import Ġorg . http 4 k . util . Retry Rule Ċ import Ġorg . junit . After Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Rule Ċ import Ġjava . util .* Ċ Ċ abstract Ġclass ĠAbstract HttpClient Contract ( private Ġval Ġserver Config : Ġ( Int ) Ġ-> ĠServer Config ) Ġ{ ĊĠĠĠ Ġ@ Rule ĊĠĠĠ Ġ@ Jvm Field ĊĠĠĠ Ġvar Ġretry Rule Ġ= ĠRetry Rule ( 1 0 ) ĊĊĠĠĠ Ġprivate Ġvar Ġserver : ĠHttp 4 k Server ? Ġ= Ġnull ĊĊĠĠĠ Ġval Ġport Ġ= ĠRandom (). nextInt ( 1 0 0 0 ) Ġ+ Ġ 8 0 0 0 ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun Ġbefore () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdefault Handler Ġ= Ġ{ Ġrequest : ĠRequest Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠResponse ( Status . OK ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. header (" uri ", Ġrequest . uri . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. header (" header ", Ġrequest . header (" header ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. header (" query ", Ġrequest . query (" query ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. body ( request . body ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġserver Ġ= Ġroutes ("/ some Uri " Ġbind ĠMethod . POST Ġto Ġdefault Handler , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"/ empty " Ġbind ĠMethod . GET Ġto Ġ{ Ġ_: ĠRequest Ġ-> ĠResponse ( Status . OK ). body ("") Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"/ redirect " Ġbind ĠMethod . GET Ġto Ġ{ Ġ_: ĠRequest Ġ-> ĠResponse ( Status . FOUND ). header (" Location ", Ġ"/ some Uri "). body ("") Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"/ stream " Ġbind ĠMethod . GET Ġto Ġ{ Ġ_: ĠRequest Ġ-> ĠResponse ( Status . OK ). body (" stream ". byte InputStream ()) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"/ delay /{ millis }" Ġbind ĠMethod . GET Ġto Ġ{ Ġr : ĠRequest Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠThread . sleep ( r . path (" millis ") !!. to Long ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResponse ( Status . OK ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"/ echo " Ġbind ĠMethod . POST Ġto Ġ{ Ġrequest : ĠRequest Ġ-> ĠResponse ( Status . OK ). body ( request . body String ()) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"/ check - image " Ġbind ĠMethod . POST Ġto Ġ{ Ġrequest : ĠRequest Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Arrays . equals ( test Image Bytes (), Ġrequest . body . payload . array ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResponse ( Status . OK ) Ġelse ĠResponse ( Status . BAD _ REQUEST . description (" Image Ġcontent Ġdoes Ġnot Ġmatch ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"/ status /{ status }" Ġbind ĠMethod . GET Ġto Ġ Ġ{ Ġr : ĠRequest Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstatus Ġ= ĠStatus ( r . path (" status ") !!. toInt (), Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResponse ( status ). body (" body Ġfor Ġstatus Ġ${ status . code }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. as Server ( server Config ( port )). start () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġtest Image Bytes () Ġ= Ġthis :: class . java . getResource AsStream ("/ test . png "). read Bytes () ĊĊĠĠĠ Ġ@ After ĊĠĠĠ Ġfun Ġafter () Ġ{ ĊĠĠĠĠĠĠĠ Ġserver ?. stop () ĊĠĠĠ Ġ} Ċ }