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:
Torsten Grote
2019-05-30 15:25:08 +00:00

View File

@@ -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 {