package Ġnet . cord a . node . multi Rpc Ċ Ċ import Ġcom . n ha ar man . mockito _ kotlin . arg That Ċ import Ġcom . n ha ar man . mockito _ kotlin . mock Ċ import Ġcom . n ha ar man . mockito _ kotlin . times Ċ import Ġcom . n ha ar man . mockito _ kotlin . verify Ċ import Ġnet . cord a . client . rpc . Connection FailureException Ċ import Ġnet . cord a . client . rpc . ext . Multi RPC Client Ċ import Ġnet . cord a . client . rpc . ext . RPC Connection Listener Ċ import Ġnet . cord a . core . internal . messaging . Attachment Trust Info RP CO ps Ċ import Ġnet . cord a . core . messaging . C ord a RP CO ps Ċ import Ġnet . cord a . core . node . services . Network Map Cache Ċ import Ġnet . cord a . core . serialization . internal . Serialization Environment Ċ import Ġnet . cord a . core . serialization . internal ._ rpc Client Serialization Env Ċ import Ġnet . cord a . core . utilities . get OrThrow Ċ import Ġnet . cord a . core . utilities . seconds Ċ import Ġnet . cord a . node . services . Permissions . Companion . all Ċ import Ġnet . cord a . testing . common . internal . event ually Ċ import Ġnet . cord a . testing . core . AL ICE _ NAME Ċ import Ġnet . cord a . testing . driver . Driver Parameters Ċ import Ġnet . cord a . testing . driver . Node Parameters Ċ import Ġnet . cord a . testing . driver . driver Ċ import Ġnet . cord a . testing . driver . internal . incremental Port Allocation Ċ import Ġnet . cord a . testing . node . User Ċ import Ġorg . junit . After Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Test Ċ import Ġrx . Observer Ċ import Ġkotlin . test . assertEquals Ċ import Ġkotlin . test . assertNotNull Ċ import Ġkotlin . test . assertSame Ċ Ċ class ĠMulti Rpc Client Test Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġensure Serial isation Env Null () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠEnsure Ġthat ĠRPC Ġclient Ġserial isation Ġenvironment Ġis Ġdefinitely Ġnot Ġset ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(_ rpc Client Serialization Env . get () Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ rpc Client Serialization Env . set ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġprev Rpc Client Serialization Env : ĠSerialization Environment ? Ġ= Ġnull ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun Ġsetup () Ġ{ ĊĠĠĠĠĠĠĠ Ġprev Rpc Client Serialization Env Ġ= Ġ_ rpc Client Serialization Env . get () ĊĠĠĠĠĠĠĠ Ġensure Serial isation Env Null () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ After ĊĠĠĠ Ġfun Ġafter () Ġ{ ĊĠĠĠĠĠĠĠ Ġensure Serial isation Env Null () ĊĠĠĠĠĠĠĠ Ġ// ĠRestore Ġsomething Ġthat Ġwas Ġchanged Ġduring Ġsetup ĊĠĠĠĠĠĠĠ Ġprev Rpc Client Serialization Env ?. let Ġ{ Ġ_ rpc Client Serialization Env . set ( prev Rpc Client Serialization Env ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ( timeout Ġ= Ġ 3 0 0 _ 0 0 0 ) ĊĠĠĠ Ġfun Ġ` can Ġconnect Ġto Ġcustom ĠRPC Ġinterface `() Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// ĠAllocate Ġnamed Ġport Ġto Ġbe Ġused Ġfor ĠRPC Ġinteraction ĊĠĠĠĠĠĠĠ Ġval Ġrpc Address Ġ= Ġincremental Port Allocation (). next Host And Port () ĊĊĠĠĠĠĠĠĠ Ġ// ĠCreate Ġa Ġspecific ĠRPC Ġuser ĊĠĠĠĠĠĠĠ Ġval Ġrpc User Ġ= ĠUser (" Multi Rpc Client Test ", Ġ" Multi Rpc Client Test Pwd ", Ġset Of ( all ())) ĊĊĠĠĠĠĠĠĠ Ġ// ĠCreate Ġclient Ġwith ĠRPC Ġaddress Ġspecified ĊĠĠĠĠĠĠĠ Ġval Ġclient Ġ= ĠMulti RPC Client ( rpc Address , ĠAttachment Trust Info RP CO ps :: class . java , Ġrpc User . username , Ġrpc User . password ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠEnsure Ġthat ĠRPC Ġclient Ġdefinitely Ġsets Ġserial isation Ġenvironment ĊĠĠĠĠĠĠĠ ĠassertNotNull (_ rpc Client Serialization Env . get ()) ĊĊĠĠĠĠĠĠĠ Ġ// ĠRight Ġfrom Ġthe Ġstart Ġattach Ġa Ġlistener Ġsuch Ġthat Ġit Ġwill Ġbe Ġin formed Ġof Ġall Ġthe Ġactivity Ġhappening Ġfor Ġthis ĠRPC Ġclient ĊĠĠĠĠĠĠĠ Ġval Ġlistener Ġ= Ġmock < RPC Connection Listener < Attachment Trust Info RP CO ps >>() ĊĠĠĠĠĠĠĠ Ġclient . add Connection Listener ( listener ) ĊĊĠĠĠĠĠĠĠ Ġclient . use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠStarting Ġnode Ġout - of - process Ġto Ġensure Ġit Ġis Ġcompletely Ġindependent Ġfrom ĠRPC Ġclient ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdriver ( Driver Parameters ( not ary Specs Ġ= Ġempty List (), Ġstart Nodes In Process Ġ= Ġfalse )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Node ( provided Name Ġ= ĠA LIC E _ NAME , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdefault Parameters Ġ= ĠNode Parameters ( rpc Address Ġ= Ġrpc Address , Ġrpc Users Ġ= ĠlistOf ( rpc User ))). get OrThrow () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconn Future Ġ= Ġclient . start () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeventually ( duration Ġ= Ġ 6 0 . seconds ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( listener , Ġtimes ( 1 )). on Connect ( arg That Ġ{ Ġconnection Opt Ġ=== Ġconn Future . get () Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconn Ġ= Ġconn Future . get () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconn . use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertNotNull ( it . proxy . attachment Trust Infos ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( listener , Ġtimes ( 1 )). on Disconnect ( arg That Ġ{ Ġconnection Opt Ġ=== Ġconn Ġ&& Ġthrowable Opt Ġ== Ġnull Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠEns uring Ġthat Ġcalling Ġstart Ġeven Ġafter Ġclose Ġwill Ġresult Ġin Ġthe Ġsame Ġfuture ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertSame ( conn Future , Ġclient . start ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ( timeout Ġ= Ġ 3 0 0 _ 0 0 0 ) ĊĠĠĠ Ġfun Ġ` ensure ĠonError Ġpopulated Ġon Ġdisconnect `() Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// ĠAllocate Ġnamed Ġport Ġto Ġbe Ġused Ġfor ĠRPC Ġinteraction ĊĠĠĠĠĠĠĠ Ġval Ġrpc Address Ġ= Ġincremental Port Allocation (). next Host And Port () ĊĊĠĠĠĠĠĠĠ Ġ// ĠCreate Ġa Ġspecific ĠRPC Ġuser ĊĠĠĠĠĠĠĠ Ġval Ġrpc User Ġ= ĠUser (" Multi Rpc Client Test 2 ", Ġ" Multi Rpc Client Test Pwd 2 ", Ġset Of ( all ())) ĊĊĠĠĠĠĠĠĠ Ġ// ĠCreate Ġclient Ġwith ĠRPC Ġaddress Ġspecified ĊĠĠĠĠĠĠĠ Ġval Ġclient Ġ= ĠMulti RPC Client ( rpc Address , ĠC ord a RP CO ps :: class . java , Ġrpc User . username , Ġrpc User . password ) ĊĊĠĠĠĠĠĠĠ Ġval Ġobserver Ġ= Ġmock < Observer < Network Map Cache . Map Change >>() ĊĊĠĠĠĠĠĠĠ Ġclient . use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdriver ( Driver Parameters ( not ary Specs Ġ= Ġempty List (), Ġstart Nodes In Process Ġ= Ġfalse )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Node ( provided Name Ġ= ĠA LIC E _ NAME , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdefault Parameters Ġ= ĠNode Parameters ( rpc Address Ġ= Ġrpc Address , Ġrpc Users Ġ= ĠlistOf ( rpc User ))). get OrThrow () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconn Future Ġ= Ġclient . start () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconn Ġ= Ġconn Future . get () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnm Feed Ġ= Ġconn . proxy . network Map Feed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( AL ICE _ NAME , Ġnm Feed . snapshot . single (). legal Id entities . single (). name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnm Feed . updates . subscribe ( observer ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġeventually Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( observer , Ġtimes ( 1 )). onError ( arg That Ġ{ Ġthis Ġas ? ĠConnection FailureException Ġ!= Ġnull Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }