/* Ċ Ġ* ĠCopyright Ġ 2 0 1 7 ĠNet flix , ĠInc . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ ĊĊ Ċ package Ġcom . netflix . spin n aker . testing Ċ Ċ import Ġokhttp 3 . Ok HttpClient Ċ import Ġokhttp 3 . internal . platform . Platform Ċ import Ġokhttp 3 . logging . Http Logging Interceptor Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġjava . io . File Ċ import Ġjava . security . KeyStore Ċ import Ġjava . util . concurrent . TimeUnit Ċ import Ġjavax . net . ssl . Key ManagerFactory Ċ import Ġjavax . net . ssl . SSL Context Ċ Ċ class ĠConfig Ġ{ ĊĠĠĠ Ġvar Ġsp inn aker Client : ĠOk HttpClient Configuration Ġ= ĠOk HttpClient Configuration () ĊĠĠĠ Ġvar Ġscenarios : ĠList < Scenario Config > Ġ= Ġempty List () ĊĊĠĠĠ Ġfun Ġinit () Ġ{ ĊĠĠĠĠĠĠĠ Ġsp inn aker Client . init () ĊĠĠĠ Ġ} Ċ } Ċ Ċ data Ġclass ĠScenario Config ( val Ġname : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcloud Provider : ĠString ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconfig : ĠMap < String , ĠAny >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexecution Config : ĠExecution Config Ġ= ĠExecution Config (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġenabled : ĠBoolean Ġ= Ġtrue ) Ċ Ċ data Ġclass ĠExecution Config ( val Ġtotal : ĠInt Ġ= Ġ 1 0 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġper Second Rate : ĠDouble Ġ= Ġ 1 . 0 ) Ċ Ċ data Ġclass ĠOk HttpClient Configuration ( var Ġuri : ĠString Ġ= Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġskip Hostname Verification : ĠBoolean Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġkey Store : ĠString Ġ= Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġkey Store Type : ĠString Ġ= Ġ" PKCS 1 2 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġkey Store Password : ĠString Ġ= Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġkey Store Password File : ĠString Ġ= Ġ"") Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlogger Ġ= ĠLoggerFactory . getLogger ( Ok HttpClient :: class . java ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġok HttpClient Ġ= ĠOk HttpClient () ĊĊĠĠĠ Ġfun Ġinit () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! key Store . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Store Password Ġ= Ġif Ġ(! key Store Password . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Store Password ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ(! key Store Password File . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFile ( key Store Password File ). read Text () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" No Ġ` keystore Password ` Ġor Ġ` key Store Password File ` Ġspecified ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkeystore Ref Ġ= ĠKey Store . getInstance ( key Store Type ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠFile ( this . key Store ). inputStream (). use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkeystore Ref . load ( it , Ġkey Store Password . toCharArray ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġk mf Ġ= ĠKey ManagerFactory . getInstance ( Key ManagerFactory . getDefault Algorithm ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġk mf . init ( keystore Ref , Ġkey Store Password . toCharArray ()); ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Managers Ġ= Ġk mf . key Managers ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġssl Context Ġ= ĠSSL Context . getInstance (" TLS ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġssl Context . init ( key Managers , Ġnull , Ġnull ); ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlogging Interceptor Ġ= ĠHttp Logging Interceptor () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogging Interceptor . setLevel ( Http Logging Interceptor . Level . BASIC ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . ok HttpClient Ġ= ĠOk HttpClient . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Interceptor ( logging Interceptor ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. read Timeout ( 6 0 , ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. ssl Socket Factory ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġssl Context . socket Factory , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPlatform . get (). trust Manager ( ssl Context . socket Factory )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ