/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 ĠAmazon . com , ĠInc . Ġor Ġits Ġaffiliates . ĠAll ĠRights ĠReserved . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "). Ċ Ġ* ĠYou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠA Ġcopy Ġof Ġthe ĠLicense Ġis Ġlocated Ġat Ċ Ġ* Ċ Ġ* Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* Ġor Ġin Ġthe Ġ" license " Ġfile Ġaccompanying Ġthis Ġfile . ĠThis Ġfile Ġ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 . amazon . opend ist ro fore lastic search . notifications Ċ Ċ import Ġcom . google . gson . JsonObject Ċ import Ġorg . apache . http . Header Ċ import Ġorg . apache . http . Http Host Ċ import Ġorg . apache . http . auth . Auth Scope Ċ import Ġorg . apache . http . auth . Username Password Credentials Ċ import Ġorg . apache . http . client . Credentials Provider Ċ import Ġorg . apache . http . client . config . Request Config Ċ import Ġorg . apache . http . conn . ssl . No op Hostname Verifier Ċ import Ġorg . apache . http . impl . client . Basic Credentials Provider Ċ import Ġorg . apache . http . impl . nio . client . Http Async Client Builder Ċ import Ġorg . apache . http . message . Basic Header Ċ import Ġorg . apache . http . ssl . SSL Context Builder Ċ import Ġorg . elasticsearch . client . Request Ċ import Ġorg . elasticsearch . client . RequestOptions Ċ import Ġorg . elasticsearch . client . Response Exception Ċ import Ġorg . elasticsearch . client . RestClient Ċ import Ġorg . elasticsearch . client . RestClient Builder Ċ import Ġorg . elasticsearch . common . settings . Settings Ċ import Ġorg . elasticsearch . common . unit . Time Value Ċ import Ġorg . elasticsearch . common . util . concurrent . Thread Context Ċ import Ġorg . elasticsearch . common . x content . De precation Handler Ċ import Ġorg . elasticsearch . common . x content . Named X Content Registry Ċ import Ġorg . elasticsearch . common . x content . X ContentType Ċ import Ġorg . elasticsearch . test . rest . ES Rest TestCase Ċ import Ġorg . junit . After Ċ import Ġorg . junit . Before Ċ import Ġjava . io . IOException Ċ import Ġjava . security . cert . X 5 0 9 Certificate Ċ Ċ abstract Ġclass ĠO DF E Rest TestCase Ġ: ĠES Rest TestCase () Ġ{ ĊĊĠĠĠ Ġprivate Ġfun Ġis Https (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠSystem . getProperty (" https ", Ġ" false ") !!. to Boolean () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Protocol (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( is Https ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" https " ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" http " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpreserve Indices Up on Completion (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġ@ Throws ( InterruptedException :: class ) ĊĠĠĠ Ġfun Ġsetup Client () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( client () Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinit Client () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġ@ After ĊĠĠĠ Ġfun Ġw ipe All O DF E Indices () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġclient (). perform Request ( Request (" GET ", Ġ"/ _ cat / indices ? format = json & expand _ wild cards = all ")) ĊĊĠĠĠĠĠĠĠ Ġval Ġx ContentType Ġ= ĠX ContentType . from MediaType Or Format ( response . entity . contentType . value ) ĊĠĠĠĠĠĠĠ Ġx ContentType . x Content (). create Parser ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNamed X Content Registry . EMPTY , ĠDeprec ation Handler . THROW _ UNSUPPORTED _ OPERATION , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . entity . content ĊĠĠĠĠĠĠĠ Ġ). use Ġ{ Ġparser Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( index Ġin Ġparser . list ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠjsonObject : ĠMap < *, Ġ*> Ġ= Ġindex Ġas Ġjava . util . HashMap < *, Ġ*> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindex Name : ĠString Ġ= ĠjsonObject [" index "] Ġas ĠString ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ. opend ist ro _ security Ġisn 't Ġallowed Ġto Ġdelete Ġfrom Ġcluster ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ". opend ist ro _ security " Ġ!= Ġindex Name ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclient (). perform Request ( Request (" DELETE ", Ġ"/ $ index Name ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġoverride Ġfun Ġbuild Client ( settings : ĠSettings , Ġhosts : ĠArray < Http Host >): ĠRest Client Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠRest Client . builder (* hosts ) ĊĠĠĠĠĠĠĠ Ġif Ġ( is Https ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfigure Https Client ( builder , Ġsettings ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfigure Client ( builder , Ġsettings ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbuilder . set Strict De precation Mode ( true ) ĊĠĠĠĠĠĠĠ Ġreturn Ġbuilder . build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġprotected Ġfun Ġconfigure Https Client ( builder : ĠRest Client Builder , Ġsettings : ĠSettings ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġheaders Ġ= ĠThread Context . build Default Headers ( settings ) ĊĠĠĠĠĠĠĠ Ġval Ġdefault Headers Ġ= ĠarrayOf Null s < Header >( headers . size ) ĊĠĠĠĠĠĠĠ Ġvar Ġi Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġfor Ġ(( key , Ġvalue ) Ġin Ġheaders ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdefault Headers [ i ++] Ġ= ĠBasic Header ( key , Ġvalue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbuilder . setDefault Headers ( default Headers ) ĊĠĠĠĠĠĠĠ Ġbuilder . set HttpClient Config Callback Ġ{ ĠhttpClient Builder : ĠHttp Async Client Builder Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠuserName Ġ= ĠSystem . getProperty (" user ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpassword Ġ= ĠSystem . getProperty (" password ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcredentials Provider : ĠCredentials Provider Ġ= ĠBasic Credentials Provider () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcredentials Provider . set Credentials ( Auth Scope . ANY , ĠUsername Password Credentials ( userName , Ġpassword )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ set HttpClient Config Callback ĠhttpClient Builder . setDefault Credentials Provider ( credentials Provider ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdisable Ġthe Ġcertificate Ġsince Ġour Ġtesting Ġcluster Ġjust Ġuses Ġthe Ġdefault Ġsecurity Ġconfiguration ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set SSL Hostname Verifier ( No op Hostname Verifier . INSTANCE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set SSL Context ( SSL Context Builder . create () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. load Trust Material ( null ) Ġ{ Ġ_: ĠArray < X 5 0 9 Certificate ?> ?, Ġ_: ĠString ? Ġ-> Ġtrue Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġsocket Timeout String Ġ= Ġsettings [ CLIENT _ SOCKET _ TIMEOUT ] ĊĠĠĠĠĠĠĠ Ġval Ġsocket Timeout Ġ= ĠTime Value . parse Time Value ( socket Timeout String Ġ?: Ġ" 6 0 s ", ĠCLIENT _ SOCKET _ TIMEOUT ) ĊĠĠĠĠĠĠĠ Ġbuilder . setRequest Config Callback Ġ{ Ġconf : ĠRequest Config . Builder Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconf . set Socket Timeout ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMath . toInt Exact ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsocket Timeout . millis ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( settings . hasValue ( CLIENT _ PATH _ PREFIX )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . set Path Prefix ( settings [ CLIENT _ PATH _ PREFIX ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġprotected Ġfun Ġupdate Cluster Settings ( setting : ĠCluster Setting ): ĠJsonObject ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠRequest (" PUT ", Ġ"/ _ cluster / settings ") ĊĠĠĠĠĠĠĠ Ġval Ġpersistent Setting Ġ= Ġ"{\" ${ setting . type }\ ": Ġ{ \" ${ setting . name }\ ": Ġ${ setting . value }} }" ĊĠĠĠĠĠĠĠ Ġrequest . set Json Entity ( persistent Setting ) ĊĠĠĠĠĠĠĠ Ġval Ġrest Options Builder Ġ= ĠRequest Options . DEFAULT . to Builder () ĊĠĠĠĠĠĠĠ Ġrest Options Builder . add Header (" Content - Type ", Ġ" application / json ") ĊĠĠĠĠĠĠĠ Ġrequest . set Options ( rest Options Builder ) ĊĠĠĠĠĠĠĠ Ġreturn Ġexecute Request ( request ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġexecute Request ( request : ĠRequest ): ĠJsonObject Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclient (). perform Request ( request ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exception : ĠResponse Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexception . response ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġresponse Body Ġ= Ġget ResponseBody ( response , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġreturn Ġjsonify ( response Body ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġprotected Ġfun ĠgetAll Cluster Settings (): ĠJsonObject ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠRequest (" GET ", Ġ"/ _ cluster / settings ? flat _ settings & include _ defaults ") ĊĠĠĠĠĠĠĠ Ġval Ġrest Options Builder Ġ= ĠRequest Options . DEFAULT . to Builder () ĊĠĠĠĠĠĠĠ Ġrest Options Builder . add Header (" Content - Type ", Ġ" application / json ") ĊĠĠĠĠĠĠĠ Ġrequest . set Options ( rest Options Builder ) ĊĠĠĠĠĠĠĠ Ġreturn Ġexecute Request ( request ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġprotected Ġfun Ġw ipe All Cluster Settings () Ġ{ ĊĠĠĠĠĠĠĠ Ġupdate Cluster Settings ( Cluster Setting (" persistent ", Ġ"*", Ġnull )) ĊĠĠĠĠĠĠĠ Ġupdate Cluster Settings ( Cluster Setting (" transient ", Ġ"*", Ġnull )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġclass ĠCluster Setting ( val Ġtype : ĠString , Ġval Ġname : ĠString , Ġvar Ġvalue : ĠAny ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . value Ġ= Ġif Ġ( value Ġ== Ġnull ) Ġ" null " Ġelse Ġ"\"" Ġ+ Ġvalue Ġ+ Ġ"\"" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ