package Ġcom . github . c 0 va 2 3 . async S ocks Proxy . socks 5 Auth Methods Ċ Ċ import Ġcom . github . c 0 va 2 3 . async S ocks Proxy . support . Byte Channel Mock Ċ import Ġio . kot lint est . matchers .* Ċ import Ġio . kot lint est . properties . for All Ċ import Ġio . kot lint est . properties . headers Ċ import Ġio . kot lint est . properties . row Ċ import Ġio . kot lint est . properties . table Ċ import Ġio . kot lint est . specs . Free Spec Ċ import Ġjava . nio . charset . Charset Ċ Ċ class ĠUsername Password Spec Ġ: ĠFree Spec ({ ĊĠĠĠ Ġfun Ġbuild Request ( username : ĠString , Ġpassword : ĠString , Ġversion : ĠByte Ġ= Ġ 0 x 0 1 ): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcharset Ġ= ĠCharset . forName (" UTF - 8 ") ĊĠĠĠĠĠĠĠ Ġval Ġusername Bytes Ġ= Ġusername . toByteArray ( charset ) ĊĠĠĠĠĠĠĠ Ġval Ġpassword Bytes Ġ= Ġpassword . toByteArray ( charset ) ĊĠĠĠĠĠĠĠ Ġreturn Ġbyte ArrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġversion , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġusername Bytes . size . to Byte (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* username Bytes , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpassword Bytes . size . to Byte (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* password Bytes ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ" when Ġpass Ġvalid Ġusername Ġand Ġpassword " Ġ- Ġ{ ĊĠĠĠĠĠĠĠ Ġ" return Ġsuccess Ġresult " Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor All ( table ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheaders (" Username ", Ġ" Password "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrow (" John ", Ġ" password "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrow (" Ðĺ Ð² Ð°Ð½ ", Ġ" ÐŁ Ð°ÑĢ Ð¾Ð»ÑĮ ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ)) Ġ{ Ġusername : ĠString , Ġpassword : ĠString Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalidator Ġ= ĠSimple Username Password Validator ( username , Ġpassword ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġusername Password Ġ= ĠUsername Password ( validator ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Payload Ġ= Ġbuild Request ( username , Ġpassword ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbyte Channel Ġ= ĠByte Channel Mock ( listOf ( request Payload )) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġusername Password . authenticate ( byte Channel ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult ĠshouldBe ĠAuth Method Interface . Result . Success ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbyte Channel . out Buffers . size ĠshouldBe Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbyte Channel . out Buffers . first (). toList () ĠshouldBe ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUsername Password . VERSION , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUsername Password . SUCCESS _ CODE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ" when Ġpass Ġvalid Ġusername , Ġbut Ġinvalid Ġpassword " Ġ- Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġusername Ġ= Ġ" John " ĊĠĠĠĠĠĠĠ Ġval Ġvalidator Ġ= ĠSimple Username Password Validator ( username , Ġ" password ") ĊĠĠĠĠĠĠĠ Ġval Ġusername Password Ġ= ĠUsername Password ( validator ) ĊĊĠĠĠĠĠĠĠ Ġval Ġrequest Payload Ġ= Ġbuild Request ( username , Ġ" invalid ") ĊĠĠĠĠĠĠĠ Ġval Ġbyte Channel Ġ= ĠByte Channel Mock ( listOf ( request Payload )) ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġusername Password . authenticate ( byte Channel ) ĊĊĠĠĠĠĠĠĠ Ġ" return Ġfailure Ġresult " Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult ĠshouldBe ĠAuth Method Interface . Result . Failure ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbyte Channel . out Buffers . size ĠshouldBe Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbyte Channel . out Buffers . first (). toList () ĠshouldBe ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUsername Password . VERSION , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUsername Password . FAILURE _ CODE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ" when Ġpass Ġinvalid Ġversion " Ġ- Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġusername Ġ= Ġ" John " ĊĠĠĠĠĠĠĠ Ġval Ġpassword Ġ= Ġ" Pass " ĊĠĠĠĠĠĠĠ Ġval Ġrequest Payload Ġ= Ġbuild Request ( username , Ġpassword , Ġversion Ġ= Ġ 0 x 0 2 ) ĊĠĠĠĠĠĠĠ Ġval Ġbyte Channel Ġ= ĠByte Channel Mock ( listOf ( request Payload )) ĊĊĠĠĠĠĠĠĠ Ġval Ġvalidator Ġ= ĠSimple Username Password Validator ( username , Ġpassword ) ĊĠĠĠĠĠĠĠ Ġval Ġusername Password Ġ= ĠUsername Password ( validator ) ĊĊĠĠĠĠĠĠĠ Ġ" return Ġfailure Ġresult " Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġusername Password . authenticate ( byte Channel ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult ĠshouldBe ĠAuth Method Interface . Result . Failure ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbyte Channel . out Buffers . size ĠshouldBe Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbyte Channel . out Buffers . first (). toList () ĠshouldBe ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUsername Password . VERSION , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUsername Password . FAILURE _ CODE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }) Ċ