diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/storage/Messages.java b/service/src/main/java/org/whispersystems/textsecuregcm/storage/Messages.java index 4da9f89e9..8da33888f 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/storage/Messages.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/storage/Messages.java @@ -51,14 +51,8 @@ public class Messages { this.database.getDatabase().registerRowMapper(new OutgoingMessageEntityRowMapper()); } - @VisibleForTesting - public void store(UUID guid, Envelope message, String destination, long destinationDevice) { - final Envelope messageWithGuid = message.toBuilder().setServerGuid(guid.toString()).build(); - store(List.of(messageWithGuid), destination, destinationDevice); - } - public void store(List messages, String destination, long destinationDevice) { - database.use(jdbi ->jdbi.useHandle(handle -> { + database.use(jdbi -> jdbi.useHandle(handle -> { try (Timer.Context ignored = storeTimer.time()) { final PreparedBatch batch = handle.prepareBatch("INSERT INTO messages (" + GUID + ", " + TYPE + ", " + RELAY + ", " + TIMESTAMP + ", " + SERVER_TIMESTAMP + ", " + SOURCE + ", " + SOURCE_UUID + ", " + SOURCE_DEVICE + ", " + DESTINATION + ", " + DESTINATION_DEVICE + ", " + MESSAGE + ", " + CONTENT + ") " + "VALUES (:guid, :type, :relay, :timestamp, :server_timestamp, :source, :source_uuid, :source_device, :destination, :destination_device, :message, :content)"); diff --git a/service/src/test/java/org/whispersystems/textsecuregcm/tests/storage/MessagesTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/tests/storage/MessagesTest.java index 477d876dd..a9955463d 100644 --- a/service/src/test/java/org/whispersystems/textsecuregcm/tests/storage/MessagesTest.java +++ b/service/src/test/java/org/whispersystems/textsecuregcm/tests/storage/MessagesTest.java @@ -24,6 +24,7 @@ import java.util.List; import java.util.Optional; import java.util.Random; import java.util.UUID; +import java.util.stream.Collectors; import static org.assertj.core.api.AssertionsForClassTypes.assertThat; @@ -44,9 +45,8 @@ public class MessagesTest { @Test public void testStore() throws SQLException { Envelope envelope = generateEnvelope(); - UUID guid = UUID.randomUUID(); - messages.store(guid, envelope, "+14151112222", 1); + messages.store(List.of(envelope), "+14151112222", 1); PreparedStatement statement = db.getTestDatabase().getConnection().prepareStatement("SELECT * FROM messages WHERE destination = ?"); statement.setString(1, "+14151112222"); @@ -54,7 +54,7 @@ public class MessagesTest { ResultSet resultSet = statement.executeQuery(); assertThat(resultSet.next()).isTrue(); - assertThat(resultSet.getString("guid")).isEqualTo(guid.toString()); + assertThat(resultSet.getString("guid")).isEqualTo(envelope.getServerGuid()); assertThat(resultSet.getInt("type")).isEqualTo(envelope.getType().getNumber()); assertThat(resultSet.getString("relay")).isNullOrEmpty(); assertThat(resultSet.getLong("timestamp")).isEqualTo(envelope.getTimestamp()); @@ -71,36 +71,28 @@ public class MessagesTest { @Test public void testLoad() { - List inserted = new ArrayList<>(50); - - for (int i=0;i<50;i++) { - MessageToStore message = generateMessageToStore(); - inserted.add(message); - - messages.store(message.guid, message.envelope, "+14151112222", 1); - } - - inserted.sort(Comparator.comparingLong(o -> o.envelope.getTimestamp())); + List inserted = insertRandom("+14151112222", 1); + inserted.sort(Comparator.comparingLong(Envelope::getTimestamp)); List retrieved = messages.load("+14151112222", 1); assertThat(retrieved.size()).isEqualTo(inserted.size()); for (int i=0;i inserted = insertRandom("+14151112222", 1); - List unrelated = insertRandom("+14151114444", 3); - MessageToStore toRemove = inserted.remove(new Random(System.currentTimeMillis()).nextInt(inserted.size() - 1)); - Optional removed = messages.remove("+14151112222", 1, toRemove.envelope.getSource(), toRemove.envelope.getTimestamp()); + List inserted = insertRandom("+14151112222", 1); + List unrelated = insertRandom("+14151114444", 3); + Envelope toRemove = inserted.remove(new Random(System.currentTimeMillis()).nextInt(inserted.size() - 1)); + Optional removed = messages.remove("+14151112222", 1, toRemove.getSource(), toRemove.getTimestamp()); assertThat(removed.isPresent()).isTrue(); - verifyExpected(removed.get(), toRemove.envelope, toRemove.guid); + verifyExpected(removed.get(), toRemove); verifyInTact(inserted, "+14151112222", 1); verifyInTact(unrelated, "+14151114444", 3); @@ -108,13 +100,13 @@ public class MessagesTest { @Test public void removeByDestinationGuid() { - List unrelated = insertRandom("+14151113333", 2); - List inserted = insertRandom("+14151112222", 1); - MessageToStore toRemove = inserted.remove(new Random(System.currentTimeMillis()).nextInt(inserted.size() - 1)); - Optional removed = messages.remove("+14151112222", toRemove.guid); + List unrelated = insertRandom("+14151113333", 2); + List inserted = insertRandom("+14151112222", 1); + Envelope toRemove = inserted.remove(new Random(System.currentTimeMillis()).nextInt(inserted.size() - 1)); + Optional removed = messages.remove("+14151112222", UUID.fromString(toRemove.getServerGuid())); - assertThat(removed.isPresent()).isTrue(); - verifyExpected(removed.get(), toRemove.envelope, toRemove.guid); + assertThat(removed).isPresent(); + verifyExpected(removed.get(), toRemove); verifyInTact(inserted, "+14151112222", 1); verifyInTact(unrelated, "+14151113333", 2); @@ -122,10 +114,10 @@ public class MessagesTest { @Test public void removeByDestinationRowId() { - List unrelatedInserted = insertRandom("+14151111111", 1); - List inserted = insertRandom("+14151112222", 1); + List unrelatedInserted = insertRandom("+14151111111", 1); + List inserted = insertRandom("+14151112222", 1); - inserted.sort(Comparator.comparingLong(o -> o.envelope.getTimestamp())); + inserted.sort(Comparator.comparingLong(Envelope::getTimestamp)); List retrieved = messages.load("+14151112222", 1); @@ -141,7 +133,7 @@ public class MessagesTest { @Test public void testLoadEmpty() { - List inserted = insertRandom("+14151112222", 1); + insertRandom("+14151112222", 1); List loaded = messages.load("+14159999999", 1); assertThat(loaded.isEmpty()).isTrue(); } @@ -151,7 +143,7 @@ public class MessagesTest { insertRandom("+14151112222", 1); insertRandom("+14151112222", 2); - List unrelated = insertRandom("+14151111111", 1); + List unrelated = insertRandom("+14151111111", 1); messages.clear("+14151112222"); @@ -163,9 +155,9 @@ public class MessagesTest { @Test public void testClearDestinationDevice() { insertRandom("+14151112222", 1); - List inserted = insertRandom("+14151112222", 2); + List inserted = insertRandom("+14151112222", 2); - List unrelated = insertRandom("+14151111111", 1); + List unrelated = insertRandom("+14151111111", 1); messages.clear("+14151112222", 1); @@ -177,38 +169,37 @@ public class MessagesTest { @Test public void testVacuum() { - List inserted = insertRandom("+14151112222", 2); + List inserted = insertRandom("+14151112222", 2); messages.vacuum(); verifyInTact(inserted, "+14151112222", 2); } - private List insertRandom(String destination, int destinationDevice) { - List inserted = new ArrayList<>(50); + private List insertRandom(String destination, int destinationDevice) { + List inserted = new ArrayList<>(50); for (int i=0;i<50;i++) { - MessageToStore message = generateMessageToStore(); - inserted.add(message); - - messages.store(message.guid, message.envelope, destination, destinationDevice); + inserted.add(generateEnvelope()); } + messages.store(inserted, destination, destinationDevice); + return inserted; } - private void verifyInTact(List inserted, String destination, int destinationDevice) { - inserted.sort(Comparator.comparingLong(o -> o.envelope.getTimestamp())); + private void verifyInTact(List inserted, String destination, int destinationDevice) { + inserted.sort(Comparator.comparingLong(Envelope::getTimestamp)); List retrieved = messages.load(destination, destinationDevice); assertThat(retrieved.size()).isEqualTo(inserted.size()); for (int i=0;i