Update tests.
This commit is contained in:
		
							parent
							
								
									dfa94eac41
								
							
						
					
					
						commit
						215125de26
					
				| 
						 | 
					@ -51,14 +51,8 @@ public class Messages {
 | 
				
			||||||
    this.database.getDatabase().registerRowMapper(new OutgoingMessageEntityRowMapper());
 | 
					    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<Envelope> messages, String destination, long destinationDevice) {
 | 
					  public void store(List<Envelope> messages, String destination, long destinationDevice) {
 | 
				
			||||||
    database.use(jdbi ->jdbi.useHandle(handle -> {
 | 
					    database.use(jdbi -> jdbi.useHandle(handle -> {
 | 
				
			||||||
      try (Timer.Context ignored = storeTimer.time()) {
 | 
					      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 + ") " +
 | 
					        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)");
 | 
					                "VALUES (:guid, :type, :relay, :timestamp, :server_timestamp, :source, :source_uuid, :source_device, :destination, :destination_device, :message, :content)");
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -24,6 +24,7 @@ import java.util.List;
 | 
				
			||||||
import java.util.Optional;
 | 
					import java.util.Optional;
 | 
				
			||||||
import java.util.Random;
 | 
					import java.util.Random;
 | 
				
			||||||
import java.util.UUID;
 | 
					import java.util.UUID;
 | 
				
			||||||
 | 
					import java.util.stream.Collectors;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
 | 
					import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -44,9 +45,8 @@ public class MessagesTest {
 | 
				
			||||||
  @Test
 | 
					  @Test
 | 
				
			||||||
  public void testStore() throws SQLException {
 | 
					  public void testStore() throws SQLException {
 | 
				
			||||||
    Envelope envelope = generateEnvelope();
 | 
					    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 = ?");
 | 
					    PreparedStatement statement = db.getTestDatabase().getConnection().prepareStatement("SELECT * FROM messages WHERE destination = ?");
 | 
				
			||||||
    statement.setString(1, "+14151112222");
 | 
					    statement.setString(1, "+14151112222");
 | 
				
			||||||
| 
						 | 
					@ -54,7 +54,7 @@ public class MessagesTest {
 | 
				
			||||||
    ResultSet resultSet = statement.executeQuery();
 | 
					    ResultSet resultSet = statement.executeQuery();
 | 
				
			||||||
    assertThat(resultSet.next()).isTrue();
 | 
					    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.getInt("type")).isEqualTo(envelope.getType().getNumber());
 | 
				
			||||||
    assertThat(resultSet.getString("relay")).isNullOrEmpty();
 | 
					    assertThat(resultSet.getString("relay")).isNullOrEmpty();
 | 
				
			||||||
    assertThat(resultSet.getLong("timestamp")).isEqualTo(envelope.getTimestamp());
 | 
					    assertThat(resultSet.getLong("timestamp")).isEqualTo(envelope.getTimestamp());
 | 
				
			||||||
| 
						 | 
					@ -71,36 +71,28 @@ public class MessagesTest {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  @Test
 | 
					  @Test
 | 
				
			||||||
  public void testLoad() {
 | 
					  public void testLoad() {
 | 
				
			||||||
    List<MessageToStore> inserted = new ArrayList<>(50);
 | 
					    List<Envelope> inserted = insertRandom("+14151112222", 1);
 | 
				
			||||||
 | 
					    inserted.sort(Comparator.comparingLong(Envelope::getTimestamp));
 | 
				
			||||||
    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<OutgoingMessageEntity> retrieved = messages.load("+14151112222", 1);
 | 
					    List<OutgoingMessageEntity> retrieved = messages.load("+14151112222", 1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    assertThat(retrieved.size()).isEqualTo(inserted.size());
 | 
					    assertThat(retrieved.size()).isEqualTo(inserted.size());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    for (int i=0;i<retrieved.size();i++) {
 | 
					    for (int i=0;i<retrieved.size();i++) {
 | 
				
			||||||
      verifyExpected(retrieved.get(i), inserted.get(i).envelope, inserted.get(i).guid);
 | 
					      verifyExpected(retrieved.get(i), inserted.get(i));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  @Test
 | 
					  @Test
 | 
				
			||||||
  public void removeBySourceDestinationTimestamp() {
 | 
					  public void removeBySourceDestinationTimestamp() {
 | 
				
			||||||
    List<MessageToStore>            inserted = insertRandom("+14151112222", 1);
 | 
					    List<Envelope>                  inserted  = insertRandom("+14151112222", 1);
 | 
				
			||||||
    List<MessageToStore>            unrelated = insertRandom("+14151114444", 3);
 | 
					    List<Envelope>                  unrelated = insertRandom("+14151114444", 3);
 | 
				
			||||||
    MessageToStore                  toRemove = inserted.remove(new Random(System.currentTimeMillis()).nextInt(inserted.size() - 1));
 | 
					    Envelope                        toRemove  = inserted.remove(new Random(System.currentTimeMillis()).nextInt(inserted.size() - 1));
 | 
				
			||||||
    Optional<OutgoingMessageEntity> removed  = messages.remove("+14151112222", 1, toRemove.envelope.getSource(), toRemove.envelope.getTimestamp());
 | 
					    Optional<OutgoingMessageEntity> removed   = messages.remove("+14151112222", 1, toRemove.getSource(), toRemove.getTimestamp());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    assertThat(removed.isPresent()).isTrue();
 | 
					    assertThat(removed.isPresent()).isTrue();
 | 
				
			||||||
    verifyExpected(removed.get(), toRemove.envelope, toRemove.guid);
 | 
					    verifyExpected(removed.get(), toRemove);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    verifyInTact(inserted, "+14151112222", 1);
 | 
					    verifyInTact(inserted, "+14151112222", 1);
 | 
				
			||||||
    verifyInTact(unrelated, "+14151114444", 3);
 | 
					    verifyInTact(unrelated, "+14151114444", 3);
 | 
				
			||||||
| 
						 | 
					@ -108,13 +100,13 @@ public class MessagesTest {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  @Test
 | 
					  @Test
 | 
				
			||||||
  public void removeByDestinationGuid() {
 | 
					  public void removeByDestinationGuid() {
 | 
				
			||||||
    List<MessageToStore>            unrelated = insertRandom("+14151113333", 2);
 | 
					    List<Envelope>                  unrelated = insertRandom("+14151113333", 2);
 | 
				
			||||||
    List<MessageToStore>            inserted = insertRandom("+14151112222", 1);
 | 
					    List<Envelope>                  inserted  = insertRandom("+14151112222", 1);
 | 
				
			||||||
    MessageToStore                  toRemove = inserted.remove(new Random(System.currentTimeMillis()).nextInt(inserted.size() - 1));
 | 
					    Envelope                        toRemove  = inserted.remove(new Random(System.currentTimeMillis()).nextInt(inserted.size() - 1));
 | 
				
			||||||
    Optional<OutgoingMessageEntity> removed  = messages.remove("+14151112222", toRemove.guid);
 | 
					    Optional<OutgoingMessageEntity> removed   = messages.remove("+14151112222", UUID.fromString(toRemove.getServerGuid()));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    assertThat(removed.isPresent()).isTrue();
 | 
					    assertThat(removed).isPresent();
 | 
				
			||||||
    verifyExpected(removed.get(), toRemove.envelope, toRemove.guid);
 | 
					    verifyExpected(removed.get(), toRemove);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    verifyInTact(inserted, "+14151112222", 1);
 | 
					    verifyInTact(inserted, "+14151112222", 1);
 | 
				
			||||||
    verifyInTact(unrelated, "+14151113333", 2);
 | 
					    verifyInTact(unrelated, "+14151113333", 2);
 | 
				
			||||||
| 
						 | 
					@ -122,10 +114,10 @@ public class MessagesTest {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  @Test
 | 
					  @Test
 | 
				
			||||||
  public void removeByDestinationRowId() {
 | 
					  public void removeByDestinationRowId() {
 | 
				
			||||||
    List<MessageToStore> unrelatedInserted = insertRandom("+14151111111", 1);
 | 
					    List<Envelope> unrelatedInserted = insertRandom("+14151111111", 1);
 | 
				
			||||||
    List<MessageToStore> inserted          = insertRandom("+14151112222", 1);
 | 
					    List<Envelope> inserted          = insertRandom("+14151112222", 1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    inserted.sort(Comparator.comparingLong(o -> o.envelope.getTimestamp()));
 | 
					    inserted.sort(Comparator.comparingLong(Envelope::getTimestamp));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    List<OutgoingMessageEntity> retrieved = messages.load("+14151112222", 1);
 | 
					    List<OutgoingMessageEntity> retrieved = messages.load("+14151112222", 1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -141,7 +133,7 @@ public class MessagesTest {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  @Test
 | 
					  @Test
 | 
				
			||||||
  public void testLoadEmpty() {
 | 
					  public void testLoadEmpty() {
 | 
				
			||||||
    List<MessageToStore> inserted = insertRandom("+14151112222", 1);
 | 
					    insertRandom("+14151112222", 1);
 | 
				
			||||||
    List<OutgoingMessageEntity> loaded = messages.load("+14159999999", 1);
 | 
					    List<OutgoingMessageEntity> loaded = messages.load("+14159999999", 1);
 | 
				
			||||||
    assertThat(loaded.isEmpty()).isTrue();
 | 
					    assertThat(loaded.isEmpty()).isTrue();
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
| 
						 | 
					@ -151,7 +143,7 @@ public class MessagesTest {
 | 
				
			||||||
    insertRandom("+14151112222", 1);
 | 
					    insertRandom("+14151112222", 1);
 | 
				
			||||||
    insertRandom("+14151112222", 2);
 | 
					    insertRandom("+14151112222", 2);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    List<MessageToStore> unrelated = insertRandom("+14151111111", 1);
 | 
					    List<Envelope> unrelated = insertRandom("+14151111111", 1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    messages.clear("+14151112222");
 | 
					    messages.clear("+14151112222");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -163,9 +155,9 @@ public class MessagesTest {
 | 
				
			||||||
  @Test
 | 
					  @Test
 | 
				
			||||||
  public void testClearDestinationDevice() {
 | 
					  public void testClearDestinationDevice() {
 | 
				
			||||||
    insertRandom("+14151112222", 1);
 | 
					    insertRandom("+14151112222", 1);
 | 
				
			||||||
    List<MessageToStore> inserted = insertRandom("+14151112222", 2);
 | 
					    List<Envelope> inserted = insertRandom("+14151112222", 2);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    List<MessageToStore> unrelated = insertRandom("+14151111111", 1);
 | 
					    List<Envelope> unrelated = insertRandom("+14151111111", 1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    messages.clear("+14151112222", 1);
 | 
					    messages.clear("+14151112222", 1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -177,38 +169,37 @@ public class MessagesTest {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  @Test
 | 
					  @Test
 | 
				
			||||||
  public void testVacuum() {
 | 
					  public void testVacuum() {
 | 
				
			||||||
    List<MessageToStore> inserted = insertRandom("+14151112222", 2);
 | 
					    List<Envelope> inserted = insertRandom("+14151112222", 2);
 | 
				
			||||||
    messages.vacuum();
 | 
					    messages.vacuum();
 | 
				
			||||||
    verifyInTact(inserted, "+14151112222", 2);
 | 
					    verifyInTact(inserted, "+14151112222", 2);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  private List<MessageToStore> insertRandom(String destination, int destinationDevice) {
 | 
					  private List<Envelope> insertRandom(String destination, int destinationDevice) {
 | 
				
			||||||
    List<MessageToStore> inserted = new ArrayList<>(50);
 | 
					    List<Envelope> inserted = new ArrayList<>(50);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    for (int i=0;i<50;i++) {
 | 
					    for (int i=0;i<50;i++) {
 | 
				
			||||||
      MessageToStore message = generateMessageToStore();
 | 
					      inserted.add(generateEnvelope());
 | 
				
			||||||
      inserted.add(message);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      messages.store(message.guid, message.envelope, destination, destinationDevice);
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    messages.store(inserted, destination, destinationDevice);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return inserted;
 | 
					    return inserted;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  private void verifyInTact(List<MessageToStore> inserted, String destination, int destinationDevice) {
 | 
					  private void verifyInTact(List<Envelope> inserted, String destination, int destinationDevice) {
 | 
				
			||||||
    inserted.sort(Comparator.comparingLong(o -> o.envelope.getTimestamp()));
 | 
					    inserted.sort(Comparator.comparingLong(Envelope::getTimestamp));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    List<OutgoingMessageEntity> retrieved = messages.load(destination, destinationDevice);
 | 
					    List<OutgoingMessageEntity> retrieved = messages.load(destination, destinationDevice);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    assertThat(retrieved.size()).isEqualTo(inserted.size());
 | 
					    assertThat(retrieved.size()).isEqualTo(inserted.size());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    for (int i=0;i<retrieved.size();i++) {
 | 
					    for (int i=0;i<retrieved.size();i++) {
 | 
				
			||||||
      verifyExpected(retrieved.get(i), inserted.get(i).envelope, inserted.get(i).guid);
 | 
					      verifyExpected(retrieved.get(i), inserted.get(i));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  private void verifyExpected(OutgoingMessageEntity retrieved, Envelope inserted, UUID guid) {
 | 
					  private void verifyExpected(OutgoingMessageEntity retrieved, Envelope inserted) {
 | 
				
			||||||
    assertThat(retrieved.getTimestamp()).isEqualTo(inserted.getTimestamp());
 | 
					    assertThat(retrieved.getTimestamp()).isEqualTo(inserted.getTimestamp());
 | 
				
			||||||
    assertThat(retrieved.getSource()).isEqualTo(inserted.getSource());
 | 
					    assertThat(retrieved.getSource()).isEqualTo(inserted.getSource());
 | 
				
			||||||
    assertThat(retrieved.getRelay()).isEqualTo(inserted.getRelay());
 | 
					    assertThat(retrieved.getRelay()).isEqualTo(inserted.getRelay());
 | 
				
			||||||
| 
						 | 
					@ -216,14 +207,10 @@ public class MessagesTest {
 | 
				
			||||||
    assertThat(retrieved.getContent()).isEqualTo(inserted.getContent().toByteArray());
 | 
					    assertThat(retrieved.getContent()).isEqualTo(inserted.getContent().toByteArray());
 | 
				
			||||||
    assertThat(retrieved.getMessage()).isEqualTo(inserted.getLegacyMessage().toByteArray());
 | 
					    assertThat(retrieved.getMessage()).isEqualTo(inserted.getLegacyMessage().toByteArray());
 | 
				
			||||||
    assertThat(retrieved.getServerTimestamp()).isEqualTo(inserted.getServerTimestamp());
 | 
					    assertThat(retrieved.getServerTimestamp()).isEqualTo(inserted.getServerTimestamp());
 | 
				
			||||||
    assertThat(retrieved.getGuid()).isEqualTo(guid);
 | 
					    assertThat(retrieved.getGuid()).isEqualTo(retrieved.getGuid());
 | 
				
			||||||
    assertThat(retrieved.getSourceDevice()).isEqualTo(inserted.getSourceDevice());
 | 
					    assertThat(retrieved.getSourceDevice()).isEqualTo(inserted.getSourceDevice());
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  private MessageToStore generateMessageToStore() {
 | 
					 | 
				
			||||||
    return new MessageToStore(UUID.randomUUID(), generateEnvelope());
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  private Envelope generateEnvelope() {
 | 
					  private Envelope generateEnvelope() {
 | 
				
			||||||
    Random random = new Random();
 | 
					    Random random = new Random();
 | 
				
			||||||
    byte[] content = new byte[256];
 | 
					    byte[] content = new byte[256];
 | 
				
			||||||
| 
						 | 
					@ -243,14 +230,4 @@ public class MessagesTest {
 | 
				
			||||||
                   .setServerGuid(UUID.randomUUID().toString())
 | 
					                   .setServerGuid(UUID.randomUUID().toString())
 | 
				
			||||||
                   .build();
 | 
					                   .build();
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					 | 
				
			||||||
  private static class MessageToStore {
 | 
					 | 
				
			||||||
    private final UUID guid;
 | 
					 | 
				
			||||||
    private final Envelope envelope;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    private MessageToStore(UUID guid, Envelope envelope) {
 | 
					 | 
				
			||||||
      this.guid = guid;
 | 
					 | 
				
			||||||
      this.envelope = envelope;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue