package Ġio . nod le . substr ates dk Ċ Ċ import Ġcom . github . do y aaaa aken . kotlin csv . dsl . csv Reader Ċ import Ġio . nod le . substr ates dk . account . Wallet Ċ import Ġio . nod le . substr ates dk . rpc . Sub strate Provider Ċ import Ġio . reactivex . rx java 3 . kotlin . subscribe By Ċ import Ġjunit params . JUnit Params Runner Ċ import Ġjunit params . Parameters Ċ import Ġkotlinx . coroutines . delay Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġorg . hamcrest . Core Matchers Ċ import Ġorg . junit . Assert Ċ import Ġorg . junit . Fix Method Order Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . runner . RunWith Ċ import Ġorg . junit . runners . Method Sort ers Ċ import Ġorg . mock server . client . server . Mock Server Client Ċ Ċ /** Ċ Ġ* Ġ@ author ĠLuc ien ĠLo ise au Ġon Ġ 3 1 / 0 5 / 2 0 . Ċ Ġ*/ Ċ @ Fix Method Order ( Method Sort ers . NAME _ ASC ENDING ) Ċ @ RunWith ( JUnit Params Runner :: class ) Ċ class ĠTest Rpc Ġ{ ĊĊĠĠĠ Ġprivate Ġfun ĠgetResource As Text ( path : ĠString ): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . java Class . class Loader . getResource ( path )?. read Text () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Chain Config (): ĠArray < Any >? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconfig Ġ= ĠgetResource As Text (" rpc - test . config ") ĊĠĠĠĠĠĠĠ Ġreturn Ġconfig ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcsv Reader (). read All ( config ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . to Typed Array () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. to Typed Array () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: ĠarrayOf () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Experimental Unsigned Types ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Parameters ( method Ġ= Ġ" test Chain Config ") ĊĠĠĠ Ġfun Ġstage 0 _ test Metadata ( rpc Url : ĠString , Ġalice Mnemonic : ĠString , Ġbob Mnemonic : ĠString , Ġcar la Mnemonic : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprovider Ġ= ĠSub strate Provider ( rpc Url ) ĊĊĠĠĠĠĠĠĠ Ġval Ġmeta Ġ= Ġprovider . getMetadata (). blocking Get () ĊĠĠĠĠĠĠĠ ĠAssert . assertThat ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmeta , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCore Matchers . notNull Value () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Parameters ( method Ġ= Ġ" test Chain Config ") ĊĠĠĠ Ġfun Ġstage 0 _ test Genesis Hash ( rpc Url : ĠString , Ġalice Mnemonic : ĠString , Ġbob Mnemonic : ĠString , Ġcar la Mnemonic : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprovider Ġ= ĠSub strate Provider ( rpc Url ) ĊĠĠĠĠĠĠĠ Ġval Ġhash Ġ= Ġprovider . get Genesis Hash (). blocking Get () ĊĠĠĠĠĠĠĠ ĠAssert . assertThat ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhash , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCore Matchers . notNull Value () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Parameters ( method Ġ= Ġ" test Chain Config ") ĊĠĠĠ Ġfun Ġstage 0 _ test Spec Version ( rpc Url : ĠString , Ġalice Mnemonic : ĠString , Ġbob Mnemonic : ĠString , Ġcar la Mnemonic : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprovider Ġ= ĠSub strate Provider ( rpc Url ) ĊĠĠĠĠĠĠĠ Ġval Ġspec Version Ġ= Ġprovider . get Spec Version (). blocking Get () ĊĠĠĠĠĠĠĠ ĠAssert . assertThat ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġspec Version , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCore Matchers . notNull Value () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Parameters ( method Ġ= Ġ" test Chain Config ") ĊĠĠĠ Ġfun Ġstage 0 _ test Transaction Version ( rpc Url : ĠString , Ġalice Mnemonic : ĠString , Ġbob Mnemonic : ĠString , Ġcar la Mnemonic : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprovider Ġ= ĠSub strate Provider ( rpc Url ) ĊĠĠĠĠĠĠĠ Ġval Ġspec Version Ġ= Ġprovider . getTransaction Version (). blocking Get () ĊĠĠĠĠĠĠĠ ĠAssert . assertThat ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġspec Version , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCore Matchers . notNull Value () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Parameters ( method Ġ= Ġ" test Chain Config ") ĊĠĠĠ Ġfun Ġstage 1 _ test Balance ( rpc Url : ĠString , Ġalice Mnemonic : ĠString , Ġbob Mnemonic : ĠString , Ġcar la Mnemonic : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprovider Ġ= ĠSub strate Provider ( rpc Url ) ĊĊĠĠĠĠĠĠĠ Ġval Ġwallet 1 Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWallet ( car la Mnemonic ) ĊĠĠĠĠĠĠĠ Ġval Ġbalance 1 Ġ= Ġwallet 1 . get Account Info ( provider ). blocking Get () ĊĠĠĠĠĠĠĠ ĠAssert . assertThat ( balance 1 . data . free . to Long (), ĠCore Matchers . equalTo ( 1 0 0 0 0 0 0 0 0 0 0 0 0 )) ĊĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ Ġdelay ( 1 2 0 0 0 ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġwallet 2 Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWallet ( alice Mnemonic ) ĊĠĠĠĠĠĠĠ Ġval Ġbalance 2 Ġ= Ġwallet 2 . get Account Info ( provider ). blocking Get () ĊĠĠĠĠĠĠĠ ĠAssert . assertThat ( balance 2 . data . free . to Long (), ĠCore Matchers . notNull Value ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġwallet 3 Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWallet ( bob Mnemonic ) ĊĠĠĠĠĠĠĠ Ġval Ġbalance 3 Ġ= Ġwallet 3 . get Account Info ( provider ). blocking Get () ĊĠĠĠĠĠĠĠ ĠAssert . assertThat ( balance 3 . data . free . to Long (), ĠCore Matchers . notNull Value ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġwallet 4 Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWallet (" ch erry Ġro yal Ġin noc ent Ġna ive Ġmotor Ġalbum Ġp ride Ġh umble Ġdeliver Ġleaf Ġtrick Ġseries ") ĊĠĠĠĠĠĠĠ Ġval Ġbalance 4 Ġ= Ġwallet 4 . get Account Info ( provider ). blocking Get () ĊĠĠĠĠĠĠĠ ĠAssert . assertThat ( balance 4 . data . free . to Long (), ĠCore Matchers . equalTo ( 0 )) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Experimental Unsigned Types ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Parameters ( method Ġ= Ġ" test Chain Config ") ĊĠĠĠ Ġfun Ġstage 2 _ test Sign Tx ( rpc Url : ĠString , Ġalice Mnemonic : ĠString , Ġbob Mnemonic : ĠString , Ġcar la Mnemonic : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprovider Ġ= ĠSub strate Provider ( rpc Url ) ĊĠĠĠĠĠĠĠ Ġval Ġsrc Ġ= ĠWallet ( alice Mnemonic ) ĊĠĠĠĠĠĠĠ Ġval Ġdest Wallet Ġ= ĠWallet ( bob Mnemonic ) ĊĠĠĠĠĠĠĠ Ġval Ġtx hash Ġ= Ġsrc . sign Tx ( provider , Ġdest Wallet , Ġ 1 0 . to BigInteger ()). blocking Get () ĊĠĠĠĠĠĠĠ ĠAssert . assertThat ( tx hash , ĠCore Matchers . notNull Value ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Experimental Unsigned Types ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Parameters ( method Ġ= Ġ" test Chain Config ") ĊĠĠĠ Ġfun Ġstage 3 _ test Transfer ( rpc Url : ĠString , Ġalice Mnemonic : ĠString , Ġbob Mnemonic : ĠString , Ġcar la Mnemonic : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprovider Ġ= ĠSub strate Provider ( rpc Url ) ĊĊĠĠĠĠĠĠĠ Ġval Ġwallet 1 Ġ= ĠWallet ( alice Mnemonic ) ĊĠĠĠĠĠĠĠ Ġval Ġbalance 1 Ġ= Ġwallet 1 . get Account Info ( provider ). blocking Get (). data . free . to Long () ĊĠĠĠĠĠĠĠ ĠAssert . assertThat ( balance 1 , ĠCore Matchers . notNull Value ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġwallet 2 Ġ= ĠWallet ( bob Mnemonic ) ĊĠĠĠĠĠĠĠ Ġval Ġbalance 2 Ġ= Ġwallet 2 . get Account Info ( provider ). blocking Get (). data . free . to Long () ĊĠĠĠĠĠĠĠ ĠAssert . assertThat ( balance 2 , ĠCore Matchers . notNull Value ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġbalances rc Ġ: ĠLong ĊĠĠĠĠĠĠĠ Ġval Ġwallet src Ġ= Ġif Ġ( balance 1 Ġ< Ġbalance 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbalances rc Ġ= Ġbalance 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwallet 2 ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbalances rc Ġ= Ġbalance 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwallet 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġbal anced st Ġ: ĠLong ĊĠĠĠĠĠĠĠ Ġval Ġw alle td st Ġ= Ġif Ġ( balance 1 Ġ< Ġbalance 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbal anced st Ġ= Ġbalance 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwallet 1 ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbal anced st Ġ= Ġbalance 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwallet 2 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġestimate Ġfee ĊĠĠĠĠĠĠĠ Ġval Ġtx 1 Ġ= Ġwallet src . sign Tx ( provider , Ġw alle td st , Ġ 1 0 0 0 0 0 0 . to BigInteger ()). blocking Get () ĊĠĠĠĠĠĠĠ Ġval Ġfee 1 Ġ= Ġtx 1 . estimate Fee ( provider ). blocking Get () ĊĊĠĠĠĠĠĠĠ Ġ// Ġsend Ġfund ĊĠĠĠĠĠĠĠ Ġval Ġtx hash 1 Ġ= Ġwallet src . sign And Send ( provider , Ġw alle td st , Ġ 1 0 0 0 0 0 0 . to BigInteger ()). blocking Get () ĊĠĠĠĠĠĠĠ ĠAssert . assertThat ( tx hash 1 , ĠCore Matchers . notNull Value ()) ĊĊĠĠĠĠĠĠĠ Ġ// Ġwait Ġfor Ġtransaction Ġto Ġbe Ġvalidated ĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( 1 5 0 0 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġcheck Ġthat Ġbalance Ġas Ġchanged Ġand Ġamount Ġis Ġco herent ĊĠĠĠĠĠĠĠ Ġval Ġbalance Src After Ġ= Ġwallet src . get Account Info ( provider ). blocking Get (). data . free . to Long () ĊĠĠĠĠĠĠĠ ĠAssert . assertThat ( balance Src After Ġ< Ġbalances rc , Ġ ĠCore Matchers . equalTo ( true )) ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= Ġ( fee 1 . to Long () Ġ+ Ġ 1 0 0 0 0 0 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġactual Ġ= Ġ( balances rc Ġ- Ġbalance Src After ) ĊĠĠĠĠĠĠĠ Ġval Ġdiff Ġ= Ġexpected Ġ- Ġactual ĊĠĠĠĠĠĠĠ Ġval Ġratio Ġ= Ġdiff * 1 0 0 / expected ĊĊĠĠĠĠĠĠĠ Ġ// Ġwe Ġshouldn 't Ġexpect Ġmore Ġthan Ġa Ġ 1 0 % Ġs lip Ġfrom Ġexpected Ġprice ĊĠĠĠĠĠĠĠ ĠAssert . assertThat ( ratio Ġ< Ġ 1 0 , ĠCore Matchers . equalTo ( true )) ĊĊĊĠĠĠĠĠĠĠ Ġval Ġbalance Dst After Ġ= Ġw alle td st . get Account Info ( provider ). blocking Get (). data . free . to Long () ĊĠĠĠĠĠĠĠ ĠAssert . assertThat ( balance Dst After Ġ> Ġbal anced st , ĠCore Matchers . equalTo ( true )) ĊĊĠĠĠĠĠĠĠ Ġ// Ġdestination Ġshould Ġreceive Ġexactly Ġwhat 's Ġexpected ĊĠĠĠĠĠĠĠ ĠAssert . assertThat ( balance Dst After Ġ- Ġbal anced st , ĠCore Matchers . equalTo ( 1 0 0 0 0 0 0 )) ĊĊĠĠĠĠĠĠĠ Ġ/* Ġtodo : Ġmort al Ġera Ġdoes Ġnot Ġwork ! ĊĠĠĠĠĠĠĠ Ġval Ġtx hash 2 Ġ= Ġwallet src . sign And Send ( provider , Ġw alle td st , Ġ 1 0 . to BigInteger (), ĠM ort al E ra ( 6 4 , 3 8 )). blocking Get () ĊĠĠĠĠĠĠĠ ĠAssert . assertThat ( tx hash 2 , ĠCore Matchers . notNull Value ()) ĊĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Experimental Unsigned Types ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Parameters ( method Ġ= Ġ" test Chain Config ") ĊĠĠĠ Ġfun Ġstage 4 _ test Estimate Fee ( rpc Url : ĠString , Ġalice Mnemonic : ĠString , Ġbob Mnemonic : ĠString , Ġcar la Mnemonic : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprovider Ġ= ĠSub strate Provider ( rpc Url ) ĊĠĠĠĠĠĠĠ Ġval Ġsrc Ġ= ĠWallet ( alice Mnemonic ) ĊĠĠĠĠĠĠĠ Ġval Ġdest Wallet Ġ= ĠWallet ( bob Mnemonic ) ĊĊĠĠĠĠĠĠĠ Ġval Ġtx 1 Ġ= Ġsrc . sign Tx ( provider , Ġdest Wallet , Ġ 1 0 0 0 0 0 0 . to BigInteger ()). blocking Get () ĊĠĠĠĠĠĠĠ Ġval Ġfee 1 Ġ= Ġtx 1 . estimate Fee ( provider ). blocking Get () ĊĠĠĠĠĠĠĠ ĠAssert . assertThat ( fee 1 , ĠCore Matchers . not ( 0 . to BigInteger ())) ĊĊĠĠĠĠĠĠĠ Ġval Ġtx 2 Ġ= Ġsrc . sign Tx ( provider , Ġdest Wallet , Ġ 1 0 0 0 0 0 0 0 0 . to BigInteger ()). blocking Get () ĊĠĠĠĠĠĠĠ Ġval Ġfee 2 Ġ= Ġtx 2 . estimate Fee ( provider ). blocking Get () ĊĠĠĠĠĠĠĠ ĠAssert . assertThat ( fee 2 , ĠCore Matchers . not ( 0 . to BigInteger ())) ĊĊĠĠĠĠĠĠĠ Ġval Ġtx 3 Ġ= Ġsrc . sign Tx ( provider , Ġdest Wallet , Ġ 1 0 0 0 0 0 0 0 0 0 . to BigInteger ()). blocking Get () ĊĠĠĠĠĠĠĠ Ġval Ġfee 3 Ġ= Ġtx 3 . estimate Fee ( provider ). blocking Get () ĊĠĠĠĠĠĠĠ ĠAssert . assertThat ( fee 3 , ĠCore Matchers . not ( 0 . to BigInteger ())) ĊĊĠĠĠĠĠĠĠ Ġval Ġtx 4 Ġ= Ġsrc . sign Tx ( provider , Ġdest Wallet , Ġ 1 0 0 0 0 0 0 0 0 0 0 0 0 . to BigInteger ()). blocking Get () ĊĠĠĠĠĠĠĠ Ġval Ġfee 4 Ġ= Ġtx 4 . estimate Fee ( provider ). blocking Get () ĊĠĠĠĠĠĠĠ ĠAssert . assertThat ( fee 4 , ĠCore Matchers . not ( 0 . to BigInteger ())) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġstage 5 _ test Url Cannot Connect () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrpc Url Ġ= Ġ" wss :// This Sub strate Url DoesNotExist . com " ĊĠĠĠĠĠĠĠ Ġval Ġprovider Ġ= ĠSub strate Provider ( rpc Url ) ĊĊĠĠĠĠĠĠĠ Ġprovider . getMetadata () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe By ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonError Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonSuccess Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . fail () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġvar Ġmock Server : ĠMock Server Client Ġ= ĠMock Server Client (" localhost ", Ġ 5 5 6 8 ) ĊĠĠĠĠĠĠĠ Ġval Ġurl Ġ= Ġ" http :// localhost : 5 5 6 8 " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġstage 5 _ test Url Cannot WebSocket () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrpc Url Ġ= Ġ" ws :// google . com /" ĊĠĠĠĠĠĠĠ Ġval Ġprovider Ġ= ĠSub strate Provider ( rpc Url ) ĊĊĠĠĠĠĠĠĠ Ġprovider . getMetadata () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe By ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonError Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonSuccess Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . fail () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} Ċ }