@ file : Suppress (" UNUSED _ PARAMETER ") Ċ @ file : Jvm Name (" TestUtils ") Ċ Ċ package Ġnet . cord a . testing . core Ċ Ċ import Ġnet . cord a . core . contracts . Party And Reference Ċ import Ġnet . cord a . core . contracts . State Ref Ċ import Ġnet . cord a . core . crypto . Secure Hash Ċ import Ġnet . cord a . core . crypto . entropy To KeyPair Ċ import Ġnet . cord a . core . crypto . generate KeyPair Ċ import Ġnet . cord a . core . crypto . toString Short Ċ 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 . internal . un specified Country Ċ import Ġnet . cord a . core . node . NodeInfo Ċ import Ġnet . cord a . core . utilities . Network Host And Port Ċ 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 . testing . internal . DEV _ INTER MEDI ATE _ CA Ċ import Ġnet . cord a . testing . internal . DEV _ ROOT _ CA Ċ import Ġjava . math . BigInteger Ċ import Ġjava . security . KeyPair Ċ import Ġjava . security . PublicKey Ċ import Ġjava . security . cert . X 5 0 9 Certificate Ċ import Ġjava . util .* Ċ import Ġjava . util . concurrent . atomic . Atomic Integer Ċ Ċ /** Ċ Ġ* Ġ ĠJAVA ĠINTER OP Ċ Ġ* Ġ Ġ------------ Ċ Ġ* Ċ Ġ* Ġ ĠPlease Ġkeep Ġthe Ġfollowing Ġpoints Ġin Ġmind Ġwhen Ġextending Ġthe ĠKotlin ĠDSL : Ċ Ġ* Ċ Ġ* ĠĠ Ġ- ĠAnnot ate Ġfunctions Ġwith ĠKotlin Ġdefaults Ġwith Ġ@ Jvm Over loads . ĠThis Ġproduces Ġthe Ġrelevant Ġover loads Ġfor ĠJava . Ċ Ġ* ĠĠ Ġ- ĠVoid Ġclo s ures Ġin Ġarguments Ġare Ġincon ven ient Ġin ĠJava , Ġuse Ġover loading Ġto Ġdefine Ġnon - closure Ġvariants Ġas Ġwell . Ċ Ġ* ĠĠ Ġ- ĠTop - level Ġvals Ġare Ġtrick ier . Ġ* DO ĠNOT ĠUSE Ġ@ Jvm Field Ġat Ġthe Ġtop Ġlevel ! * ĠIt 's Ġsur prising ly Ġeasy Ġto Ċ Ġ* ĠĠĠĠ Ġintroduce Ġa Ġstatic Ġinit Ġcycle Ġbecause Ġof Ġthe Ġway ĠKotlin Ġcompiles Ġtop - level Ġthings , Ġwhich Ġcan Ġcause Ċ Ġ* ĠĠĠĠ Ġnon - determin istic Ġbehaviour , Ġincluding Ġyour Ġfield Ġnot Ġbeing Ġinitialized Ġat Ġall ! ĠInstead Ġopt Ġfor Ġa Ġproper ĠKotlin Ċ Ġ* ĠĠĠĠ Ġval Ġeither Ġwith Ġa Ġcustom Ġ@ Jvm Static Ġget () Ġor Ġa Ġlazy Ġdelegate Ġif Ġthe Ġinitial iser Ġhas Ġside - effects . ĠSee Ġexamples Ġbelow . Ċ Ġ* ĠĠ Ġ- ĠIn fix Ġfunctions Ġwork Ġas Ġregular Ġones Ġfrom ĠJava , Ġbut Ġsymbols Ġwith Ġspaces Ġin Ġthem Ġdon 't ! ĠDefine Ġa Ġcamel Case Ġvariant Ċ Ġ* ĠĠĠĠ Ġas Ġwell . Ċ Ġ* ĠĠ Ġ- Ġvar args Ġare Ġexposed Ġas Ġarray Ġtypes Ġin ĠJava . ĠDefine Ġover loads Ġfor Ġcommon Ġcases . Ċ Ġ* ĠĠ Ġ- ĠThe ĠInt . DO LL ARS Ġsyntax Ġdoesn 't Ġwork Ġfrom ĠJava . Ġ ĠUse Ġthe ĠD OL L ARS ( int ) Ġfunction Ġinstead . Ċ Ġ*/ Ċ Ċ /** ĠReturns Ġa Ġfake Ġstate Ġreference Ġfor Ġtesting Ġpurposes Ġ**/ Ċ fun Ġgenerate State Ref (): ĠState Ref Ġ= ĠState Ref ( Secure Hash . random SHA 2 5 6 (), Ġ 0 ) Ċ Ċ private Ġval Ġfree Port Counter Ġ= ĠAtomicInteger ( 3 0 0 0 0 ) Ċ Ċ /** Ċ Ġ* ĠReturns Ġa Ġlocalhost Ġaddress Ġwith Ġa Ġfree Ġport . Ċ Ġ* Ċ Ġ* ĠUnsafe Ġfor Ġgetting Ġmultiple Ġports ! Ċ Ġ* ĠUse Ġ[ get Free Local Ports ] Ġfor Ġgetting Ġmultiple Ġports . Ċ Ġ*/ Ċ @ Suppress (" DE PREC ATION ") Ċ @ Deprecated (" Returned Ġport Ġis Ġnot Ġguaranteed Ġto Ġbe Ġfree Ġwhen Ġused , Ġwhich Ġcan Ġresult Ġin Ġflaky Ġtests . ĠInstead Ġuse Ġa Ġport Ġ" Ġ+ ĊĠĠĠĠĠĠĠ Ġ" range Ġthat 's Ġunlikely Ġto Ġbe Ġused Ġby Ġthe Ġrest Ġof Ġthe Ġsystem , Ġsuch Ġas ĠPort Allocation . Incremental ( 1 0 0 0 0 ). ") Ċ fun Ġfree Local Host And Port (): ĠNetwork Host And Port Ġ= ĠNetwork Host And Port (" localhost ", Ġfree Port ()) Ċ Ċ /** Ċ Ġ* ĠReturns Ġa Ġfree Ġport . Ċ Ġ* Ċ Ġ* ĠUnsafe Ġfor Ġgetting Ġmultiple Ġports ! Ċ Ġ* ĠUse Ġ[ get Free Local Ports ] Ġfor Ġgetting Ġmultiple Ġports . Ċ Ġ*/ Ċ @ Deprecated (" Returned Ġport Ġis Ġnot Ġguaranteed Ġto Ġbe Ġfree Ġwhen Ġused , Ġwhich Ġcan Ġresult Ġin Ġflaky Ġtests . ĠInstead Ġuse Ġa Ġport Ġ" Ġ+ ĊĠĠĠĠĠĠĠ Ġ" range Ġthat 's Ġunlikely Ġto Ġbe Ġused Ġby Ġthe Ġrest Ġof Ġthe Ġsystem , Ġsuch Ġas ĠPort Allocation . Incremental ( 1 0 0 0 0 ). ") Ċ fun Ġfree Port (): ĠInt Ġ= Ġfree Port Counter . get And Accum ulate ( 0 ) Ġ{ Ġprev , Ġ_ Ġ-> Ġ 3 0 0 0 0 Ġ+ Ġ( prev Ġ- Ġ 3 0 0 0 0 Ġ+ Ġ 1 ) Ġ% Ġ 1 0 0 0 0 Ġ} Ċ Ċ /** Ċ Ġ* ĠCreates Ġa Ġspecified Ġnumber Ġof Ġports Ġfor Ġuse Ġby Ġthe ĠNode . Ċ Ġ* Ċ Ġ* ĠUn likely , Ġbut Ġin Ġthe Ġtime Ġbetween Ġrunning Ġthis Ġfunction Ġand Ġhand ing Ġthe Ġports Ċ Ġ* Ġto Ġthe ĠNode , Ġsome Ġother Ġprocess Ġelse Ġcould Ġallocate Ġthe Ġreturned Ġports . Ċ Ġ*/ Ċ @ Deprecated (" Returned Ġport Ġis Ġnot Ġguaranteed Ġto Ġbe Ġfree Ġwhen Ġused , Ġwhich Ġcan Ġresult Ġin Ġflaky Ġtests . ĠInstead Ġuse Ġa Ġport Ġ" Ġ+ ĊĠĠĠĠĠĠĠ Ġ" range Ġthat 's Ġunlikely Ġto Ġbe Ġused Ġby Ġthe Ġrest Ġof Ġthe Ġsystem , Ġsuch Ġas ĠPort Allocation . Incremental ( 1 0 0 0 0 ). ") Ċ fun Ġget Free Local Ports ( host Name : ĠString , Ġnumber To Alloc : ĠInt ): ĠList < Network Host And Port > Ġ{ ĊĠĠĠ Ġval Ġfree Port Ġ= Ġfree Port Counter . get And Accum ulate ( 0 ) Ġ{ Ġprev , Ġ_ Ġ-> Ġ 3 0 0 0 0 Ġ+ Ġ( prev Ġ- Ġ 3 0 0 0 0 Ġ+ Ġnumber To Alloc ) Ġ% Ġ 1 0 0 0 0 Ġ} ĊĠĠĠ Ġreturn Ġ( 0 Ġuntil Ġnumber To Alloc ). map Ġ{ ĠNetwork Host And Port ( host Name , Ġfree Port Ġ+ Ġit ) Ġ} Ċ } Ċ Ċ fun Ġget Test Party And Certificate ( party : ĠParty ): ĠParty And Certificate Ġ{ ĊĠĠĠ Ġval Ġtrust Root : ĠX 5 0 9 Certificate Ġ= ĠDEV _ ROOT _ CA . certificate ĊĠĠĠ Ġval Ġintermediate : ĠCertificate And KeyPair Ġ= ĠDEV _ INTER MEDI ATE _ CA ĊĊĠĠĠ Ġval Ġ( node Ca Cert , Ġnode Ca KeyPair ) Ġ= Ġcreate Dev Node Ca ( intermediate , Ġparty . name ) ĊĊĠĠĠ Ġval Ġidentity Cert Ġ= ĠX 5 0 9 Utilities . create Certificate ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCertificate Type . LEG AL _ IDENTITY , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnode Ca Cert , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnode Ca KeyPair , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparty . name . x 5 0 0 Principal , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparty . own ing Key ) ĊĊĠĠĠ Ġval Ġcert Path Ġ= ĠX 5 0 9 Utilities . build Cert Path ( identity Cert , Ġnode Ca Cert , Ġintermediate . certificate , Ġtrust Root ) ĊĠĠĠ Ġreturn ĠParty And Certificate ( cert Path ) Ċ } Ċ Ċ /** Ċ Ġ* ĠBuild Ġa Ġtest Ġparty Ġwith Ġa Ġn ons ense Ġcertificate Ġauthority Ġfor Ġtesting Ġpurposes . Ċ Ġ*/ Ċ fun Ġget Test Party And Certificate ( name : ĠC ord a X 5 0 0 Name , ĠpublicKey : ĠPublicKey ): ĠParty And Certificate Ġ{ ĊĠĠĠ Ġreturn Ġget Test Party And Certificate ( Party ( name , ĠpublicKey )) Ċ } ĊĊ Ċ private Ġval Ġcount Ġ= ĠAtomicInteger ( 0 ) Ċ /** Ċ Ġ* ĠRandom ise Ġa Ġparty Ġname Ġto Ġavoid Ġcl ashes Ġwith Ġother Ġtests Ċ Ġ*/ Ċ fun Ġmake Unique ( name : ĠC ord a X 5 0 0 Name ) Ġ= Ġname . copy ( common Name Ġ= ĊĠĠĠ Ġif Ġ( name . common Name Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcount . increment AndGet (). toString () ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġ"${ Ġname . common Name Ġ} _${ Ġcount . increment AndGet () Ġ}" ĊĠĠĠ Ġ}) Ċ Ċ /** Ċ Ġ* ĠA Ġclass Ġthat Ġencaps ulates Ġa Ġtest Ġidentity Ġcontaining Ġa Ġ[ C ord a X 5 0 0 Name ] Ġand Ġa Ġ[ KeyPair ], Ġalong side Ġa Ġrange Ċ Ġ* Ġof Ġutility Ġmethods Ġfor Ġuse Ġduring Ġtesting . Ċ Ġ*/ Ċ class ĠTest Identity ( val Ġname : ĠC ord a X 5 0 0 Name , Ġval Ġkey Pair : ĠKey Pair ) Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠCreates Ġan Ġidentity Ġthat Ġwon 't Ġequal Ġany Ġother . ĠThis Ġis Ġmostly Ġuseful Ġas Ġa Ġthrow away Ġfor Ġtest Ġhelpers . ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġorganisation Ġthe Ġorganisation Ġpart Ġof Ġthe Ġnew Ġidentity 's Ġname . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġfresh ( organisation : ĠString ): ĠTest Identity Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Pair Ġ= Ġgenerate KeyPair () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= ĠC ord a X 5 0 0 Name ( organisation , Ġkey Pair . public . toString Short (), ĠC ord a X 5 0 0 Name . un specified Country ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠTest Identity ( name , Ġkey Pair ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠCreates Ġan Ġidentity Ġwith Ġa Ġdeterministic Ġ[ key Pair ] Ġi . e . Ġsame Ġ[ entropy ] Ġsame Ġkey Pair Ġ. */ ĊĠĠĠ Ġconstructor ( name : ĠC ord a X 5 0 0 Name , Ġentropy : ĠLong ) Ġ: Ġthis ( name , Ġentropy To KeyPair ( BigInteger . valueOf ( entropy ))) ĊĊĠĠĠ Ġ/** ĠCreates Ġan Ġidentity Ġwith Ġthe Ġgiven Ġname Ġand Ġa Ġfresh Ġkey Pair . Ġ*/ ĊĠĠĠ Ġconstructor ( name : ĠC ord a X 5 0 0 Name ) Ġ: Ġthis ( name , Ġgenerate KeyPair ()) ĊĊĠĠĠ Ġval ĠpublicKey : ĠPublicKey Ġget () Ġ= Ġkey Pair . public ĊĠĠĠ Ġval Ġparty : ĠParty Ġ= ĠParty ( name , ĠpublicKey ) ĊĠĠĠ Ġval Ġidentity : ĠParty And Certificate Ġby Ġlazy Ġ{ Ġget Test Party And Certificate ( party ) Ġ} Ġ// ĠO ft en Ġnot Ġneeded . ĊĊĠĠĠ Ġ/** ĠReturns Ġa Ġ[ Party And Reference ] Ġfor Ġthis Ġidentity Ġand Ġthe Ġgiven Ġreference Ġ*/ ĊĠĠĠ Ġfun Ġref ( var arg Ġbytes : ĠByte ): ĠParty And Reference Ġ= Ġparty . ref (* bytes ) Ċ } Ċ Ċ /** Ċ Ġ* ĠExtract Ġa Ġsingle Ġidentity Ġfrom Ġthe Ġnode Ġinfo . ĠThrows Ġan Ġerror Ġif Ġthe Ġnode Ġhas Ġmultiple Ġident ities . Ċ Ġ*/ Ċ fun ĠNode Info . single Identity And Cert (): ĠParty And Certificate Ġ= Ġlegal Id entities And Certs . single () Ċ Ċ /** Ċ Ġ* ĠExtract Ġa Ġsingle Ġidentity Ġfrom Ġthe Ġnode Ġinfo . ĠThrows Ġan Ġerror Ġif Ġthe Ġnode Ġhas Ġmultiple Ġident ities . Ċ Ġ*/ Ċ fun ĠNode Info . single Identity (): ĠParty Ġ= Ġsingle Identity And Cert (). party Ċ