From 0fce224d88472778b96eac7092ecd9d2c4a7ef29 Mon Sep 17 00:00:00 2001 From: akwizgran Date: Fri, 24 Aug 2018 16:18:38 +0100 Subject: [PATCH 1/5] Add method for getting cooked message from DB. --- .../bramble/api/db/DatabaseComponent.java | 9 +++++++ .../org/briarproject/bramble/db/Database.java | 9 +++++++ .../bramble/db/DatabaseComponentImpl.java | 9 +++++++ .../briarproject/bramble/db/JdbcDatabase.java | 26 +++++++++++++++++++ .../bramble/db/DatabaseComponentImplTest.java | 16 +++++++++--- .../bramble/db/JdbcDatabaseTest.java | 15 +++++++++++ 6 files changed, 81 insertions(+), 3 deletions(-) diff --git a/bramble-api/src/main/java/org/briarproject/bramble/api/db/DatabaseComponent.java b/bramble-api/src/main/java/org/briarproject/bramble/api/db/DatabaseComponent.java index 6de023cba..e86153d78 100644 --- a/bramble-api/src/main/java/org/briarproject/bramble/api/db/DatabaseComponent.java +++ b/bramble-api/src/main/java/org/briarproject/bramble/api/db/DatabaseComponent.java @@ -263,6 +263,15 @@ public interface DatabaseComponent { */ Collection getLocalAuthors(Transaction txn) throws DbException; + /** + * Returns the message with the given ID. + *

+ * Read-only. + * + * @throws MessageDeletedException if the message has been deleted + */ + Message getMessage(Transaction txn, MessageId m) throws DbException; + /** * Returns the IDs of all delivered messages in the given group. *

diff --git a/bramble-core/src/main/java/org/briarproject/bramble/db/Database.java b/bramble-core/src/main/java/org/briarproject/bramble/db/Database.java index 93a573f85..1ad252584 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/db/Database.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/db/Database.java @@ -298,6 +298,15 @@ interface Database { */ Collection getLocalAuthors(T txn) throws DbException; + /** + * Returns the message with the given ID. + *

+ * Read-only. + * + * @throws MessageDeletedException if the message has been deleted + */ + Message getMessage(T txn, MessageId m) throws DbException; + /** * Returns the IDs and states of all dependencies of the given message. * For missing dependencies and dependencies in other groups, the state diff --git a/bramble-core/src/main/java/org/briarproject/bramble/db/DatabaseComponentImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/db/DatabaseComponentImpl.java index 38e31f58c..4023c4c96 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/db/DatabaseComponentImpl.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/db/DatabaseComponentImpl.java @@ -457,6 +457,15 @@ class DatabaseComponentImpl implements DatabaseComponent { return db.getLocalAuthors(txn); } + @Override + public Message getMessage(Transaction transaction, MessageId m) + throws DbException { + T txn = unbox(transaction); + if (!db.containsMessage(txn, m)) + throw new NoSuchMessageException(); + return db.getMessage(txn, m); + } + @Override public Collection getMessageIds(Transaction transaction, GroupId g) throws DbException { diff --git a/bramble-core/src/main/java/org/briarproject/bramble/db/JdbcDatabase.java b/bramble-core/src/main/java/org/briarproject/bramble/db/JdbcDatabase.java index b88b24e41..36087b2ff 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/db/JdbcDatabase.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/db/JdbcDatabase.java @@ -1483,6 +1483,32 @@ abstract class JdbcDatabase implements Database { } } + @Override + public Message getMessage(Connection txn, MessageId m) throws DbException { + PreparedStatement ps = null; + ResultSet rs = null; + try { + String sql = "SELECT groupId, timestamp, raw FROM messages" + + " WHERE messageId = ?"; + ps = txn.prepareStatement(sql); + ps.setBytes(1, m.getBytes()); + rs = ps.executeQuery(); + if (!rs.next()) throw new DbStateException(); + GroupId g = new GroupId(rs.getBytes(1)); + long timestamp = rs.getLong(2); + byte[] raw = rs.getBytes(3); + if (rs.next()) throw new DbStateException(); + rs.close(); + ps.close(); + if (raw == null) throw new MessageDeletedException(); + return new Message(m, g, timestamp, raw); + } catch (SQLException e) { + tryToClose(rs); + tryToClose(ps); + throw new DbException(e); + } + } + @Override public Collection getMessageIds(Connection txn, GroupId g) throws DbException { diff --git a/bramble-core/src/test/java/org/briarproject/bramble/db/DatabaseComponentImplTest.java b/bramble-core/src/test/java/org/briarproject/bramble/db/DatabaseComponentImplTest.java index 3eec4d979..743e96321 100644 --- a/bramble-core/src/test/java/org/briarproject/bramble/db/DatabaseComponentImplTest.java +++ b/bramble-core/src/test/java/org/briarproject/bramble/db/DatabaseComponentImplTest.java @@ -613,11 +613,11 @@ public class DatabaseComponentImplTest extends BrambleMockTestCase { throws Exception { context.checking(new Expectations() {{ // Check whether the message is in the DB (which it's not) - exactly(11).of(database).startTransaction(); + exactly(12).of(database).startTransaction(); will(returnValue(txn)); - exactly(11).of(database).containsMessage(txn, messageId); + exactly(12).of(database).containsMessage(txn, messageId); will(returnValue(false)); - exactly(11).of(database).abortTransaction(txn); + exactly(12).of(database).abortTransaction(txn); // This is needed for getMessageStatus() to proceed exactly(1).of(database).containsContact(txn, contactId); will(returnValue(true)); @@ -645,6 +645,16 @@ public class DatabaseComponentImplTest extends BrambleMockTestCase { db.endTransaction(transaction); } + transaction = db.startTransaction(false); + try { + db.getMessage(transaction, messageId); + fail(); + } catch (NoSuchMessageException expected) { + // Expected + } finally { + db.endTransaction(transaction); + } + transaction = db.startTransaction(false); try { db.getRawMessage(transaction, messageId); diff --git a/bramble-core/src/test/java/org/briarproject/bramble/db/JdbcDatabaseTest.java b/bramble-core/src/test/java/org/briarproject/bramble/db/JdbcDatabaseTest.java index f6d091dd6..57825b3ee 100644 --- a/bramble-core/src/test/java/org/briarproject/bramble/db/JdbcDatabaseTest.java +++ b/bramble-core/src/test/java/org/briarproject/bramble/db/JdbcDatabaseTest.java @@ -1638,6 +1638,13 @@ public abstract class JdbcDatabaseTest extends BrambleTestCase { ids = db.getMessagesToOffer(txn, contactId, 100); assertEquals(singletonList(messageId), ids); + // The message should be available + Message m = db.getMessage(txn, messageId); + assertEquals(messageId, m.getId()); + assertEquals(groupId, m.getGroupId()); + assertEquals(message.getTimestamp(), m.getTimestamp()); + assertArrayEquals(message.getRaw(), m.getRaw()); + // The raw message should be available assertArrayEquals(message.getRaw(), db.getRawMessage(txn, messageId)); @@ -1653,6 +1660,14 @@ public abstract class JdbcDatabaseTest extends BrambleTestCase { ids = db.getMessagesToOffer(txn, contactId, 100); assertTrue(ids.isEmpty()); + // Requesting the message should throw an exception + try { + db.getMessage(txn, messageId); + fail(); + } catch (MessageDeletedException expected) { + // Expected + } + // Requesting the raw message should throw an exception try { db.getRawMessage(txn, messageId); From 5626f3d7616c600def6c8631ed58d5d5f9440e51 Mon Sep 17 00:00:00 2001 From: akwizgran Date: Fri, 24 Aug 2018 16:21:04 +0100 Subject: [PATCH 2/5] Remove raw message method from DatabaseComponent interface. --- .../bramble/api/db/DatabaseComponent.java | 9 ---- .../bramble/client/ClientHelperImpl.java | 4 +- .../bramble/db/DatabaseComponentImpl.java | 9 ---- .../bramble/sync/ValidationManagerImpl.java | 12 ++--- .../bramble/client/ClientHelperImplTest.java | 9 ++-- .../bramble/db/DatabaseComponentImplTest.java | 16 ++---- .../sync/ValidationManagerImplTest.java | 52 +++++-------------- 7 files changed, 25 insertions(+), 86 deletions(-) diff --git a/bramble-api/src/main/java/org/briarproject/bramble/api/db/DatabaseComponent.java b/bramble-api/src/main/java/org/briarproject/bramble/api/db/DatabaseComponent.java index e86153d78..372421364 100644 --- a/bramble-api/src/main/java/org/briarproject/bramble/api/db/DatabaseComponent.java +++ b/bramble-api/src/main/java/org/briarproject/bramble/api/db/DatabaseComponent.java @@ -306,15 +306,6 @@ public interface DatabaseComponent { Collection getMessagesToShare(Transaction txn) throws DbException; - /** - * Returns the message with the given ID, in serialised form. - *

- * Read-only. - * - * @throws MessageDeletedException if the message has been deleted - */ - byte[] getRawMessage(Transaction txn, MessageId m) throws DbException; - /** * Returns the metadata for all delivered messages in the given group. *

diff --git a/bramble-core/src/main/java/org/briarproject/bramble/client/ClientHelperImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/client/ClientHelperImpl.java index e45786524..62ff284dd 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/client/ClientHelperImpl.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/client/ClientHelperImpl.java @@ -127,7 +127,7 @@ class ClientHelperImpl implements ClientHelper { @Override public Message getMessage(Transaction txn, MessageId m) throws DbException { - return messageFactory.createMessage(m, db.getRawMessage(txn, m)); + return db.getMessage(txn, m); } @Override @@ -147,7 +147,7 @@ class ClientHelperImpl implements ClientHelper { @Override public BdfList getMessageAsList(Transaction txn, MessageId m) throws DbException, FormatException { - byte[] raw = db.getRawMessage(txn, m); + byte[] raw = db.getMessage(txn, m).getRaw(); return toList(raw, MESSAGE_HEADER_LENGTH, raw.length - MESSAGE_HEADER_LENGTH); } diff --git a/bramble-core/src/main/java/org/briarproject/bramble/db/DatabaseComponentImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/db/DatabaseComponentImpl.java index 4023c4c96..edeade4ee 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/db/DatabaseComponentImpl.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/db/DatabaseComponentImpl.java @@ -496,15 +496,6 @@ class DatabaseComponentImpl implements DatabaseComponent { return db.getMessagesToShare(txn); } - @Override - public byte[] getRawMessage(Transaction transaction, MessageId m) - throws DbException { - T txn = unbox(transaction); - if (!db.containsMessage(txn, m)) - throw new NoSuchMessageException(); - return db.getRawMessage(txn, m); - } - @Override public Map getMessageMetadata(Transaction transaction, GroupId g) throws DbException { diff --git a/bramble-core/src/main/java/org/briarproject/bramble/sync/ValidationManagerImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/sync/ValidationManagerImpl.java index 64edbbb97..99d3335e7 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/sync/ValidationManagerImpl.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/sync/ValidationManagerImpl.java @@ -16,7 +16,6 @@ import org.briarproject.bramble.api.sync.Group; import org.briarproject.bramble.api.sync.InvalidMessageException; import org.briarproject.bramble.api.sync.Message; import org.briarproject.bramble.api.sync.MessageContext; -import org.briarproject.bramble.api.sync.MessageFactory; import org.briarproject.bramble.api.sync.MessageId; import org.briarproject.bramble.api.sync.ValidationManager; import org.briarproject.bramble.api.sync.event.MessageAddedEvent; @@ -52,7 +51,6 @@ class ValidationManagerImpl implements ValidationManager, Service, private final DatabaseComponent db; private final Executor dbExecutor, validationExecutor; - private final MessageFactory messageFactory; private final Map validators; private final Map hooks; private final AtomicBoolean used = new AtomicBoolean(false); @@ -60,12 +58,10 @@ class ValidationManagerImpl implements ValidationManager, Service, @Inject ValidationManagerImpl(DatabaseComponent db, @DatabaseExecutor Executor dbExecutor, - @ValidationExecutor Executor validationExecutor, - MessageFactory messageFactory) { + @ValidationExecutor Executor validationExecutor) { this.db = db; this.dbExecutor = dbExecutor; this.validationExecutor = validationExecutor; - this.messageFactory = messageFactory; validators = new ConcurrentHashMap<>(); hooks = new ConcurrentHashMap<>(); } @@ -128,8 +124,7 @@ class ValidationManagerImpl implements ValidationManager, Service, Transaction txn = db.startTransaction(true); try { MessageId id = unvalidated.poll(); - byte[] raw = db.getRawMessage(txn, id); - m = messageFactory.createMessage(id, raw); + m = db.getMessage(txn, id); g = db.getGroup(txn, m.getGroupId()); db.commitTransaction(txn); } finally { @@ -196,8 +191,7 @@ class ValidationManagerImpl implements ValidationManager, Service, invalidateMessage(txn, id); invalidate = getDependentsToInvalidate(txn, id); } else if (allDelivered) { - byte[] raw = db.getRawMessage(txn, id); - Message m = messageFactory.createMessage(id, raw); + Message m = db.getMessage(txn, id); Group g = db.getGroup(txn, m.getGroupId()); ClientId c = g.getClientId(); int majorVersion = g.getMajorVersion(); diff --git a/bramble-core/src/test/java/org/briarproject/bramble/client/ClientHelperImplTest.java b/bramble-core/src/test/java/org/briarproject/bramble/client/ClientHelperImplTest.java index abdce2893..9201e0c67 100644 --- a/bramble-core/src/test/java/org/briarproject/bramble/client/ClientHelperImplTest.java +++ b/bramble-core/src/test/java/org/briarproject/bramble/client/ClientHelperImplTest.java @@ -71,7 +71,6 @@ public class ClientHelperImplTest extends BrambleTestCase { private final Message message = getMessage(groupId); private final MessageId messageId = message.getId(); private final long timestamp = message.getTimestamp(); - private final byte[] rawMessage = message.getRaw(); private final Metadata metadata = new Metadata(); private final BdfList list = BdfList.of("Sign this!", getRandomBytes(42)); private final String label = StringUtils.getRandomString(5); @@ -120,8 +119,8 @@ public class ClientHelperImplTest extends BrambleTestCase { context.checking(new Expectations() {{ oneOf(db).startTransaction(true); will(returnValue(txn)); - oneOf(db).getRawMessage(txn, messageId); - will(returnValue(rawMessage)); + oneOf(db).getMessage(txn, messageId); + will(returnValue(message)); oneOf(db).commitTransaction(txn); oneOf(db).endTransaction(txn); }}); @@ -267,7 +266,7 @@ public class ClientHelperImplTest extends BrambleTestCase { public void testToList() throws Exception { expectToList(true); - assertEquals(list, clientHelper.toList(rawMessage)); + assertEquals(list, clientHelper.toList(getRandomBytes(123))); context.assertIsSatisfied(); } @@ -276,7 +275,7 @@ public class ClientHelperImplTest extends BrambleTestCase { expectToList(false); // no EOF after list try { - clientHelper.toList(rawMessage); + clientHelper.toList(getRandomBytes(123)); fail(); } catch (FormatException e) { // expected diff --git a/bramble-core/src/test/java/org/briarproject/bramble/db/DatabaseComponentImplTest.java b/bramble-core/src/test/java/org/briarproject/bramble/db/DatabaseComponentImplTest.java index 743e96321..ee2a1a91c 100644 --- a/bramble-core/src/test/java/org/briarproject/bramble/db/DatabaseComponentImplTest.java +++ b/bramble-core/src/test/java/org/briarproject/bramble/db/DatabaseComponentImplTest.java @@ -613,11 +613,11 @@ public class DatabaseComponentImplTest extends BrambleMockTestCase { throws Exception { context.checking(new Expectations() {{ // Check whether the message is in the DB (which it's not) - exactly(12).of(database).startTransaction(); + exactly(11).of(database).startTransaction(); will(returnValue(txn)); - exactly(12).of(database).containsMessage(txn, messageId); + exactly(11).of(database).containsMessage(txn, messageId); will(returnValue(false)); - exactly(12).of(database).abortTransaction(txn); + exactly(11).of(database).abortTransaction(txn); // This is needed for getMessageStatus() to proceed exactly(1).of(database).containsContact(txn, contactId); will(returnValue(true)); @@ -655,16 +655,6 @@ public class DatabaseComponentImplTest extends BrambleMockTestCase { db.endTransaction(transaction); } - transaction = db.startTransaction(false); - try { - db.getRawMessage(transaction, messageId); - fail(); - } catch (NoSuchMessageException expected) { - // Expected - } finally { - db.endTransaction(transaction); - } - transaction = db.startTransaction(false); try { db.getMessageMetadata(transaction, messageId); diff --git a/bramble-core/src/test/java/org/briarproject/bramble/sync/ValidationManagerImplTest.java b/bramble-core/src/test/java/org/briarproject/bramble/sync/ValidationManagerImplTest.java index 3b4ae864a..5225f148d 100644 --- a/bramble-core/src/test/java/org/briarproject/bramble/sync/ValidationManagerImplTest.java +++ b/bramble-core/src/test/java/org/briarproject/bramble/sync/ValidationManagerImplTest.java @@ -12,7 +12,6 @@ import org.briarproject.bramble.api.sync.GroupId; import org.briarproject.bramble.api.sync.InvalidMessageException; import org.briarproject.bramble.api.sync.Message; import org.briarproject.bramble.api.sync.MessageContext; -import org.briarproject.bramble.api.sync.MessageFactory; import org.briarproject.bramble.api.sync.MessageId; import org.briarproject.bramble.api.sync.ValidationManager.IncomingMessageHook; import org.briarproject.bramble.api.sync.ValidationManager.MessageValidator; @@ -45,8 +44,6 @@ import static org.briarproject.bramble.test.TestUtils.getRandomId; public class ValidationManagerImplTest extends BrambleMockTestCase { private final DatabaseComponent db = context.mock(DatabaseComponent.class); - private final MessageFactory messageFactory = - context.mock(MessageFactory.class); private final MessageValidator validator = context.mock(MessageValidator.class); private final IncomingMessageHook hook = @@ -75,8 +72,7 @@ public class ValidationManagerImplTest extends BrambleMockTestCase { @Before public void setUp() { - vm = new ValidationManagerImpl(db, dbExecutor, validationExecutor, - messageFactory); + vm = new ValidationManagerImpl(db, dbExecutor, validationExecutor); vm.registerMessageValidator(clientId, majorVersion, validator); vm.registerIncomingMessageHook(clientId, majorVersion, hook); } @@ -136,9 +132,7 @@ public class ValidationManagerImplTest extends BrambleMockTestCase { // Load the first raw message and group oneOf(db).startTransaction(true); will(returnValue(txn1)); - oneOf(db).getRawMessage(txn1, messageId); - will(returnValue(message.getRaw())); - oneOf(messageFactory).createMessage(messageId, message.getRaw()); + oneOf(db).getMessage(txn1, messageId); will(returnValue(message)); oneOf(db).getGroup(txn1, groupId); will(returnValue(group)); @@ -163,9 +157,7 @@ public class ValidationManagerImplTest extends BrambleMockTestCase { // Load the second raw message and group oneOf(db).startTransaction(true); will(returnValue(txn3)); - oneOf(db).getRawMessage(txn3, messageId1); - will(returnValue(message1.getRaw())); - oneOf(messageFactory).createMessage(messageId1, message1.getRaw()); + oneOf(db).getMessage(txn3, messageId1); will(returnValue(message1)); oneOf(db).getGroup(txn3, groupId); will(returnValue(group)); @@ -237,9 +229,7 @@ public class ValidationManagerImplTest extends BrambleMockTestCase { oneOf(db).getMessageDependencies(txn2, messageId); will(returnValue(singletonMap(messageId1, DELIVERED))); // Get the message and its metadata to deliver - oneOf(db).getRawMessage(txn2, messageId); - will(returnValue(message.getRaw())); - oneOf(messageFactory).createMessage(messageId, message.getRaw()); + oneOf(db).getMessage(txn2, messageId); will(returnValue(message)); oneOf(db).getGroup(txn2, groupId); will(returnValue(group)); @@ -262,9 +252,7 @@ public class ValidationManagerImplTest extends BrambleMockTestCase { oneOf(db).getMessageDependencies(txn3, messageId2); will(returnValue(singletonMap(messageId1, DELIVERED))); // Get the dependent and its metadata to deliver - oneOf(db).getRawMessage(txn3, messageId2); - will(returnValue(message2.getRaw())); - oneOf(messageFactory).createMessage(messageId2, message2.getRaw()); + oneOf(db).getMessage(txn3, messageId2); will(returnValue(message2)); oneOf(db).getGroup(txn3, groupId); will(returnValue(group)); @@ -414,16 +402,14 @@ public class ValidationManagerImplTest extends BrambleMockTestCase { // Load the first raw message - *gasp* it's gone! oneOf(db).startTransaction(true); will(returnValue(txn1)); - oneOf(db).getRawMessage(txn1, messageId); + oneOf(db).getMessage(txn1, messageId); will(throwException(new NoSuchMessageException())); never(db).commitTransaction(txn1); oneOf(db).endTransaction(txn1); // Load the second raw message and group oneOf(db).startTransaction(true); will(returnValue(txn2)); - oneOf(db).getRawMessage(txn2, messageId1); - will(returnValue(message1.getRaw())); - oneOf(messageFactory).createMessage(messageId1, message1.getRaw()); + oneOf(db).getMessage(txn2, messageId1); will(returnValue(message1)); oneOf(db).getGroup(txn2, groupId); will(returnValue(group)); @@ -485,9 +471,7 @@ public class ValidationManagerImplTest extends BrambleMockTestCase { // Load the first raw message oneOf(db).startTransaction(true); will(returnValue(txn1)); - oneOf(db).getRawMessage(txn1, messageId); - will(returnValue(message.getRaw())); - oneOf(messageFactory).createMessage(messageId, message.getRaw()); + oneOf(db).getMessage(txn1, messageId); will(returnValue(message)); // Load the group - *gasp* it's gone! oneOf(db).getGroup(txn1, groupId); @@ -497,9 +481,7 @@ public class ValidationManagerImplTest extends BrambleMockTestCase { // Load the second raw message and group oneOf(db).startTransaction(true); will(returnValue(txn2)); - oneOf(db).getRawMessage(txn2, messageId1); - will(returnValue(message1.getRaw())); - oneOf(messageFactory).createMessage(messageId1, message1.getRaw()); + oneOf(db).getMessage(txn2, messageId1); will(returnValue(message1)); oneOf(db).getGroup(txn2, groupId); will(returnValue(group)); @@ -860,9 +842,7 @@ public class ValidationManagerImplTest extends BrambleMockTestCase { oneOf(db).getMessageDependencies(txn2, messageId1); will(returnValue(singletonMap(messageId, DELIVERED))); // Get message 1 and its metadata - oneOf(db).getRawMessage(txn2, messageId1); - will(returnValue(message1.getRaw())); - oneOf(messageFactory).createMessage(messageId1, message1.getRaw()); + oneOf(db).getMessage(txn2, messageId1); will(returnValue(message1)); oneOf(db).getGroup(txn2, groupId); will(returnValue(group)); @@ -885,9 +865,7 @@ public class ValidationManagerImplTest extends BrambleMockTestCase { oneOf(db).getMessageDependencies(txn3, messageId2); will(returnValue(singletonMap(messageId, DELIVERED))); // Get message 2 and its metadata - oneOf(db).getRawMessage(txn3, messageId2); - will(returnValue(message2.getRaw())); - oneOf(messageFactory).createMessage(messageId2, message2.getRaw()); + oneOf(db).getMessage(txn3, messageId2); will(returnValue(message2)); oneOf(db).getGroup(txn3, groupId); will(returnValue(group)); @@ -910,9 +888,7 @@ public class ValidationManagerImplTest extends BrambleMockTestCase { oneOf(db).getMessageDependencies(txn4, messageId3); will(returnValue(twoDependencies)); // Get message 3 and its metadata - oneOf(db).getRawMessage(txn4, messageId3); - will(returnValue(message3.getRaw())); - oneOf(messageFactory).createMessage(messageId3, message3.getRaw()); + oneOf(db).getMessage(txn4, messageId3); will(returnValue(message3)); oneOf(db).getGroup(txn4, groupId); will(returnValue(group)); @@ -941,9 +917,7 @@ public class ValidationManagerImplTest extends BrambleMockTestCase { oneOf(db).getMessageDependencies(txn6, messageId4); will(returnValue(singletonMap(messageId3, DELIVERED))); // Get message 4 and its metadata - oneOf(db).getRawMessage(txn6, messageId4); - will(returnValue(message4.getRaw())); - oneOf(messageFactory).createMessage(messageId4, message4.getRaw()); + oneOf(db).getMessage(txn6, messageId4); will(returnValue(message4)); oneOf(db).getGroup(txn6, groupId); will(returnValue(group)); From 48933637d80665710153fb69977f6e8e4e82d479 Mon Sep 17 00:00:00 2001 From: akwizgran Date: Fri, 24 Aug 2018 16:47:53 +0100 Subject: [PATCH 3/5] Remove raw messages from DB interface. --- .../bramble/api/db/DatabaseComponent.java | 12 ++++----- .../org/briarproject/bramble/db/Database.java | 9 ------- .../bramble/db/DatabaseComponentImpl.java | 12 ++++----- .../briarproject/bramble/db/JdbcDatabase.java | 24 ----------------- .../bramble/sync/DuplexOutgoingSession.java | 9 ++++--- .../bramble/sync/SimplexOutgoingSession.java | 9 ++++--- .../bramble/db/DatabaseComponentImplTest.java | 27 +++++++++---------- .../bramble/db/DatabasePerformanceTest.java | 6 ++--- .../bramble/db/JdbcDatabaseTest.java | 16 +++-------- .../sync/SimplexOutgoingSessionTest.java | 17 ++++++------ 10 files changed, 49 insertions(+), 92 deletions(-) diff --git a/bramble-api/src/main/java/org/briarproject/bramble/api/db/DatabaseComponent.java b/bramble-api/src/main/java/org/briarproject/bramble/api/db/DatabaseComponent.java index 372421364..aec77c5aa 100644 --- a/bramble-api/src/main/java/org/briarproject/bramble/api/db/DatabaseComponent.java +++ b/bramble-api/src/main/java/org/briarproject/bramble/api/db/DatabaseComponent.java @@ -151,13 +151,13 @@ public interface DatabaseComponent { throws DbException; /** - * Returns a batch of raw messages for the given contact, with a total - * length less than or equal to the given length, for transmission over a + * Returns a batch of messages for the given contact, with a total length + * less than or equal to the given length, for transmission over a * transport with the given maximum latency. Returns null if there are no * sendable messages that fit in the given length. */ @Nullable - Collection generateBatch(Transaction txn, ContactId c, + Collection generateBatch(Transaction txn, ContactId c, int maxLength, int maxLatency) throws DbException; /** @@ -178,14 +178,14 @@ public interface DatabaseComponent { throws DbException; /** - * Returns a batch of raw messages for the given contact, with a total - * length less than or equal to the given length, for transmission over a + * Returns a batch of messages for the given contact, with a total length + * less than or equal to the given length, for transmission over a * transport with the given maximum latency. Only messages that have been * requested by the contact are returned. Returns null if there are no * sendable messages that fit in the given length. */ @Nullable - Collection generateRequestedBatch(Transaction txn, ContactId c, + Collection generateRequestedBatch(Transaction txn, ContactId c, int maxLength, int maxLatency) throws DbException; /** diff --git a/bramble-core/src/main/java/org/briarproject/bramble/db/Database.java b/bramble-core/src/main/java/org/briarproject/bramble/db/Database.java index 1ad252584..d62bd6d38 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/db/Database.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/db/Database.java @@ -474,15 +474,6 @@ interface Database { */ long getNextSendTime(T txn, ContactId c) throws DbException; - /** - * Returns the message with the given ID, in serialised form. - *

- * Read-only. - * - * @throws MessageDeletedException if the message has been deleted - */ - byte[] getRawMessage(T txn, MessageId m) throws DbException; - /** * Returns the IDs of some messages that are eligible to be sent to the * given contact and have been requested by the contact, up to the given diff --git a/bramble-core/src/main/java/org/briarproject/bramble/db/DatabaseComponentImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/db/DatabaseComponentImpl.java index edeade4ee..3e4bed967 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/db/DatabaseComponentImpl.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/db/DatabaseComponentImpl.java @@ -307,16 +307,16 @@ class DatabaseComponentImpl implements DatabaseComponent { @Nullable @Override - public Collection generateBatch(Transaction transaction, + public Collection generateBatch(Transaction transaction, ContactId c, int maxLength, int maxLatency) throws DbException { if (transaction.isReadOnly()) throw new IllegalArgumentException(); T txn = unbox(transaction); if (!db.containsContact(txn, c)) throw new NoSuchContactException(); Collection ids = db.getMessagesToSend(txn, c, maxLength); - List messages = new ArrayList<>(ids.size()); + List messages = new ArrayList<>(ids.size()); for (MessageId m : ids) { - messages.add(db.getRawMessage(txn, m)); + messages.add(db.getMessage(txn, m)); db.updateExpiryTime(txn, c, m, maxLatency); } if (ids.isEmpty()) return null; @@ -356,7 +356,7 @@ class DatabaseComponentImpl implements DatabaseComponent { @Nullable @Override - public Collection generateRequestedBatch(Transaction transaction, + public Collection generateRequestedBatch(Transaction transaction, ContactId c, int maxLength, int maxLatency) throws DbException { if (transaction.isReadOnly()) throw new IllegalArgumentException(); T txn = unbox(transaction); @@ -364,9 +364,9 @@ class DatabaseComponentImpl implements DatabaseComponent { throw new NoSuchContactException(); Collection ids = db.getRequestedMessagesToSend(txn, c, maxLength); - List messages = new ArrayList<>(ids.size()); + List messages = new ArrayList<>(ids.size()); for (MessageId m : ids) { - messages.add(db.getRawMessage(txn, m)); + messages.add(db.getMessage(txn, m)); db.updateExpiryTime(txn, c, m, maxLatency); } if (ids.isEmpty()) return null; diff --git a/bramble-core/src/main/java/org/briarproject/bramble/db/JdbcDatabase.java b/bramble-core/src/main/java/org/briarproject/bramble/db/JdbcDatabase.java index 36087b2ff..c0096d651 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/db/JdbcDatabase.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/db/JdbcDatabase.java @@ -2045,30 +2045,6 @@ abstract class JdbcDatabase implements Database { } } - @Override - public byte[] getRawMessage(Connection txn, MessageId m) - throws DbException { - PreparedStatement ps = null; - ResultSet rs = null; - try { - String sql = "SELECT raw FROM messages WHERE messageId = ?"; - ps = txn.prepareStatement(sql); - ps.setBytes(1, m.getBytes()); - rs = ps.executeQuery(); - if (!rs.next()) throw new DbStateException(); - byte[] raw = rs.getBytes(1); - if (rs.next()) throw new DbStateException(); - rs.close(); - ps.close(); - if (raw == null) throw new MessageDeletedException(); - return raw; - } catch (SQLException e) { - tryToClose(rs); - tryToClose(ps); - throw new DbException(e); - } - } - @Override public Collection getRequestedMessagesToSend(Connection txn, ContactId c, int maxLength) throws DbException { diff --git a/bramble-core/src/main/java/org/briarproject/bramble/sync/DuplexOutgoingSession.java b/bramble-core/src/main/java/org/briarproject/bramble/sync/DuplexOutgoingSession.java index f4109a488..3031116b5 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/sync/DuplexOutgoingSession.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/sync/DuplexOutgoingSession.java @@ -13,6 +13,7 @@ import org.briarproject.bramble.api.lifecycle.IoExecutor; import org.briarproject.bramble.api.lifecycle.event.LifecycleEvent; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.sync.Ack; +import org.briarproject.bramble.api.sync.Message; import org.briarproject.bramble.api.sync.Offer; import org.briarproject.bramble.api.sync.Request; import org.briarproject.bramble.api.sync.SyncRecordWriter; @@ -274,7 +275,7 @@ class DuplexOutgoingSession implements SyncSession, EventListener { if (!generateBatchQueued.getAndSet(false)) throw new AssertionError(); try { - Collection b; + Collection b; Transaction txn = db.startTransaction(false); try { b = db.generateRequestedBatch(txn, contactId, @@ -296,9 +297,9 @@ class DuplexOutgoingSession implements SyncSession, EventListener { private class WriteBatch implements ThrowingRunnable { - private final Collection batch; + private final Collection batch; - private WriteBatch(Collection batch) { + private WriteBatch(Collection batch) { this.batch = batch; } @@ -306,7 +307,7 @@ class DuplexOutgoingSession implements SyncSession, EventListener { @Override public void run() throws IOException { if (interrupted) return; - for (byte[] raw : batch) recordWriter.writeMessage(raw); + for (Message m : batch) recordWriter.writeMessage(m.getRaw()); LOG.info("Sent batch"); generateBatch(); } diff --git a/bramble-core/src/main/java/org/briarproject/bramble/sync/SimplexOutgoingSession.java b/bramble-core/src/main/java/org/briarproject/bramble/sync/SimplexOutgoingSession.java index 8fbd63cc8..259939e25 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/sync/SimplexOutgoingSession.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/sync/SimplexOutgoingSession.java @@ -13,6 +13,7 @@ import org.briarproject.bramble.api.lifecycle.IoExecutor; import org.briarproject.bramble.api.lifecycle.event.LifecycleEvent; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.sync.Ack; +import org.briarproject.bramble.api.sync.Message; import org.briarproject.bramble.api.sync.SyncRecordWriter; import org.briarproject.bramble.api.sync.SyncSession; import org.briarproject.bramble.api.transport.StreamWriter; @@ -171,7 +172,7 @@ class SimplexOutgoingSession implements SyncSession, EventListener { public void run() { if (interrupted) return; try { - Collection b; + Collection b; Transaction txn = db.startTransaction(false); try { b = db.generateBatch(txn, contactId, @@ -193,9 +194,9 @@ class SimplexOutgoingSession implements SyncSession, EventListener { private class WriteBatch implements ThrowingRunnable { - private final Collection batch; + private final Collection batch; - private WriteBatch(Collection batch) { + private WriteBatch(Collection batch) { this.batch = batch; } @@ -203,7 +204,7 @@ class SimplexOutgoingSession implements SyncSession, EventListener { @Override public void run() throws IOException { if (interrupted) return; - for (byte[] raw : batch) recordWriter.writeMessage(raw); + for (Message m : batch) recordWriter.writeMessage(m.getRaw()); LOG.info("Sent batch"); dbExecutor.execute(new GenerateBatch()); } diff --git a/bramble-core/src/test/java/org/briarproject/bramble/db/DatabaseComponentImplTest.java b/bramble-core/src/test/java/org/briarproject/bramble/db/DatabaseComponentImplTest.java index ee2a1a91c..ed3780026 100644 --- a/bramble-core/src/test/java/org/briarproject/bramble/db/DatabaseComponentImplTest.java +++ b/bramble-core/src/test/java/org/briarproject/bramble/db/DatabaseComponentImplTest.java @@ -99,9 +99,8 @@ public class DatabaseComponentImplTest extends BrambleMockTestCase { private final Group group; private final Author author; private final LocalAuthor localAuthor; - private final Message message; + private final Message message, message1; private final MessageId messageId, messageId1; - private final byte[] raw, raw1; private final Metadata metadata; private final TransportId transportId; private final int maxLatency; @@ -117,11 +116,9 @@ public class DatabaseComponentImplTest extends BrambleMockTestCase { author = getAuthor(); localAuthor = getLocalAuthor(); message = getMessage(groupId); - Message message1 = getMessage(groupId); + message1 = getMessage(groupId); messageId = message.getId(); messageId1 = message1.getId(); - raw = message.getRaw(); - raw1 = message1.getRaw(); metadata = new Metadata(); metadata.put("foo", new byte[] {'b', 'a', 'r'}); transportId = getTransportId(); @@ -867,7 +864,7 @@ public class DatabaseComponentImplTest extends BrambleMockTestCase { @Test public void testGenerateBatch() throws Exception { Collection ids = Arrays.asList(messageId, messageId1); - Collection messages = Arrays.asList(raw, raw1); + Collection messages = Arrays.asList(message, message1); context.checking(new Expectations() {{ oneOf(database).startTransaction(); will(returnValue(txn)); @@ -876,12 +873,12 @@ public class DatabaseComponentImplTest extends BrambleMockTestCase { oneOf(database).getMessagesToSend(txn, contactId, MAX_MESSAGE_LENGTH * 2); will(returnValue(ids)); - oneOf(database).getRawMessage(txn, messageId); - will(returnValue(raw)); + oneOf(database).getMessage(txn, messageId); + will(returnValue(message)); oneOf(database).updateExpiryTime(txn, contactId, messageId, maxLatency); - oneOf(database).getRawMessage(txn, messageId1); - will(returnValue(raw1)); + oneOf(database).getMessage(txn, messageId1); + will(returnValue(message1)); oneOf(database).updateExpiryTime(txn, contactId, messageId1, maxLatency); oneOf(database).lowerRequestedFlag(txn, contactId, ids); @@ -963,7 +960,7 @@ public class DatabaseComponentImplTest extends BrambleMockTestCase { @Test public void testGenerateRequestedBatch() throws Exception { Collection ids = Arrays.asList(messageId, messageId1); - Collection messages = Arrays.asList(raw, raw1); + Collection messages = Arrays.asList(message, message1); context.checking(new Expectations() {{ oneOf(database).startTransaction(); will(returnValue(txn)); @@ -972,12 +969,12 @@ public class DatabaseComponentImplTest extends BrambleMockTestCase { oneOf(database).getRequestedMessagesToSend(txn, contactId, MAX_MESSAGE_LENGTH * 2); will(returnValue(ids)); - oneOf(database).getRawMessage(txn, messageId); - will(returnValue(raw)); + oneOf(database).getMessage(txn, messageId); + will(returnValue(message)); oneOf(database).updateExpiryTime(txn, contactId, messageId, maxLatency); - oneOf(database).getRawMessage(txn, messageId1); - will(returnValue(raw1)); + oneOf(database).getMessage(txn, messageId1); + will(returnValue(message1)); oneOf(database).updateExpiryTime(txn, contactId, messageId1, maxLatency); oneOf(database).lowerRequestedFlag(txn, contactId, ids); diff --git a/bramble-core/src/test/java/org/briarproject/bramble/db/DatabasePerformanceTest.java b/bramble-core/src/test/java/org/briarproject/bramble/db/DatabasePerformanceTest.java index e46a75b68..f20454bb6 100644 --- a/bramble-core/src/test/java/org/briarproject/bramble/db/DatabasePerformanceTest.java +++ b/bramble-core/src/test/java/org/briarproject/bramble/db/DatabasePerformanceTest.java @@ -506,11 +506,11 @@ public abstract class DatabasePerformanceTest extends BrambleTestCase { } @Test - public void testGetRawMessage() throws Exception { - String name = "getRawMessage(T, MessageId)"; + public void testGetMessage() throws Exception { + String name = "getMessage(T, MessageId)"; benchmark(name, db -> { Connection txn = db.startTransaction(); - db.getRawMessage(txn, pickRandom(messages).getId()); + db.getMessage(txn, pickRandom(messages).getId()); db.commitTransaction(txn); }); } diff --git a/bramble-core/src/test/java/org/briarproject/bramble/db/JdbcDatabaseTest.java b/bramble-core/src/test/java/org/briarproject/bramble/db/JdbcDatabaseTest.java index 57825b3ee..01ca372ec 100644 --- a/bramble-core/src/test/java/org/briarproject/bramble/db/JdbcDatabaseTest.java +++ b/bramble-core/src/test/java/org/briarproject/bramble/db/JdbcDatabaseTest.java @@ -144,7 +144,8 @@ public abstract class JdbcDatabaseTest extends BrambleTestCase { assertTrue(db.containsContact(txn, contactId)); assertTrue(db.containsGroup(txn, groupId)); assertTrue(db.containsMessage(txn, messageId)); - assertArrayEquals(message.getRaw(), db.getRawMessage(txn, messageId)); + assertArrayEquals(message.getRaw(), + db.getMessage(txn, messageId).getRaw()); // Delete the records db.removeMessage(txn, messageId); @@ -1645,9 +1646,6 @@ public abstract class JdbcDatabaseTest extends BrambleTestCase { assertEquals(message.getTimestamp(), m.getTimestamp()); assertArrayEquals(message.getRaw(), m.getRaw()); - // The raw message should be available - assertArrayEquals(message.getRaw(), db.getRawMessage(txn, messageId)); - // Delete the message db.deleteMessage(txn, messageId); @@ -1668,14 +1666,6 @@ public abstract class JdbcDatabaseTest extends BrambleTestCase { // Expected } - // Requesting the raw message should throw an exception - try { - db.getRawMessage(txn, messageId); - fail(); - } catch (MessageDeletedException expected) { - // Expected - } - db.commitTransaction(txn); db.close(); } @@ -1806,7 +1796,7 @@ public abstract class JdbcDatabaseTest extends BrambleTestCase { Connection txn = db.startTransaction(); try { // Ask for a nonexistent message - an exception should be thrown - db.getRawMessage(txn, messageId); + db.getMessage(txn, messageId); fail(); } catch (DbException expected) { // It should be possible to abort the transaction without error diff --git a/bramble-core/src/test/java/org/briarproject/bramble/sync/SimplexOutgoingSessionTest.java b/bramble-core/src/test/java/org/briarproject/bramble/sync/SimplexOutgoingSessionTest.java index f91b5fe7a..6bb7e77a1 100644 --- a/bramble-core/src/test/java/org/briarproject/bramble/sync/SimplexOutgoingSessionTest.java +++ b/bramble-core/src/test/java/org/briarproject/bramble/sync/SimplexOutgoingSessionTest.java @@ -5,6 +5,8 @@ import org.briarproject.bramble.api.db.DatabaseComponent; import org.briarproject.bramble.api.db.Transaction; import org.briarproject.bramble.api.event.EventBus; import org.briarproject.bramble.api.sync.Ack; +import org.briarproject.bramble.api.sync.GroupId; +import org.briarproject.bramble.api.sync.Message; import org.briarproject.bramble.api.sync.MessageId; import org.briarproject.bramble.api.sync.SyncRecordWriter; import org.briarproject.bramble.api.transport.StreamWriter; @@ -13,12 +15,11 @@ import org.briarproject.bramble.test.ImmediateExecutor; import org.jmock.Expectations; import org.junit.Test; -import java.util.Arrays; -import java.util.Collections; import java.util.concurrent.Executor; +import static java.util.Collections.singletonList; import static org.briarproject.bramble.api.sync.SyncConstants.MAX_MESSAGE_IDS; -import static org.briarproject.bramble.test.TestUtils.getRandomBytes; +import static org.briarproject.bramble.test.TestUtils.getMessage; import static org.briarproject.bramble.test.TestUtils.getRandomId; public class SimplexOutgoingSessionTest extends BrambleMockTestCase { @@ -33,7 +34,8 @@ public class SimplexOutgoingSessionTest extends BrambleMockTestCase { private final Executor dbExecutor = new ImmediateExecutor(); private final ContactId contactId = new ContactId(234); - private final MessageId messageId = new MessageId(getRandomId()); + private final Message message = getMessage(new GroupId(getRandomId())); + private final MessageId messageId = message.getId(); @Test public void testNothingToSend() throws Exception { @@ -72,8 +74,7 @@ public class SimplexOutgoingSessionTest extends BrambleMockTestCase { @Test public void testSomethingToSend() throws Exception { - Ack ack = new Ack(Collections.singletonList(messageId)); - byte[] raw = getRandomBytes(1234); + Ack ack = new Ack(singletonList(messageId)); SimplexOutgoingSession session = new SimplexOutgoingSession(db, dbExecutor, eventBus, contactId, MAX_LATENCY, streamWriter, recordWriter); @@ -98,10 +99,10 @@ public class SimplexOutgoingSessionTest extends BrambleMockTestCase { will(returnValue(msgTxn)); oneOf(db).generateBatch(with(msgTxn), with(contactId), with(any(int.class)), with(MAX_LATENCY)); - will(returnValue(Arrays.asList(raw))); + will(returnValue(singletonList(message))); oneOf(db).commitTransaction(msgTxn); oneOf(db).endTransaction(msgTxn); - oneOf(recordWriter).writeMessage(raw); + oneOf(recordWriter).writeMessage(message.getRaw()); // No more acks oneOf(db).startTransaction(false); will(returnValue(noAckTxn)); From cb3026959a6b3e5c6cc5563601d7996186617353 Mon Sep 17 00:00:00 2001 From: akwizgran Date: Fri, 24 Aug 2018 16:49:39 +0100 Subject: [PATCH 4/5] Remove raw messages from SyncRecordWriter interface. --- .../org/briarproject/bramble/api/sync/SyncRecordWriter.java | 2 +- .../org/briarproject/bramble/sync/DuplexOutgoingSession.java | 2 +- .../briarproject/bramble/sync/SimplexOutgoingSession.java | 2 +- .../org/briarproject/bramble/sync/SyncRecordWriterImpl.java | 5 +++-- .../bramble/sync/SimplexOutgoingSessionTest.java | 2 +- .../org/briarproject/bramble/sync/SyncIntegrationTest.java | 4 ++-- 6 files changed, 9 insertions(+), 8 deletions(-) diff --git a/bramble-api/src/main/java/org/briarproject/bramble/api/sync/SyncRecordWriter.java b/bramble-api/src/main/java/org/briarproject/bramble/api/sync/SyncRecordWriter.java index 7a091544a..1c2600ad7 100644 --- a/bramble-api/src/main/java/org/briarproject/bramble/api/sync/SyncRecordWriter.java +++ b/bramble-api/src/main/java/org/briarproject/bramble/api/sync/SyncRecordWriter.java @@ -9,7 +9,7 @@ public interface SyncRecordWriter { void writeAck(Ack a) throws IOException; - void writeMessage(byte[] raw) throws IOException; + void writeMessage(Message m) throws IOException; void writeOffer(Offer o) throws IOException; diff --git a/bramble-core/src/main/java/org/briarproject/bramble/sync/DuplexOutgoingSession.java b/bramble-core/src/main/java/org/briarproject/bramble/sync/DuplexOutgoingSession.java index 3031116b5..462be735b 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/sync/DuplexOutgoingSession.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/sync/DuplexOutgoingSession.java @@ -307,7 +307,7 @@ class DuplexOutgoingSession implements SyncSession, EventListener { @Override public void run() throws IOException { if (interrupted) return; - for (Message m : batch) recordWriter.writeMessage(m.getRaw()); + for (Message m : batch) recordWriter.writeMessage(m); LOG.info("Sent batch"); generateBatch(); } diff --git a/bramble-core/src/main/java/org/briarproject/bramble/sync/SimplexOutgoingSession.java b/bramble-core/src/main/java/org/briarproject/bramble/sync/SimplexOutgoingSession.java index 259939e25..7f12065a8 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/sync/SimplexOutgoingSession.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/sync/SimplexOutgoingSession.java @@ -204,7 +204,7 @@ class SimplexOutgoingSession implements SyncSession, EventListener { @Override public void run() throws IOException { if (interrupted) return; - for (Message m : batch) recordWriter.writeMessage(m.getRaw()); + for (Message m : batch) recordWriter.writeMessage(m); LOG.info("Sent batch"); dbExecutor.execute(new GenerateBatch()); } diff --git a/bramble-core/src/main/java/org/briarproject/bramble/sync/SyncRecordWriterImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/sync/SyncRecordWriterImpl.java index d5e59f78d..3714df6d2 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/sync/SyncRecordWriterImpl.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/sync/SyncRecordWriterImpl.java @@ -4,6 +4,7 @@ import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.record.Record; import org.briarproject.bramble.api.record.RecordWriter; import org.briarproject.bramble.api.sync.Ack; +import org.briarproject.bramble.api.sync.Message; import org.briarproject.bramble.api.sync.MessageId; import org.briarproject.bramble.api.sync.Offer; import org.briarproject.bramble.api.sync.Request; @@ -44,8 +45,8 @@ class SyncRecordWriterImpl implements SyncRecordWriter { } @Override - public void writeMessage(byte[] raw) throws IOException { - writer.writeRecord(new Record(PROTOCOL_VERSION, MESSAGE, raw)); + public void writeMessage(Message m) throws IOException { + writer.writeRecord(new Record(PROTOCOL_VERSION, MESSAGE, m.getRaw())); } @Override diff --git a/bramble-core/src/test/java/org/briarproject/bramble/sync/SimplexOutgoingSessionTest.java b/bramble-core/src/test/java/org/briarproject/bramble/sync/SimplexOutgoingSessionTest.java index 6bb7e77a1..3440621a4 100644 --- a/bramble-core/src/test/java/org/briarproject/bramble/sync/SimplexOutgoingSessionTest.java +++ b/bramble-core/src/test/java/org/briarproject/bramble/sync/SimplexOutgoingSessionTest.java @@ -102,7 +102,7 @@ public class SimplexOutgoingSessionTest extends BrambleMockTestCase { will(returnValue(singletonList(message))); oneOf(db).commitTransaction(msgTxn); oneOf(db).endTransaction(msgTxn); - oneOf(recordWriter).writeMessage(message.getRaw()); + oneOf(recordWriter).writeMessage(message); // No more acks oneOf(db).startTransaction(false); will(returnValue(noAckTxn)); diff --git a/bramble-core/src/test/java/org/briarproject/bramble/sync/SyncIntegrationTest.java b/bramble-core/src/test/java/org/briarproject/bramble/sync/SyncIntegrationTest.java index d3f1eb905..a46f74459 100644 --- a/bramble-core/src/test/java/org/briarproject/bramble/sync/SyncIntegrationTest.java +++ b/bramble-core/src/test/java/org/briarproject/bramble/sync/SyncIntegrationTest.java @@ -108,8 +108,8 @@ public class SyncIntegrationTest extends BrambleTestCase { streamWriter.getOutputStream()); recordWriter.writeAck(new Ack(messageIds)); - recordWriter.writeMessage(message.getRaw()); - recordWriter.writeMessage(message1.getRaw()); + recordWriter.writeMessage(message); + recordWriter.writeMessage(message1); recordWriter.writeOffer(new Offer(messageIds)); recordWriter.writeRequest(new Request(messageIds)); From 0bc07cd0c100cb02ccea35e238dce1f045c2216b Mon Sep 17 00:00:00 2001 From: akwizgran Date: Fri, 24 Aug 2018 16:55:35 +0100 Subject: [PATCH 5/5] Rename message length method. --- .../main/java/org/briarproject/bramble/api/sync/Message.java | 2 +- .../main/java/org/briarproject/bramble/db/JdbcDatabase.java | 2 +- .../java/org/briarproject/bramble/db/JdbcDatabaseTest.java | 4 ++-- .../org/briarproject/bramble/sync/SyncIntegrationTest.java | 2 +- .../briar/messaging/MessageSizeIntegrationTest.java | 4 ++-- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/bramble-api/src/main/java/org/briarproject/bramble/api/sync/Message.java b/bramble-api/src/main/java/org/briarproject/bramble/api/sync/Message.java index da13796a0..c032e744e 100644 --- a/bramble-api/src/main/java/org/briarproject/bramble/api/sync/Message.java +++ b/bramble-api/src/main/java/org/briarproject/bramble/api/sync/Message.java @@ -50,7 +50,7 @@ public class Message { /** * Returns the length of the raw message in bytes. */ - public int getLength() { + public int getRawLength() { return raw.length; } diff --git a/bramble-core/src/main/java/org/briarproject/bramble/db/JdbcDatabase.java b/bramble-core/src/main/java/org/briarproject/bramble/db/JdbcDatabase.java index c0096d651..865db95b5 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/db/JdbcDatabase.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/db/JdbcDatabase.java @@ -741,7 +741,7 @@ abstract class JdbcDatabase implements Database { boolean offered = removeOfferedMessage(txn, c, m.getId()); boolean seen = offered || (sender != null && c.equals(sender)); addStatus(txn, m.getId(), c, m.getGroupId(), m.getTimestamp(), - m.getLength(), state, e.getValue(), messageShared, + m.getRawLength(), state, e.getValue(), messageShared, false, seen); } // Update denormalised column in messageDependencies if dependency diff --git a/bramble-core/src/test/java/org/briarproject/bramble/db/JdbcDatabaseTest.java b/bramble-core/src/test/java/org/briarproject/bramble/db/JdbcDatabaseTest.java index 01ca372ec..790a27cb0 100644 --- a/bramble-core/src/test/java/org/briarproject/bramble/db/JdbcDatabaseTest.java +++ b/bramble-core/src/test/java/org/briarproject/bramble/db/JdbcDatabaseTest.java @@ -355,11 +355,11 @@ public abstract class JdbcDatabaseTest extends BrambleTestCase { // The message is sendable, but too large to send Collection ids = db.getMessagesToSend(txn, contactId, - message.getLength() - 1); + message.getRawLength() - 1); assertTrue(ids.isEmpty()); // The message is just the right size to send - ids = db.getMessagesToSend(txn, contactId, message.getLength()); + ids = db.getMessagesToSend(txn, contactId, message.getRawLength()); assertEquals(singletonList(messageId), ids); db.commitTransaction(txn); diff --git a/bramble-core/src/test/java/org/briarproject/bramble/sync/SyncIntegrationTest.java b/bramble-core/src/test/java/org/briarproject/bramble/sync/SyncIntegrationTest.java index a46f74459..ef106c97b 100644 --- a/bramble-core/src/test/java/org/briarproject/bramble/sync/SyncIntegrationTest.java +++ b/bramble-core/src/test/java/org/briarproject/bramble/sync/SyncIntegrationTest.java @@ -169,7 +169,7 @@ public class SyncIntegrationTest extends BrambleTestCase { assertArrayEquals(m1.getGroupId().getBytes(), m2.getGroupId().getBytes()); assertEquals(m1.getTimestamp(), m2.getTimestamp()); - assertEquals(m1.getLength(), m2.getLength()); + assertEquals(m1.getRawLength(), m2.getRawLength()); assertArrayEquals(m1.getRaw(), m2.getRaw()); } } diff --git a/briar-core/src/test/java/org/briarproject/briar/messaging/MessageSizeIntegrationTest.java b/briar-core/src/test/java/org/briarproject/briar/messaging/MessageSizeIntegrationTest.java index 4ecdb21c8..a3f6c1bc4 100644 --- a/briar-core/src/test/java/org/briarproject/briar/messaging/MessageSizeIntegrationTest.java +++ b/briar-core/src/test/java/org/briarproject/briar/messaging/MessageSizeIntegrationTest.java @@ -60,7 +60,7 @@ public class MessageSizeIntegrationTest extends BriarTestCase { PrivateMessage message = privateMessageFactory.createPrivateMessage( groupId, timestamp, body); // Check the size of the serialised message - int length = message.getMessage().getLength(); + int length = message.getMessage().getRawLength(); assertTrue(length > UniqueId.LENGTH + 8 + MAX_PRIVATE_MESSAGE_BODY_LENGTH); assertTrue(length <= MAX_RECORD_PAYLOAD_BYTES); @@ -83,7 +83,7 @@ public class MessageSizeIntegrationTest extends BriarTestCase { ForumPost post = forumPostFactory.createPost(groupId, timestamp, parent, author, body); // Check the size of the serialised message - int length = post.getMessage().getLength(); + int length = post.getMessage().getRawLength(); assertTrue(length > UniqueId.LENGTH + 8 + UniqueId.LENGTH + 4 + MAX_AUTHOR_NAME_LENGTH + MAX_PUBLIC_KEY_LENGTH + MAX_FORUM_POST_BODY_LENGTH);