Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -76,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;
Expand Down Expand Up @@ -120,18 +120,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();
Expand Down Expand Up @@ -483,11 +471,7 @@ public TrustLine createTrustLine(
);
SubmitResult<TrustSet> 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),
Expand Down Expand Up @@ -575,6 +559,7 @@ public void sendIssuedCurrency(
);
SubmitResult<Payment> paymentResult = xrplClient.submit(signedPayment);
assertThat(paymentResult.transactionResult().hash()).isEqualTo(signedPayment.hash());
logSubmitResult(paymentResult);

paymentEngineResult = paymentResult.engineResult();
if (!paymentResult.engineResult().equals(expectedEngineResult)) {
Expand All @@ -592,11 +577,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(),
Expand Down Expand Up @@ -714,10 +694,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();
Expand All @@ -727,4 +707,76 @@ protected Instant getMinExpirationTime() {
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<? extends Transaction> 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<? extends Transaction> submitResult, final String extraMessage) {
final Class<? extends Transaction> transactionClass = submitResult.transactionResult().transaction().getClass();
final String hash = submitResult.transactionResult().hash().value();
this.logSubmitResultHelper(transactionClass, submitResult.status().orElse("n/a"), hash, extraMessage);
}

/**
* Logs a {@link SubmitResult}, accounting for the current test environment.
*
* @param submitMultiSignedResult An instance of {@link SubmitMultiSignedResult}.
*/
protected void logSubmitResult(final SubmitMultiSignedResult<? extends Transaction> submitMultiSignedResult) {
final Class<? extends Transaction> transactionClass
= submitMultiSignedResult.transaction().transaction().getClass();
final String hash = submitMultiSignedResult.transaction().hash().value();
this.logSubmitResultHelper(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 logSubmitResultHelper(
final Class<? extends Transaction> transactionClass,
final String status,
final String hash,
final String extraMessage
) {
Objects.requireNonNull(transactionClass);
Objects.requireNonNull(hash);

final String transactionClassSimpleName = transactionClass.getSimpleName().startsWith("Immutable") ?
transactionClass.getSimpleName().substring("Immutable".length()) : transactionClass.getSimpleName();

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 %s",
transactionClassSimpleName,
status,
extraMessage.isEmpty() ? "" : " " + extraMessage,
transactionExplorerUrl);
})
.orElseGet(() -> String.format("%s transaction(status=%s):%s hash=%s",
transactionClassSimpleName,
status,
extraMessage.isEmpty() ? "" : " " + extraMessage,
hash
));

logger.info(loggingOutput);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -271,10 +267,7 @@ void enableAndDisableFlagsUsingTransactionFlags() throws JsonRpcClientErrorExcep
SubmitResult<AccountSet> 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
Expand Down Expand Up @@ -305,10 +298,7 @@ void enableAndDisableFlagsUsingTransactionFlags() throws JsonRpcClientErrorExcep
SubmitResult<AccountSet> 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
Expand Down Expand Up @@ -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<AccountSet> accountSetTransactionResult = this.scanForResult(() ->
this.getValidatedTransaction(signedAccountSet.hash(), AccountSet.class)
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1059,10 +1059,7 @@ private void enableFlag(KeyPair issuerKeyPair, UnsignedInteger sequence, FeeResu
SingleSignedTransaction<AccountSet> signed = signatureService.sign(issuerKeyPair.privateKey(), accountSet);
SubmitResult<AccountSet> 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()),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -84,10 +84,7 @@ public void createXrpCheckAndCash() throws JsonRpcClientErrorException, JsonProc
);
SubmitResult<CheckCreate> 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
Expand Down Expand Up @@ -122,10 +119,7 @@ public void createXrpCheckAndCash() throws JsonRpcClientErrorException, JsonProc
);
SubmitResult<CheckCash> 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
Expand Down Expand Up @@ -178,10 +172,7 @@ public void createCheckAndSourceCancels() throws JsonRpcClientErrorException, Js
);
SubmitResult<CheckCreate> 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
Expand Down Expand Up @@ -212,10 +203,7 @@ public void createCheckAndSourceCancels() throws JsonRpcClientErrorException, Js
);
SubmitResult<CheckCancel> 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
Expand Down Expand Up @@ -259,10 +247,7 @@ public void createCheckAndDestinationCancels() throws JsonRpcClientErrorExceptio
);
SubmitResult<CheckCreate> 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(
Expand Down Expand Up @@ -294,10 +279,7 @@ public void createCheckAndDestinationCancels() throws JsonRpcClientErrorExceptio
);
SubmitResult<CheckCancel> 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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -84,10 +84,7 @@ public void preauthorizeAccountAndReceivePayment() throws JsonRpcClientErrorExce
SubmitResult<DepositPreAuth> 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
Expand Down Expand Up @@ -135,10 +132,7 @@ public void preauthorizeAccountAndReceivePayment() throws JsonRpcClientErrorExce

SubmitResult<Payment> 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
Expand Down Expand Up @@ -269,10 +263,8 @@ private AccountInfoResult enableDepositPreauth(
);
SubmitResult<AccountSet> 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()
Expand Down
Loading
Loading