mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-17 13:19:52 +01:00
Merge branch '1561-wait-for-delivery-in-integration-test' into 'master'
Wait for message delivery in integration test Closes #1561 See merge request briar/briar!1113
This commit is contained in:
@@ -13,6 +13,7 @@ import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
|
|||||||
import org.briarproject.bramble.api.sync.GroupId;
|
import org.briarproject.bramble.api.sync.GroupId;
|
||||||
import org.briarproject.bramble.api.sync.SyncSession;
|
import org.briarproject.bramble.api.sync.SyncSession;
|
||||||
import org.briarproject.bramble.api.sync.SyncSessionFactory;
|
import org.briarproject.bramble.api.sync.SyncSessionFactory;
|
||||||
|
import org.briarproject.bramble.api.sync.event.MessageStateChangedEvent;
|
||||||
import org.briarproject.bramble.api.transport.KeyManager;
|
import org.briarproject.bramble.api.transport.KeyManager;
|
||||||
import org.briarproject.bramble.api.transport.StreamContext;
|
import org.briarproject.bramble.api.transport.StreamContext;
|
||||||
import org.briarproject.bramble.api.transport.StreamReaderFactory;
|
import org.briarproject.bramble.api.transport.StreamReaderFactory;
|
||||||
@@ -24,7 +25,6 @@ import org.briarproject.bramble.lifecycle.LifecycleModule;
|
|||||||
import org.briarproject.bramble.sync.validation.ValidationModule;
|
import org.briarproject.bramble.sync.validation.ValidationModule;
|
||||||
import org.briarproject.bramble.system.SystemModule;
|
import org.briarproject.bramble.system.SystemModule;
|
||||||
import org.briarproject.bramble.test.TestDatabaseModule;
|
import org.briarproject.bramble.test.TestDatabaseModule;
|
||||||
import org.briarproject.bramble.test.TestUtils;
|
|
||||||
import org.briarproject.bramble.transport.TransportModule;
|
import org.briarproject.bramble.transport.TransportModule;
|
||||||
import org.briarproject.bramble.versioning.VersioningModule;
|
import org.briarproject.bramble.versioning.VersioningModule;
|
||||||
import org.briarproject.briar.api.messaging.MessagingManager;
|
import org.briarproject.briar.api.messaging.MessagingManager;
|
||||||
@@ -40,11 +40,15 @@ import java.io.ByteArrayInputStream;
|
|||||||
import java.io.ByteArrayOutputStream;
|
import java.io.ByteArrayOutputStream;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
|
import java.util.concurrent.CountDownLatch;
|
||||||
|
|
||||||
import static java.util.Collections.emptyList;
|
import static java.util.Collections.emptyList;
|
||||||
|
import static java.util.concurrent.TimeUnit.MILLISECONDS;
|
||||||
|
import static org.briarproject.bramble.api.sync.validation.MessageState.DELIVERED;
|
||||||
import static org.briarproject.bramble.api.transport.TransportConstants.TAG_LENGTH;
|
import static org.briarproject.bramble.api.transport.TransportConstants.TAG_LENGTH;
|
||||||
import static org.briarproject.bramble.test.TestPluginConfigModule.MAX_LATENCY;
|
import static org.briarproject.bramble.test.TestPluginConfigModule.MAX_LATENCY;
|
||||||
import static org.briarproject.bramble.test.TestPluginConfigModule.TRANSPORT_ID;
|
import static org.briarproject.bramble.test.TestPluginConfigModule.TRANSPORT_ID;
|
||||||
|
import static org.briarproject.bramble.test.TestUtils.deleteTestDirectory;
|
||||||
import static org.briarproject.bramble.test.TestUtils.getSecretKey;
|
import static org.briarproject.bramble.test.TestUtils.getSecretKey;
|
||||||
import static org.briarproject.bramble.test.TestUtils.getTestDirectory;
|
import static org.briarproject.bramble.test.TestUtils.getTestDirectory;
|
||||||
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.assertEquals;
|
||||||
@@ -53,6 +57,8 @@ import static org.junit.Assert.assertTrue;
|
|||||||
|
|
||||||
public class SimplexMessagingIntegrationTest extends BriarTestCase {
|
public class SimplexMessagingIntegrationTest extends BriarTestCase {
|
||||||
|
|
||||||
|
private static final int TIMEOUT_MS = 5_000;
|
||||||
|
|
||||||
private final File testDir = getTestDirectory();
|
private final File testDir = getTestDirectory();
|
||||||
private final File aliceDir = new File(testDir, "alice");
|
private final File aliceDir = new File(testDir, "alice");
|
||||||
private final File bobDir = new File(testDir, "bob");
|
private final File bobDir = new File(testDir, "bob");
|
||||||
@@ -88,14 +94,12 @@ public class SimplexMessagingIntegrationTest extends BriarTestCase {
|
|||||||
bob.getEventBus().addListener(listener);
|
bob.getEventBus().addListener(listener);
|
||||||
// Alice sends a private message to Bob
|
// Alice sends a private message to Bob
|
||||||
sendMessage(alice, bobId);
|
sendMessage(alice, bobId);
|
||||||
// Send three simplex streams to exchange client versions and the
|
// Sync Alice's client versions and transport properties
|
||||||
// private message
|
read(bob, aliceId, write(alice, bobId), 2);
|
||||||
read(bob, aliceId, write(alice, bobId));
|
// Sync Bob's client versions and transport properties
|
||||||
read(alice, bobId, write(bob, aliceId));
|
read(alice, bobId, write(bob, aliceId), 2);
|
||||||
read(bob, aliceId, write(alice, bobId));
|
// Sync the private message
|
||||||
// Tear down the devices
|
read(bob, aliceId, write(alice, bobId), 1);
|
||||||
tearDown(alice);
|
|
||||||
tearDown(bob);
|
|
||||||
// Bob should have received the private message
|
// Bob should have received the private message
|
||||||
assertTrue(listener.messageAdded);
|
assertTrue(listener.messageAdded);
|
||||||
}
|
}
|
||||||
@@ -128,7 +132,12 @@ public class SimplexMessagingIntegrationTest extends BriarTestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void read(SimplexMessagingIntegrationTestComponent device,
|
private void read(SimplexMessagingIntegrationTestComponent device,
|
||||||
ContactId contactId, byte[] stream) throws Exception {
|
ContactId contactId, byte[] stream, int deliveries)
|
||||||
|
throws Exception {
|
||||||
|
// Listen for message deliveries
|
||||||
|
MessageDeliveryListener listener =
|
||||||
|
new MessageDeliveryListener(deliveries);
|
||||||
|
device.getEventBus().addListener(listener);
|
||||||
// Read and recognise the tag
|
// Read and recognise the tag
|
||||||
ByteArrayInputStream in = new ByteArrayInputStream(stream);
|
ByteArrayInputStream in = new ByteArrayInputStream(stream);
|
||||||
byte[] tag = new byte[TAG_LENGTH];
|
byte[] tag = new byte[TAG_LENGTH];
|
||||||
@@ -149,6 +158,10 @@ public class SimplexMessagingIntegrationTest extends BriarTestCase {
|
|||||||
// Read whatever needs to be read
|
// Read whatever needs to be read
|
||||||
session.run();
|
session.run();
|
||||||
streamReader.close();
|
streamReader.close();
|
||||||
|
// Wait for the messages to be delivered
|
||||||
|
assertTrue(listener.delivered.await(TIMEOUT_MS, MILLISECONDS));
|
||||||
|
// Clean up the listener
|
||||||
|
device.getEventBus().removeListener(listener);
|
||||||
}
|
}
|
||||||
|
|
||||||
private byte[] write(SimplexMessagingIntegrationTestComponent device,
|
private byte[] write(SimplexMessagingIntegrationTestComponent device,
|
||||||
@@ -184,8 +197,11 @@ public class SimplexMessagingIntegrationTest extends BriarTestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@After
|
@After
|
||||||
public void tearDown() {
|
public void tearDown() throws Exception {
|
||||||
TestUtils.deleteTestDirectory(testDir);
|
// Tear down the devices
|
||||||
|
tearDown(alice);
|
||||||
|
tearDown(bob);
|
||||||
|
deleteTestDirectory(testDir);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void injectEagerSingletons(
|
private static void injectEagerSingletons(
|
||||||
@@ -200,6 +216,24 @@ public class SimplexMessagingIntegrationTest extends BriarTestCase {
|
|||||||
component.inject(new VersioningModule.EagerSingletons());
|
component.inject(new VersioningModule.EagerSingletons());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NotNullByDefault
|
||||||
|
private static class MessageDeliveryListener implements EventListener {
|
||||||
|
|
||||||
|
private final CountDownLatch delivered;
|
||||||
|
|
||||||
|
private MessageDeliveryListener(int deliveries) {
|
||||||
|
delivered = new CountDownLatch(deliveries);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void eventOccurred(Event e) {
|
||||||
|
if (e instanceof MessageStateChangedEvent) {
|
||||||
|
MessageStateChangedEvent m = (MessageStateChangedEvent) e;
|
||||||
|
if (m.getState().equals(DELIVERED)) delivered.countDown();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@NotNullByDefault
|
@NotNullByDefault
|
||||||
private static class PrivateMessageListener implements EventListener {
|
private static class PrivateMessageListener implements EventListener {
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user