/* Ċ Ġ* ĠCopyright ĠD 3 ĠLed ger , ĠInc . ĠAll ĠRights ĠReserved . Ċ Ġ* ĠSPDX - License - Identifier : ĠApache - 2 . 0 Ċ Ġ*/ Ċ Ċ package Ġintegration . chain adapter Ċ Ċ import Ġcom . d 3 . chain adapter . CHAIN _ ADAPTER _ SERVICE _ NAME Ċ import Ġcom . d 3 . chain adapter . client . Rel iable I ro ha Chain Listener Ċ import Ġcom . d 3 . commons . util . create Pretty Single ThreadPool Ċ import Ġcom . d 3 . commons . util . getRandom String Ċ import Ġcom . github . kit tin un f . result . failure Ċ import Ġintegration . chain adapter . environment . Chain Adapter IntegrationTest Environment Ċ import Ġmu . K Logging Ċ import Ġorg . junit . Assert . assertEquals Ċ import Ġorg . junit . jupiter . api . After All Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġorg . junit . jupiter . api . Test Instance Ċ import Ġjava . util .* Ċ Ċ @ Test Instance ( Test Instance . Lifecycle . PER _ CLASS ) Ċ class ĠChain Adapter Un read IntegrationTest Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġenvironment Ġ= ĠChain Adapter IntegrationTest Environment () ĊĊĠĠĠ Ġ@ After All ĊĠĠĠ Ġfun ĠtearDown () Ġ{ ĊĠĠĠĠĠĠĠ Ġenvironment . close () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠNote : ĠI ro ha Ġmust Ġbe Ġdeployed Ġto Ġpass Ġthe Ġtest . ĊĠĠĠĠ Ġ* Ġ@ given Ġnot Ġrunning Ġchain - adapter ĊĠĠĠĠ Ġ* Ġ@ when Ġ 1 0 Ġdummy Ġtransactions Ġappear Ġin ĠI ro ha Ġblockchain Ġbefore Ġand Ġafter Ġchain - adapter Ġstart ĊĠĠĠĠ Ġ* Ġ@ then ĠRabbit MQ Ġconsumer Ġreads Ġ 2 0 Ġtransactions ĊĠĠĠĠ Ġ* Ġin Ġthe Ġsame Ġorder Ġas Ġthey Ġwere Ġpublished ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Un read Blocks W ere Published () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtransactions Before Start Ġ= Ġ 1 0 ĊĠĠĠĠĠĠĠ Ġval Ġtransactions After Start Ġ= Ġ 1 0 ĊĠĠĠĠĠĠĠ Ġvar Ġtransactions Count Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġval Ġqueue Name Ġ= ĠString . getRandom String ( 5 ) ĊĠĠĠĠĠĠĠ Ġval Ġconsumed Transactions Ġ= ĠCollections . synchronized List ( ArrayList < Long >()) ĊĠĠĠĠĠĠĠ Ġenvironment . create Adapter (). use Ġ{ Ġadapter Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRel iable I ro ha Chain Listener ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenvironment . map To RM Q Config ( adapter . chain Adapter Config ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġqueue Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Pretty Single ThreadPool ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCH AIN _ ADAPTER _ SERVICE _ NAME , Ġ" iro ha - blocks - consumer " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauto Ack Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon R mq Fail Ġ= Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). use Ġ{ Ġreliable Chain Listener Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreliable Chain Listener . getBlock Observable (). get (). subscribe Ġ{ Ġ( block , Ġ_) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblock . block V 1 . payload . transactions List . forEach Ġ{ Ġtx Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtx . payload . reduced Payload . commands List . forEach Ġ{ Ġcommand Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" Block Ġ${ block . block V 1 . payload . height } Ġwith Ġcommand Ġ$ command ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( environment . is Dummy Command ( command )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCollect Ġdummy Ġtransactions ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠKey Ġis Ġnumber Ġof Ġtransaction ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconsumed Transactions . add ( command . set Account Detail . key . to Long ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠStart Ġconsuming ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreliable Chain Listener . listen () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠBefore Ġstart ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info Ġ{ Ġ" Start Ġsend Ġdummy Ġtransactions Ġbefore Ġservice Ġstart " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat ( transactions Before Start ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenvironment . create Dummy Transaction ( test Key Ġ= Ġtransactions Count . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransactions Count ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠStart ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . init Ġ{} . failure Ġ{ Ġex Ġ-> Ġthrow Ġex Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAfter Ġstart ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info Ġ{ Ġ" Start Ġsend Ġdummy Ġtransactions Ġafter Ġservice Ġstart " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat ( transactions After Start ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenvironment . create Dummy Transaction ( test Key Ġ= Ġtransactions Count . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransactions Count ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Wait Ġa Ġlittle Ġuntil Ġconsumed ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠThread . sleep ( 2 _ 0 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info Ġ{ Ġconsumed Transactions Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransactions After Start Ġ+ Ġtransactions After Start , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconsumed Transactions . size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( consumed Transactions . sorted (), Ġconsumed Transactions ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . getLast Read Block (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . last Read Block Provider . getLast Block Height () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠLogger ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġcompanion Ġobject Ġ: ĠK Logging () Ċ } Ċ