package Ġorg . jetbrains . ktor . tests Ċ Ċ import Ġorg . jetbrains . ktor . application .* Ċ import Ġorg . jetbrains . ktor . content .* Ċ import Ġorg . jetbrains . ktor . http .* Ċ import Ġorg . jetbrains . ktor . routing .* Ċ import Ġorg . jetbrains . ktor . testing .* Ċ import Ġorg . openjdk . j mh . annotations .* Ċ import Ġjava . io .* Ċ import Ġjava . util . concurrent .* ĊĊ Ċ @ State ( Scope . Benchmark ) Ċ open Ġclass ĠFull Benchmark Ġ{ ĊĠĠĠ Ġprivate Ġval Ġtest Host : ĠTest Application Host Ġ= ĠTest Application Host ( create Test Environment ()) ĊĠĠĠ Ġprivate Ġval Ġclass Signature Ġ= ĠlistOf ( 0 xca , Ġ 0 xfe , Ġ 0 xba , Ġ 0 xbe ). map ( Int :: to Byte ) ĊĠĠĠ Ġprivate Ġval ĠpackageName Ġ= ĠFull Benchmark :: class . java .` package `. name ĊĠĠĠ Ġprivate Ġval Ġclass FileName Ġ= ĠFull Benchmark :: class . simple Name !! Ġ+ Ġ". class " ĊĠĠĠ Ġprivate Ġval Ġpom File Ġ= ĠFile (" pom . xml ") ĊĊĠĠĠ Ġ@ Setup ĊĠĠĠ Ġfun Ġstart Server () Ġ{ ĊĠĠĠĠĠĠĠ Ġtest Host . start () ĊĠĠĠĠĠĠĠ Ġtest Host . application . routing Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget ("/ say OK ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall . respond (" OK ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget ("/ jar file ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresource Ġ= Ġcall . resolve Resource (" String . class ", Ġ" java . lang ") !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall . respond ( resource ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget ("/ regular Classpath File ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresource Ġ= Ġcall . resolve Resource ( class FileName , ĠpackageName ) !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall . respond ( resource ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget ("/ regular File ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall . respond ( Local FileContent ( pom File )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Tear Down ĊĠĠĠ Ġfun Ġstop Server () Ġ{ ĊĠĠĠĠĠĠĠ Ġtest Host . stop ( 0 L , Ġ 0 L , ĠTimeUnit . MILLISECONDS ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Benchmark ĊĠĠĠ Ġfun Ġsay OK () Ġ= Ġhandle ("/ say OK ") Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( response . content Ġ!= Ġ" OK ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Benchmark ĊĠĠĠ Ġfun Ġsay Classpath Resource From Jar () Ġ= Ġhandle ("/ jar file ") Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( response . byte Content !!. take ( 4 ) Ġ!= Ġclass Signature ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" Wrong Ġclass Ġsignature ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Benchmark ĊĠĠĠ Ġfun Ġsay Classpath Resource Regular () Ġ= Ġhandle ("/ regular Classpath File ") Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( response . byte Content !!. take ( 4 ) Ġ!= Ġclass Signature ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" Wrong Ġclass Ġsignature ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Benchmark ĊĠĠĠ Ġfun Ġsay Regular File () Ġ= Ġhandle ("/ regular File ") Ġ{ ĊĠĠĠĠĠĠĠ Ġresponse . byte Content ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinline Ġfun Ġ< R > Ġhandle ( url : ĠString , Ġblock : ĠTest Application Call . () Ġ-> ĠR ) Ġ= Ġtest Host . handle Request ( HttpMethod . Get , Ġurl ). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( response . status () Ġ!= ĠHttpStatusCode . OK ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" Expected Ġ' HttpStatusCode . OK ' Ġbut Ġgot Ġ'${ response . status () }' ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġblock () ĊĠĠĠ Ġ} Ċ } Ċ Ċ /* Ċ Full Benchmark . say Classpath Resource From Jar Ġ Ġthr pt ĠĠĠ 1 0 ĠĠĠ 2 3 . 6 1 0 ĠÂ ± Ġ 1 . 5 8 0 Ġ Ġops / ms Ċ Full Benchmark . say Classpath Resource Regular Ġ Ġthr pt ĠĠĠ 1 0 ĠĠĠ 1 5 . 0 5 5 ĠÂ ± Ġ 0 . 2 1 5 Ġ Ġops / ms Ċ Full Benchmark . say OK ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthr pt ĠĠĠ 1 0 ĠĠ 1 3 8 . 6 5 5 ĠÂ ± Ġ 2 . 2 7 1 Ġ Ġops / ms Ċ Full Benchmark . say Regular File ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthr pt ĠĠĠ 1 0 ĠĠĠ 2 4 . 0 0 1 ĠÂ ± Ġ 0 . 2 5 4 Ġ Ġops / ms Ċ Ġ*/ Ċ Ċ fun Ġmain ( args : ĠArray < String >) Ġ{ ĊĠĠĠ Ġbenchmark ( args ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrun < Full Benchmark >() ĊĠĠĠ Ġ} Ċ } Ċ