package Ġeu . bun bur ya . ap o gee Ċ Ċ import Ġorg . junit . jupiter . api . Assertions .* Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġjava . io . File Ċ Ċ const Ġval ĠHOST NAME Ġ= Ġ" localhost " Ċ val ĠHOST NAME _ UPPER Ġ= ĠHOST NAME . toUpperCase () Ċ val ĠHOST NAME _ MIX ED Ġ= ĠHOST NAME . let Ġ{ ĊĠĠĠ Ġvar Ġnew Ġ= Ġ"" ĊĠĠĠ Ġfor Ġ( i Ġin Ġit . indices ) Ġnew Ġ+= Ġif Ġ( i Ġ% Ġ 2 Ġ== Ġ 0 ) Ġit [ i ] Ġelse Ġit [ i ]. toUpperCase () ĊĠĠĠ Ġnew Ċ } Ċ val ĠURL _ BASE Ġ= Ġ" ge mini :// $ HOSTNAME /" Ċ val ĠURL _ BASE _ UPPER Ġ= Ġ" ge mini :// $ HOSTNAME _ UPPER /" Ċ val ĠURL _ BASE _ MIX ED Ġ= Ġ" ge mini :// $ HOSTNAME _ MIX ED /" Ċ Ċ /** Ċ Ġ* ĠTest Ġthe Ġserver Ġby Ġmaking Ġvarious Ġrequests Ġand Ġassert ing Ġthat Ġthe Ġresponses Ġare Ġas Ġexpected . ĠShould Ġbe Ġrun Ġwhile Ċ Ġ* Ġthe Ġserver Ġis Ġalready Ġrunning . Ċ Ġ* Ċ Ġ* ĠNOTE : ĠFor Ġsome Ġreason , Ġassertion Ġfailures Ġ( or Ġother Ġexceptions ) Ġencountered Ġduring Ġtest Request Ġdon 't Ġtrigger Ġa Ġtest Ċ Ġ* Ġfailure , Ġso Ġwe Ġneed Ġto Ġcheck Ġthe Ġoutput Ġmanually Ġfor Ġerrors Ġ( it Ġseems Ġthat Ġall Ġtests Ġwill Ġalways Ġpass ). Ċ Ġ*/ Ċ internal Ġclass ĠGem ini Server Test Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġclient Ġ= ĠTest Client () ĊĊĠĠĠ Ġprivate Ġval Ġmime Types Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠ Ġ" atom . xml " Ġto Ġ" application / atom + xml ", ĊĠĠĠĠĠĠĠ Ġ" gem text _ file . g mi " Ġto Ġ" text / ge mini ", ĊĠĠĠĠĠĠĠ Ġ" jpg _ file . jpg " Ġto Ġ" image / jpeg ", ĊĠĠĠĠĠĠĠ Ġ" text _ file . txt " Ġto Ġ" text / plain ", ĊĠĠĠĠĠĠĠ Ġ" xml _ file . xml " Ġto Ġ" application / xml ", ĊĠĠĠĠĠĠĠ Ġ" rss . xml " Ġto Ġ" application / rss + xml ", ĊĠĠĠĠĠĠĠ Ġ" no _ mime _ type " Ġto Ġ" application / octet - stream " ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġfun Ġadd CRL F ( bytes : ĠByteArray ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġend Ġ= Ġbytes . last Index ĊĠĠĠĠĠĠĠ Ġbytes [ end ] Ġ= ĠL F ĊĠĠĠĠĠĠĠ Ġbytes [ end - 1 ] Ġ= ĠCR ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Long Request ( url Size : ĠInt , Ġfill er Char : ĠChar Ġ= Ġ' t '): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfill er Ġ= Ġfill er Char . to Byte () ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠByteArray ( url Size Ġ+ Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin ĠURL _ BASE . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest [ i ] Ġ= ĠURL _ BASE [ i ]. to Byte () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin ĠURL _ BASE . length Ġuntil Ġurl Size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest [ i ] Ġ= Ġfill er ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġadd CRL F ( request ) ĊĠĠĠĠĠĠĠ Ġreturn Ġrequest ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Right Credentials ( i : ĠInt ): ĠPair < File , ĠFile > Ġ= ĠC ER TS [ i ] ĊĠĠĠ Ġprivate Ġfun Ġget Wrong Credentials ( i : ĠInt ): ĠPair < File , ĠFile > Ġ= ĠC ER TS [ if Ġ( i Ġ< Ġ 4 ) Ġi Ġ+ Ġ 1 Ġelse Ġ 0 ] ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` test Ġsending Ġgarbage Ġdata Ġwith ĠCRL F `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbyte Range Ġ= Ġ( 1 .. 9 ) ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠByteArray ( 4 0 ) ĊĠĠĠĠĠĠĠ Ġrepeat ( 3 8 ) Ġ{ Ġrequest [ it ] Ġ= Ġbyte Range . random (). to Byte () Ġ} ĊĠĠĠĠĠĠĠ Ġadd CRL F ( request ) ĊĠĠĠĠĠĠĠ Ġclient . test Request ( request ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 5 9 , Ġit . statusCode ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` test Ġsuccessful Ġstatic Ġgem text Ġrequest `() Ġ{ ĊĠĠĠĠĠĠĠ Ġclient . test Request ( URL _ BASE Ġ+ Ġ" hello . g mi \ r \ n ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 2 0 , Ġit . statusCode ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" Hello Ġworld !\ n ", Ġit . body . decode ToString ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` test Ġnot Ġfound Ġrequest `() Ġ{ ĊĠĠĠĠĠĠĠ Ġclient . test Request ( URL _ BASE Ġ+ Ġ" non _ existent _ file \ r \ n ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 5 1 , Ġit . statusCode ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` test Ġsending ĠURL Ġthat Ġis Ġtoo Ġlong `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= Ġget Long Request ( 1 0 2 5 ) ĊĠĠĠĠĠĠĠ Ġclient . test Request ( request ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 5 9 , Ġit . statusCode ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` test Ġsending ĠURL Ġthat Ġis Ġjust Ġshort Ġenough `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= Ġget Long Request ( 1 0 2 4 ) ĊĠĠĠĠĠĠĠ Ġclient . test Request ( request ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 5 1 , Ġit . statusCode ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` test Ġtemporary Ġredirect `() Ġ{ ĊĠĠĠĠĠĠĠ Ġclient . test Request ( URL _ BASE Ġ+ Ġ" redirect - test / temp - redirect - from \ r \ n ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 3 0 , Ġit . statusCode ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ("/ redirect - test / temp - redirect - to ", Ġit . meta ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` test Ġpermanent Ġredirect `() Ġ{ ĊĠĠĠĠĠĠĠ Ġclient . test Request ( URL _ BASE Ġ+ Ġ" redirect - test / perm - redirect - from \ r \ n ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 3 1 , Ġit . statusCode ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ("/ redirect - test / perm - redirect - to ", Ġit . meta ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` test Ġauth Ġzones Ġwith Ġno Ġcertificate `() Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġ 5 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCert Ġrequired : ĠReturns Ġdirectory Ġlisting ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest 1 Ġ= ĠURL _ BASE Ġ+ Ġ" auth _ zone _$ i /\ r \ n " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCert Ġrequired : ĠReturns Ġfile ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest 2 Ġ= ĠURL _ BASE Ġ+ Ġ" auth _ zone _$ i / subdir / test _ file . txt \ r \ n " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCert Ġrequired : ĠReturns Ġnot Ġfound ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest 3 Ġ= ĠURL _ BASE Ġ+ Ġ" auth _ zone _$ i / non _ existent _ file \ r \ n " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCert Ġnot Ġrequired : ĠReturns Ġnot Ġfound ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest 4 Ġ= ĠURL _ BASE Ġ+ Ġ" auth _ zone _${ i }_ but _ not _ really / non _ existent _ file \ r \ n " ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( r Ġin ĠlistOf ( request 1 , Ġrequest 2 , Ġrequest 3 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclient . test Request ( r ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 6 0 , Ġit . statusCode ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclient . test Request ( request 4 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 5 1 , Ġit . statusCode ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` test Ġauth Ġzones Ġwith Ġcorrect Ġcertificate `() Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġ 5 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( cert File , Ġkey File ) Ġ= Ġget Right Credentials ( i ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCert Ġrequired : ĠReturns Ġdirectory Ġlisting ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest 1 Ġ= ĠURL _ BASE Ġ+ Ġ" auth _ zone _$ i /\ r \ n " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCert Ġrequired : ĠReturns Ġfile ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest 2 Ġ= ĠURL _ BASE Ġ+ Ġ" auth _ zone _$ i / subdir / test _ file . txt \ r \ n " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCert Ġrequired : ĠReturns Ġnot Ġfound ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest 3 Ġ= ĠURL _ BASE Ġ+ Ġ" auth _ zone _$ i / non _ existent _ file \ r \ n " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCert Ġnot Ġrequired : ĠReturns Ġnot Ġfound ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest 4 Ġ= ĠURL _ BASE Ġ+ Ġ" auth _ zone _${ i }_ but _ not _ really / non _ existent _ file \ r \ n " ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġclient . test Request ( request 1 , Ġcert File , Ġkey File ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 2 0 , Ġit . statusCode ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclient . test Request ( request 2 , Ġcert File , Ġkey File ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 2 0 , Ġit . statusCode ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclient . test Request ( request 3 , Ġcert File , Ġkey File ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 5 1 , Ġit . statusCode ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclient . test Request ( request 4 , Ġcert File , Ġkey File ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 5 1 , Ġit . statusCode ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` test Ġclient Ġauth Ġwith Ġwrong Ġcertificate `() Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġ 5 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( cert File , Ġkey File ) Ġ= Ġget Wrong Credentials ( i ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCert Ġrequired : ĠReturns Ġdirectory Ġlisting ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest 1 Ġ= ĠURL _ BASE Ġ+ Ġ" auth _ zone _$ i /\ r \ n " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCert Ġrequired : ĠReturns Ġfile ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest 2 Ġ= ĠURL _ BASE Ġ+ Ġ" auth _ zone _$ i / subdir / test _ file . txt \ r \ n " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCert Ġrequired : ĠReturns Ġnot Ġfound ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest 3 Ġ= ĠURL _ BASE Ġ+ Ġ" auth _ zone _$ i / non _ existent _ file \ r \ n " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCert Ġnot Ġrequired : ĠReturns Ġnot Ġfound ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest 4 Ġ= ĠURL _ BASE Ġ+ Ġ" auth _ zone _${ i }_ but _ not _ really / non _ existent _ file \ r \ n " ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( r Ġin ĠlistOf ( request 1 , Ġrequest 2 , Ġrequest 3 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclient . test Request ( r , Ġcert File , Ġkey File ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 6 1 , Ġit . statusCode ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclient . test Request ( request 4 , Ġcert File , Ġkey File ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 5 1 , Ġit . statusCode ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` test Ġclient Ġauth Ġwhere Ġmultiple Ġcerts Ġaccepted `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġurl Ġ= ĠURL _ BASE Ġ+ Ġ" auth _ zone _ 0 _ 2 _ 4 / subdir / test _ file . txt \ r \ n " ĊĊĠĠĠĠĠĠĠ Ġ// ĠNo Ġcert ĊĠĠĠĠĠĠĠ Ġclient . test Request ( url ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 6 0 , Ġit . statusCode ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠRight Ġcert ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin ĠarrayOf ( 0 , Ġ 2 , Ġ 4 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( right Cert File , Ġright Key File ) Ġ= Ġget Right Credentials ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclient . test Request ( url , Ġright Cert File , Ġright Key File ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 2 0 , Ġit . statusCode ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠWrong Ġcert ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin ĠarrayOf ( 1 , Ġ 3 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( wrong Cert File , Ġwrong Key File ) Ġ= Ġget Right Credentials ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclient . test Request ( url , Ġwrong Cert File , Ġwrong Key File ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 6 1 , Ġit . statusCode ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` test ĠMIME Ġtype Ġrecognition `() Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ(( fileName , ĠmimeType ) Ġin Ġmime Types ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclient . test Request ( URL _ BASE Ġ+ Ġ" mime _ tests /$ fileName \ r \ n ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( mime Type , Ġit . meta ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` test Ġbasic ĠC GI Ġscript `() Ġ{ ĊĠĠĠĠĠĠĠ Ġclient . test Request ( URL _ BASE Ġ+ Ġ" cgi - bin / sh _ print _ env \ r \ n ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 2 0 , Ġit . statusCode ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" text / plain ", Ġit . meta ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġclient . test Request ( URL _ BASE Ġ+ Ġ" cgi - bin / sh _ sleep _ 5 \ r \ n ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 2 0 , Ġit . statusCode ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" text / plain ", Ġit . meta ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` test ĠC GI Ġscript Ġwith Ġtimeout `() Ġ{ ĊĠĠĠĠĠĠĠ Ġclient . test Request ( URL _ BASE Ġ+ Ġ" cgi - bin / sh _ sleep _ 1 5 \ r \ n ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 4 2 , Ġit . statusCode ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` test ĠS CG I `() Ġ{ ĊĠĠĠĠĠĠĠ Ġclient . test Request ( URL _ BASE Ġ+ Ġ" sc gi - path - 1 \ r \ n ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 2 0 , Ġit . statusCode ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" text / plain ", Ġit . meta ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert ( it . body . isNotEmpty ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġclient . test Request ( URL _ BASE Ġ+ Ġ" sc gi - path - 1 / test _ redirect \ r \ n ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 3 1 , Ġit . statusCode ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ("/ redirect / to ", Ġit . meta ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert ( it . body . isEmpty ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġclient . test Request ( URL _ BASE Ġ+ Ġ" sc gi - path - 1 / test _ cgi _ error \ r \ n ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 4 2 , Ġit . statusCode ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" Testing ĠS CG I Ġerror ", Ġit . meta ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert ( it . body . isEmpty ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġclient . test Request ( URL _ BASE Ġ+ Ġ" sc gi - path - 1 / test _ need _ cert \ r \ n ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 6 0 , Ġit . statusCode ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert ( it . body . isEmpty ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġclient . test Request ( URL _ BASE Ġ+ Ġ" sc gi - path - 1 / test _ bad _ cert \ r \ n ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 6 1 , Ġit . statusCode ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert ( it . body . isEmpty ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġclient . test Request ( URL _ BASE Ġ+ Ġ" sc gi - path - 1 / test _ server _ error \ r \ n ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 5 1 , Ġit . statusCode ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" SC GI Ġsays Ġerror ", Ġit . meta ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert ( it . body . isEmpty ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġclient . test Request ( URL _ BASE Ġ+ Ġ" sc gi - path - 1 / test _ actual _ sc gi _ error _ 1 \ r \ n ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 4 2 , Ġit . statusCode ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Not Equals (" SC GI Ġsays Ġerror ", Ġit . meta ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert ( it . body . isEmpty ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġclient . test Request ( URL _ BASE Ġ+ Ġ" sc gi - path - 1 / test _ actual _ sc gi _ error _ 2 \ r \ n ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 4 2 , Ġit . statusCode ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Not Equals (" SC GI Ġsays Ġerror ", Ġit . meta ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert ( it . body . isEmpty ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġclient . test Request ( URL _ BASE Ġ+ Ġ" sc gi - path - 1 / test _ actual _ sc gi _ error _ 3 \ r \ n ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 4 2 , Ġit . statusCode ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Not Equals (" SC GI Ġsays Ġerror ", Ġit . meta ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert ( it . body . isEmpty ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġclient . test Request ( URL _ BASE Ġ+ Ġ" sc gi - path - 1 / test _ sleep _ 5 \ r \ n ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 2 0 , Ġit . statusCode ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" sle pt Ġ 5 \ n ", Ġit . body . decode ToString ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġclient . test Request ( URL _ BASE Ġ+ Ġ" sc gi - path - 1 / test _ sleep _ 1 5 \ r \ n ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 4 2 , Ġit . statusCode ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Not Equals (" SC GI Ġsays Ġerror ", Ġit . meta ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġclient . test Request ( URL _ BASE Ġ+ Ġ" sc gi - path - 1 / some _ other _ path \ r \ n ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 2 0 , Ġit . statusCode ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" some Ġother Ġpath Ġreceived \ n ", Ġit . body . decode ToString ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` test ĠS CG I Ġwith Ġclient Ġcert `() Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġfingerprint : ĠString ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġ 5 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfingerprint Ġ= ĠF ING ER PRINT S [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( cert File , Ġkey File ) Ġ= Ġget Right Credentials ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclient . test Request ( URL _ BASE Ġ+ Ġ" sc gi - path - 1 / client _ auth \ r \ n ", Ġcert File , Ġkey File ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 2 0 , Ġit . statusCode ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ("$ fingerprint \ n ", Ġit . body . decode ToString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` test Ġcase - ins ensitive Ġhostname Ġmatching `() Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġresponse : ĠString Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġclient . test Request ( URL _ BASE Ġ+ Ġ"\ r \ n ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse Ġ= Ġit . body . decode ToString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue Ġ Ġ// ĠReturn Ġthis Ġto Ġsatisfy Ġthe Ġtyping Ġconstraint Ġbut Ġdon 't Ġthink Ġit 's Ġever Ġused ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġclient . test Request ( URL _ BASE _ UPPER Ġ+ Ġ"\ r \ n ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 2 0 , Ġit . statusCode , Ġ" Request Ġto Ġ$ URL _ BASE _ UPPER Ġreturned Ġstatus Ġ${ it . statusCode }. ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( response , Ġit . body . decode ToString (), Ġ" Request Ġto Ġ$ URL _ BASE _ UPPER Ġreturned Ġunexpected Ġresponse .") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġclient . test Request ( URL _ BASE _ MIX ED Ġ+ Ġ"\ r \ n ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 2 0 , Ġit . statusCode , Ġ" Request Ġto Ġ$ URL _ BASE _ MIX ED Ġreturned Ġstatus Ġ${ it . statusCode }. ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( response , Ġit . body . decode ToString (), Ġ" Request Ġto Ġ$ URL _ BASE _ MIX ED Ġreturned Ġunexpected Ġresponse .") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` test Ġdirectory Ġlist ings `() Ġ{ ĊĠĠĠĠĠĠĠ Ġclient . test Request ( URL _ BASE Ġ+ Ġ" dir _ with _ no _ index \ r \ n ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 3 1 , Ġit . statusCode ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġclient . test Request ( URL _ BASE Ġ+ Ġ" dir _ with _ no _ index /\ r \ n ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 2 0 , Ġit . statusCode ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġclient . test Request ( URL _ BASE Ġ+ Ġ" empty _ dir _ with _ no _ index \ r \ n ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 3 1 , Ġit . statusCode ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġclient . test Request ( URL _ BASE Ġ+ Ġ" empty _ dir _ with _ no _ index /\ r \ n ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 2 0 , Ġit . statusCode ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} Ċ Ċ }