From ab0df1e7c16d2c47ec389c1bca30dfee389ec3f4 Mon Sep 17 00:00:00 2001 From: David Fuelling Date: Thu, 6 Mar 2025 16:03:35 -0700 Subject: [PATCH 1/5] Fix logging functionality in abstract IT --- .../org/xrpl/xrpl4j/tests/AbstractIT.java | 62 +++++++++++-------- .../xrpl4j/tests/SubmitMultisignedIT.java | 15 +---- .../java/org/xrpl/xrpl4j/tests/TicketIT.java | 12 +--- .../xrpl4j/tests/TransactionWithMemoIT.java | 12 +--- .../tests/environment/DevnetEnvironment.java | 6 ++ .../tests/environment/MainnetEnvironment.java | 7 +++ .../tests/environment/TestnetEnvironment.java | 7 +++ .../tests/environment/XrplEnvironment.java | 11 ++++ 8 files changed, 74 insertions(+), 58 deletions(-) diff --git a/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/AbstractIT.java b/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/AbstractIT.java index 73a4e4829..3c36b61bd 100644 --- a/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/AbstractIT.java +++ b/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/AbstractIT.java @@ -65,6 +65,7 @@ import org.xrpl.xrpl4j.model.client.ledger.LedgerResult; import org.xrpl.xrpl4j.model.client.path.RipplePathFindRequestParams; import org.xrpl.xrpl4j.model.client.path.RipplePathFindResult; +import org.xrpl.xrpl4j.model.client.transactions.SubmitMultiSignedResult; import org.xrpl.xrpl4j.model.client.transactions.SubmitResult; import org.xrpl.xrpl4j.model.client.transactions.TransactionRequestParams; import org.xrpl.xrpl4j.model.client.transactions.TransactionResult; @@ -120,18 +121,6 @@ protected AbstractIT() { this.derivedKeySignatureService = this.constructDerivedKeySignatureService(); } - /** - * Helper function to print log statements for Integration Tests which is network specific. - * - * @param transactionType {@link TransactionType} to be logged for the executed transaction. - * @param hash {@link Hash256} to be logged for the executed transaction. - */ - protected void logInfo(TransactionType transactionType, Hash256 hash) { - String url = System.getProperty("useTestnet") != null ? "https://testnet.xrpl.org/transactions/" : - (System.getProperty("useDevnet") != null ? "https://devnet.xrpl.org/transactions/" : ""); - logger.info("{} transaction successful: {}{}", transactionType.value(), url, hash); - } - protected KeyPair createRandomAccountEd25519() { // Create the account final KeyPair randomKeyPair = Seed.ed25519Seed().deriveKeyPair(); @@ -483,11 +472,7 @@ public TrustLine createTrustLine( ); SubmitResult trustSetSubmitResult = xrplClient.submit(signedTrustSet); assertThat(trustSetSubmitResult.engineResult()).isEqualTo(TransactionResultCodes.TES_SUCCESS); - - logInfo( - trustSetSubmitResult.transactionResult().transaction().transactionType(), - trustSetSubmitResult.transactionResult().hash() - ); + logSubmitResult(trustSetSubmitResult); return scanForResult( () -> getValidatedAccountLines(trustlineLimitAmount.issuer(), counterpartyAddress), @@ -575,6 +560,7 @@ public void sendIssuedCurrency( ); SubmitResult paymentResult = xrplClient.submit(signedPayment); assertThat(paymentResult.transactionResult().hash()).isEqualTo(signedPayment.hash()); + logSubmitResult(paymentResult); paymentEngineResult = paymentResult.engineResult(); if (!paymentResult.engineResult().equals(expectedEngineResult)) { @@ -592,11 +578,6 @@ public void sendIssuedCurrency( continue; // <-- Try again, up to the loop guard above. } - logInfo( - paymentResult.transactionResult().transaction().transactionType(), - paymentResult.transactionResult().hash() - ); - this.scanForResult( () -> getValidatedTransaction( paymentResult.transactionResult().hash(), @@ -714,10 +695,10 @@ private KeyStore loadKeyStore() { protected Instant getMinExpirationTime() { LedgerResult result = getValidatedLedger(); Instant closeTime = xrpTimestampToInstant( - result.ledger().closeTime() - .orElseThrow(() -> - new RuntimeException("Ledger close time must be present to calculate a minimum expiration time.") - ) + result.ledger().closeTime() + .orElseThrow(() -> + new RuntimeException("Ledger close time must be present to calculate a minimum expiration time.") + ) ); Instant now = Instant.now(); @@ -727,4 +708,33 @@ protected Instant getMinExpirationTime() { private void logAccountCreation(Address address) { logger.info("Generated wallet with ClassicAddress={})", address); } + + protected void logSubmitResult(final SubmitResult submitResult) { + final Class transactionClass = submitResult.transactionResult().transaction().getClass(); + final String hash = submitResult.transactionResult().hash().value(); + this.logSubmitResult(transactionClass, submitResult.status().orElse("n/a"), hash); + } + + protected void logSubmitResult(final SubmitMultiSignedResult submitResult) { + final Class transactionClass = submitResult.transaction().transaction().getClass(); + final String hash = submitResult.transaction().hash().value(); + this.logSubmitResult(transactionClass, submitResult.status().orElse("n/a"), hash); + } + + private void logSubmitResult( + final Class transactionClass, + final String status, + final String hash + ) { + Objects.requireNonNull(transactionClass); + Objects.requireNonNull(hash); + + final String loggingOutput = xrplEnvironment.explorerUrl() + .map(explorerUrl -> String.format("%s/transactions/%s", explorerUrl, hash)) + .orElseGet(() -> "Hash=" + hash); + + logger.info("{} transaction {}: {}", + transactionClass.getSimpleName(), status, loggingOutput + ); + } } diff --git a/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/SubmitMultisignedIT.java b/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/SubmitMultisignedIT.java index c7413e8a5..913eb9ef7 100644 --- a/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/SubmitMultisignedIT.java +++ b/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/SubmitMultisignedIT.java @@ -112,10 +112,7 @@ public void setUp() throws JsonRpcClientErrorException, JsonProcessingException signerListSetResult = xrplClient.submit(signedSignerListSet); assertThat(signerListSetResult.engineResult()).isEqualTo(TransactionResultCodes.TES_SUCCESS); assertThat(signedSignerListSet.hash()).isEqualTo(signerListSetResult.transactionResult().hash()); - logInfo( - signerListSetResult.transactionResult().transaction().transactionType(), - signerListSetResult.transactionResult().hash() - ); + logSubmitResult(signerListSetResult); ///////////////////////////// // Then wait until the transaction enters a validated ledger and the source account's signer list @@ -171,10 +168,7 @@ public void submitMultisignedAndVerifyHash() throws JsonRpcClientErrorException, SubmitMultiSignedResult submitMultiSignedResult = xrplClient.submitMultisigned(signedTransaction); assertThat(submitMultiSignedResult.transaction().hash().value()).isEqualTo(libraryCalculatedHash); assertThat(submitMultiSignedResult.engineResult()).isEqualTo(TransactionResultCodes.TES_SUCCESS); - logInfo( - submitMultiSignedResult.transaction().transaction().transactionType(), - submitMultiSignedResult.transaction().hash() - ); + logSubmitResult(submitMultiSignedResult); } @Test @@ -213,10 +207,7 @@ public void submitMultisignedWithSignersInDescOrderAndVerifyHash() throws JsonRp SubmitMultiSignedResult submitMultiSignedResult = xrplClient.submitMultisigned(signedTransaction); assertThat(submitMultiSignedResult.transaction().hash().value()).isEqualTo(libraryCalculatedHash); assertThat(submitMultiSignedResult.engineResult()).isEqualTo(TransactionResultCodes.TES_SUCCESS); - logInfo( - submitMultiSignedResult.transaction().transaction().transactionType(), - submitMultiSignedResult.transaction().hash() - ); + logSubmitResult(submitMultiSignedResult); } } diff --git a/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/TicketIT.java b/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/TicketIT.java index f156c841c..1df6f42c6 100644 --- a/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/TicketIT.java +++ b/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/TicketIT.java @@ -74,11 +74,7 @@ void createTicketAndUseSequenceNumber() throws JsonRpcClientErrorException, Json ); SubmitResult submitResult = xrplClient.submit(signedCreate); assertThat(submitResult.engineResult()).isEqualTo(SUCCESS_STATUS); - - logInfo( - submitResult.transactionResult().transaction().transactionType(), - submitResult.transactionResult().hash() - ); + logSubmitResult(submitResult); Hash256 ticketId = this.scanForResult( () -> this.getValidatedTransaction( @@ -130,10 +126,6 @@ void createTicketAndUseSequenceNumber() throws JsonRpcClientErrorException, Json ); SubmitResult accountSetResult = xrplClient.submit(signedAccountSet); assertThat(accountSetResult.engineResult()).isEqualTo(SUCCESS_STATUS); - - logInfo( - accountSetResult.transactionResult().transaction().transactionType(), - accountSetResult.transactionResult().hash() - ); + logSubmitResult(accountSetResult); } } diff --git a/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/TransactionWithMemoIT.java b/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/TransactionWithMemoIT.java index e039b77e5..21e8d98fa 100644 --- a/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/TransactionWithMemoIT.java +++ b/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/TransactionWithMemoIT.java @@ -70,11 +70,7 @@ public void transactionWithMemoNibble() throws JsonRpcClientErrorException, Json SubmitResult result = xrplClient.submit(signedTransaction); assertThat(result.engineResult()).isEqualTo(SUCCESS_STATUS); assertThat(signedTransaction.hash()).isEqualTo(result.transactionResult().hash()); - - logInfo( - result.transactionResult().transaction().transactionType(), - result.transactionResult().hash() - ); + logSubmitResult(result); TransactionResult validatedPayment = this.scanForResult( () -> this.getValidatedTransaction( @@ -117,11 +113,7 @@ public void transactionWithPlaintextMemo() throws JsonRpcClientErrorException, J assertThat(result.engineResult()).isEqualTo(SUCCESS_STATUS); assertThat(signedTransaction.hash()).isEqualTo(result.transactionResult().hash()); - - logInfo( - result.transactionResult().transaction().transactionType(), - result.transactionResult().hash() - ); + logSubmitResult(result); TransactionResult validatedPayment = this.scanForResult( () -> this.getValidatedTransaction( diff --git a/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/environment/DevnetEnvironment.java b/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/environment/DevnetEnvironment.java index 13e5686dc..acb94cd6f 100644 --- a/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/environment/DevnetEnvironment.java +++ b/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/environment/DevnetEnvironment.java @@ -26,6 +26,8 @@ import org.xrpl.xrpl4j.client.faucet.FundAccountRequest; import org.xrpl.xrpl4j.model.transactions.Address; +import java.util.Optional; + /** * XRPL devnet environment. */ @@ -46,4 +48,8 @@ public void fundAccount(Address classicAddress) { faucetClient.fundAccount(FundAccountRequest.of(classicAddress)); } + @Override + public Optional explorerUrl() { + return Optional.of("https://devnet.xrpl.org"); + } } diff --git a/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/environment/MainnetEnvironment.java b/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/environment/MainnetEnvironment.java index 06732df42..2e8a912d9 100644 --- a/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/environment/MainnetEnvironment.java +++ b/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/environment/MainnetEnvironment.java @@ -23,6 +23,8 @@ import org.xrpl.xrpl4j.client.XrplClient; import org.xrpl.xrpl4j.model.transactions.Address; +import java.util.Optional; + /** * Abstract class representing integration test environment that uses Mainnet as its XRPL network. */ @@ -36,4 +38,9 @@ public void fundAccount(Address classicAddress) { throw new UnsupportedOperationException("funding not supported on mainnet"); } + @Override + public Optional explorerUrl() { + return Optional.of("https://livenet.xrpl.org"); + } + } diff --git a/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/environment/TestnetEnvironment.java b/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/environment/TestnetEnvironment.java index 6c8a506d9..2d2454c1b 100644 --- a/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/environment/TestnetEnvironment.java +++ b/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/environment/TestnetEnvironment.java @@ -26,6 +26,8 @@ import org.xrpl.xrpl4j.client.faucet.FundAccountRequest; import org.xrpl.xrpl4j.model.transactions.Address; +import java.util.Optional; + /** * XRPL testnet environment. */ @@ -42,4 +44,9 @@ public void fundAccount(Address classicAddress) { faucetClient.fundAccount(FundAccountRequest.of(classicAddress)); } + @Override + public Optional explorerUrl() { + return Optional.of("https://testnet.xrpl.org"); + } + } diff --git a/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/environment/XrplEnvironment.java b/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/environment/XrplEnvironment.java index e65e74e3d..6262cf66a 100644 --- a/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/environment/XrplEnvironment.java +++ b/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/environment/XrplEnvironment.java @@ -26,6 +26,7 @@ import org.xrpl.xrpl4j.model.transactions.Address; import java.time.Duration; +import java.util.Optional; /** * Abstraction for the XRP Ledger environment that the integration tests talk to. Provides access to resources need to @@ -118,4 +119,14 @@ static MainnetEnvironment getConfiguredMainnetEnvironment() { */ void stopLedgerAcceptor(); + /** + * An optionally present URL for this environment's explorer. Note this value is optional for environments that have + * no explorer configured, such as a local rippled in a docker container. + * + * @return An optionally-present {@link String} containing the root URL to a ledger explorer that can be used to + * lookup transaction information in a browser. + */ + default Optional explorerUrl() { + return Optional.empty(); + } } From 642a194b66b66ff90e7cfc3e2dade53c95833d52 Mon Sep 17 00:00:00 2001 From: David Fuelling Date: Thu, 6 Mar 2025 16:04:02 -0700 Subject: [PATCH 2/5] Fix logging functionality --- .../java/org/xrpl/xrpl4j/tests/AbstractIT.java | 17 +++++++++++------ .../org/xrpl/xrpl4j/tests/SubmitPaymentIT.java | 8 ++++---- ...ansactUsingDerivedKeySignatureServiceIT.java | 4 ++-- .../tests/TransactUsingSignatureServiceIT.java | 4 ++-- .../environment/LocalRippledEnvironment.java | 5 +++-- 5 files changed, 22 insertions(+), 16 deletions(-) diff --git a/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/AbstractIT.java b/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/AbstractIT.java index 3c36b61bd..7fa162dd9 100644 --- a/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/AbstractIT.java +++ b/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/AbstractIT.java @@ -729,12 +729,17 @@ private void logSubmitResult( Objects.requireNonNull(transactionClass); Objects.requireNonNull(hash); - final String loggingOutput = xrplEnvironment.explorerUrl() - .map(explorerUrl -> String.format("%s/transactions/%s", explorerUrl, hash)) - .orElseGet(() -> "Hash=" + hash); + final String transactionClassSimpleName = transactionClass.getSimpleName().startsWith("Immutable") ? + transactionClass.getSimpleName().substring("Immutable".length()) : transactionClass.getSimpleName(); - logger.info("{} transaction {}: {}", - transactionClass.getSimpleName(), status, loggingOutput - ); + final String loggingOutput = xrplEnvironment.explorerUrl() + .map(explorerUrl -> { + final String transactionExplorerUrl = String.format("%s/transactions/%s", explorerUrl, hash); + return String.format("%s transaction(status=%s): %s", transactionClassSimpleName, status, + transactionExplorerUrl); + }) + .orElseGet(() -> String.format("%s transaction(status=%s): hash=%s", transactionClassSimpleName, status, hash)); + + logger.info(loggingOutput); } } diff --git a/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/SubmitPaymentIT.java b/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/SubmitPaymentIT.java index 893e54dae..37c177e87 100644 --- a/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/SubmitPaymentIT.java +++ b/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/SubmitPaymentIT.java @@ -9,9 +9,9 @@ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -71,7 +71,7 @@ public void sendPayment() throws JsonRpcClientErrorException, JsonProcessingExce SingleSignedTransaction signedPayment = signatureService.sign(sourceKeyPair.privateKey(), payment); SubmitResult result = xrplClient.submit(signedPayment); assertThat(result.engineResult()).isEqualTo(SUCCESS_STATUS); - logger.info("Payment successful: https://testnet.xrpl.org/transactions/{}", result.transactionResult().hash()); + logSubmitResult(result); TransactionResult validatedPayment = this.scanForResult( () -> this.getValidatedTransaction(result.transactionResult().hash(), Payment.class) @@ -107,7 +107,7 @@ public void sendPaymentFromSecp256k1KeyPair() throws JsonRpcClientErrorException SingleSignedTransaction signedPayment = signatureService.sign(senderKeyPair.privateKey(), payment); SubmitResult result = xrplClient.submit(signedPayment); assertThat(result.engineResult()).isEqualTo("tesSUCCESS"); - logger.info("Payment successful: https://testnet.xrpl.org/transactions/{}", result.transactionResult().hash()); + logSubmitResult(result); this.scanForResult(() -> this.getValidatedTransaction(result.transactionResult().hash(), Payment.class)); } diff --git a/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/TransactUsingDerivedKeySignatureServiceIT.java b/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/TransactUsingDerivedKeySignatureServiceIT.java index 5f63b57d6..87202bb43 100644 --- a/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/TransactUsingDerivedKeySignatureServiceIT.java +++ b/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/TransactUsingDerivedKeySignatureServiceIT.java @@ -96,7 +96,7 @@ public void sendPaymentFromEd25519Account() throws JsonRpcClientErrorException, payment); SubmitResult result = xrplClient.submit(signedTransaction); assertThat(result.engineResult()).isEqualTo("tesSUCCESS"); - logger.info("Payment successful: https://testnet.xrpl.org/transactions/{}", result.transactionResult().hash()); + logSubmitResult(result); this.scanForResult(() -> this.getValidatedTransaction(result.transactionResult().hash(), Payment.class)); } @@ -138,7 +138,7 @@ public void sendPaymentFromSecp256k1Account() throws JsonRpcClientErrorException = derivedKeySignatureService.sign(sourceKeyMetadata, payment); SubmitResult result = xrplClient.submit(transactionWithSignature); assertThat(result.engineResult()).isEqualTo("tesSUCCESS"); - logger.info("Payment successful: https://testnet.xrpl.org/transactions/" + result.transactionResult().hash()); + logSubmitResult(result); this.scanForResult(() -> this.getValidatedTransaction(result.transactionResult().hash(), Payment.class)); } diff --git a/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/TransactUsingSignatureServiceIT.java b/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/TransactUsingSignatureServiceIT.java index 14af54e09..f03c059af 100644 --- a/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/TransactUsingSignatureServiceIT.java +++ b/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/TransactUsingSignatureServiceIT.java @@ -83,7 +83,7 @@ public void sendPaymentFromEd25519Wallet() throws JsonRpcClientErrorException, J SingleSignedTransaction signedTransaction = signatureService.sign(sourcePrivateKey, payment); SubmitResult result = xrplClient.submit(signedTransaction); assertThat(result.engineResult()).isEqualTo("tesSUCCESS"); - logger.info("Payment successful: https://testnet.xrpl.org/transactions/{}", result.transactionResult().hash()); + logSubmitResult(result); this.scanForResult(() -> this.getValidatedTransaction(result.transactionResult().hash(), Payment.class)); } @@ -115,7 +115,7 @@ public void sendPaymentFromSecp256k1Wallet() throws JsonRpcClientErrorException, SingleSignedTransaction transactionWithSignature = signatureService.sign(sourcePrivateKey, payment); SubmitResult result = xrplClient.submit(transactionWithSignature); assertThat(result.engineResult()).isEqualTo("tesSUCCESS"); - logger.info("Payment successful: https://testnet.xrpl.org/transactions/" + result.transactionResult().hash()); + logSubmitResult(result); this.scanForResult(() -> this.getValidatedTransaction(result.transactionResult().hash(), Payment.class)); } diff --git a/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/environment/LocalRippledEnvironment.java b/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/environment/LocalRippledEnvironment.java index 2c9e6f831..1e8c7c4e8 100644 --- a/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/environment/LocalRippledEnvironment.java +++ b/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/environment/LocalRippledEnvironment.java @@ -101,8 +101,9 @@ protected void sendPayment(KeyPair sourceKeyPair, Address destinationAddress, Xr SingleSignedTransaction signedPayment = signatureService.sign(sourceKeyPair.privateKey(), payment); SubmitResult result = getXrplClient().submit(signedPayment); assertThat(result.engineResult()).isEqualTo(TransactionResultCodes.TES_SUCCESS); - LOGGER.info("Payment successful: " + rippledContainer.getBaseUri().toString() + - result.transactionResult().transaction()); + LOGGER.info( + "Payment successful ({}): {}", rippledContainer.getBaseUri().toString(), result.transactionResult().transaction() + ); } /** From b6f2bea157a31b53f83ba9d71b14107a0a31e6f1 Mon Sep 17 00:00:00 2001 From: David Fuelling Date: Thu, 6 Mar 2025 16:31:09 -0700 Subject: [PATCH 3/5] Fix tests hard-coded to testnet environment --- .../org/xrpl/xrpl4j/tests/AbstractIT.java | 54 ++++++++++++++++--- .../org/xrpl/xrpl4j/tests/AccountSetIT.java | 41 ++++---------- .../java/org/xrpl/xrpl4j/tests/AmmIT.java | 5 +- .../java/org/xrpl/xrpl4j/tests/CheckIT.java | 30 +++-------- .../xrpl/xrpl4j/tests/DepositPreAuthIT.java | 10 +--- .../java/org/xrpl/xrpl4j/tests/EscrowIT.java | 40 +++----------- .../xrpl4j/tests/FreezeIssuedCurrencyIT.java | 15 ++---- .../xrpl/xrpl4j/tests/IssuedCurrencyIT.java | 15 ++---- .../java/org/xrpl/xrpl4j/tests/NfTokenIT.java | 5 +- .../java/org/xrpl/xrpl4j/tests/OfferIT.java | 21 ++------ .../xrpl/xrpl4j/tests/PaymentChannelIT.java | 35 +++--------- .../xrpl/xrpl4j/tests/SetRegularKeyIT.java | 15 ++---- .../xrpl/xrpl4j/tests/SignerListSetIT.java | 20 ++----- ...sactUsingDerivedKeySignatureServiceIT.java | 10 +--- .../TransactUsingSignatureServiceIT.java | 10 +--- 15 files changed, 101 insertions(+), 225 deletions(-) diff --git a/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/AbstractIT.java b/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/AbstractIT.java index 7fa162dd9..9ade62f18 100644 --- a/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/AbstractIT.java +++ b/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/AbstractIT.java @@ -709,22 +709,52 @@ private void logAccountCreation(Address address) { logger.info("Generated wallet with ClassicAddress={})", address); } + /** + * Logs a {@link SubmitResult}, accounting for the current test environment. + * + * @param submitResult An instance of {@link SubmitResult}. + */ protected void logSubmitResult(final SubmitResult submitResult) { + this.logSubmitResult(submitResult, ""); + } + + /** + * Logs a {@link SubmitResult}, accounting for the current test environment. + * + * @param submitResult An instance of {@link SubmitResult}. + * @param extraMessage Extra messaging that the test author supplies. + */ + protected void logSubmitResult(final SubmitResult submitResult, final String extraMessage) { final Class transactionClass = submitResult.transactionResult().transaction().getClass(); final String hash = submitResult.transactionResult().hash().value(); - this.logSubmitResult(transactionClass, submitResult.status().orElse("n/a"), hash); + this.logSubmitResult(transactionClass, submitResult.status().orElse("n/a"), hash, extraMessage); } - protected void logSubmitResult(final SubmitMultiSignedResult submitResult) { - final Class transactionClass = submitResult.transaction().transaction().getClass(); - final String hash = submitResult.transaction().hash().value(); - this.logSubmitResult(transactionClass, submitResult.status().orElse("n/a"), hash); + /** + * Logs a {@link SubmitResult}, accounting for the current test environment. + * + * @param submitMultiSignedResult An instance of {@link SubmitMultiSignedResult}. + */ + protected void logSubmitResult(final SubmitMultiSignedResult submitMultiSignedResult) { + final Class transactionClass + = submitMultiSignedResult.transaction().transaction().getClass(); + final String hash = submitMultiSignedResult.transaction().hash().value(); + this.logSubmitResult(transactionClass, submitMultiSignedResult.status().orElse("n/a"), hash, ""); } + /** + * Helper function to properly log a {@link SubmitResult}, accounting for the current test environment. + * + * @param transactionClass The {@link Class} of the transaction being logged. + * @param status A {@link String} representing the status of the transaction. + * @param hash A {@link String} representing the hash of the transaction. + * @param extraMessage A {@link String} representing an extra message passed by a test author. + */ private void logSubmitResult( final Class transactionClass, final String status, - final String hash + final String hash, + final String extraMessage ) { Objects.requireNonNull(transactionClass); Objects.requireNonNull(hash); @@ -735,10 +765,18 @@ private void logSubmitResult( final String loggingOutput = xrplEnvironment.explorerUrl() .map(explorerUrl -> { final String transactionExplorerUrl = String.format("%s/transactions/%s", explorerUrl, hash); - return String.format("%s transaction(status=%s): %s", transactionClassSimpleName, status, + return String.format("%s transaction(status=%s):%s %s", + transactionClassSimpleName, + status, + extraMessage.isEmpty() ? "" : " " + extraMessage, transactionExplorerUrl); }) - .orElseGet(() -> String.format("%s transaction(status=%s): hash=%s", transactionClassSimpleName, status, hash)); + .orElseGet(() -> String.format("%s transaction(status=%s):%s hash=%s", + transactionClassSimpleName, + status, + extraMessage.isEmpty() ? "" : " " + extraMessage, + hash + )); logger.info(loggingOutput); } diff --git a/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/AccountSetIT.java b/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/AccountSetIT.java index 4ff0d5afb..01618eca1 100644 --- a/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/AccountSetIT.java +++ b/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/AccountSetIT.java @@ -90,9 +90,7 @@ public void enableAllAndDisableOne() throws JsonRpcClientErrorException, JsonPro assertThat(response.engineResult()).isEqualTo("tesSUCCESS"); assertThat(signedAccountSet.hash()).isEqualTo(response.transactionResult().hash()); - logger.info( - "AccountSet transaction successful: https://testnet.xrpl.org/transactions/" + response.transactionResult().hash() - ); + logSubmitResult(response); /////////////////////// // Set flags one-by-one @@ -172,9 +170,7 @@ public void disableAndEnableAllFlags() throws JsonRpcClientErrorException, JsonP assertThat(response.engineResult()).isEqualTo("tesSUCCESS"); assertThat(response.transactionResult().hash()).isEqualTo(signedAccountSet.hash()); - logger.info( - "AccountSet transaction successful: https://testnet.xrpl.org/transactions/" + response.transactionResult().hash() - ); + logSubmitResult(response); /////////////////////// // Set flags one-by-one @@ -271,10 +267,7 @@ void enableAndDisableFlagsUsingTransactionFlags() throws JsonRpcClientErrorExcep SubmitResult enableResponse = xrplClient.submit(signedTransaction); assertThat(enableResponse.engineResult()).isEqualTo("tesSUCCESS"); assertThat(signedTransaction.hash()).isEqualTo(enableResponse.transactionResult().hash()); - logger.info( - "AccountSet SetFlag transaction successful: https://testnet.xrpl.org/transactions/{}", - enableResponse.transactionResult().hash() - ); + logSubmitResult(enableResponse, "SetFlag"); ///////////////////////// // Validate Account State @@ -305,10 +298,7 @@ void enableAndDisableFlagsUsingTransactionFlags() throws JsonRpcClientErrorExcep SubmitResult disableResponse = xrplClient.submit(signedTransaction); assertThat(disableResponse.engineResult()).isEqualTo("tesSUCCESS"); assertThat(signedTransaction.hash()).isEqualTo(disableResponse.transactionResult().hash()); - logger.info( - "AccountSet SetFlag transaction successful: https://testnet.xrpl.org/transactions/{}", - disableResponse.transactionResult().hash() - ); + logSubmitResult(disableResponse, "SetFlag"); ///////////////////////// // Validate Account State @@ -381,9 +371,7 @@ void submitAndRetrieveAccountSetWithZeroClearFlagAndSetFlag() assertThat(response.engineResult()).isEqualTo("tesSUCCESS"); assertThat(signedAccountSet.hash()).isEqualTo(response.transactionResult().hash()); - logger.info( - "AccountSet transaction successful: https://testnet.xrpl.org/transactions/" + response.transactionResult().hash() - ); + logSubmitResult(response); TransactionResult accountSetTransactionResult = this.scanForResult(() -> this.getValidatedTransaction(signedAccountSet.hash(), AccountSet.class) @@ -422,9 +410,7 @@ void setAndUnsetDomainAndMessageKey() throws JsonRpcClientErrorException, JsonPr assertThat(response.engineResult()).isEqualTo("tesSUCCESS"); assertThat(signedSetDomain.hash()).isEqualTo(response.transactionResult().hash()); - logger.info( - "AccountSet transaction successful: https://testnet.xrpl.org/transactions/" + response.transactionResult().hash() - ); + logSubmitResult(response); this.scanForResult(() -> this.getValidatedTransaction(signedSetDomain.hash(), AccountSet.class) @@ -455,10 +441,7 @@ void setAndUnsetDomainAndMessageKey() throws JsonRpcClientErrorException, JsonPr assertThat(clearDomainSubmitResult.engineResult()).isEqualTo("tesSUCCESS"); assertThat(signedClearDomain.hash()).isEqualTo(clearDomainSubmitResult.transactionResult().hash()); - logger.info( - "AccountSet transaction successful: https://testnet.xrpl.org/transactions/" + - clearDomainSubmitResult.transactionResult().hash() - ); + logSubmitResult(clearDomainSubmitResult); this.scanForResult(() -> this.getValidatedTransaction(signedClearDomain.hash(), AccountSet.class) @@ -524,10 +507,7 @@ private void assertSetFlag( assertThat(response.engineResult()).isEqualTo("tesSUCCESS"); assertThat(response.transactionResult().hash()).isEqualTo(response.transactionResult().hash()); - logger.info( - "AccountSet SetFlag transaction successful (asf={}; arf={}): https://testnet.xrpl.org/transactions/{}", - accountSetFlag, accountRootFlag, response.transactionResult().hash() - ); + logSubmitResult(response, String.format("SetFlag asf=%s arf=%s", accountSetFlag, accountRootFlag)); ///////////////////////// // Validate Account State @@ -566,10 +546,7 @@ private void assertClearFlag( assertThat(response.engineResult()).isEqualTo("tesSUCCESS"); assertThat(response.transactionResult().hash()).isEqualTo(response.transactionResult().hash()); - logger.info( - "AccountSet ClearFlag transaction successful (asf={}; arf={}): https://testnet.xrpl.org/transactions/{}", - accountSetFlag, accountRootFlag, response.transactionResult().hash() - ); + logSubmitResult(response, String.format("ClearFlag asf=%s arf=%s", accountSetFlag, accountRootFlag)); ///////////////////////// // Validate Account State diff --git a/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/AmmIT.java b/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/AmmIT.java index 2c436e658..8b9832a91 100644 --- a/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/AmmIT.java +++ b/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/AmmIT.java @@ -491,10 +491,7 @@ private void enableRippling(KeyPair issuerKeyPair, AccountInfoResult issuerAccou SingleSignedTransaction signed = signatureService.sign(issuerKeyPair.privateKey(), accountSet); SubmitResult setResult = xrplClient.submit(signed); assertThat(setResult.engineResult()).isEqualTo("tesSUCCESS"); - logger.info( - "AccountSet transaction successful: https://testnet.xrpl.org/transactions/{}", - setResult.transactionResult().hash() - ); + logSubmitResult(setResult); scanForResult( () -> getValidatedAccountInfo(issuerKeyPair.publicKey().deriveAddress()), diff --git a/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/CheckIT.java b/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/CheckIT.java index 5e4b93ee2..f3fac2f82 100644 --- a/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/CheckIT.java +++ b/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/CheckIT.java @@ -84,10 +84,7 @@ public void createXrpCheckAndCash() throws JsonRpcClientErrorException, JsonProc ); SubmitResult response = xrplClient.submit(signedCheckCreate); assertThat(response.engineResult()).isEqualTo("tesSUCCESS"); - logger.info( - "CheckCreate transaction successful: https://testnet.xrpl.org/transactions/{}", - response.transactionResult().hash() - ); + logSubmitResult(response); ////////////////////// // Poll the ledger for the source wallet's account objects, and validate that the created Check makes @@ -122,10 +119,7 @@ public void createXrpCheckAndCash() throws JsonRpcClientErrorException, JsonProc ); SubmitResult cashResponse = xrplClient.submit(signedCheckCash); assertThat(cashResponse.engineResult()).isEqualTo("tesSUCCESS"); - logger.info( - "CheckCash transaction successful: https://testnet.xrpl.org/transactions/{}", - cashResponse.transactionResult().hash() - ); + logSubmitResult(cashResponse); ////////////////////// // Validate that the destination account balance increases by the check amount minus fees @@ -178,10 +172,7 @@ public void createCheckAndSourceCancels() throws JsonRpcClientErrorException, Js ); SubmitResult response = xrplClient.submit(signedCheckCreate); assertThat(response.engineResult()).isEqualTo("tesSUCCESS"); - logger.info( - "CheckCreate transaction successful: https://testnet.xrpl.org/transactions/{}", - response.transactionResult().hash() - ); + logSubmitResult(response); ////////////////////// // Poll the ledger for the source wallet's account objects, and validate that the created Check makes @@ -212,10 +203,7 @@ public void createCheckAndSourceCancels() throws JsonRpcClientErrorException, Js ); SubmitResult cancelResult = xrplClient.submit(signedCheckCancel); assertThat(cancelResult.engineResult()).isEqualTo("tesSUCCESS"); - logger.info( - "CheckCancel transaction successful: https://testnet.xrpl.org/transactions/{}", - cancelResult.transactionResult().hash() - ); + logSubmitResult(cancelResult); ////////////////////// // Validate that the Check does not exist after cancelling @@ -259,10 +247,7 @@ public void createCheckAndDestinationCancels() throws JsonRpcClientErrorExceptio ); SubmitResult response = xrplClient.submit(signedCheckCreate); assertThat(response.engineResult()).isEqualTo("tesSUCCESS"); - logger.info( - "CheckCreate transaction successful: https://testnet.xrpl.org/transactions/{}", - response.transactionResult().hash() - ); + logSubmitResult(response); CheckObject checkObject = (CheckObject) this .scanForResult( @@ -294,10 +279,7 @@ public void createCheckAndDestinationCancels() throws JsonRpcClientErrorExceptio ); SubmitResult cancelResult = xrplClient.submit(signedCheckCancel); assertThat(cancelResult.engineResult()).isEqualTo("tesSUCCESS"); - logger.info( - "CheckCancel transaction successful: https://testnet.xrpl.org/transactions/{}", - cancelResult.transactionResult().hash() - ); + logSubmitResult(cancelResult); ////////////////////// // Validate that the Check does not exist after cancelling diff --git a/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/DepositPreAuthIT.java b/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/DepositPreAuthIT.java index 5b9c2d618..224a8f683 100644 --- a/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/DepositPreAuthIT.java +++ b/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/DepositPreAuthIT.java @@ -84,10 +84,7 @@ public void preauthorizeAccountAndReceivePayment() throws JsonRpcClientErrorExce SubmitResult result = xrplClient.submit(singedDepositPreAuth); assertThat(result.engineResult()).isEqualTo("tesSUCCESS"); - logger.info( - "DepositPreauth transaction successful. https://testnet.xrpl.org/transactions/{}", - result.transactionResult().hash() - ); + logSubmitResult(result); ///////////////////////// // Validate that the DepositPreAuthObject was added to the receiver's account objects @@ -135,10 +132,7 @@ public void preauthorizeAccountAndReceivePayment() throws JsonRpcClientErrorExce SubmitResult paymentResult = xrplClient.submit(singedPayment); assertThat(result.engineResult()).isEqualTo("tesSUCCESS"); - logger.info( - "Payment transaction successful. https://testnet.xrpl.org/transactions/{}", - paymentResult.transactionResult().hash() - ); + logSubmitResult(paymentResult); ///////////////////////// // Validate that the Payment was included in a validated ledger diff --git a/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/EscrowIT.java b/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/EscrowIT.java index 9958bdff7..1a99904fc 100644 --- a/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/EscrowIT.java +++ b/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/EscrowIT.java @@ -90,10 +90,7 @@ public void createAndFinishTimeBasedEscrow() throws JsonRpcClientErrorException, ); SubmitResult createResult = xrplClient.submit(signedEscrowCreate); assertThat(createResult.engineResult()).isEqualTo("tesSUCCESS"); - logger.info( - "EscrowCreate transaction successful: https://testnet.xrpl.org/transactions/{}", - createResult.transactionResult().hash() - ); + logSubmitResult(createResult); ////////////////////// // Then wait until the transaction gets committed to a validated ledger @@ -138,10 +135,7 @@ public void createAndFinishTimeBasedEscrow() throws JsonRpcClientErrorException, ); SubmitResult finishResult = xrplClient.submit(signedEscrowFinish); assertThat(finishResult.engineResult()).isEqualTo("tesSUCCESS"); - logger.info( - "EscrowFinish transaction successful: https://testnet.xrpl.org/transactions/{}", - finishResult.transactionResult().hash() - ); + logSubmitResult(finishResult); ////////////////////// // Wait for the EscrowFinish to get applied to a validated ledger @@ -195,10 +189,7 @@ public void createAndCancelTimeBasedEscrow() throws JsonRpcClientErrorException, ); SubmitResult createResult = xrplClient.submit(signedEscrowCreate); assertThat(createResult.engineResult()).isEqualTo("tesSUCCESS"); - logger.info( - "EscrowCreate transaction successful: https://testnet.xrpl.org/transactions/{}", - createResult.transactionResult().hash() - ); + logSubmitResult(createResult); ////////////////////// // Then wait until the transaction gets committed to a validated ledger @@ -249,10 +240,7 @@ public void createAndCancelTimeBasedEscrow() throws JsonRpcClientErrorException, ); SubmitResult cancelResult = xrplClient.submit(signedEscrowCancel); assertThat(cancelResult.engineResult()).isEqualTo("tesSUCCESS"); - logger.info( - "EscrowCancel transaction successful: https://testnet.xrpl.org/transactions/{}", - cancelResult.transactionResult().hash() - ); + logSubmitResult(cancelResult); ////////////////////// // Wait until the transaction enters a validated ledger @@ -306,10 +294,7 @@ public void createAndFinishCryptoConditionBasedEscrow() throws JsonRpcClientErro ); SubmitResult createResult = xrplClient.submit(signedEscrowCreate); assertThat(createResult.engineResult()).isEqualTo("tesSUCCESS"); - logger.info( - "EscrowCreate transaction successful: https://testnet.xrpl.org/transactions/{}", - createResult.transactionResult().hash() - ); + logSubmitResult(createResult); ////////////////////// // Then wait until the transaction gets committed to a validated ledger @@ -360,10 +345,7 @@ public void createAndFinishCryptoConditionBasedEscrow() throws JsonRpcClientErro ); SubmitResult finishResult = xrplClient.submit(signedEscrowFinish); assertThat(finishResult.engineResult()).isEqualTo("tesSUCCESS"); - logger.info( - "EscrowFinish transaction successful: https://testnet.xrpl.org/transactions/{}", - finishResult.transactionResult().hash() - ); + logSubmitResult(finishResult); ////////////////////// // Wait until the transaction enters a validated ledger @@ -418,10 +400,7 @@ public void createAndCancelCryptoConditionBasedEscrow() throws JsonRpcClientErro ); SubmitResult createResult = xrplClient.submit(signedEscrowCreate); assertThat(createResult.engineResult()).isEqualTo("tesSUCCESS"); - logger.info( - "EscrowCreate transaction successful: https://testnet.xrpl.org/transactions/{}", - createResult.transactionResult().hash() - ); + logSubmitResult(createResult); ////////////////////// // Then wait until the transaction gets committed to a validated ledger @@ -463,10 +442,7 @@ public void createAndCancelCryptoConditionBasedEscrow() throws JsonRpcClientErro ); SubmitResult cancelResult = xrplClient.submit(signedEscrowCancel); assertThat(cancelResult.engineResult()).isEqualTo("tesSUCCESS"); - logger.info( - "EscrowCancel transaction successful: https://testnet.xrpl.org/transactions/{}", - cancelResult.transactionResult().hash() - ); + logSubmitResult(cancelResult); ////////////////////// // Wait until the transaction enters a validated ledger diff --git a/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/FreezeIssuedCurrencyIT.java b/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/FreezeIssuedCurrencyIT.java index 920dbb619..8d47a1d67 100644 --- a/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/FreezeIssuedCurrencyIT.java +++ b/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/FreezeIssuedCurrencyIT.java @@ -530,10 +530,7 @@ protected void enableDefaultRipple(final KeyPair wallet) SingleSignedTransaction signedTrustSet = signatureService.sign(wallet.privateKey(), accountSet); SubmitResult trustSetSubmitResult = xrplClient.submit(signedTrustSet); assertThat(trustSetSubmitResult.engineResult()).isEqualTo("tesSUCCESS"); - logger.info( - "AccountSet transaction successful: https://testnet.xrpl.org/transactions/{}", - trustSetSubmitResult.transactionResult().hash() - ); + logSubmitResult(trustSetSubmitResult); scanForResult( () -> getValidatedAccountInfo(wallet.publicKey().deriveAddress()), @@ -590,10 +587,7 @@ private TrustLine adjustTrustlineFreeze( SingleSignedTransaction signedTrustSet = signatureService.sign(issuerKeyPair.privateKey(), trustSet); SubmitResult trustSetSubmitResult = xrplClient.submit(signedTrustSet); assertThat(trustSetSubmitResult.engineResult()).isEqualTo("tesSUCCESS"); - logger.info( - "TrustSet transaction successful: https://testnet.xrpl.org/transactions/{}", - trustSetSubmitResult.transactionResult().hash() - ); + logSubmitResult(trustSetSubmitResult); return scanForResult( () -> getValidatedAccountLines(issuerKeyPair.publicKey().deriveAddress(), @@ -643,10 +637,7 @@ private AccountInfoResult adjustGlobalTrustlineFreeze( SingleSignedTransaction signedTrustSet = signatureService.sign(issuerKeyPair.privateKey(), accountSet); SubmitResult transactionResult = xrplClient.submit(signedTrustSet); assertThat(transactionResult.engineResult()).isEqualTo("tesSUCCESS"); - logger.info( - "TrustSet transaction successful: https://testnet.xrpl.org/transactions/{}", - transactionResult.transactionResult().hash() - ); + logSubmitResult(transactionResult); return scanForResult( () -> getValidatedAccountInfo(issuerKeyPair.publicKey().deriveAddress()), diff --git a/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/IssuedCurrencyIT.java b/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/IssuedCurrencyIT.java index 2334220cd..e40f4f96f 100644 --- a/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/IssuedCurrencyIT.java +++ b/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/IssuedCurrencyIT.java @@ -373,10 +373,7 @@ public void sendSimpleRipplingIssuedCurrencyPayment() throws JsonRpcClientErrorE ); SubmitResult paymentResult = xrplClient.submit(signedAliceToBobPayment); assertThat(paymentResult.engineResult()).isEqualTo("tesSUCCESS"); - logger.info( - "Payment transaction successful: https://testnet.xrpl.org/transactions/{}", - paymentResult.transactionResult().hash() - ); + logSubmitResult(paymentResult); /////////////////////////// // Validate that bob and alice's trust line balances have been updated appropriately @@ -583,10 +580,7 @@ public void sendMultiHopSameCurrencyPayment() throws JsonRpcClientErrorException ); SubmitResult paymentResult = xrplClient.submit(signedCharlieToDanielPayment); assertThat(paymentResult.engineResult()).isEqualTo("tesSUCCESS"); - logger.info( - "Payment transaction successful: https://testnet.xrpl.org/transactions/{}", - paymentResult.transactionResult().hash() - ); + logSubmitResult(paymentResult); /////////////////////////// // Validate that everyone's trust line balances have been updated appropriately @@ -647,10 +641,7 @@ public void setDefaultRipple(KeyPair issuerKeyPair, FeeResult feeResult) ); SubmitResult setResult = xrplClient.submit(signedAccountSet); assertThat(setResult.engineResult()).isEqualTo("tesSUCCESS"); - logger.info( - "AccountSet transaction successful: https://testnet.xrpl.org/transactions/{}", - setResult.transactionResult().hash() - ); + logSubmitResult(setResult); scanForResult( () -> getValidatedAccountInfo(issuerKeyPair.publicKey().deriveAddress()), diff --git a/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/NfTokenIT.java b/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/NfTokenIT.java index e2036c8ab..be8fe9814 100644 --- a/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/NfTokenIT.java +++ b/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/NfTokenIT.java @@ -301,10 +301,7 @@ void mintAndCreateOffer() throws JsonRpcClientErrorException, JsonProcessingExce SubmitResult mintSubmitResult = xrplClient.submit(signedMint); assertThat(mintSubmitResult.engineResult()).isEqualTo(TransactionResultCodes.TES_SUCCESS); assertThat(signedMint.hash()).isEqualTo(mintSubmitResult.transactionResult().hash()); - logger.info( - "NFTokenMint transaction successful: https://testnet.xrpl.org/transactions/{}", - mintSubmitResult.transactionResult().hash() - ); + logSubmitResult(mintSubmitResult); NfTokenObject nfToken = scanForNfToken(keyPair, uri); logger.info("NFT was minted successfully."); diff --git a/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/OfferIT.java b/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/OfferIT.java index e1d693906..cb7a6591d 100644 --- a/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/OfferIT.java +++ b/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/OfferIT.java @@ -115,12 +115,8 @@ public void ensureUsdIssued() throws JsonRpcClientErrorException, JsonProcessing SubmitResult response = xrplClient.submit(signedOfferCreate); assertThat(response.transactionResult().transaction().flags().tfFullyCanonicalSig()).isTrue(); assertThat(response.transactionResult().transaction().flags().tfSell()).isTrue(); - assertThat(response.engineResult()).isEqualTo("tesSUCCESS"); - logger.info( - "OfferCreate transaction successful: https://testnet.xrpl.org/transactions/{}", - response.transactionResult().hash() - ); + logSubmitResult(response); BookOffersResult result = xrplClient.bookOffers( BookOffersRequestParams.builder() @@ -191,10 +187,7 @@ public void createOpenOfferAndCancel() throws JsonRpcClientErrorException, JsonP assertThat(response.transactionResult().transaction().flags().tfSell()).isTrue(); assertThat(response.engineResult()).isEqualTo("tesSUCCESS"); - logger.info( - "OfferCreate transaction successful: https://testnet.xrpl.org/transactions/{}", - response.transactionResult().hash() - ); + logSubmitResult(response); ////////////////////// // Poll the ledger for the source purchaser's offers, and validate the expected offer exists @@ -246,10 +239,7 @@ public void createUnmatchedKillOrFill() throws JsonRpcClientErrorException, Json ); SubmitResult response = xrplClient.submit(signedOfferCreate); assertThat(response.engineResult()).isEqualTo("tecKILLED"); - logger.info( - "OfferCreate transaction successful: https://testnet.xrpl.org/transactions/{}", - response.transactionResult().hash() - ); + logSubmitResult(response); ////////////////////// // Poll the ledger for the source purchaser's offers, and validate no offers or balances (ripple states) exist @@ -295,10 +285,7 @@ public void createFullyMatchedOffer() throws JsonRpcClientErrorException, JsonPr ); SubmitResult response = xrplClient.submit(signedOfferCreate); assertThat(response.engineResult()).isEqualTo("tesSUCCESS"); - logger.info( - "OfferCreate transaction successful: https://testnet.xrpl.org/transactions/{}", - response.transactionResult().hash() - ); + logSubmitResult(response); ////////////////////// // Poll the ledger for the source purchaser's balances, and validate the expected currency balance exists diff --git a/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/PaymentChannelIT.java b/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/PaymentChannelIT.java index ab9a21b09..08f05f234 100644 --- a/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/PaymentChannelIT.java +++ b/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/PaymentChannelIT.java @@ -96,10 +96,7 @@ public void createPaymentChannel() throws JsonRpcClientErrorException, JsonProce // Validate that the transaction was submitted successfully SubmitResult createResult = xrplClient.submit(signedPaymentChannelCreate); assertThat(createResult.engineResult()).isEqualTo("tesSUCCESS"); - logger.info( - "PaymentChannelCreate transaction successful. https://testnet.xrpl.org/transactions/{}", - createResult.transactionResult().hash() - ); + logSubmitResult(createResult); ////////////////////////// // Wait for the payment channel to exist in a validated ledger @@ -170,10 +167,7 @@ void createAndClaimPaymentChannel() throws JsonRpcClientErrorException, JsonProc ); SubmitResult createResult = xrplClient.submit(signedPaymentChannelCreate); assertThat(createResult.engineResult()).isEqualTo("tesSUCCESS"); - logger.info( - "PaymentChannelCreate transaction successful. https://testnet.xrpl.org/transactions/{}", - createResult.transactionResult().hash() - ); + logSubmitResult(createResult); ////////////////////////// // Wait for the payment channel to exist in a validated ledger @@ -240,10 +234,7 @@ void createAndClaimPaymentChannel() throws JsonRpcClientErrorException, JsonProc ); SubmitResult claimResult = xrplClient.submit(signedPaymentChannelClaim); assertThat(claimResult.engineResult()).isEqualTo("tesSUCCESS"); - logger.info( - "PaymentChannelClaim transaction successful. https://testnet.xrpl.org/transactions/{}", - claimResult.transactionResult().hash() - ); + logSubmitResult(claimResult); ////////////////////////// // Validate that the destination account balance has gone up by the claim amount @@ -293,10 +284,7 @@ void createAddFundsAndSetExpirationToPaymentChannel() throws JsonRpcClientErrorE ); SubmitResult createResult = xrplClient.submit(signedPaymentChannelCreate); assertThat(createResult.engineResult()).isEqualTo("tesSUCCESS"); - logger.info( - "PaymentChannelCreate transaction successful. https://testnet.xrpl.org/transactions/{}", - createResult.transactionResult().hash() - ); + logSubmitResult(createResult); ////////////////////////// // Wait for the payment channel to exist in a validated ledger and validate its fields @@ -334,10 +322,7 @@ void createAddFundsAndSetExpirationToPaymentChannel() throws JsonRpcClientErrorE ); SubmitResult fundResult = xrplClient.submit(signedPaymentChannelFund); assertThat(fundResult.engineResult()).isEqualTo("tesSUCCESS"); - logger.info( - "PaymentChannelFund transaction successful. https://testnet.xrpl.org/transactions/{}", - fundResult.transactionResult().hash() - ); + logSubmitResult(fundResult); ////////////////////////// // Validate that the amount in the channel increased by the fund amount @@ -380,10 +365,7 @@ void createAddFundsAndSetExpirationToPaymentChannel() throws JsonRpcClientErrorE ); SubmitResult expiryResult = xrplClient.submit(signedPaymentChannelFundWithExpiry); assertThat(expiryResult.engineResult()).isEqualTo("tesSUCCESS"); - logger.info( - "PaymentChannelFund transaction successful. https://testnet.xrpl.org/transactions/{}", - expiryResult.transactionResult().hash() - ); + logSubmitResult(expiryResult); ////////////////////////// // Validate that the expiration was set properly @@ -436,10 +418,7 @@ void testCurrentAccountChannels() throws JsonRpcClientErrorException, JsonProces ); SubmitResult createResult = xrplClient.submit(signedCreatePaymentChannel); assertThat(createResult.engineResult()).isEqualTo("tesSUCCESS"); - logger.info( - "PaymentChannelCreate transaction successful. https://testnet.xrpl.org/transactions/{}", - createResult.transactionResult().hash() - ); + logSubmitResult(createResult); ////////////////////////// // Wait for the payment channel to exist in a validated ledger diff --git a/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/SetRegularKeyIT.java b/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/SetRegularKeyIT.java index d96f1140e..82fec15c6 100644 --- a/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/SetRegularKeyIT.java +++ b/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/SetRegularKeyIT.java @@ -78,10 +78,7 @@ void setRegularKeyOnAccount() throws JsonRpcClientErrorException, JsonProcessing ); SubmitResult setResult = xrplClient.submit(signedSetRegularKey); assertThat(setResult.engineResult()).isEqualTo("tesSUCCESS"); - logger.info( - "SetRegularKey transaction successful. https://testnet.xrpl.org/transactions/{}", - setResult.transactionResult().hash() - ); + logSubmitResult(setResult); ////////////////////////// // Verify that the SetRegularKey transaction worked by submitting empty @@ -144,10 +141,7 @@ void removeRegularKeyFromAccount() throws JsonRpcClientErrorException, JsonProce ); SubmitResult setResult = xrplClient.submit(signedSetRegularKey); assertThat(setResult.engineResult()).isEqualTo("tesSUCCESS"); - logger.info( - "SetRegularKey transaction successful. https://testnet.xrpl.org/transactions/{}", - setResult.transactionResult().hash() - ); + logSubmitResult(setResult); ////////////////////////// // Verify that the SetRegularKey transaction worked by submitting empty @@ -189,10 +183,7 @@ void removeRegularKeyFromAccount() throws JsonRpcClientErrorException, JsonProce ); SubmitResult removeResult = xrplClient.submit(signedRemoveRegularKey); assertThat(removeResult.engineResult()).isEqualTo("tesSUCCESS"); - logger.info( - "SetRegularKey transaction successful. https://testnet.xrpl.org/transactions/{}", - removeResult.transactionResult().hash() - ); + logSubmitResult(removeResult); AccountInfoResult accountInfoAfterRemoving = scanForResult( () -> getValidatedAccountInfo(wallet.publicKey().deriveAddress()), diff --git a/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/SignerListSetIT.java b/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/SignerListSetIT.java index 36b7d7bea..2ea6598fb 100644 --- a/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/SignerListSetIT.java +++ b/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/SignerListSetIT.java @@ -115,10 +115,7 @@ void addSignersToSignerListAndSendPayment() throws JsonRpcClientErrorException, ); SubmitResult signerListSetResult = xrplClient.submit(signedSignerListSet); assertThat(signerListSetResult.engineResult()).isEqualTo("tesSUCCESS"); - logger.info( - "SignerListSet transaction successful: https://testnet.xrpl.org/transactions/{}", - signerListSetResult.transactionResult().hash() - ); + logSubmitResult(signerListSetResult); ///////////////////////////// // Then wait until the transaction enters a validated ledger and the source account's signer list @@ -169,10 +166,7 @@ void addSignersToSignerListAndSendPayment() throws JsonRpcClientErrorException, SubmitMultiSignedResult paymentResult = xrplClient.submitMultisigned(multiSigPayment); assertThat(paymentResult.engineResult()).isEqualTo("tesSUCCESS"); - logger.info( - "Payment transaction successful: https://testnet.xrpl.org/transactions/{}", - paymentResult.transaction().hash() - ); + logSubmitResult(paymentResult); } @Test @@ -225,10 +219,7 @@ void addSignersToSignerListThenDeleteSignerList() throws JsonRpcClientErrorExcep ); SubmitResult signerListSetResult = xrplClient.submit(signedSignerListSet); assertThat(signerListSetResult.engineResult()).isEqualTo("tesSUCCESS"); - logger.info( - "SignerListSet transaction successful: https://testnet.xrpl.org/transactions/{}", - signerListSetResult.transactionResult().hash() - ); + logSubmitResult(signerListSetResult); ///////////////////////////// // Then wait until the transaction enters a validated ledger and the source account's signer list @@ -264,10 +255,7 @@ void addSignersToSignerListThenDeleteSignerList() throws JsonRpcClientErrorExcep ); SubmitResult signerListDeleteResult = xrplClient.submit(signedDeleteSignerList); assertThat(signerListDeleteResult.engineResult()).isEqualTo("tesSUCCESS"); - logger.info( - "SignerListSet transaction successful: https://testnet.xrpl.org/transactions/{}", - signerListDeleteResult.transactionResult().hash() - ); + logSubmitResult(signerListDeleteResult); ///////////////////////////// // Then wait until the transaction enters a validated ledger and the signer list has been deleted diff --git a/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/TransactUsingDerivedKeySignatureServiceIT.java b/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/TransactUsingDerivedKeySignatureServiceIT.java index 87202bb43..447d11590 100644 --- a/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/TransactUsingDerivedKeySignatureServiceIT.java +++ b/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/TransactUsingDerivedKeySignatureServiceIT.java @@ -243,10 +243,7 @@ private void multiSigSendPaymentHelper( ); SubmitResult signerListSetResult = xrplClient.submit(signedSignerListSet); assertThat(signerListSetResult.engineResult()).isEqualTo("tesSUCCESS"); - logger.info( - "SignerListSet transaction successful: https://testnet.xrpl.org/transactions/{}", - signerListSetResult.transactionResult().hash() - ); + logSubmitResult(signerListSetResult); ///////////////////////////// // Then wait until the transaction enters a validated ledger and the source account's signer list @@ -296,9 +293,6 @@ private void multiSigSendPaymentHelper( SubmitMultiSignedResult paymentResult = xrplClient.submitMultisigned(multiSigPayment); assertThat(paymentResult.engineResult()).isEqualTo("tesSUCCESS"); - logger.info( - "Payment transaction successful: https://testnet.xrpl.org/transactions/{}", - paymentResult.transaction().hash() - ); + logSubmitResult(paymentResult); } } diff --git a/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/TransactUsingSignatureServiceIT.java b/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/TransactUsingSignatureServiceIT.java index f03c059af..280a5aa4b 100644 --- a/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/TransactUsingSignatureServiceIT.java +++ b/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/TransactUsingSignatureServiceIT.java @@ -214,10 +214,7 @@ private void multiSigSendPaymentHelper( ); SubmitResult signerListSetResult = xrplClient.submit(signedSignerListSet); assertThat(signerListSetResult.engineResult()).isEqualTo("tesSUCCESS"); - logger.info( - "SignerListSet transaction successful: https://testnet.xrpl.org/transactions/{}", - signerListSetResult.transactionResult().hash() - ); + logSubmitResult(signerListSetResult); ///////////////////////////// // Then wait until the transaction enters a validated ledger and the source account's signer list @@ -266,10 +263,7 @@ private void multiSigSendPaymentHelper( SubmitMultiSignedResult paymentResult = xrplClient.submitMultisigned(multiSigPayment); assertThat(paymentResult.engineResult()).isEqualTo("tesSUCCESS"); - logger.info( - "Payment transaction successful: https://testnet.xrpl.org/transactions/{}", - paymentResult.transaction().hash() - ); + logSubmitResult(paymentResult); } private PublicKey toPublicKey(final PrivateKey privateKey) { From e22112aeca574c40e53a11e9557be6968dce0cb5 Mon Sep 17 00:00:00 2001 From: David Fuelling Date: Thu, 6 Mar 2025 16:32:36 -0700 Subject: [PATCH 4/5] Catch remaining test --- .../test/java/org/xrpl/xrpl4j/tests/DepositPreAuthIT.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/DepositPreAuthIT.java b/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/DepositPreAuthIT.java index 224a8f683..b84a4ad11 100644 --- a/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/DepositPreAuthIT.java +++ b/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/DepositPreAuthIT.java @@ -263,10 +263,8 @@ private AccountInfoResult enableDepositPreauth( ); SubmitResult accountSetResult = xrplClient.submit(signedAccountSet); assertThat(accountSetResult.engineResult()).isEqualTo("tesSUCCESS"); - logger.info( - "AccountSet to enable Deposit Preauth successful. https://testnet.xrpl.org/transactions/{}", - accountSetResult.transactionResult().hash() - ); + logSubmitResult(accountSetResult, "Enable Deposit Preauth"); + return this.scanForResult( () -> this.getValidatedAccountInfo(wallet.publicKey().deriveAddress()), accountInfo -> accountInfo.accountData().flags().lsfDepositAuth() From a9b6ef6da421bd601361f86f2c378c9c03ac2e8d Mon Sep 17 00:00:00 2001 From: David Fuelling Date: Thu, 6 Mar 2025 16:35:27 -0700 Subject: [PATCH 5/5] Update method name for improved clarity --- .../src/test/java/org/xrpl/xrpl4j/tests/AbstractIT.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/AbstractIT.java b/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/AbstractIT.java index 9ade62f18..53b86b211 100644 --- a/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/AbstractIT.java +++ b/xrpl4j-integration-tests/src/test/java/org/xrpl/xrpl4j/tests/AbstractIT.java @@ -77,7 +77,6 @@ import org.xrpl.xrpl4j.model.transactions.Payment; import org.xrpl.xrpl4j.model.transactions.Transaction; import org.xrpl.xrpl4j.model.transactions.TransactionResultCodes; -import org.xrpl.xrpl4j.model.transactions.TransactionType; import org.xrpl.xrpl4j.model.transactions.TrustSet; import org.xrpl.xrpl4j.model.transactions.XrpCurrencyAmount; import org.xrpl.xrpl4j.tests.environment.XrplEnvironment; @@ -727,7 +726,7 @@ protected void logSubmitResult(final SubmitResult submitR protected void logSubmitResult(final SubmitResult submitResult, final String extraMessage) { final Class transactionClass = submitResult.transactionResult().transaction().getClass(); final String hash = submitResult.transactionResult().hash().value(); - this.logSubmitResult(transactionClass, submitResult.status().orElse("n/a"), hash, extraMessage); + this.logSubmitResultHelper(transactionClass, submitResult.status().orElse("n/a"), hash, extraMessage); } /** @@ -739,7 +738,7 @@ protected void logSubmitResult(final SubmitMultiSignedResult transactionClass = submitMultiSignedResult.transaction().transaction().getClass(); final String hash = submitMultiSignedResult.transaction().hash().value(); - this.logSubmitResult(transactionClass, submitMultiSignedResult.status().orElse("n/a"), hash, ""); + this.logSubmitResultHelper(transactionClass, submitMultiSignedResult.status().orElse("n/a"), hash, ""); } /** @@ -750,7 +749,7 @@ protected void logSubmitResult(final SubmitMultiSignedResult transactionClass, final String status, final String hash,