package Ġnet . cord a . irs Ċ Ċ import Ġcom . google . common . net . Host And Port Ċ import Ġcom . google . common . util . concurrent . F utures Ċ import Ġnet . cord a . client . rpc . C ord a RPC Client Ċ import Ġnet . cord a . core . crypto . Party Ċ import Ġnet . cord a . core . get OrThrow Ċ import Ġnet . cord a . core . node . services . Service Info Ċ import Ġnet . cord a . irs . api . Node Interest Rates Ċ import Ġnet . cord a . irs . contract . Interest Rate Swap Ċ import Ġnet . cord a . irs . utilities . post Json Ċ import Ġnet . cord a . irs . utilities . put Json Ċ import Ġnet . cord a . irs . utilities . upload File Ċ import Ġnet . cord a . node . driver . driver Ċ import Ġnet . cord a . node . services . config . Full Node Configuration Ċ import Ġnet . cord a . node . services . transactions . Simple Not ary Service Ċ import Ġnet . cord a . node api . User Ċ import Ġnet . cord a . testing . Integration TestCategory Ċ import Ġorg . apache . commons . io . IO Utils Ċ import Ġorg . junit . Test Ċ import Ġrx . observable s . Blocking Observable Ċ import Ġjava . net . URL Ċ import Ġjava . time . LocalDate Ċ Ċ class ĠIR SD emo Test Ġ: ĠIntegration TestCategory Ġ{ ĊĠĠĠ Ġval Ġrpc User Ġ= ĠUser (" user ", Ġ" password ", Ġempty Set ()) ĊĠĠĠ Ġval Ġcurrent Date Ġ= ĠLocalDate . now () ĊĠĠĠ Ġval Ġfuture Date Ġ= Ġcurrent Date . plus Months ( 6 ) ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` runs ĠI RS Ġdemo `() Ġ{ ĊĠĠĠĠĠĠĠ Ġdriver ( use Test Clock Ġ= Ġtrue , Ġis Debug Ġ= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( controller , Ġnode A , Ġnode B ) Ġ= ĠF utures . all As List ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Node (" Not ary ", Ġset Of ( Service Info ( Simple Not ary Service . type ), ĠService Info ( Node Interest Rates . type ))), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Node (" Bank ĠA ", Ġrpc Users Ġ= ĠlistOf ( rpc User )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Node (" Bank ĠB ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). get OrThrow () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( controller Addr , Ġnode A Addr , Ġnode B Addr ) Ġ= ĠF utures . all As List ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Web server ( controller ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Web server ( node A ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Web server ( node B ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). get OrThrow () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnext Fix ing Dates Ġ= Ġget Fix ing Date Observable ( node A . configuration ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Upload Rates ( controller Addr ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Trade ( node A Addr , Ġnode A . node Info . legal Identity , Ġnode B . node Info . legal Identity ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWait Ġuntil Ġthe Ġinitial Ġtrade Ġand Ġall Ġscheduled Ġfix ings Ġup Ġto Ġthe Ġcurrent Ġdate Ġhave Ġfinished ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnext Fix ing Dates . first Ġ{ Ġit Ġ== Ġnull Ġ|| Ġit Ġ> Ġcurrent Date Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Date Change ( node B Addr ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnext Fix ing Dates . first Ġ{ Ġit Ġ== Ġnull Ġ|| Ġit Ġ> Ġfuture Date Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Fix ing Date Observable ( config : ĠFull Node Configuration ): ĠBlock ing Observable < LocalDate ?> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġclient Ġ= ĠC ord a RPC Client ( config . rpc Address !! ) ĊĠĠĠĠĠĠĠ Ġclient . start (" user ", Ġ" password ") ĊĠĠĠĠĠĠĠ Ġval Ġproxy Ġ= Ġclient . proxy () ĊĠĠĠĠĠĠĠ Ġval Ġvault Updates Ġ= Ġproxy . vault And Updates (). second ĊĊĠĠĠĠĠĠĠ Ġval Ġfixing Dates Ġ= Ġvault Updates . map Ġ{ Ġupdate Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġir s States Ġ= Ġupdate . pro duced . map Ġ{ Ġit . state . data Ġ}. filter Is Instance < Interest Rate Swap . State <* >>() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġir s States . map NotNull Ġ{ Ġit . calculation . next Fix ing Date () Ġ}. max () ĊĠĠĠĠĠĠĠ Ġ}. cache (). to Blocking () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġfixing Dates ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrun Date Change ( node Addr : ĠHost And Port ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġurl Ġ= ĠURL (" http :// $ node Addr / api / irs / de mod ate ") ĊĠĠĠĠĠĠĠ Ġassert ( put Json ( url , Ġ"\" $ future Date \"" )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrun Trade ( node Addr : ĠHost And Port , Ġfixed Rate Pay er : ĠParty , Ġfloating Rate Pay er : ĠParty ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfile Contents Ġ= ĠIO Utils . toString ( Thread . currentThread (). context ClassLoader . getResource AsStream (" example - irs - trade . json "), ĠChar sets . UTF _ 8 . name ()) ĊĠĠĠĠĠĠĠ Ġval Ġtrade File Ġ= Ġfile Contents . replace (" trade XXX ", Ġ" trade 1 ") ĊĠĠĠĠĠĠĠ Ġval Ġurl Ġ= ĠURL (" http :// $ node Addr / api / irs / de als ") ĊĠĠĠĠĠĠĠ Ġassert ( post Json ( url , Ġtrade File )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrun Upload Rates ( host : ĠHost And Port ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfile Contents Ġ= ĠIO Utils . toString ( Thread . currentThread (). context ClassLoader . getResource AsStream (" example . rates . txt "), ĠChar sets . UTF _ 8 . name ()) ĊĠĠĠĠĠĠĠ Ġval Ġurl Ġ= ĠURL (" http :// $ host / upload / interest - rates ") ĊĠĠĠĠĠĠĠ Ġassert ( upload File ( url , Ġfile Contents )) ĊĠĠĠ Ġ} Ċ } Ċ