From e1b9ee247cd8c9ee9423b9d33a50802abc19c9eb Mon Sep 17 00:00:00 2001 From: akwizgran <akwizgran@users.sourceforge.net> Date: Sat, 13 Aug 2011 16:56:00 +0200 Subject: [PATCH] Integration test for the protocol component. --- test/build.xml | 1 + .../briar/protocol/ProtocolReadWriteTest.java | 126 ++++++++++++++++++ 2 files changed, 127 insertions(+) create mode 100644 test/net/sf/briar/protocol/ProtocolReadWriteTest.java diff --git a/test/build.xml b/test/build.xml index 67ff69ddcb..d12ada885d 100644 --- a/test/build.xml +++ b/test/build.xml @@ -27,6 +27,7 @@ <test name='net.sf.briar.protocol.AckReaderTest'/> <test name='net.sf.briar.protocol.BatchReaderTest'/> <test name='net.sf.briar.protocol.ConsumersTest'/> + <test name='net.sf.briar.protocol.ProtocolReadWriteTest'/> <test name='net.sf.briar.protocol.RequestReaderTest'/> <test name='net.sf.briar.protocol.SigningDigestingOutputStreamTest'/> <test name='net.sf.briar.protocol.writers.RequestWriterImplTest'/> diff --git a/test/net/sf/briar/protocol/ProtocolReadWriteTest.java b/test/net/sf/briar/protocol/ProtocolReadWriteTest.java new file mode 100644 index 0000000000..cee401bc54 --- /dev/null +++ b/test/net/sf/briar/protocol/ProtocolReadWriteTest.java @@ -0,0 +1,126 @@ +package net.sf.briar.protocol; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.util.BitSet; +import java.util.Collections; +import java.util.Map; + +import junit.framework.TestCase; +import net.sf.briar.TestUtils; +import net.sf.briar.api.protocol.Ack; +import net.sf.briar.api.protocol.Batch; +import net.sf.briar.api.protocol.BatchId; +import net.sf.briar.api.protocol.Group; +import net.sf.briar.api.protocol.GroupFactory; +import net.sf.briar.api.protocol.Message; +import net.sf.briar.api.protocol.MessageEncoder; +import net.sf.briar.api.protocol.MessageId; +import net.sf.briar.api.protocol.Offer; +import net.sf.briar.api.protocol.ProtocolReader; +import net.sf.briar.api.protocol.ProtocolReaderFactory; +import net.sf.briar.api.protocol.Request; +import net.sf.briar.api.protocol.SubscriptionUpdate; +import net.sf.briar.api.protocol.TransportUpdate; +import net.sf.briar.api.protocol.writers.AckWriter; +import net.sf.briar.api.protocol.writers.BatchWriter; +import net.sf.briar.api.protocol.writers.OfferWriter; +import net.sf.briar.api.protocol.writers.ProtocolWriterFactory; +import net.sf.briar.api.protocol.writers.RequestWriter; +import net.sf.briar.api.protocol.writers.SubscriptionWriter; +import net.sf.briar.api.protocol.writers.TransportWriter; +import net.sf.briar.crypto.CryptoModule; +import net.sf.briar.protocol.writers.WritersModule; +import net.sf.briar.serial.SerialModule; + +import org.junit.Test; + +import com.google.inject.Guice; +import com.google.inject.Injector; + +public class ProtocolReadWriteTest extends TestCase { + + private final ProtocolReaderFactory readerFactory; + private final ProtocolWriterFactory writerFactory; + private final BatchId batchId; + private final Group group; + private final Message message; + private final String messageBody = "Hello world"; + private final BitSet bitSet; + private final Map<Group, Long> subscriptions; + private final Map<String, Map<String, String>> transports; + + public ProtocolReadWriteTest() throws Exception { + super(); + Injector i = Guice.createInjector(new CryptoModule(), + new ProtocolModule(), new SerialModule(), new WritersModule()); + readerFactory = i.getInstance(ProtocolReaderFactory.class); + writerFactory = i.getInstance(ProtocolWriterFactory.class); + batchId = new BatchId(TestUtils.getRandomId()); + GroupFactory groupFactory = i.getInstance(GroupFactory.class); + group = groupFactory.createGroup("Unrestricted group", null); + MessageEncoder messageEncoder = i.getInstance(MessageEncoder.class); + message = messageEncoder.encodeMessage(MessageId.NONE, group, + messageBody.getBytes("UTF-8")); + bitSet = new BitSet(); + bitSet.set(3); + bitSet.set(7); + subscriptions = Collections.singletonMap(group, 123L); + transports = Collections.singletonMap("foo", + Collections.singletonMap("bar", "baz")); + } + + @Test + public void testWriteAndRead() throws Exception { + long start = System.currentTimeMillis(); + + // Write + ByteArrayOutputStream out = new ByteArrayOutputStream(); + + AckWriter a = writerFactory.createAckWriter(out); + a.writeBatchId(batchId); + a.finish(); + + BatchWriter b = writerFactory.createBatchWriter(out); + b.writeMessage(message.getBytes()); + b.finish(); + + OfferWriter o = writerFactory.createOfferWriter(out); + o.writeMessageId(message.getId()); + o.finish(); + + RequestWriter r = writerFactory.createRequestWriter(out); + r.writeBitmap(bitSet, 10); + + SubscriptionWriter s = writerFactory.createSubscriptionWriter(out); + s.writeSubscriptions(subscriptions); + + TransportWriter t = writerFactory.createTransportWriter(out); + t.writeTransports(transports); + + // Read + ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray()); + ProtocolReader reader = readerFactory.createProtocolReader(in); + + Ack ack = reader.readAck(); + assertEquals(Collections.singletonList(batchId), ack.getBatchIds()); + + Batch batch = reader.readBatch(); + assertEquals(Collections.singletonList(message), batch.getMessages()); + + Offer offer = reader.readOffer(); + assertEquals(Collections.singletonList(message.getId()), + offer.getMessageIds()); + + Request request = reader.readRequest(); + assertEquals(bitSet, request.getBitmap()); + + SubscriptionUpdate subscriptionUpdate = reader.readSubscriptionUpdate(); + assertEquals(subscriptions, subscriptionUpdate.getSubscriptions()); + assertTrue(subscriptionUpdate.getTimestamp() >= start); + + TransportUpdate transportUpdate = reader.readTransportUpdate(); + assertEquals(transports, transportUpdate.getTransports()); + assertTrue(transportUpdate.getTimestamp() >= start); + } +} -- GitLab