package Ġnet . cord a . flows Ċ Ċ import Ġcom . google . common . util . concurrent . List enable Future Ċ import Ġnet . cord a . contracts . testing . calculate Random ly Sized Amount s Ċ import Ġnet . cord a . core . contracts . Amount Ċ import Ġnet . cord a . core . contracts . DO LL ARS Ċ import Ġnet . cord a . core . contracts . currency Ċ import Ġnet . cord a . core . flows . Flow Exception Ċ import Ġnet . cord a . core . flows . Flow StateMachine Ċ import Ġnet . cord a . core . get OrThrow Ċ import Ġnet . cord a . core . identity . Party Ċ import Ġnet . cord a . core . map Ċ import Ġnet . cord a . core . serialization . Opaque Bytes Ċ import Ġnet . cord a . core . to Future Ċ import Ġnet . cord a . core . transactions . Signed Transaction Ċ import Ġnet . cord a . core . utilities . D UMMY _ NOT ARY Ċ import Ġnet . cord a . flows . Issuer Flow . Iss u ance Request er Ċ import Ġnet . cord a . testing . BO C Ċ import Ġnet . cord a . testing . ME GA _ COR P Ċ import Ġnet . cord a . testing . ledger Ċ import Ġnet . cord a . testing . node . Mock Network Ċ import Ġnet . cord a . testing . node . Mock Network . Mock Node Ċ import Ġorg . junit . Test Ċ import Ġrx . Observable Ċ import Ġjava . util .* Ċ import Ġkotlin . test . assertEquals Ċ import Ġkotlin . test . assert Fails With Ċ Ċ class ĠIss uer Flow Test Ġ{ ĊĠĠĠ Ġlateinit Ġvar Ġmock Net : ĠMock Network ĊĠĠĠ Ġlateinit Ġvar Ġnot ary Node : ĠMock Node ĊĠĠĠ Ġlateinit Ġvar Ġbank Of C ord a Node : ĠMock Node ĊĠĠĠ Ġlateinit Ġvar Ġbank Client Node : ĠMock Node ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` test Ġissuer Ġflow `() Ġ{ ĊĠĠĠĠĠĠĠ Ġmock Net Ġ= ĠMock Network ( false , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġledger Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnot ary Node Ġ= Ġmock Net . create Not ary Node ( null , ĠD UMMY _ NOT ARY . name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbank Of C ord a Node Ġ= Ġmock Net . create Party Node ( not ary Node . info . address , ĠB OC . name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbank Client Node Ġ= Ġmock Net . create Party Node ( not ary Node . info . address , ĠME GA _ COR P . name ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġusing Ġdefault ĠIssue To ĠParty ĠReference ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( issuer , Ġissuer Result ) Ġ= Ġrun Issuer And Issue Request er ( bank Of C ord a Node , Ġbank Client Node , Ġ 1 0 0 0 0 0 0 . DO LL ARS , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbank Client Node . info . legal Identity , ĠO pa que Bytes . of ( 1 2 3 )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( issuer Result . get (), Ġissuer . get (). result Future . get ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġtry Ġto Ġissue Ġan Ġamount Ġof Ġa Ġrestricted Ġcurrency ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Fails With < Flow Exception > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun Issuer And Issue Request er ( bank Of C ord a Node , Ġbank Client Node , ĠAmount ( 1 0 0 0 0 0 L , Ġcurrency (" B RL ")), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbank Client Node . info . legal Identity , ĠO pa que Bytes . of ( 1 2 3 )). issue Request Result . get OrThrow () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbank Of C ord a Node . stop () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbank Client Node . stop () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` test Ġissue Ġflow Ġto Ġself `() Ġ{ ĊĠĠĠĠĠĠĠ Ġmock Net Ġ= ĠMock Network ( false , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġledger Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnot ary Node Ġ= Ġmock Net . create Not ary Node ( null , ĠD UMMY _ NOT ARY . name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbank Of C ord a Node Ġ= Ġmock Net . create Party Node ( not ary Node . info . address , ĠB OC . name ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġusing Ġdefault ĠIssue To ĠParty ĠReference ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( issuer , Ġissuer Result ) Ġ= Ġrun Issuer And Issue Request er ( bank Of C ord a Node , Ġbank Of C ord a Node , Ġ 1 0 0 0 0 0 0 . DO LL ARS , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbank Of C ord a Node . info . legal Identity , ĠO pa que Bytes . of ( 1 2 3 )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( issuer Result . get (), Ġissuer . get (). result Future . get ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbank Of C ord a Node . stop () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` test Ġconcurrent Ġissuer Ġflow `() Ġ{ ĊĠĠĠĠĠĠĠ Ġmock Net Ġ= ĠMock Network ( false , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġledger Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnot ary Node Ġ= Ġmock Net . create Not ary Node ( null , ĠD UMMY _ NOT ARY . name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbank Of C ord a Node Ġ= Ġmock Net . create Party Node ( not ary Node . info . address , ĠB OC . name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbank Client Node Ġ= Ġmock Net . create Party Node ( not ary Node . info . address , ĠME GA _ COR P . name ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthis Ġtest Ġexercises Ġthe ĠCash flow Ġissue Ġand Ġmove Ġsub flows Ġto Ġensure Ġconsistent Ġs pending Ġof Ġissued Ġstates ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġamount Ġ= Ġ 1 0 0 0 0 . DO LL ARS ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġamounts Ġ= Ġcalculate Random ly Sized Amount s ( 1 0 0 0 0 . DO LL ARS , Ġ 1 0 , Ġ 1 0 , ĠRandom ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhandles Ġ= Ġamounts . map Ġ{ Ġp enn ies Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun Issuer And Issue Request er ( bank Of C ord a Node , Ġbank Client Node , ĠAmount ( pen n ies , Ġamount . token ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbank Client Node . info . legal Identity , ĠO pa que Bytes . of ( 1 2 3 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandles . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( it . issue Request Result . get () Ġis ĠSigned Transaction ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbank Of C ord a Node . stop () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbank Client Node . stop () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrun Issuer And Issue Request er ( issuer Node : ĠMock Node , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġissue To Node : ĠMock Node , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġamount : ĠAmount < Currency >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparty : ĠParty , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġref : ĠO pa que Bytes ): ĠRun Result Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġissue To Party And Ref Ġ= Ġparty . ref ( ref ) ĊĠĠĠĠĠĠĠ Ġval Ġissuer Flows : ĠObservable < Issuer Flow . Issuer > Ġ= Ġissuer Node . register Initi ated Flow ( Issuer Flow . Issuer :: class . java ) ĊĠĠĠĠĠĠĠ Ġval Ġfirst Issuer Fi ber Ġ= Ġissuer Flows . to Future (). map Ġ{ Ġit . state Machine Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġissue Request Ġ= ĠIss u ance Request er ( amount , Ġparty , Ġissue To Party And Ref . reference , Ġissuer Node . info . legal Identity ) ĊĠĠĠĠĠĠĠ Ġval Ġissue Request Result Future Ġ= Ġissue To Node . services . start Flow ( issue Request ). result Future ĊĊĠĠĠĠĠĠĠ Ġreturn ĠIss uer Flow Test . Run Result ( first Issuer Fi ber , Ġissue Request Result Future ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġdata Ġclass ĠRun Result ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġissuer : ĠList enable Future < Flow StateMachine <* >>, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġissue Request Result : ĠList enable Future < Signed Transaction > ĊĠĠĠ Ġ) Ċ }