package Ġpro . vy as en enko . logger Ċ Ċ import Ġio . ktor . application . Application Ċ import Ġio . ktor . application . call Ċ import Ġio . ktor . application . install Ċ import Ġio . ktor . features . Call Logging Ċ import Ġio . ktor . features . Default Headers Ċ import Ġio . ktor . http . HttpMethod Ċ import Ġio . ktor . http . HttpStatusCode Ċ import Ġio . ktor . response . respond Text Ċ import Ġio . ktor . routing . get Ċ import Ġio . ktor . routing . routing Ċ import Ġio . ktor . server . testing . handle Request Ċ import Ġio . ktor . server . testing . with Test Application Ċ import Ġkotlinx . coroutines . time . delay Ċ import Ġorg . junit . Test Ċ import Ġorg . slf 4 j . event . Level Ċ import Ġjava . time . Duration Ċ import Ġjava . util .* Ċ import Ġkotlin . test . assertEquals ĊĊ Ċ /** Ċ Ġ* ĠTest able Ġapp . Ċ Ġ*/ Ċ fun ĠApplication . main () Ġ{ Ċ // ĠĠĠ Ġinstall ( K Logger ) ĊĠĠĠ Ġinstall ( K Logger ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdefault Level Ġ= ĠLevel . INFO ĊĠĠĠ Ġ} ĊĠĠĠ Ġinstall ( Default Headers ) ĊĠĠĠ Ġinstall ( Call Logging ) ĊĊĠĠĠ Ġval Ġtimer Ġ= ĠTimer () ĊĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException (" Example Ġerror ") ĊĠĠĠ Ġ} Ġcatch Ġ( e Ġ: ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠ Ġe . log Ġ{ Ġ" Error " Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġrouting Ġ{ ĊĠĠĠĠĠĠĠ Ġget ("/") Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtimer . run () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġcall . request . headers [" message "]. log Ġ{ Ġ" Message Ġfrom Ġheader : Ġ$ this " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcolor Ġ= Ġcall . request . headers [" color "]. log c Ġ{ Ġ"${ it . BLUE } Color Ġfrom Ġheader : Ġ$ this " Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( Duration . of Seconds ( 1 L )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtimer . stop () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcall . respond Text (" Message Ġfrom Ġheader : Ġ$ message , ĠColor : Ġ$ color ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } ĊĊ Ċ class ĠTimer Ġ: ĠK Log gable Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġstart : ĠLong ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġstop : ĠLong ? Ġ= Ġnull ĊĊĠĠĠ Ġfun Ġrun () Ġ{ ĊĠĠĠĠĠĠĠ Ġstart Ġ= ĠDate (). log Ġ{ Ġ" Run Ġin Ġ$ this " Ġ}. time ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstop () Ġ{ ĊĠĠĠĠĠĠĠ Ġstop Ġ= ĠDate (). time ĊĠĠĠĠĠĠĠ Ġlog c Ġ{ Ġ"${ it . RED } Stop Ġtimer . Ġ${ it . RESET } Time Ġwork Ġ${ stop !! Ġ- Ġstart !!} Ġmilliseconds " Ġ} ĊĠĠĠ Ġ} Ċ } ĊĊ Ċ class ĠSamples Ġ{ ĊĠĠĠ Ġval Ġexpected Message Ġ= Ġ" Hello Ġworld " ĊĠĠĠ Ġval Ġexpected Color Message Ġ= Ġ" May Ġbe Ġgreen ?" ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` ktor Ġexample Ġuse `() Ġ{ ĊĠĠĠĠĠĠĠ Ġwith Test Application ( Application :: main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( handle Request ( HttpMethod . Get , Ġ"/") Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Header (" message ", Ġexpected Message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Header (" color ", Ġexpected Color Message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( HttpStatusCode . OK , Ġresponse . status ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" Message Ġfrom Ġheader : Ġ$ expected Message , ĠColor : Ġ$ expected Color Message ", Ġresponse . content ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }