package Ġcom . r 3 . cord a . lib . coin . workflows . test Ċ Ċ import Ġcom . r 3 . cord a . lib . coin . workflows . flows . Conf idential Issue C ord aC oin Flow Ċ import Ġcom . r 3 . cord a . lib . coin . workflows . flows . Create C ord aC oin Type Flow Ċ import Ġcom . r 3 . cord a . lib . coin . workflows . flows . Issue C ord aC oin Flow Ċ import Ġcom . r 3 . cord a . lib . coin . workflows . flows . Issue C ord aC oin s Flow Ċ import Ġcom . r 3 . cord a . lib . tokens . contracts . states . F ung ible Token Ċ import Ġnet . cord a . core . identity . Anonymous Party Ċ import Ġnet . cord a . core . identity . Party Ċ import Ġnet . cord a . core . utilities . get OrThrow Ċ import Ġnet . cord a . testing . node . Mock Network Ċ import Ġnet . cord a . testing . node . Started Mock Node Ċ import Ġorg . junit . After Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Test Ċ import Ġjava . math . BigDecimal Ċ import Ġkotlin . test . assertEquals Ċ Ċ class ĠIssue C ord aC oin Flow Tests Ġ{ ĊĊĠĠĠ Ġlateinit Ġvar Ġnetwork : ĠMock Network ĊĠĠĠ Ġlateinit Ġvar Ġnode A : ĠStarted Mock Node ĊĠĠĠ Ġlateinit Ġvar Ġnode B : ĠStarted Mock Node ĊĠĠĠ Ġlateinit Ġvar Ġnode C : ĠStarted Mock Node ĊĠĠĠ Ġlateinit Ġvar Ġnode D : ĠStarted Mock Node ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun Ġsetup () Ġ{ ĊĠĠĠĠĠĠĠ Ġnetwork Ġ= ĠUtils . create Mock Network () ĊĠĠĠĠĠĠĠ Ġnode A Ġ= Ġnetwork . create Party Node () ĊĠĠĠĠĠĠĠ Ġnode B Ġ= Ġnetwork . create Party Node () ĊĠĠĠĠĠĠĠ Ġnode C Ġ= Ġnetwork . create Party Node () ĊĠĠĠĠĠĠĠ Ġnode D Ġ= Ġnetwork . create Party Node () ĊĊĠĠĠĠĠĠĠ Ġnetwork . run Network () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ After ĊĠĠĠ Ġfun ĠtearDown () Ġ{ ĊĠĠĠĠĠĠĠ Ġnetwork . stop Nodes () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` normal Ġtest `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcreate Flow Ġ= Ġnode A . start Flow ( Create C ord aC oin Type Flow ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" subject ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnav Ġ= ĠBigDecimal ( 8 ) ĊĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠ Ġnetwork . run Network () ĊĠĠĠĠĠĠĠ Ġval Ġtype Id Ġ= Ġcreate Flow . get OrThrow () ĊĠĠĠĠĠĠĠ Ġval Ġamount Ġ= ĠBigDecimal ( 1 0 0 . 0 0 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġissue Flow Ġ= Ġnode A . start Flow ( Issue C ord aC oin Flow ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcoin TypeId Ġ= Ġtype Id . linear Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġamount Ġ= Ġamount , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder Ġ= Ġnode A . info . legal Id entities . first () ĊĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠ Ġnetwork . run Network () ĊĠĠĠĠĠĠĠ Ġissue Flow . get OrThrow () ĊĊĠĠĠĠĠĠĠ Ġ// check Ġwhether Ġthe Ġcreated Ġone Ġis Ġright ĊĠĠĠĠĠĠĠ Ġval Ġcoin Ġ= Ġnode A . services . vault Service . query By ( F ung ible Token :: class . java ). states . single (). state . data ĊĊĠĠĠĠĠĠĠ Ġassert ( 0 Ġ== Ġamount . compareTo ( coin . amount . to Decimal ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{" ${ amount }, Ġ${ coin . amount . to Decimal () }" }) ĊĠĠĠĠĠĠĠ Ġassert ( coin . amount . token . token Type . token Identifier . equals ( type Id . linear Id . toString ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{" ${ coin . amount . token . token Type . token Identifier }, Ġ${ type Id . linear Id }" }) ĊĊĠĠĠĠĠĠĠ Ġassert ( coin . holder Ġis ĠParty ) ĊĠĠĠĠĠĠĠ Ġassert ( coin . holder Ġ! is ĠAn onymous Party ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` normal Ġtest Ġ 2 `() Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġcreate Flow Ġ= Ġnode A . start Flow ( Create C ord aC oin Type Flow ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" subject ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnav Ġ= ĠBigDecimal ( 8 ) ĊĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠ Ġnetwork . run Network () ĊĠĠĠĠĠĠĠ Ġval Ġtype Id Ġ= Ġcreate Flow . get OrThrow () ĊĠĠĠĠĠĠĠ Ġval Ġamount Ġ= ĠBigDecimal ( 1 2 0 0 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġissue Flow Ġ= Ġnode A . start Flow ( Issue C ord aC oin Flow ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcoin TypeId Ġ= Ġtype Id . linear Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġamount Ġ= Ġamount , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder Ġ= Ġnode B . info . legal Id entities . first (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparticipants Ġ= ĠlistOf ( node B . info . legal Id entities . first (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode C . info . legal Id entities . first ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġob servers Ġ= ĠlistOf ( node D . info . legal Id entities . first ()) ĊĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠ Ġnetwork . run Network () ĊĠĠĠĠĠĠĠ Ġissue Flow . get OrThrow () ĊĊĠĠĠĠĠĠĠ Ġ// Ġin ĠB ĊĠĠĠĠĠĠĠ Ġval Ġcoin b Ġ= Ġnode B . services . vault Service . query By ( F ung ible Token :: class . java ). states . single (). state . data ĊĠĠĠĠĠĠĠ Ġassert ( 0 Ġ== Ġamount . compareTo ( coin b . amount . to Decimal ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{" ${ amount }, Ġ${ coin b . amount . to Decimal () }" }) ĊĠĠĠĠĠĠĠ Ġassert ( coin b . amount . token . token Type . token Identifier . equals ( type Id . linear Id . toString ())) ĊĊĠĠĠĠĠĠĠ Ġ// Ġin ĠC ĊĠĠĠĠĠĠĠ Ġval Ġcoin c Ġ= Ġnode C . services . vault Service . query By ( F ung ible Token :: class . java ). states . single (). state . data ĊĠĠĠĠĠĠĠ Ġassert ( 0 Ġ== Ġamount . compareTo ( coin b . amount . to Decimal ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{" ${ amount }, Ġ${ coin b . amount . to Decimal () }" }) ĊĠĠĠĠĠĠĠ Ġassert ( co inc . amount . token . token Type . token Identifier . equals ( type Id . linear Id . toString ())) ĊĊĠĠĠĠĠĠĠ Ġ// Ġin ĠD ĊĠĠĠĠĠĠĠ Ġval Ġco ind Ġ= Ġnode D . services . vault Service . query By ( F ung ible Token :: class . java ). states . single (). state . data ĊĠĠĠĠĠĠĠ Ġassert ( 0 Ġ== Ġamount . compareTo ( co ind . amount . to Decimal ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{" ${ amount }, Ġ${ co ind . amount . to Decimal () }" }) ĊĠĠĠĠĠĠĠ Ġassert ( co ind . amount . token . token Type . token Identifier . equals ( type Id . linear Id . toString ())) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġconf idential _ test () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcreate Flow Ġ= Ġnode A . start Flow ( Create C ord aC oin Type Flow ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" subject ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnav Ġ= ĠBigDecimal ( 8 ) ĊĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠ Ġnetwork . run Network () ĊĠĠĠĠĠĠĠ Ġval Ġtype Id Ġ= Ġcreate Flow . get OrThrow () ĊĠĠĠĠĠĠĠ Ġval Ġamount Ġ= ĠBigDecimal ( 1 0 0 . 0 0 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġissue Flow Ġ= Ġnode A . start Flow ( Conf idential Issue C ord aC oin Flow ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcoin TypeId Ġ= Ġtype Id . linear Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġamount Ġ= Ġamount , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder Ġ= Ġnode A . info . legal Id entities . first () ĊĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠ Ġnetwork . run Network () ĊĠĠĠĠĠĠĠ Ġissue Flow . get OrThrow () ĊĊĠĠĠĠĠĠĠ Ġval Ġcoin Ġ= Ġnode A . services . vault Service . query By ( F ung ible Token :: class . java ). states . single (). state . data ĊĊĠĠĠĠĠĠĠ Ġassert ( 0 Ġ== Ġamount . compareTo ( coin . amount . to Decimal ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{" ${ amount }, Ġ${ coin . amount . to Decimal () }" }) ĊĠĠĠĠĠĠĠ Ġassert ( coin . amount . token . token Type . token Identifier . equals ( type Id . linear Id . toString ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{" ${ coin . amount . token . token Type . token Identifier }, Ġ${ type Id . linear Id }" }) ĊĊĠĠĠĠĠĠĠ Ġassert ( coin . holder Ġ! is ĠParty ) ĊĠĠĠĠĠĠĠ Ġassert ( coin . holder Ġis ĠAn onymous Party ) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` list Ġtest Ġ 1 `() Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġcreate Flow Ġ= Ġnode A . start Flow ( Create C ord aC oin Type Flow ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" subject ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnav Ġ= ĠBigDecimal ( 8 ) ĊĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠ Ġnetwork . run Network () ĊĠĠĠĠĠĠĠ Ġval Ġtype Id Ġ= Ġcreate Flow . get OrThrow () ĊĠĠĠĠĠĠĠ Ġval Ġamounts Ġ= ĠlistOf ( BigDecimal ( 1 0 0 ), ĠBigDecimal ( 2 0 0 )). sorted () ĊĠĠĠĠĠĠĠ Ġval Ġhold ers Ġ= ĠlistOf ( node A . info . legal Id entities . first (), Ġnode B . info . legal Id entities . first ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġissue Flow Ġ= Ġnode A . start Flow ( Issue C ord aC oin s Flow ( ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġcoin TypeId Ġ= Ġtype Id . linear Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġamounts Ġ= Ġamounts , ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġhold ers Ġ= Ġhold ers , ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġparticipants Ġ= ĠlistOf ( node C . info . legal Id entities . first ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġob servers Ġ= ĠlistOf ( node D . info . legal Id entities . first ()) ĊĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠ Ġnetwork . run Network () ĊĠĠĠĠĠĠĠ Ġissue Flow . get OrThrow () ĊĊĠĠĠĠĠĠĠ Ġ// Ġin ĠA ĊĠĠĠĠĠĠĠ Ġval Ġcoin a Ġ= Ġget States ( node A ) ĊĠĠĠĠĠĠĠ Ġval Ġamount sa Ġ= Ġcoin a . map Ġ{ Ġit . amount . to Decimal () Ġ}. first () ĊĠĠĠĠĠĠĠ Ġassert ( 0 Ġ== Ġamounts [ 0 ]. compareTo ( amount sa ), Ġ{" ${ amount s [ 0 ]}, Ġ${ amount sa }" }) ĊĠĠĠĠĠĠĠ Ġassert ( co ina [ 0 ]. amount . token . token Type . token Identifier . equals ( type Id . linear Id . toString ())) ĊĊĠĠĠĠĠĠĠ Ġ// Ġin ĠB ĊĠĠĠĠĠĠĠ Ġval Ġcoin b Ġ= Ġget States ( node B ) ĊĠĠĠĠĠĠĠ Ġval Ġamount sb Ġ= Ġcoin b . map Ġ{ Ġit . amount . to Decimal () Ġ}. first () ĊĠĠĠĠĠĠĠ Ġassert ( 0 Ġ== Ġamounts [ 1 ]. compareTo ( amount sb ), Ġ{" ${ amount s [ 1 ]}, Ġ${ amount sb }" }) ĊĠĠĠĠĠĠĠ Ġassert ( coin b [ 0 ]. amount . token . token Type . token Identifier . equals ( type Id . linear Id . toString ())) ĊĊĠĠĠĠĠĠĠ Ġ// Ġin ĠC ĊĠĠĠĠĠĠĠ Ġval Ġcoin c Ġ= Ġget States ( node C ) ĊĠĠĠĠĠĠĠ Ġval Ġamount sc Ġ= Ġcoin c . map Ġ{ Ġit . amount . to Decimal () Ġ}. sorted () ĊĠĠĠĠĠĠĠ ĠassertEquals ( amount sc . size , Ġamounts . size ) ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġamounts . indices ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert ( 0 Ġ== Ġamounts [ i ]. compareTo ( amount sc [ i ]), Ġ{" ${ amount s [ i ]}, Ġ${ amount sc [ i ]}" }) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert ( co inc [ i ]. amount . token . token Type . token Identifier . equals ( type Id . linear Id . toString ())) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġin ĠD ĊĠĠĠĠĠĠĠ Ġval Ġco ind Ġ= Ġget States ( node D ) ĊĠĠĠĠĠĠĠ Ġval Ġamount sd Ġ= Ġco ind . map Ġ{ Ġit . amount . to Decimal () Ġ}. sorted () ĊĠĠĠĠĠĠĠ ĠassertEquals ( amount sd . size , Ġamounts . size ) ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġamounts . indices ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert ( 0 Ġ== Ġamounts [ i ]. compareTo ( amount sd [ i ]), Ġ{" ${ amount s [ i ]}, Ġ${ amount sd [ i ]}" }) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert ( co ind [ i ]. amount . token . token Type . token Identifier . equals ( type Id . linear Id . toString ())) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget States ( node : ĠStarted Mock Node ): ĠList < F ung ible Token > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstates And Ref Ġ= Ġnode . services . vault Service . query By ( F ung ible Token :: class . java ). states ĊĠĠĠĠĠĠĠ Ġreturn Ġstates And Ref . map Ġ{ Ġit . state . data Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ