use of io.aeron.test.driver.TestMediaDriver in project aeron by real-logic.
the class DriverNameResolverTest method after.
@AfterEach
public void after() {
CloseHelper.closeAll(clients.values());
CloseHelper.closeAll(drivers.values());
for (final TestMediaDriver driver : drivers.values()) {
driver.context().deleteDirectory();
}
}
use of io.aeron.test.driver.TestMediaDriver in project aeron by real-logic.
the class RegistrationAndOwnerTest method shouldHaveCorrectOwnershipOnEntities.
@ParameterizedTest
@ValueSource(strings = { "aeron:udp?endpoint=localhost:24325", "aeron:ipc" })
void shouldHaveCorrectOwnershipOnEntities(final String channel) {
final MediaDriver.Context ctx = new MediaDriver.Context().errorHandler(Tests::onError).dirDeleteOnStart(true);
try (TestMediaDriver mediaDriver = TestMediaDriver.launch(ctx, testWatcher);
Aeron aeron = Aeron.connect(new Aeron.Context().aeronDirectoryName(mediaDriver.aeronDirectoryName()));
Subscription subscription = aeron.addSubscription(channel, STREAM_ID);
Publication publication = aeron.addPublication(channel, STREAM_ID);
Counter userCounter = aeron.addCounter(1002, "Test Counter")) {
awaitConnected(subscription);
awaitConnected(publication);
final CountersReader countersReader = aeron.countersReader();
final int subscriberPositionId = subscription.imageAtIndex(0).subscriberPositionId();
assertEquals(aeron.clientId(), countersReader.getCounterOwnerId(subscriberPositionId));
assertEquals(aeron.clientId(), countersReader.getCounterOwnerId(publication.positionLimitId()));
assertEquals(aeron.clientId(), countersReader.getCounterOwnerId(userCounter.id()));
assertEquals(subscription.registrationId(), countersReader.getCounterRegistrationId(subscriberPositionId));
assertEquals(publication.registrationId(), countersReader.getCounterRegistrationId(publication.positionLimitId()));
assertEquals(userCounter.registrationId(), countersReader.getCounterRegistrationId(userCounter.id()));
} finally {
ctx.deleteDirectory();
}
}
use of io.aeron.test.driver.TestMediaDriver in project aeron by real-logic.
the class TaggedFlowControlSystemTest method shouldPreventConnectionUntilRequiredGroupSizeMatchTagIsMet.
@SuppressWarnings("methodlength")
@SlowTest
@Test
@InterruptAfter(20)
void shouldPreventConnectionUntilRequiredGroupSizeMatchTagIsMet() {
final Long groupTag = 2701L;
final Integer groupSize = 3;
final ChannelUriStringBuilder builder = new ChannelUriStringBuilder().media("udp").endpoint("224.20.30.39:24326").networkInterface("localhost");
final String uriWithGroupTag = builder.groupTag(groupTag).flowControl((String) null).build();
final String uriPlain = builder.groupTag((Long) null).flowControl((String) null).build();
final String uriWithTaggedFlowControl = builder.groupTag((Long) null).taggedFlowControl(groupTag, groupSize, null).build();
driverBContext.imageLivenessTimeoutNs(TimeUnit.MILLISECONDS.toNanos(500));
launch();
TestMediaDriver driverC = null;
Aeron clientC = null;
TestMediaDriver driverD = null;
Aeron clientD = null;
Publication publication = null;
Subscription subscription0 = null;
Subscription subscription1 = null;
Subscription subscription2 = null;
Subscription subscription3 = null;
Subscription subscription4 = null;
Subscription subscription5 = null;
try {
driverC = TestMediaDriver.launch(new MediaDriver.Context().publicationTermBufferLength(TERM_BUFFER_LENGTH).aeronDirectoryName(ROOT_DIR + "C").timerIntervalNs(TimeUnit.MILLISECONDS.toNanos(100)).errorHandler(Tests::onError).threadingMode(ThreadingMode.SHARED), testWatcher);
clientC = Aeron.connect(new Aeron.Context().aeronDirectoryName(driverC.aeronDirectoryName()));
driverD = TestMediaDriver.launch(new MediaDriver.Context().publicationTermBufferLength(TERM_BUFFER_LENGTH).aeronDirectoryName(ROOT_DIR + "D").timerIntervalNs(TimeUnit.MILLISECONDS.toNanos(100)).errorHandler(Tests::onError).threadingMode(ThreadingMode.SHARED), testWatcher);
clientD = Aeron.connect(new Aeron.Context().aeronDirectoryName(driverD.aeronDirectoryName()));
publication = clientA.addPublication(uriWithTaggedFlowControl, STREAM_ID);
subscription0 = clientA.addSubscription(uriPlain, STREAM_ID);
subscription1 = clientA.addSubscription(uriPlain, STREAM_ID);
subscription2 = clientA.addSubscription(uriPlain, STREAM_ID);
subscription3 = clientB.addSubscription(uriWithGroupTag, STREAM_ID);
subscription4 = clientC.addSubscription(uriWithGroupTag, STREAM_ID);
awaitConnectionAndStatusMessages(clientA.countersReader(), subscription0, subscription1, subscription2, subscription3, subscription4);
assertFalse(publication.isConnected());
subscription5 = clientD.addSubscription(uriWithGroupTag, STREAM_ID);
// Should now have 3 receivers and publication should eventually be connected.
while (!publication.isConnected()) {
Tests.sleep(1);
}
subscription5.close();
subscription5 = null;
// Lost a receiver and publication should eventually be disconnected.
while (publication.isConnected()) {
Tests.sleep(1);
}
subscription5 = clientD.addSubscription(uriWithGroupTag, STREAM_ID);
// Aaaaaand reconnect.
while (!publication.isConnected()) {
Tests.sleep(1);
}
} finally {
CloseHelper.closeAll(publication, subscription0, subscription1, subscription2, subscription3, subscription4, subscription5, clientC, clientD, driverC, driverD);
}
}
use of io.aeron.test.driver.TestMediaDriver in project aeron by real-logic.
the class TimestampingSystemTest method shouldSupportReceiveTimestampsOnMds.
@Test
@InterruptAfter(10)
void shouldSupportReceiveTimestampsOnMds() {
final MutableDirectBuffer buffer = new UnsafeBuffer(new byte[64]);
try (TestMediaDriver driver = driver();
Aeron aeron = Aeron.connect(new Aeron.Context().aeronDirectoryName(driver.aeronDirectoryName()))) {
final Subscription mdsSub = aeron.addSubscription("aeron:udp?control-mode=manual|channel-rcv-ts-offset=0", 1000);
final Publication pub1 = aeron.addPublication("aeron:udp?endpoint=localhost:23424", 1000);
final Publication pub2 = aeron.addPublication("aeron:udp?endpoint=localhost:23425", 1000);
mdsSub.addDestination("aeron:udp?endpoint=localhost:23424");
mdsSub.addDestination("aeron:udp?endpoint=localhost:23425");
while (!pub1.isConnected() || !pub2.isConnected()) {
Tests.yieldingIdle("Failed to connect");
}
buffer.putLong(0, SENTINEL_VALUE);
while (0 > pub1.offer(buffer, 0, buffer.capacity())) {
Tests.yieldingIdle("Failed to offer message");
}
while (0 > pub2.offer(buffer, 0, buffer.capacity())) {
Tests.yieldingIdle("Failed to offer message");
}
final MutableLong sendTimestamp = new MutableLong(SENTINEL_VALUE);
final FragmentHandler fragmentHandler = (buffer1, offset, length, header) -> sendTimestamp.set(buffer1.getLong(offset));
while (1 > mdsSub.poll(fragmentHandler, 1)) {
Tests.yieldingIdle("Failed to receive message");
}
assertNotEquals(SENTINEL_VALUE, sendTimestamp.longValue());
while (1 > mdsSub.poll(fragmentHandler, 1)) {
Tests.yieldingIdle("Failed to receive message");
}
assertNotEquals(SENTINEL_VALUE, sendTimestamp.longValue());
}
}
use of io.aeron.test.driver.TestMediaDriver in project aeron by real-logic.
the class TimestampingSystemTest method shouldSupportSendReceiveTimestamps.
@Test
@InterruptAfter(10)
void shouldSupportSendReceiveTimestamps() {
final MutableDirectBuffer buffer = new UnsafeBuffer(new byte[64]);
try (TestMediaDriver driver = driver();
Aeron aeron = Aeron.connect(new Aeron.Context().aeronDirectoryName(driver.aeronDirectoryName()))) {
final Subscription sub = aeron.addSubscription(CHANNEL_WITH_CHANNEL_TIMESTAMPS, 1000);
while (null == sub.resolvedEndpoint()) {
Tests.yieldingIdle("Failed to resolve endpoint");
}
final String uri = new ChannelUriStringBuilder(CHANNEL_WITH_CHANNEL_TIMESTAMPS).endpoint(requireNonNull(sub.resolvedEndpoint())).build();
final Publication pub = aeron.addPublication(uri, 1000);
Tests.awaitConnected(pub);
buffer.putLong(0, SENTINEL_VALUE);
buffer.putLong(8, SENTINEL_VALUE);
while (0 > pub.offer(buffer, 0, buffer.capacity())) {
Tests.yieldingIdle("Failed to offer message");
}
final MutableLong receiveTimestamp = new MutableLong(SENTINEL_VALUE);
final MutableLong sendTimestamp = new MutableLong(SENTINEL_VALUE);
final FragmentHandler fragmentHandler = (buffer1, offset, length, header) -> {
receiveTimestamp.set(buffer1.getLong(offset));
sendTimestamp.set(buffer1.getLong(offset + 8));
};
while (1 > sub.poll(fragmentHandler, 1)) {
Tests.yieldingIdle("Failed to receive message");
}
assertNotEquals(SENTINEL_VALUE, receiveTimestamp.longValue());
assertNotEquals(SENTINEL_VALUE, sendTimestamp.longValue());
}
}
Aggregations