package org.reveno.atp.acceptance.tests.preallocated; import org.junit.Assert; import org.reveno.atp.acceptance.api.commands.CreateNewAccountCommand; import org.reveno.atp.acceptance.api.commands.NewOrderCommand; import org.reveno.atp.acceptance.api.events.AccountCreatedEvent; import org.reveno.atp.acceptance.api.events.OrderCreatedEvent; import org.reveno.atp.acceptance.model.Order; import org.reveno.atp.acceptance.tests.RevenoBaseTest; import org.reveno.atp.acceptance.tests.TestRevenoEngine; import org.reveno.atp.acceptance.views.AccountView; import org.reveno.atp.acceptance.views.OrderView; import org.reveno.atp.api.ChannelOptions; import org.reveno.atp.core.serialization.DefaultJavaSerializer; import java.util.Collections; import java.util.function.Consumer; public abstract class BasePreallocatedTest extends RevenoBaseTest { public static final int LARGE_FILE = 2_500_000; public static final int SMALL_FILE = 500_000; public static final int EXTRA_SMALL_FILE = 50_000; public static final Consumer<TestRevenoEngine> LARGE_CHECKS = reveno -> { Assert.assertEquals(9, reveno.getJournalsStorage().getVolumes().length); Assert.assertEquals(1, reveno.getJournalsStorage().getAllStores().length); }; public static final Consumer<TestRevenoEngine> SMALL_CHECKS = reveno -> { Assert.assertEquals(8, reveno.getJournalsStorage().getVolumes().length); Assert.assertEquals(2, reveno.getJournalsStorage().getAllStores().length); }; public void testPreallocatedJournals(long txSize, ChannelOptions channelOptions, Consumer<TestRevenoEngine> checks) throws Exception { testPreallocatedJournals(txSize, channelOptions, checks, false); } public void testPreallocatedJournals(long txSize, ChannelOptions channelOptions, Consumer<TestRevenoEngine> checks, boolean javaSerializer) throws Exception { setUp(); Consumer<TestRevenoEngine> consumer = r -> { r.config().journaling().minVolumes(1); r.config().journaling().volumes(10); r.config().journaling().volumesSize(txSize, 500_000L); r.config().journaling().channelOptions(channelOptions); if (javaSerializer) { r.domain().serializeWith(Collections.singletonList(new DefaultJavaSerializer())); } }; TestRevenoEngine reveno = createEngine(consumer); Waiter accountsWaiter = listenFor(reveno, AccountCreatedEvent.class, 5_000); Waiter ordersWaiter = listenFor(reveno, OrderCreatedEvent.class, 5_000); reveno.startup(); generateAndSendCommands(reveno, 5_000); Assert.assertEquals(5_000, reveno.query().select(AccountView.class).size()); Assert.assertEquals(5_000, reveno.query().select(OrderView.class).size()); Assert.assertTrue(accountsWaiter.isArrived()); Assert.assertTrue(ordersWaiter.isArrived()); checks.accept(reveno); reveno.shutdown(); reveno = createEngine(consumer); accountsWaiter = listenFor(reveno, AccountCreatedEvent.class, 1); ordersWaiter = listenFor(reveno, OrderCreatedEvent.class, 1); reveno.startup(); Assert.assertEquals(5_000, reveno.query().select(AccountView.class).size()); Assert.assertEquals(5_000, reveno.query().select(OrderView.class).size()); Assert.assertFalse(accountsWaiter.isArrived(1)); Assert.assertFalse(ordersWaiter.isArrived(1)); long accountId = sendCommandSync(reveno, new CreateNewAccountCommand("USD", 1000_000L)); Assert.assertEquals(5_001, accountId); long orderId = sendCommandSync(reveno, new NewOrderCommand(accountId, null, "EUR/USD", 134000, 1000, Order.OrderType.MARKET)); Assert.assertEquals(5_001, orderId); reveno.shutdown(); tearDown(); } }