From 5860c723de4baf07984f72669dc253003cc0f4c0 Mon Sep 17 00:00:00 2001 From: akwizgran Date: Fri, 31 May 2019 17:18:49 +0100 Subject: [PATCH 1/4] Remove unused test module. --- .../test/TestCryptoExecutorModule.java | 21 ------------------- 1 file changed, 21 deletions(-) delete mode 100644 bramble-core/src/test/java/org/briarproject/bramble/test/TestCryptoExecutorModule.java diff --git a/bramble-core/src/test/java/org/briarproject/bramble/test/TestCryptoExecutorModule.java b/bramble-core/src/test/java/org/briarproject/bramble/test/TestCryptoExecutorModule.java deleted file mode 100644 index 3fabc08d5..000000000 --- a/bramble-core/src/test/java/org/briarproject/bramble/test/TestCryptoExecutorModule.java +++ /dev/null @@ -1,21 +0,0 @@ -package org.briarproject.bramble.test; - -import org.briarproject.bramble.api.crypto.CryptoExecutor; - -import java.util.concurrent.Executor; - -import javax.inject.Singleton; - -import dagger.Module; -import dagger.Provides; - -@Module -public class TestCryptoExecutorModule { - - @Provides - @Singleton - @CryptoExecutor - Executor provideCryptoExecutor() { - return new ImmediateExecutor(); - } -} From f8d240a320e13a279751830a1c48c7279401438e Mon Sep 17 00:00:00 2001 From: akwizgran Date: Fri, 31 May 2019 16:56:03 +0100 Subject: [PATCH 2/4] Test stream reading and writing at a higher level. --- .../bramble/test/TestPluginConfigModule.java | 31 ++++++-- .../test/TestTransportConnectionReader.java | 29 ++++++++ .../test/TestTransportConnectionWriter.java | 45 +++++++++++ .../IntroductionIntegrationTest.java | 8 +- .../SimplexMessagingIntegrationTest.java | 74 +++++-------------- ...plexMessagingIntegrationTestComponent.java | 13 +--- 6 files changed, 126 insertions(+), 74 deletions(-) create mode 100644 bramble-core/src/test/java/org/briarproject/bramble/test/TestTransportConnectionReader.java create mode 100644 bramble-core/src/test/java/org/briarproject/bramble/test/TestTransportConnectionWriter.java diff --git a/bramble-core/src/test/java/org/briarproject/bramble/test/TestPluginConfigModule.java b/bramble-core/src/test/java/org/briarproject/bramble/test/TestPluginConfigModule.java index 02d63142c..689d4c5bd 100644 --- a/bramble-core/src/test/java/org/briarproject/bramble/test/TestPluginConfigModule.java +++ b/bramble-core/src/test/java/org/briarproject/bramble/test/TestPluginConfigModule.java @@ -4,6 +4,7 @@ import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.plugin.PluginCallback; import org.briarproject.bramble.api.plugin.PluginConfig; import org.briarproject.bramble.api.plugin.TransportId; +import org.briarproject.bramble.api.plugin.duplex.DuplexPlugin; import org.briarproject.bramble.api.plugin.duplex.DuplexPluginFactory; import org.briarproject.bramble.api.plugin.simplex.SimplexPlugin; import org.briarproject.bramble.api.plugin.simplex.SimplexPluginFactory; @@ -15,22 +16,22 @@ import javax.annotation.Nullable; import dagger.Module; import dagger.Provides; -import static java.util.Collections.emptyList; import static java.util.Collections.singletonList; import static org.briarproject.bramble.test.TestUtils.getTransportId; @Module public class TestPluginConfigModule { - public static final TransportId TRANSPORT_ID = getTransportId(); - public static final int MAX_LATENCY = 2 * 60 * 1000; // 2 minutes + public static final TransportId SIMPLEX_TRANSPORT_ID = getTransportId(); + public static final TransportId DUPLEX_TRANSPORT_ID = getTransportId(); + public static final int MAX_LATENCY = 30_000; // 30 seconds @NotNullByDefault private final SimplexPluginFactory simplex = new SimplexPluginFactory() { @Override public TransportId getId() { - return TRANSPORT_ID; + return SIMPLEX_TRANSPORT_ID; } @Override @@ -45,6 +46,26 @@ public class TestPluginConfigModule { } }; + @NotNullByDefault + private final DuplexPluginFactory duplex = new DuplexPluginFactory() { + + @Override + public TransportId getId() { + return DUPLEX_TRANSPORT_ID; + } + + @Override + public int getMaxLatency() { + return MAX_LATENCY; + } + + @Nullable + @Override + public DuplexPlugin createPlugin(PluginCallback callback) { + return null; + } + }; + @Provides PluginConfig providePluginConfig() { @NotNullByDefault @@ -52,7 +73,7 @@ public class TestPluginConfigModule { @Override public Collection getDuplexFactories() { - return emptyList(); + return singletonList(duplex); } @Override diff --git a/bramble-core/src/test/java/org/briarproject/bramble/test/TestTransportConnectionReader.java b/bramble-core/src/test/java/org/briarproject/bramble/test/TestTransportConnectionReader.java new file mode 100644 index 000000000..bc8c3a122 --- /dev/null +++ b/bramble-core/src/test/java/org/briarproject/bramble/test/TestTransportConnectionReader.java @@ -0,0 +1,29 @@ +package org.briarproject.bramble.test; + +import org.briarproject.bramble.api.nullsafety.NotNullByDefault; +import org.briarproject.bramble.api.plugin.TransportConnectionReader; + +import java.io.InputStream; + +import javax.annotation.concurrent.ThreadSafe; + +@ThreadSafe +@NotNullByDefault +public class TestTransportConnectionReader + implements TransportConnectionReader { + + private final InputStream in; + + public TestTransportConnectionReader(InputStream in) { + this.in = in; + } + + @Override + public InputStream getInputStream() { + return in; + } + + @Override + public void dispose(boolean exception, boolean recognised) { + } +} diff --git a/bramble-core/src/test/java/org/briarproject/bramble/test/TestTransportConnectionWriter.java b/bramble-core/src/test/java/org/briarproject/bramble/test/TestTransportConnectionWriter.java new file mode 100644 index 000000000..770290ab8 --- /dev/null +++ b/bramble-core/src/test/java/org/briarproject/bramble/test/TestTransportConnectionWriter.java @@ -0,0 +1,45 @@ +package org.briarproject.bramble.test; + +import org.briarproject.bramble.api.nullsafety.NotNullByDefault; +import org.briarproject.bramble.api.plugin.TransportConnectionWriter; + +import java.io.OutputStream; +import java.util.concurrent.CountDownLatch; + +import javax.annotation.concurrent.ThreadSafe; + +@ThreadSafe +@NotNullByDefault +public class TestTransportConnectionWriter implements TransportConnectionWriter { + + private final OutputStream out; + private final CountDownLatch disposed = new CountDownLatch(1); + + public TestTransportConnectionWriter(OutputStream out) { + this.out = out; + } + + public CountDownLatch getDisposedLatch() { + return disposed; + } + + @Override + public int getMaxLatency() { + return 30_000; + } + + @Override + public int getMaxIdleTime() { + return 60_000; + } + + @Override + public OutputStream getOutputStream() { + return out; + } + + @Override + public void dispose(boolean exception) { + disposed.countDown(); + } +} diff --git a/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionIntegrationTest.java b/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionIntegrationTest.java index 4842511a0..0f67adf40 100644 --- a/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionIntegrationTest.java +++ b/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionIntegrationTest.java @@ -42,7 +42,7 @@ import java.util.Collection; import java.util.Map; import java.util.concurrent.TimeoutException; -import static org.briarproject.bramble.test.TestPluginConfigModule.TRANSPORT_ID; +import static org.briarproject.bramble.test.TestPluginConfigModule.SIMPLEX_TRANSPORT_ID; import static org.briarproject.bramble.test.TestUtils.getAgreementPublicKey; import static org.briarproject.bramble.test.TestUtils.getSecretKey; import static org.briarproject.bramble.test.TestUtils.getTransportProperties; @@ -1163,14 +1163,14 @@ public class IntroductionIntegrationTest TransportPropertyManager tpm1 = c1.getTransportPropertyManager(); TransportPropertyManager tpm2 = c2.getTransportPropertyManager(); - tpm0.mergeLocalProperties(TRANSPORT_ID, getTransportProperties(2)); + tpm0.mergeLocalProperties(SIMPLEX_TRANSPORT_ID, getTransportProperties(2)); sync0To1(1, true); sync0To2(1, true); - tpm1.mergeLocalProperties(TRANSPORT_ID, getTransportProperties(2)); + tpm1.mergeLocalProperties(SIMPLEX_TRANSPORT_ID, getTransportProperties(2)); sync1To0(1, true); - tpm2.mergeLocalProperties(TRANSPORT_ID, getTransportProperties(2)); + tpm2.mergeLocalProperties(SIMPLEX_TRANSPORT_ID, getTransportProperties(2)); sync2To0(1, true); } diff --git a/briar-core/src/test/java/org/briarproject/briar/messaging/SimplexMessagingIntegrationTest.java b/briar-core/src/test/java/org/briarproject/briar/messaging/SimplexMessagingIntegrationTest.java index 9f3719676..0b2f07309 100644 --- a/briar-core/src/test/java/org/briarproject/briar/messaging/SimplexMessagingIntegrationTest.java +++ b/briar-core/src/test/java/org/briarproject/briar/messaging/SimplexMessagingIntegrationTest.java @@ -11,15 +11,10 @@ import org.briarproject.bramble.api.identity.IdentityManager; import org.briarproject.bramble.api.lifecycle.LifecycleManager; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.sync.GroupId; -import org.briarproject.bramble.api.sync.SyncSession; -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.StreamContext; -import org.briarproject.bramble.api.transport.StreamReaderFactory; -import org.briarproject.bramble.api.transport.StreamWriter; -import org.briarproject.bramble.api.transport.StreamWriterFactory; import org.briarproject.bramble.test.TestDatabaseConfigModule; +import org.briarproject.bramble.test.TestTransportConnectionReader; +import org.briarproject.bramble.test.TestTransportConnectionWriter; import org.briarproject.briar.api.messaging.MessagingManager; import org.briarproject.briar.api.messaging.PrivateMessage; import org.briarproject.briar.api.messaging.PrivateMessageFactory; @@ -32,20 +27,15 @@ import org.junit.Test; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; -import java.io.InputStream; import java.util.concurrent.CountDownLatch; 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.test.TestPluginConfigModule.MAX_LATENCY; -import static org.briarproject.bramble.test.TestPluginConfigModule.TRANSPORT_ID; +import static org.briarproject.bramble.test.TestPluginConfigModule.SIMPLEX_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.getTestDirectory; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; public class SimplexMessagingIntegrationTest extends BriarTestCase { @@ -55,6 +45,7 @@ public class SimplexMessagingIntegrationTest extends BriarTestCase { private final File testDir = getTestDirectory(); private final File aliceDir = new File(testDir, "alice"); private final File bobDir = new File(testDir, "bob"); + private final SecretKey rootKey = getSecretKey(); private final long timestamp = System.currentTimeMillis(); @@ -90,11 +81,11 @@ public class SimplexMessagingIntegrationTest extends BriarTestCase { // Alice sends a private message to Bob sendMessage(alice, bobId); // Sync Alice's client versions and transport properties - read(bob, aliceId, write(alice, bobId), 2); + read(bob, write(alice, bobId), 2); // Sync Bob's client versions and transport properties - read(alice, bobId, write(bob, aliceId), 2); + read(alice, write(bob, aliceId), 2); // Sync the private message - read(bob, aliceId, write(alice, bobId), 1); + read(bob, write(alice, bobId), 1); // Bob should have received the private message assertTrue(listener.messageAdded); } @@ -127,32 +118,17 @@ public class SimplexMessagingIntegrationTest extends BriarTestCase { } private void read(SimplexMessagingIntegrationTestComponent device, - ContactId contactId, byte[] stream, int deliveries) - throws Exception { + 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 the incoming stream ByteArrayInputStream in = new ByteArrayInputStream(stream); - byte[] tag = new byte[TAG_LENGTH]; - int read = in.read(tag); - assertEquals(tag.length, read); - KeyManager keyManager = device.getKeyManager(); - StreamContext ctx = keyManager.getStreamContext(TRANSPORT_ID, tag); - assertNotNull(ctx); - // Create a stream reader - StreamReaderFactory streamReaderFactory = - device.getStreamReaderFactory(); - InputStream streamReader = streamReaderFactory.createStreamReader( - in, ctx); - // Create an incoming sync session - SyncSessionFactory syncSessionFactory = device.getSyncSessionFactory(); - SyncSession session = syncSessionFactory.createIncomingSession( - contactId, streamReader); - // Read whatever needs to be read - session.run(); - streamReader.close(); + TestTransportConnectionReader reader = + new TestTransportConnectionReader(in); + device.getConnectionManager().manageIncomingConnection( + SIMPLEX_TRANSPORT_ID, reader); // Wait for the messages to be delivered assertTrue(listener.delivered.await(TIMEOUT_MS, MILLISECONDS)); // Clean up the listener @@ -161,24 +137,14 @@ public class SimplexMessagingIntegrationTest extends BriarTestCase { private byte[] write(SimplexMessagingIntegrationTestComponent device, ContactId contactId) throws Exception { + // Write the outgoing stream ByteArrayOutputStream out = new ByteArrayOutputStream(); - // Get a stream context - KeyManager keyManager = device.getKeyManager(); - StreamContext ctx = keyManager.getStreamContext(contactId, - TRANSPORT_ID); - assertNotNull(ctx); - // Create a stream writer - StreamWriterFactory streamWriterFactory = - device.getStreamWriterFactory(); - StreamWriter streamWriter = - streamWriterFactory.createStreamWriter(out, ctx); - // Create an outgoing sync session - SyncSessionFactory syncSessionFactory = device.getSyncSessionFactory(); - SyncSession session = syncSessionFactory.createSimplexOutgoingSession( - contactId, MAX_LATENCY, streamWriter); - // Write whatever needs to be written - session.run(); - streamWriter.sendEndOfStream(); + TestTransportConnectionWriter writer = + new TestTransportConnectionWriter(out); + device.getConnectionManager().manageOutgoingConnection(contactId, + SIMPLEX_TRANSPORT_ID, writer); + // Wait for the writer to be disposed + writer.getDisposedLatch().await(TIMEOUT_MS, MILLISECONDS); // Return the contents of the stream return out.toByteArray(); } diff --git a/briar-core/src/test/java/org/briarproject/briar/messaging/SimplexMessagingIntegrationTestComponent.java b/briar-core/src/test/java/org/briarproject/briar/messaging/SimplexMessagingIntegrationTestComponent.java index ed43f4bef..ab92f6acf 100644 --- a/briar-core/src/test/java/org/briarproject/briar/messaging/SimplexMessagingIntegrationTestComponent.java +++ b/briar-core/src/test/java/org/briarproject/briar/messaging/SimplexMessagingIntegrationTestComponent.java @@ -6,10 +6,7 @@ import org.briarproject.bramble.api.contact.ContactManager; import org.briarproject.bramble.api.event.EventBus; import org.briarproject.bramble.api.identity.IdentityManager; import org.briarproject.bramble.api.lifecycle.LifecycleManager; -import org.briarproject.bramble.api.sync.SyncSessionFactory; -import org.briarproject.bramble.api.transport.KeyManager; -import org.briarproject.bramble.api.transport.StreamReaderFactory; -import org.briarproject.bramble.api.transport.StreamWriterFactory; +import org.briarproject.bramble.api.plugin.ConnectionManager; import org.briarproject.bramble.test.BrambleCoreIntegrationTestModule; import org.briarproject.briar.api.messaging.MessagingManager; import org.briarproject.briar.api.messaging.PrivateMessageFactory; @@ -44,15 +41,9 @@ interface SimplexMessagingIntegrationTestComponent MessagingManager getMessagingManager(); - KeyManager getKeyManager(); - PrivateMessageFactory getPrivateMessageFactory(); EventBus getEventBus(); - StreamWriterFactory getStreamWriterFactory(); - - StreamReaderFactory getStreamReaderFactory(); - - SyncSessionFactory getSyncSessionFactory(); + ConnectionManager getConnectionManager(); } From 85a1fd2caa0c2ed3dccbae8b6563664f84b92305 Mon Sep 17 00:00:00 2001 From: akwizgran Date: Fri, 31 May 2019 17:17:24 +0100 Subject: [PATCH 3/4] Convert BriarIntegrationTest to use test reader and writer. --- .../IntroductionIntegrationTest.java | 29 ++--- .../briar/test/BriarIntegrationTest.java | 122 ++++++++---------- .../test/BriarIntegrationTestComponent.java | 6 +- 3 files changed, 68 insertions(+), 89 deletions(-) diff --git a/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionIntegrationTest.java b/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionIntegrationTest.java index 0f67adf40..e8bd96dab 100644 --- a/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionIntegrationTest.java +++ b/briar-core/src/test/java/org/briarproject/briar/introduction/IntroductionIntegrationTest.java @@ -7,6 +7,7 @@ import org.briarproject.bramble.api.client.ClientHelper; import org.briarproject.bramble.api.contact.Contact; import org.briarproject.bramble.api.contact.ContactId; import org.briarproject.bramble.api.contact.event.ContactAddedEvent; +import org.briarproject.bramble.api.crypto.SecretKey; import org.briarproject.bramble.api.data.BdfDictionary; import org.briarproject.bramble.api.data.BdfEntry; import org.briarproject.bramble.api.data.BdfList; @@ -37,10 +38,8 @@ import org.briarproject.briar.test.BriarIntegrationTest; import org.junit.Before; import org.junit.Test; -import java.io.IOException; import java.util.Collection; import java.util.Map; -import java.util.concurrent.TimeoutException; import static org.briarproject.bramble.test.TestPluginConfigModule.SIMPLEX_TRANSPORT_ID; import static org.briarproject.bramble.test.TestUtils.getAgreementPublicKey; @@ -1009,13 +1008,12 @@ public class IntroductionIntegrationTest // 0 and 1 remove and re-add each other contactManager0.removeContact(contactId1From0); contactManager1.removeContact(contactId0From1); - contactId1From0 = contactManager0 - .addContact(author1, author0.getId(), getSecretKey(), - clock.currentTimeMillis(), true, true, true); + SecretKey rootKey0_1 = getSecretKey(); + contactId1From0 = contactManager0.addContact(author1, author0.getId(), + rootKey0_1, clock.currentTimeMillis(), true, true, true); contact1From0 = contactManager0.getContact(contactId1From0); - contactId0From1 = contactManager1 - .addContact(author0, author1.getId(), getSecretKey(), - clock.currentTimeMillis(), true, true, true); + contactId0From1 = contactManager1.addContact(author0, author1.getId(), + rootKey0_1, clock.currentTimeMillis(), false, true, true); contact0From1 = contactManager1.getContact(contactId0From1); // Sync initial client versioning updates and transport properties @@ -1044,8 +1042,7 @@ public class IntroductionIntegrationTest assertTrue(listener1.requestReceived); } - private void testModifiedResponse(StateVisitor visitor) - throws Exception { + private void testModifiedResponse(StateVisitor visitor) throws Exception { addListeners(true, true); // make introduction @@ -1157,20 +1154,22 @@ public class IntroductionIntegrationTest ); } - private void addTransportProperties() - throws DbException, IOException, TimeoutException { + private void addTransportProperties() throws Exception { TransportPropertyManager tpm0 = c0.getTransportPropertyManager(); TransportPropertyManager tpm1 = c1.getTransportPropertyManager(); TransportPropertyManager tpm2 = c2.getTransportPropertyManager(); - tpm0.mergeLocalProperties(SIMPLEX_TRANSPORT_ID, getTransportProperties(2)); + tpm0.mergeLocalProperties(SIMPLEX_TRANSPORT_ID, + getTransportProperties(2)); sync0To1(1, true); sync0To2(1, true); - tpm1.mergeLocalProperties(SIMPLEX_TRANSPORT_ID, getTransportProperties(2)); + tpm1.mergeLocalProperties(SIMPLEX_TRANSPORT_ID, + getTransportProperties(2)); sync1To0(1, true); - tpm2.mergeLocalProperties(SIMPLEX_TRANSPORT_ID, getTransportProperties(2)); + tpm2.mergeLocalProperties(SIMPLEX_TRANSPORT_ID, + getTransportProperties(2)); sync2To0(1, true); } diff --git a/briar-core/src/test/java/org/briarproject/briar/test/BriarIntegrationTest.java b/briar-core/src/test/java/org/briarproject/briar/test/BriarIntegrationTest.java index 8d79f4c34..c5f69d771 100644 --- a/briar-core/src/test/java/org/briarproject/briar/test/BriarIntegrationTest.java +++ b/briar-core/src/test/java/org/briarproject/briar/test/BriarIntegrationTest.java @@ -9,6 +9,7 @@ import org.briarproject.bramble.api.contact.Contact; import org.briarproject.bramble.api.contact.ContactId; import org.briarproject.bramble.api.contact.ContactManager; import org.briarproject.bramble.api.crypto.CryptoComponent; +import org.briarproject.bramble.api.crypto.SecretKey; import org.briarproject.bramble.api.data.BdfList; import org.briarproject.bramble.api.data.BdfStringUtils; import org.briarproject.bramble.api.db.DatabaseComponent; @@ -23,11 +24,10 @@ import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault; import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault; import org.briarproject.bramble.api.sync.MessageFactory; import org.briarproject.bramble.api.sync.MessageId; -import org.briarproject.bramble.api.sync.SyncSession; -import org.briarproject.bramble.api.sync.SyncSessionFactory; import org.briarproject.bramble.api.sync.event.MessageStateChangedEvent; import org.briarproject.bramble.api.system.Clock; -import org.briarproject.bramble.api.transport.StreamWriter; +import org.briarproject.bramble.test.TestTransportConnectionReader; +import org.briarproject.bramble.test.TestTransportConnectionWriter; import org.briarproject.bramble.test.TestUtils; import org.briarproject.briar.api.blog.BlogFactory; import org.briarproject.briar.api.blog.BlogPostFactory; @@ -43,10 +43,8 @@ import org.junit.Before; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; -import java.io.IOException; import java.util.concurrent.Executor; import java.util.concurrent.Semaphore; -import java.util.concurrent.TimeoutException; import java.util.concurrent.atomic.AtomicInteger; import java.util.logging.Logger; @@ -56,11 +54,12 @@ import javax.inject.Inject; import static java.util.concurrent.Executors.newSingleThreadExecutor; import static java.util.concurrent.TimeUnit.MILLISECONDS; import static java.util.logging.Level.WARNING; +import static java.util.logging.Logger.getLogger; import static junit.framework.Assert.assertNotNull; import static org.briarproject.bramble.api.sync.validation.MessageState.DELIVERED; import static org.briarproject.bramble.api.sync.validation.MessageState.INVALID; import static org.briarproject.bramble.api.sync.validation.MessageState.PENDING; -import static org.briarproject.bramble.test.TestPluginConfigModule.MAX_LATENCY; +import static org.briarproject.bramble.test.TestPluginConfigModule.SIMPLEX_TRANSPORT_ID; import static org.briarproject.bramble.test.TestUtils.getSecretKey; import static org.briarproject.bramble.util.LogUtils.logException; import static org.junit.Assert.assertEquals; @@ -73,9 +72,12 @@ public abstract class BriarIntegrationTest Date: Fri, 31 May 2019 17:48:45 +0100 Subject: [PATCH 4/4] Add test implementation of DuplexTransportConnection. --- .../test/TestDuplexTransportConnection.java | 55 +++++++++++++++++++ .../test/TestTransportConnectionReader.java | 5 +- .../test/TestTransportConnectionWriter.java | 7 ++- 3 files changed, 64 insertions(+), 3 deletions(-) create mode 100644 bramble-core/src/test/java/org/briarproject/bramble/test/TestDuplexTransportConnection.java diff --git a/bramble-core/src/test/java/org/briarproject/bramble/test/TestDuplexTransportConnection.java b/bramble-core/src/test/java/org/briarproject/bramble/test/TestDuplexTransportConnection.java new file mode 100644 index 000000000..6457f8191 --- /dev/null +++ b/bramble-core/src/test/java/org/briarproject/bramble/test/TestDuplexTransportConnection.java @@ -0,0 +1,55 @@ +package org.briarproject.bramble.test; + +import org.briarproject.bramble.api.nullsafety.NotNullByDefault; +import org.briarproject.bramble.api.plugin.TransportConnectionReader; +import org.briarproject.bramble.api.plugin.TransportConnectionWriter; +import org.briarproject.bramble.api.plugin.duplex.DuplexTransportConnection; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.io.PipedInputStream; +import java.io.PipedOutputStream; + +import javax.annotation.concurrent.ThreadSafe; + +@ThreadSafe +@NotNullByDefault +public class TestDuplexTransportConnection + implements DuplexTransportConnection { + + private final TransportConnectionReader reader; + private final TransportConnectionWriter writer; + + public TestDuplexTransportConnection(InputStream in, OutputStream out) { + reader = new TestTransportConnectionReader(in); + writer = new TestTransportConnectionWriter(out); + } + + @Override + public TransportConnectionReader getReader() { + return reader; + } + + @Override + public TransportConnectionWriter getWriter() { + return writer; + } + + /** + * Creates and returns a pair of TestDuplexTransportConnections that are + * connected to each other. + */ + public static TestDuplexTransportConnection[] createPair() + throws IOException { + PipedInputStream aliceIn = new PipedInputStream(); + PipedInputStream bobIn = new PipedInputStream(); + PipedOutputStream aliceOut = new PipedOutputStream(bobIn); + PipedOutputStream bobOut = new PipedOutputStream(aliceIn); + TestDuplexTransportConnection alice = + new TestDuplexTransportConnection(aliceIn, aliceOut); + TestDuplexTransportConnection bob = + new TestDuplexTransportConnection(bobIn, bobOut); + return new TestDuplexTransportConnection[] {alice, bob}; + } +} diff --git a/bramble-core/src/test/java/org/briarproject/bramble/test/TestTransportConnectionReader.java b/bramble-core/src/test/java/org/briarproject/bramble/test/TestTransportConnectionReader.java index bc8c3a122..866813b8d 100644 --- a/bramble-core/src/test/java/org/briarproject/bramble/test/TestTransportConnectionReader.java +++ b/bramble-core/src/test/java/org/briarproject/bramble/test/TestTransportConnectionReader.java @@ -3,6 +3,7 @@ package org.briarproject.bramble.test; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.plugin.TransportConnectionReader; +import java.io.IOException; import java.io.InputStream; import javax.annotation.concurrent.ThreadSafe; @@ -24,6 +25,8 @@ public class TestTransportConnectionReader } @Override - public void dispose(boolean exception, boolean recognised) { + public void dispose(boolean exception, boolean recognised) + throws IOException { + in.close(); } } diff --git a/bramble-core/src/test/java/org/briarproject/bramble/test/TestTransportConnectionWriter.java b/bramble-core/src/test/java/org/briarproject/bramble/test/TestTransportConnectionWriter.java index 770290ab8..238208207 100644 --- a/bramble-core/src/test/java/org/briarproject/bramble/test/TestTransportConnectionWriter.java +++ b/bramble-core/src/test/java/org/briarproject/bramble/test/TestTransportConnectionWriter.java @@ -3,6 +3,7 @@ package org.briarproject.bramble.test; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.plugin.TransportConnectionWriter; +import java.io.IOException; import java.io.OutputStream; import java.util.concurrent.CountDownLatch; @@ -10,7 +11,8 @@ import javax.annotation.concurrent.ThreadSafe; @ThreadSafe @NotNullByDefault -public class TestTransportConnectionWriter implements TransportConnectionWriter { +public class TestTransportConnectionWriter + implements TransportConnectionWriter { private final OutputStream out; private final CountDownLatch disposed = new CountDownLatch(1); @@ -39,7 +41,8 @@ public class TestTransportConnectionWriter implements TransportConnectionWriter } @Override - public void dispose(boolean exception) { + public void dispose(boolean exception) throws IOException { disposed.countDown(); + out.close(); } }