package Ġnet . cord a . testing . internal Ċ Ċ import Ġcom . n ha ar man . mockito _ kotlin . do Answer Ċ import Ġnet . cord a . core . crypto . Crypto Ċ import Ġnet . cord a . core . crypto . Crypto . generate KeyPair Ċ import Ġnet . cord a . core . identity . C ord a X 5 0 0 Name Ċ import Ġnet . cord a . core . identity . Party Ċ import Ġnet . cord a . core . identity . Party And Certificate Ċ import Ġnet . cord a . core . node . NodeInfo Ċ import Ġnet . cord a . core . utilities . Network Host And Port Ċ import Ġnet . cord a . core . utilities . logger For Ċ import Ġnet . cord a . node . services . config . configure Dev Key And Trust Stores Ċ import Ġnet . cord a . node api . internal . config . SSL Configuration Ċ import Ġnet . cord a . node api . internal . create Dev Node Ca Ċ import Ġnet . cord a . node api . internal . crypto . Certificate And KeyPair Ċ import Ġnet . cord a . node api . internal . crypto . Certificate Type Ċ import Ġnet . cord a . node api . internal . crypto . X 5 0 9 Utilities Ċ import Ġnet . cord a . node api . internal . serialization . amqp . AM QP _ ENABLED Ċ import Ġorg . mockito . Mockito Ċ import Ġorg . mockito . internal . stub bing . answers . Throws Exception Ċ import Ġjava . lang . reflect . Modifier Ċ import Ġjava . nio . file . Files Ċ import Ġjava . security . KeyPair Ċ import Ġjava . util .* Ċ import Ġjavax . security . auth . x 5 0 0 . X 5 0 0 Principal Ċ Ċ @ Suppress (" unused ") Ċ inline Ġfun Ġ< re ified ĠT Ġ: ĠAny > ĠT . k ry o Specific ( reason : ĠString , Ġfunction : Ġ() Ġ-> ĠUnit ) Ġ= Ġif Ġ(! AM QP _ ENABLED ) Ġ{ ĊĠĠĠ Ġfunction () Ċ } Ġelse Ġ{ ĊĠĠĠ Ġlogger For < T >(). info (" Ign oring ĠK ry o Ġspecific Ġtest , Ġreason : Ġ$ reason ") Ċ } Ċ Ċ @ Suppress (" unused ") Ċ inline Ġfun Ġ< re ified ĠT Ġ: ĠAny > ĠT . amqp Specific ( reason : ĠString , Ġfunction : Ġ() Ġ-> ĠUnit ) Ġ= Ġif Ġ( AM QP _ ENABLED ) Ġ{ ĊĠĠĠ Ġfunction () Ċ } Ġelse Ġ{ ĊĠĠĠ Ġlogger For < T >(). info (" Ign oring ĠAMQP Ġspecific Ġtest , Ġreason : Ġ$ reason ") Ċ } Ċ Ċ /** Ċ Ġ* ĠA Ġmethod Ġon Ġa Ġmock Ġwas Ġcalled , Ġbut Ġno Ġbehaviour Ġwas Ġpreviously Ġspecified Ġfor Ġthat Ġmethod . Ċ Ġ* ĠYou Ġcan Ġuse Ġ[ com . n ha ar man . mockito _ kotlin . do Return ] Ġor Ġsimilar Ġto Ġspecify Ġbehaviour , Ġsee ĠMockito Ġdocumentation Ġfor Ġdetails . Ċ Ġ*/ Ċ class ĠUndefined Mock Behavior Exception ( message : ĠString ) Ġ: ĠRuntimeException ( message ) Ċ Ċ inline Ġfun Ġ< re ified ĠT Ġ: ĠAny > Ġrig or ous Mock () Ġ= Ġrig or ous Mock ( T :: class . java ) Ċ /** Ċ Ġ* ĠCreate Ġa ĠMockito Ġmock Ġthat Ġhas Ġ[ Undefined Mock Behavior Exception ] Ġas Ġthe Ġdefault Ġbehaviour Ġof Ġall Ġabstract Ġmethods , Ċ Ġ* Ġand Ġ[ org . mockito . invocation . Invocation On Mock . call Real Method ] Ġas Ġthe Ġdefault Ġfor Ġall Ġconcrete Ġmethods . Ċ Ġ* Ġ@ param ĠT Ġthe Ġtype Ġto Ġmock . ĠNote Ġif Ġyou Ġwant Ġconcrete Ġmethods Ġof Ġa ĠKotlin Ġinterface Ġto Ġbe Ġinvoked , Ċ Ġ* Ġit Ġwon 't Ġwork Ġunless Ġyou Ġmock Ġa Ġ( trivial ) Ġabstract Ġimplementation Ġof Ġthat Ġinterface Ġinstead . Ċ Ġ*/ Ċ fun Ġ< T > Ġrig or ous Mock ( clazz : ĠClass < T >): ĠT Ġ= ĠMockito . mock ( clazz ) Ġ{ ĊĠĠĠ Ġif Ġ( Modifier . is Abstract ( it . method . modifiers )) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠUse ĠThrows Exception Ġto Ġhack Ġthe Ġstack Ġtrace , Ġand Ġl az ily Ġso Ġwe Ġcan Ġcustom ise Ġthe Ġmessage : ĊĠĠĠĠĠĠĠ ĠThrows Exception ( Undefined Mock Behavior Exception (" Please Ġspecify Ġwhat Ġshould Ġhappen Ġwhen Ġ'${ it . method }' Ġis Ġcalled , Ġor Ġdon 't Ġcall Ġit . ĠArgs : Ġ${ Arrays . toString ( it . arguments )} ")). answer ( it ) ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġit . call Real Method () ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġconfigure Test SSL ( legal Name : ĠC ord a X 5 0 0 Name ): ĠSSL Configuration Ġ{ ĊĠĠĠ Ġreturn Ġobject Ġ: ĠSSL Configuration Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġcertificates Directory Ġ= ĠFiles . create Temp Directory (" certs ") ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġkey Store Password : ĠString Ġget () Ġ= Ġ" cord acade v pass " ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġtrust Store Password : ĠString Ġget () Ġ= Ġ" trust pass " ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfigure Dev Key And Trust Stores ( legal Name ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġval Ġdefault Root Ca Name Ġ= ĠX 5 0 0 Principal (" CN = C ord a ĠRoot ĠCA , O = R 3 ĠLtd , L = L ondon , C = GB ") Ċ private Ġval Ġdefault Intermediate Ca Name Ġ= ĠX 5 0 0 Principal (" CN = C ord a ĠInter mediate ĠCA , O = R 3 ĠLtd , L = L ondon , C = GB ") Ċ Ċ /** Ċ Ġ* ĠReturns Ġa Ġpair Ġof Ġ[ Certificate And KeyPair ] s , Ġthe Ġfirst Ġbeing Ġthe Ġroot ĠCA Ġand Ġthe Ġsecond Ġthe Ġintermediate ĠCA . Ċ Ġ* Ġ@ param Ġroot Ca Name ĠThe Ġsubject Ġname Ġfor Ġthe Ġroot ĠCA Ġcert . Ċ Ġ* Ġ@ param Ġintermediate Ca Name ĠThe Ġsubject Ġname Ġfor Ġthe Ġintermediate ĠCA Ġcert . Ċ Ġ*/ Ċ fun Ġcreate Dev Intermediate Ca Cert Path ( ĊĠĠĠĠĠĠĠ Ġroot Ca Name : ĠX 5 0 0 Principal Ġ= Ġdefault Root Ca Name , ĊĠĠĠĠĠĠĠ Ġintermediate Ca Name : ĠX 5 0 0 Principal Ġ= Ġdefault Intermediate Ca Name Ċ ): ĠPair < Certificate And KeyPair , ĠCertificate And KeyPair > Ġ{ ĊĠĠĠ Ġval Ġroot KeyPair Ġ= ĠCrypto . generate KeyPair ( X 5 0 9 Utilities . DEFAULT _ TLS _ SIGNATURE _ SCHEME ) ĊĠĠĠ Ġval Ġroot Cert Ġ= ĠX 5 0 9 Utilities . create Self Signed CAC ertificate ( root Ca Name , Ġroot KeyPair ) ĊĊĠĠĠ Ġval Ġintermediate Ca KeyPair Ġ= ĠCrypto . generate KeyPair ( X 5 0 9 Utilities . DEFAULT _ TLS _ SIGNATURE _ SCHEME ) ĊĠĠĠ Ġval Ġintermediate Ca Cert Ġ= ĠX 5 0 9 Utilities . create Certificate ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCertificate Type . INTER MEDI ATE _ CA , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġroot Cert , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġroot KeyPair , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintermediate Ca Name , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintermediate Ca KeyPair . public ) ĊĊĠĠĠ Ġreturn ĠPair ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCertificate And KeyPair ( root Cert , Ġroot KeyPair ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCertificate And KeyPair ( intermediate Ca Cert , Ġintermediate Ca KeyPair ) ĊĠĠĠ Ġ) Ċ } Ċ Ċ /** Ċ Ġ* ĠReturns Ġa Ġtriple Ġof Ġ[ Certificate And KeyPair ] s , Ġthe Ġfirst Ġbeing Ġthe Ġroot ĠCA , Ġthe Ġsecond Ġthe Ġintermediate ĠCA Ġand Ġthe Ġthird Ċ Ġ* Ġthe Ġnode ĠCA . Ċ Ġ* Ġ@ param Ġlegal Name ĠThe Ġsubject Ġname Ġfor Ġthe Ġnode ĠCA Ġcert . Ċ Ġ*/ Ċ fun Ġcreate Dev Node Ca Cert Path ( ĊĠĠĠĠĠĠĠ Ġlegal Name : ĠC ord a X 5 0 0 Name , ĊĠĠĠĠĠĠĠ Ġnode KeyPair : ĠKey Pair Ġ= Ġgenerate KeyPair ( X 5 0 9 Utilities . DEFAULT _ TLS _ SIGNATURE _ SCHEME ), ĊĠĠĠĠĠĠĠ Ġroot Ca Name : ĠX 5 0 0 Principal Ġ= Ġdefault Root Ca Name , ĊĠĠĠĠĠĠĠ Ġintermediate Ca Name : ĠX 5 0 0 Principal Ġ= Ġdefault Intermediate Ca Name Ċ ): ĠTrip le < Certificate And KeyPair , ĠCertificate And KeyPair , ĠCertificate And KeyPair > Ġ{ ĊĠĠĠ Ġval Ġ( root Ca , Ġintermediate Ca ) Ġ= Ġcreate Dev Intermediate Ca Cert Path ( root Ca Name , Ġintermediate Ca Name ) ĊĠĠĠ Ġval Ġnode Ca Ġ= Ġcreate Dev Node Ca ( intermediate Ca , Ġlegal Name , Ġnode KeyPair ) ĊĠĠĠ Ġreturn ĠTrip le ( root Ca , Ġintermediate Ca , Ġnode Ca ) Ċ } Ċ Ċ /** ĠApplication Ġof Ġ[ do Answer ] Ġthat Ġgets Ġa Ġvalue Ġfrom Ġthe Ġgiven Ġ[ map ] Ġusing Ġthe Ġarg Ġat Ġ[ arg Index ] Ġas Ġkey . Ġ*/ Ċ fun Ġdo Lookup ( map : ĠMap < *, Ġ* >, Ġarg Index : ĠInt Ġ= Ġ 0 ) Ġ= Ġdo Answer Ġ{ Ġmap [ it . arguments [ arg Index ]] Ġ} Ċ Ċ fun ĠSSL Configuration . use Ssl Rpc Overrides (): ĠMap < String , ĠString > Ġ{ ĊĠĠĠ Ġreturn Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" rpc Settings . use Ssl " Ġto Ġ" true ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" rpc Settings . ssl . certificates Directory " Ġto Ġcertificates Directory . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" rpc Settings . ssl . key Store Password " Ġto Ġkey Store Password , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" rpc Settings . ssl . trust Store Password " Ġto Ġtrust Store Password ĊĠĠĠ Ġ) Ċ } Ċ Ċ fun ĠSSL Configuration . no Ssl Rpc Overrides ( rpc Admin Address : ĠNetwork Host And Port ): ĠMap < String , ĠString > Ġ{ ĊĠĠĠ Ġreturn Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" rpc Settings . admin Address " Ġto Ġrpc Admin Address . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" rpc Settings . use Ssl " Ġto Ġ" false ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" rpc Settings . ssl . certificates Directory " Ġto Ġcertificates Directory . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" rpc Settings . ssl . key Store Password " Ġto Ġkey Store Password , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" rpc Settings . ssl . trust Store Password " Ġto Ġtrust Store Password ĊĠĠĠ Ġ) Ċ } Ċ Ċ /** Ċ Ġ* ĠUnt il Ġwe Ġhave Ġproper Ġhandling Ġof Ġmultiple Ġident ities Ġper Ġnode , Ġfor Ġtests Ġwe Ġuse Ġthe Ġfirst Ġidentity Ġas Ġspecial Ġone . Ċ Ġ* ĠTODO : ĠShould Ġbe Ġremoved Ġafter Ġmultiple Ġident ities Ġare Ġintroduced . Ċ Ġ*/ Ċ fun ĠNode Info . choose Identity And Cert (): ĠParty And Certificate Ġ= Ġlegal Id entities And Certs . first () Ċ Ċ /** Ċ Ġ* ĠReturns Ġthe Ġparty Ġidentity Ġof Ġthe Ġfirst Ġidentity Ġon Ġthe Ġnode . ĠUnt il Ġwe Ġhave Ġproper Ġhandling Ġof Ġmultiple Ġident ities Ġper Ġnode , Ċ Ġ* Ġfor Ġtests Ġwe Ġuse Ġthe Ġfirst Ġidentity Ġas Ġspecial Ġone . Ċ Ġ* ĠTODO : ĠShould Ġbe Ġremoved Ġafter Ġmultiple Ġident ities Ġare Ġintroduced . Ċ Ġ*/ Ċ fun ĠNode Info . choose Identity (): ĠParty Ġ= Ġchoose Identity And Cert (). party Ċ