diff --git a/src/test-support/java/com/lmax/solana4j/SolanaNodeDsl.java b/src/test-support/java/com/lmax/solana4j/SolanaNodeDsl.java index 312f196..d37e94e 100644 --- a/src/test-support/java/com/lmax/solana4j/SolanaNodeDsl.java +++ b/src/test-support/java/com/lmax/solana4j/SolanaNodeDsl.java @@ -7,8 +7,7 @@ import com.lmax.solana4j.api.AssociatedTokenAddress; import com.lmax.solana4j.api.ProgramDerivedAddress; import com.lmax.solana4j.api.PublicKey; -import com.lmax.solana4j.assertion.IsEqualToAssertion; -import com.lmax.solana4j.assertion.IsNotNullAssertion; +import com.lmax.solana4j.assertion.Condition; import com.lmax.solana4j.assertion.Waiter; import com.lmax.solana4j.domain.Sol; import com.lmax.solana4j.domain.TestKeyPair; @@ -29,6 +28,9 @@ import java.util.Optional; import java.util.stream.Collectors; +import static com.lmax.solana4j.assertion.Condition.isEqualTo; +import static com.lmax.solana4j.assertion.Condition.isNotNull; +import static com.lmax.solana4j.assertion.Condition.isTrue; import static com.lmax.solana4j.encoding.SolanaEncoding.deriveAssociatedTokenAddress; import static com.lmax.solana4j.programs.SystemProgram.MINT_ACCOUNT_LENGTH; import static com.lmax.solana4j.programs.SystemProgram.NONCE_ACCOUNT_LENGTH; @@ -92,7 +94,7 @@ public void retrieveAddressLookupTable(final String... args) final TestPublicKey account = testContext.data(TestDataType.TEST_PUBLIC_KEY).lookup(params.value("lookupTableAddress")); - final AccountInfo accountInfo = Waiter.waitFor(new IsNotNullAssertion<>(() -> solanaDriver.getAccountInfo(account))); + final AccountInfo accountInfo = Waiter.waitFor(isNotNull(() -> solanaDriver.getAccountInfo(account))); final List expectedAddresses = stream(params.values("addresses")) .map(address -> testContext.data(TestDataType.TEST_KEY_PAIR).lookup(address).getSolana4jPublicKey()) @@ -163,7 +165,7 @@ public void waitForSlot(final String... args) new RequiredArg("slot") ); - Waiter.waitFor(new IsEqualToAssertion<>(true, () -> solanaDriver.getSlot() > params.valueAsLong("slot"))); + Waiter.waitFor(isTrue(() -> solanaDriver.getSlot() > params.valueAsLong("slot"))); } public void createMintAccount(final String... args) @@ -271,7 +273,7 @@ public void tokenBalance(final String... args) final TestPublicKey address = testContext.data(TestDataType.TEST_PUBLIC_KEY).lookup(params.value("address")); final String amount = params.value("amount"); - Waiter.waitFor(new IsEqualToAssertion<>(amount, () -> solanaDriver.getTokenBalance(address.getPublicKeyBase58()))); + Waiter.waitFor(isEqualTo(amount, () -> solanaDriver.getTokenBalance(address.getPublicKeyBase58()))); } public void balance(final String... args) @@ -284,7 +286,7 @@ public void balance(final String... args) final TestPublicKey address = testContext.data(TestDataType.TEST_PUBLIC_KEY).lookup(params.value("address")); final Sol sol = new Sol(params.valueAsBigDecimal("amountSol")); - Waiter.waitFor(new IsEqualToAssertion<>(sol.lamports(), () -> solanaDriver.getBalance(address.getPublicKeyBase58()))); + Waiter.waitFor(isEqualTo(sol.lamports(), () -> solanaDriver.getBalance(address.getPublicKeyBase58()))); } public void tokenTransfer(final String... args) @@ -413,11 +415,11 @@ public void transfer(final String... args) Waiter.waitFor(transactionFinalized(transactionSignature)); } - private IsNotNullAssertion transactionFinalized(final String transactionSignature) + private Condition transactionFinalized(final String transactionSignature) { // intermittency caused by block height not moving on to the next block before checking the transaction response ... it's a bit weird waitForBlockHeight(solanaDriver.getBlockHeight() + 1); - return new IsNotNullAssertion<>(() -> solanaDriver.getTransactionResponse(transactionSignature).getTransaction()); + return isNotNull(() -> solanaDriver.getTransactionResponse(transactionSignature).getTransaction()); } public void createAssociatedTokenAddress(final String... args) @@ -456,7 +458,7 @@ public void createAssociatedTokenAddress(final String... args) addressLookupTables ); - Waiter.waitFor(new IsNotNullAssertion<>(() -> solanaDriver.getTransactionResponse(transactionSignature).getTransaction())); + Waiter.waitFor(isNotNull(() -> solanaDriver.getTransactionResponse(transactionSignature).getTransaction())); } public void maybeCreateAndExtendAddressLookupTable(final String... args) @@ -483,11 +485,11 @@ public void maybeCreateAndExtendAddressLookupTable(final String... args) private void waitForSlot(final long slot) { - Waiter.waitFor(new IsEqualToAssertion<>(true, () -> solanaDriver.getSlot() > slot)); + Waiter.waitFor(isTrue(() -> solanaDriver.getSlot() > slot)); } private void waitForBlockHeight(final long blockHeight) { - Waiter.waitFor(new IsEqualToAssertion<>(true, () -> solanaDriver.getBlockHeight() > blockHeight)); + Waiter.waitFor(isTrue(() -> solanaDriver.getBlockHeight() > blockHeight)); } } diff --git a/src/test-support/java/com/lmax/solana4j/assertion/Assertion.java b/src/test-support/java/com/lmax/solana4j/assertion/Assertion.java deleted file mode 100644 index 1b0ca7c..0000000 --- a/src/test-support/java/com/lmax/solana4j/assertion/Assertion.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.lmax.solana4j.assertion; - -public abstract class Assertion -{ - public abstract void doAssert(); - - public abstract T getActual(); -} diff --git a/src/test-support/java/com/lmax/solana4j/assertion/Condition.java b/src/test-support/java/com/lmax/solana4j/assertion/Condition.java new file mode 100644 index 0000000..bb67f9e --- /dev/null +++ b/src/test-support/java/com/lmax/solana4j/assertion/Condition.java @@ -0,0 +1,35 @@ +package com.lmax.solana4j.assertion; + +import java.util.function.Supplier; + +public abstract class Condition +{ + public abstract void check(); + + public abstract T getActual(); + + public static Condition isTrue(final Supplier actualSupplier) + { + return new IsEqualToCondition<>(true, actualSupplier); + } + + public static Condition isFalse(final Supplier actualSupplier) + { + return new IsEqualToCondition<>(false, actualSupplier); + } + + public static Condition isNotNull(final Supplier actualSupplier) + { + return new IsNotEqualToCondition<>(null, actualSupplier); + } + + public static Condition isEqualTo(final S expected, final Supplier actualSupplier) + { + return new IsEqualToCondition<>(expected, actualSupplier); + } + + public static Condition isNotEqualTo(final S notExpected, final Supplier actualSupplier) + { + return new IsNotEqualToCondition<>(notExpected, actualSupplier); + } +} diff --git a/src/test-support/java/com/lmax/solana4j/assertion/IsEqualToAssertion.java b/src/test-support/java/com/lmax/solana4j/assertion/IsEqualToCondition.java similarity index 83% rename from src/test-support/java/com/lmax/solana4j/assertion/IsEqualToAssertion.java rename to src/test-support/java/com/lmax/solana4j/assertion/IsEqualToCondition.java index 1a0a86d..a448a5d 100644 --- a/src/test-support/java/com/lmax/solana4j/assertion/IsEqualToAssertion.java +++ b/src/test-support/java/com/lmax/solana4j/assertion/IsEqualToCondition.java @@ -7,21 +7,21 @@ import static org.assertj.core.api.Assertions.assertThat; -public class IsEqualToAssertion extends Assertion +class IsEqualToCondition extends Condition { - private static final Logger LOGGER = LoggerFactory.getLogger(IsEqualToAssertion.class); + private static final Logger LOGGER = LoggerFactory.getLogger(IsEqualToCondition.class); private final T expected; private final Supplier actualSupplier; - public IsEqualToAssertion(final T expected, final Supplier actualSupplier) + IsEqualToCondition(final T expected, final Supplier actualSupplier) { this.expected = expected; this.actualSupplier = actualSupplier; } @Override - public void doAssert() + public void check() { try { diff --git a/src/test-support/java/com/lmax/solana4j/assertion/IsNotNullAssertion.java b/src/test-support/java/com/lmax/solana4j/assertion/IsNotEqualToCondition.java similarity index 62% rename from src/test-support/java/com/lmax/solana4j/assertion/IsNotNullAssertion.java rename to src/test-support/java/com/lmax/solana4j/assertion/IsNotEqualToCondition.java index 10e3100..9577ae5 100644 --- a/src/test-support/java/com/lmax/solana4j/assertion/IsNotNullAssertion.java +++ b/src/test-support/java/com/lmax/solana4j/assertion/IsNotEqualToCondition.java @@ -7,25 +7,34 @@ import static org.assertj.core.api.Assertions.assertThat; -public class IsNotNullAssertion extends Assertion +class IsNotEqualToCondition extends Condition { - private static final Logger LOGGER = LoggerFactory.getLogger(IsNotNullAssertion.class); + private static final Logger LOGGER = LoggerFactory.getLogger(IsNotEqualToCondition.class); + private final T notExpected; private final Supplier actualSupplier; - public IsNotNullAssertion(final Supplier actualSupplier) + IsNotEqualToCondition(final T notExpected, final Supplier actualSupplier) { + this.notExpected = notExpected; this.actualSupplier = actualSupplier; } @Override - public void doAssert() + public void check() { try { final T actual = actualSupplier.get(); LOGGER.debug("Actual value {}.", actual); - assertThat(actual).isNotNull(); + if (notExpected == null) + { + assertThat(actual).isNotNull(); + } + else + { + assertThat(actual).isNotEqualTo(notExpected); + } } catch (final Exception e) { diff --git a/src/test-support/java/com/lmax/solana4j/assertion/Waiter.java b/src/test-support/java/com/lmax/solana4j/assertion/Waiter.java index 07fdb7b..ad1ac2a 100644 --- a/src/test-support/java/com/lmax/solana4j/assertion/Waiter.java +++ b/src/test-support/java/com/lmax/solana4j/assertion/Waiter.java @@ -37,7 +37,7 @@ public Waiter withPollingInterval(final Duration pollingInterval) return new Waiter(initialDelay, timeout, pollingInterval); } - public T waitForAssertion(final Assertion assertion) + public T waitForCondition(final Condition condition) { final long endTimeMillis = System.currentTimeMillis() + timeout.toMillis(); @@ -46,8 +46,8 @@ public T waitForAssertion(final Assertion assertion) { try { - assertion.doAssert(); - return assertion.getActual(); + condition.check(); + return condition.getActual(); } catch (final Throwable throwable) { @@ -63,8 +63,8 @@ public static Waiter waiter() return DEFAULT_WAITER; } - public static T waitFor(final Assertion assertion) + public static T waitFor(final Condition condition) { - return waiter().waitForAssertion(assertion); + return waiter().waitForCondition(condition); } }