package Ġnet . cord a . node . migration Ċ Ċ import Ġli quibase . database . Database Ċ import Ġli quibase . database . jvm . Jdbc Connection Ċ import Ġnet . cord a . core . crypto . Secure Hash Ċ import Ġnet . cord a . core . identity . C ord a X 5 0 0 Name Ċ import Ġnet . cord a . core . identity . Party And Certificate Ċ import Ġnet . cord a . core . internal . hash Ċ import Ġnet . cord a . core . internal . sign With Cert Ċ import Ġnet . cord a . core . node . Network Parameters Ċ import Ġnet . cord a . core . node . Not ary Info Ċ import Ġnet . cord a . node . internal . DB Network Parameters Storage Ċ import Ġnet . cord a . node . migration . Vault State Migration Test . Companion . CHAR LI E Ċ import Ġnet . cord a . node . migration . Vault State Migration Test . Companion . D UMMY _ NOT ARY Ċ import Ġnet . cord a . node . services . identity . Persistent Identity Service Ċ import Ġnet . cord a . node . services . keys . Basic H SM Key Management Service Ċ import Ġnet . cord a . node api . internal . crypto . X 5 0 9 Utilities Ċ import Ġnet . cord a . node api . internal . persistence . C ord a Persistence Ċ import Ġnet . cord a . node api . internal . persistence . Database Config Ċ import Ġnet . cord a . testing . core .* Ċ import Ġnet . cord a . testing . internal . configure Database Ċ import Ġnet . cord a . testing . node . Mock Services Ċ import Ġnet . cord a . testing . node . make Test Identity Service Ċ import Ġorg . junit . After Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Class Rule Ċ import Ġorg . junit . Test Ċ import Ġorg . mockito . Mockito Ċ import Ġjava . security . KeyPair Ċ import Ġjava . time . Clock Ċ import Ġjava . time . Duration Ċ Ċ class ĠPersistent Identity Migration New Table Test { ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġalice Ġ= ĠTest Identity ( AL ICE _ NAME , Ġ 7 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġbank Of C ord a Ġ= ĠTest Identity ( BO C _ NAME ) ĊĠĠĠĠĠĠĠ Ġval Ġbob Ġ= ĠTest Identity ( BO B _ NAME , Ġ 8 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġdummy Cash Issuer Ġ= ĠTest Identity ( C ord a X 5 0 0 Name (" Snake ĠO il ĠIss uer ", Ġ" L ondon ", Ġ" GB "), Ġ 1 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġdummy Not ary Ġ= ĠTest Identity ( D UMMY _ NOT ARY _ NAME , Ġ 2 0 ) ĊĠĠĠĠĠĠĠ Ġval ĠA LIC E _ IDENTITY Ġget () Ġ= Ġalice . identity ĊĠĠĠĠĠĠĠ Ġval ĠB OB _ IDENTITY Ġget () Ġ= Ġbob . identity ĊĠĠĠĠĠĠĠ Ġval ĠB OC _ IDENTITY Ġget () Ġ= Ġbank Of C ord a . identity ĊĠĠĠĠĠĠĠ Ġval ĠB OC _ KEY Ġget () Ġ= Ġbank Of C ord a . key Pair ĊĠĠĠĠĠĠĠ Ġval Ġbob 2 Ġ= ĠTest Identity ( BO B _ NAME , Ġ 4 0 ) ĊĠĠĠĠĠĠĠ Ġval ĠB OB 2 _ IDENTITY Ġ= Ġbob 2 . identity ĊĊĠĠĠĠĠĠĠ Ġ@ Class Rule ĊĠĠĠĠĠĠĠ Ġ@ Jvm Field ĊĠĠĠĠĠĠĠ Ġval Ġtest Serialization Ġ= ĠSerialization Environment Rule () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġlateinit Ġvar Ġliquid Base DB : ĠDatabase ĊĠĠĠ Ġlateinit Ġvar Ġc ord a DB : ĠC ord a Persistence ĊĠĠĠ Ġlateinit Ġvar Ġnot ary Services : ĠMock Services ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun ĠsetUp () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġidentity Service Ġ= Ġmake Test Identity Service ( Persistent Identity Migration New Table Test . dummy Not ary . identity , ĠB OB _ IDENTITY , ĠA LIC E _ IDENTITY ) ĊĠĠĠĠĠĠĠ Ġnot ary Services Ġ= ĠMock Services ( listOf (" net . cord a . finance . contracts "), Ġdummy Not ary , Ġidentity Service , Ġdummy Cash Issuer . key Pair , ĠB OC _ KEY ) ĊĠĠĠĠĠĠĠ Ġ// ĠRuns Ġmigration Ġtasks ĊĠĠĠĠĠĠĠ Ġc ord a DB Ġ= Ġconfigure Database ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMock Services . make Test DataSource Properties (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDatabase Config (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnot ary Services . identity Service :: well Known Party From X 5 0 0 Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnot ary Services . identity Service :: well Known Party From Anonymous , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġour Name Ġ= ĠB OB _ IDENTITY . name ) ĊĠĠĠĠĠĠĠ Ġval Ġliquid base Connection Ġ= ĠMockito . mock ( Jdbc Connection :: class . java ) ĊĠĠĠĠĠĠĠ ĠMockito .` when `( liquid base Connection . url ). thenReturn ( cord a DB . jdbc Url ) ĊĠĠĠĠĠĠĠ ĠMockito .` when `( liquid base Connection . wrapped Connection ). thenReturn ( cord a DB . dataSource . connection ) ĊĠĠĠĠĠĠĠ Ġliquid Base DB Ġ= ĠMockito . mock ( Database :: class . java ) ĊĠĠĠĠĠĠĠ ĠMockito .` when `( liquid Base DB . connection ). thenReturn ( liquid base Connection ) ĊĊĠĠĠĠĠĠĠ Ġc ord a DB . dataSource . connection ĊĠĠĠĠĠĠĠ Ġsave Our Keys ( listOf ( bob . key Pair , Ġbob 2 . key Pair )) ĊĠĠĠĠĠĠĠ Ġsave All Id entities ( listOf ( BO B _ IDENTITY , ĠA LIC E _ IDENTITY , ĠB OC _ IDENTITY , Ġdummy Not ary . identity , ĠB OB 2 _ IDENTITY )) ĊĠĠĠĠĠĠĠ Ġadd Network Parameters () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ After ĊĠĠĠ Ġfun Ġ` close `() Ġ{ ĊĠĠĠĠĠĠĠ Ġc ord a DB . close () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` migrate Ġident ities Ġto Ġnew Ġtable `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠTODO Ġ- ĠWe Ġhave Ġto Ġmock Ġevery Ġstatement / Ġresult Ġto Ġtest Ġthis Ġproperly . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* ĠThe Ġworkaround Ġfor Ġnow Ġis Ġthe Ġ[ Persistent Id entities Migration . add Test Mapping ] Ġand ĊĠĠĠĠĠĠĠĠ Ġ* Ġ[ Persistent Id entities Migration . delete Test Mapping ] Ġmethods Ġthat Ġallow Ġus Ġto Ġsee Ġthe Ġmigration Ġoccur Ġproperly Ġduring Ġdebugging . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* ĠSince Ġ[ Persistent Id entities Migration ] Ġimplements Ġ[ C ord a Migration ] Ġthe Ġmigration Ġwill Ġrun Ġwhen Ġthe ĠDB Ġis Ġsetup . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ ĠPersistent Identity Migration New Table () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsave All Id entities ( ident ities : ĠList < Party And Certificate >) Ġ{ ĊĠĠĠĠĠĠĠ Ġc ord a DB . transaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġident ities . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsession . save ( Persistent Identity Service . Persistent PublicKey Hash To Certificate ( it . own ing Key . hash . toString (), Ġit . cert Path . encoded )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsave Our Keys ( keys : ĠList < KeyPair >) Ġ{ ĊĠĠĠĠĠĠĠ Ġc ord a DB . transaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkeys . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpersistent Key Ġ= ĠBasic H SM Key Management Service . Persistent Key ( it . public , Ġit . private ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsession . save ( persistent Key ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd Network Parameters () Ġ{ ĊĠĠĠĠĠĠĠ Ġc ord a DB . transaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclock Ġ= ĠClock . system UTC () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparams Ġ= ĠNetwork Parameters ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( Not ary Info ( D UMMY _ NOT ARY , Ġfalse ), ĠNot ary Info ( CHAR LI E , Ġfalse )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclock . instant (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDuration . ZERO , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsigned Params Ġ= Ġparams . sign With Cert ( bob . key Pair . private , ĠB OB _ IDENTITY . certificate ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpersistent Params Ġ= ĠDB Network Parameters Storage . Persistent Network Parameters ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSecure Hash . all On es Hash . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams . epoch , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsigned Params . raw . bytes , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsigned Params . sig . bytes , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsigned Params . sig . by . encoded , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠX 5 0 9 Utilities . build Cert Path ( signed Params . sig . parent Certs Chain ). encoded ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsession . save ( persistent Params ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }