Check group counts in AutoDeleteIntegrationTest.

This commit is contained in:
akwizgran
2021-02-26 13:41:35 +00:00
committed by Torsten Grote
parent b128370299
commit d84603bce2

View File

@@ -11,6 +11,7 @@ import org.briarproject.bramble.system.TimeTravelModule;
import org.briarproject.bramble.test.TestDatabaseConfigModule; import org.briarproject.bramble.test.TestDatabaseConfigModule;
import org.briarproject.briar.api.attachment.AttachmentHeader; import org.briarproject.briar.api.attachment.AttachmentHeader;
import org.briarproject.briar.api.autodelete.AutoDeleteManager; import org.briarproject.briar.api.autodelete.AutoDeleteManager;
import org.briarproject.briar.api.client.MessageTracker.GroupCount;
import org.briarproject.briar.api.conversation.ConversationManager; import org.briarproject.briar.api.conversation.ConversationManager;
import org.briarproject.briar.api.conversation.ConversationMessageHeader; import org.briarproject.briar.api.conversation.ConversationMessageHeader;
import org.briarproject.briar.api.messaging.MessagingManager; import org.briarproject.briar.api.messaging.MessagingManager;
@@ -96,6 +97,7 @@ public class AutoDeleteIntegrationTest
// 0 creates a message without a timer // 0 creates a message without a timer
MessageId messageId = createMessageWithoutTimer(c0, contactId1From0); MessageId messageId = createMessageWithoutTimer(c0, contactId1From0);
// The message should have been added to 0's view of the conversation // The message should have been added to 0's view of the conversation
assertGroupCount(c0, contactId1From0, 1, 0);
List<ConversationMessageHeader> headers0 = List<ConversationMessageHeader> headers0 =
getMessageHeaders(c0, contactId1From0); getMessageHeaders(c0, contactId1From0);
assertEquals(1, headers0.size()); assertEquals(1, headers0.size());
@@ -106,6 +108,7 @@ public class AutoDeleteIntegrationTest
// Sync the message to 1 // Sync the message to 1
sync0To1(1, true); sync0To1(1, true);
// The message should have been added to 1's view of the conversation // The message should have been added to 1's view of the conversation
assertGroupCount(c1, contactId0From1, 1, 1);
List<ConversationMessageHeader> headers1 = List<ConversationMessageHeader> headers1 =
getMessageHeaders(c1, contactId0From1); getMessageHeaders(c1, contactId0From1);
assertEquals(1, headers1.size()); assertEquals(1, headers1.size());
@@ -120,6 +123,7 @@ public class AutoDeleteIntegrationTest
// 0 creates a message with the default timer // 0 creates a message with the default timer
MessageId messageId = createMessageWithTimer(c0, contactId1From0); MessageId messageId = createMessageWithTimer(c0, contactId1From0);
// The message should have been added to 0's view of the conversation // The message should have been added to 0's view of the conversation
assertGroupCount(c0, contactId1From0, 1, 0);
List<ConversationMessageHeader> headers0 = List<ConversationMessageHeader> headers0 =
getMessageHeaders(c0, contactId1From0); getMessageHeaders(c0, contactId1From0);
assertEquals(1, headers0.size()); assertEquals(1, headers0.size());
@@ -132,6 +136,7 @@ public class AutoDeleteIntegrationTest
// Sync the ack to 0 // Sync the ack to 0
ack1To0(1); ack1To0(1);
// The message should have been added to 1's view of the conversation // The message should have been added to 1's view of the conversation
assertGroupCount(c1, contactId0From1, 1, 1);
List<ConversationMessageHeader> headers1 = List<ConversationMessageHeader> headers1 =
getMessageHeaders(c1, contactId0From1); getMessageHeaders(c1, contactId0From1);
assertEquals(1, headers1.size()); assertEquals(1, headers1.size());
@@ -159,6 +164,7 @@ public class AutoDeleteIntegrationTest
// 0 creates a message with the new timer // 0 creates a message with the new timer
MessageId messageId = createMessageWithTimer(c0, contactId1From0); MessageId messageId = createMessageWithTimer(c0, contactId1From0);
// The message should have been added to 0's view of the conversation // The message should have been added to 0's view of the conversation
assertGroupCount(c0, contactId1From0, 1, 0);
List<ConversationMessageHeader> headers0 = List<ConversationMessageHeader> headers0 =
getMessageHeaders(c0, contactId1From0); getMessageHeaders(c0, contactId1From0);
assertEquals(1, headers0.size()); assertEquals(1, headers0.size());
@@ -171,6 +177,7 @@ public class AutoDeleteIntegrationTest
// Sync the ack to 0 - this starts 0's timer // Sync the ack to 0 - this starts 0's timer
ack1To0(1); ack1To0(1);
// The message should have been added to 1's view of the conversation // The message should have been added to 1's view of the conversation
assertGroupCount(c1, contactId0From1, 1, 1);
List<ConversationMessageHeader> headers1 = List<ConversationMessageHeader> headers1 =
getMessageHeaders(c1, contactId0From1); getMessageHeaders(c1, contactId0From1);
assertEquals(1, headers1.size()); assertEquals(1, headers1.size());
@@ -187,35 +194,36 @@ public class AutoDeleteIntegrationTest
long timerLatency = MIN_AUTO_DELETE_TIMER_MS + BATCH_DELAY_MS; long timerLatency = MIN_AUTO_DELETE_TIMER_MS + BATCH_DELAY_MS;
c0.getTimeTravel().addCurrentTimeMillis(timerLatency - 1); c0.getTimeTravel().addCurrentTimeMillis(timerLatency - 1);
c1.getTimeTravel().addCurrentTimeMillis(timerLatency - 1); c1.getTimeTravel().addCurrentTimeMillis(timerLatency - 1);
headers0 = getMessageHeaders(c0, contactId1From0); assertGroupCount(c0, contactId1From0, 1, 0);
assertEquals(1, headers0.size()); assertEquals(1, getMessageHeaders(c0, contactId1From0).size());
headers1 = getMessageHeaders(c1, contactId0From1); assertGroupCount(c1, contactId0From1, 1, 1);
assertEquals(1, headers1.size()); assertEquals(1, getMessageHeaders(c1, contactId0From1).size());
// When 0's timer has elapsed, the message should be deleted from 0's // When 0's timer has elapsed, the message should be deleted from 0's
// view of the conversation but 1 should still see the message // view of the conversation but 1 should still see the message
c0.getTimeTravel().addCurrentTimeMillis(1); c0.getTimeTravel().addCurrentTimeMillis(1);
c1.getTimeTravel().addCurrentTimeMillis(1); c1.getTimeTravel().addCurrentTimeMillis(1);
headers0 = getMessageHeaders(c0, contactId1From0); assertGroupCount(c0, contactId1From0, 0, 0);
assertEquals(0, headers0.size()); assertEquals(0, getMessageHeaders(c0, contactId1From0).size());
headers1 = getMessageHeaders(c1, contactId0From1); assertGroupCount(c1, contactId0From1, 1, 1);
assertEquals(1, headers1.size()); assertEquals(1, getMessageHeaders(c1, contactId0From1).size());
// 1 marks the message as read - this starts 1's timer // 1 marks the message as read - this starts 1's timer
markMessageRead(c1, contact0From1, messageId); markMessageRead(c1, contact0From1, messageId);
assertGroupCount(c1, contactId0From1, 1, 0);
// Before 1's timer elapses, 1 should still see the message // Before 1's timer elapses, 1 should still see the message
c0.getTimeTravel().addCurrentTimeMillis(timerLatency - 1); c0.getTimeTravel().addCurrentTimeMillis(timerLatency - 1);
c1.getTimeTravel().addCurrentTimeMillis(timerLatency - 1); c1.getTimeTravel().addCurrentTimeMillis(timerLatency - 1);
headers0 = getMessageHeaders(c0, contactId1From0); assertGroupCount(c0, contactId1From0, 0, 0);
assertEquals(0, headers0.size()); assertEquals(0, getMessageHeaders(c0, contactId1From0).size());
headers1 = getMessageHeaders(c1, contactId0From1); assertGroupCount(c1, contactId0From1, 1, 0);
assertEquals(1, headers1.size()); assertEquals(1, getMessageHeaders(c1, contactId0From1).size());
// When 1's timer has elapsed, the message should be deleted from 1's // When 1's timer has elapsed, the message should be deleted from 1's
// view of the conversation // view of the conversation
c0.getTimeTravel().addCurrentTimeMillis(1); c0.getTimeTravel().addCurrentTimeMillis(1);
c1.getTimeTravel().addCurrentTimeMillis(1); c1.getTimeTravel().addCurrentTimeMillis(1);
headers0 = getMessageHeaders(c0, contactId1From0); assertGroupCount(c0, contactId1From0, 0, 0);
assertEquals(0, headers0.size()); assertEquals(0, getMessageHeaders(c0, contactId1From0).size());
headers1 = getMessageHeaders(c1, contactId0From1); assertGroupCount(c1, contactId0From1, 0, 0);
assertEquals(0, headers1.size()); assertEquals(0, getMessageHeaders(c1, contactId0From1).size());
} }
@Test @Test
@@ -231,6 +239,7 @@ public class AutoDeleteIntegrationTest
// 0 creates a message with the new timer // 0 creates a message with the new timer
MessageId messageId0 = createMessageWithTimer(c0, contactId1From0); MessageId messageId0 = createMessageWithTimer(c0, contactId1From0);
// The message should have been added to 0's view of the conversation // The message should have been added to 0's view of the conversation
assertGroupCount(c0, contactId1From0, 1, 0);
List<ConversationMessageHeader> headers0 = List<ConversationMessageHeader> headers0 =
getMessageHeaders(c0, contactId1From0); getMessageHeaders(c0, contactId1From0);
assertEquals(1, headers0.size()); assertEquals(1, headers0.size());
@@ -243,6 +252,7 @@ public class AutoDeleteIntegrationTest
// Sync the ack to 0 - this starts 0's timer // Sync the ack to 0 - this starts 0's timer
ack1To0(1); ack1To0(1);
// The message should have been added to 1's view of the conversation // The message should have been added to 1's view of the conversation
assertGroupCount(c1, contactId0From1, 1, 1);
List<ConversationMessageHeader> headers1 = List<ConversationMessageHeader> headers1 =
getMessageHeaders(c1, contactId0From1); getMessageHeaders(c1, contactId0From1);
assertEquals(1, headers1.size()); assertEquals(1, headers1.size());
@@ -259,38 +269,40 @@ public class AutoDeleteIntegrationTest
long timerLatency = MIN_AUTO_DELETE_TIMER_MS + BATCH_DELAY_MS; long timerLatency = MIN_AUTO_DELETE_TIMER_MS + BATCH_DELAY_MS;
c0.getTimeTravel().addCurrentTimeMillis(timerLatency - 1); c0.getTimeTravel().addCurrentTimeMillis(timerLatency - 1);
c1.getTimeTravel().addCurrentTimeMillis(timerLatency - 1); c1.getTimeTravel().addCurrentTimeMillis(timerLatency - 1);
headers0 = getMessageHeaders(c0, contactId1From0); assertGroupCount(c0, contactId1From0, 1, 0);
assertEquals(1, headers0.size()); assertEquals(1, getMessageHeaders(c0, contactId1From0).size());
headers1 = getMessageHeaders(c1, contactId0From1); assertGroupCount(c1, contactId0From1, 1, 1);
assertEquals(1, headers1.size()); assertEquals(1, getMessageHeaders(c1, contactId0From1).size());
// When 0's timer has elapsed, the message should be deleted from 0's // When 0's timer has elapsed, the message should be deleted from 0's
// view of the conversation but 1 should still see the message // view of the conversation but 1 should still see the message
c0.getTimeTravel().addCurrentTimeMillis(1); c0.getTimeTravel().addCurrentTimeMillis(1);
c1.getTimeTravel().addCurrentTimeMillis(1); c1.getTimeTravel().addCurrentTimeMillis(1);
headers0 = getMessageHeaders(c0, contactId1From0); assertGroupCount(c0, contactId1From0, 0, 0);
assertEquals(0, headers0.size()); assertEquals(0, getMessageHeaders(c0, contactId1From0).size());
headers1 = getMessageHeaders(c1, contactId0From1); assertGroupCount(c1, contactId0From1, 1, 1);
assertEquals(1, headers1.size()); assertEquals(1, getMessageHeaders(c1, contactId0From1).size());
// 1 marks the message as read - this starts 1's timer // 1 marks the message as read - this starts 1's timer
markMessageRead(c1, contact0From1, messageId0); markMessageRead(c1, contact0From1, messageId0);
assertGroupCount(c1, contactId0From1, 1, 0);
// Before 1's timer elapses, 1 should still see the message // Before 1's timer elapses, 1 should still see the message
c0.getTimeTravel().addCurrentTimeMillis(timerLatency - 1); c0.getTimeTravel().addCurrentTimeMillis(timerLatency - 1);
c1.getTimeTravel().addCurrentTimeMillis(timerLatency - 1); c1.getTimeTravel().addCurrentTimeMillis(timerLatency - 1);
headers0 = getMessageHeaders(c0, contactId1From0); assertGroupCount(c0, contactId1From0, 0, 0);
assertEquals(0, headers0.size()); assertEquals(0, getMessageHeaders(c0, contactId1From0).size());
headers1 = getMessageHeaders(c1, contactId0From1); assertGroupCount(c1, contactId0From1, 1, 0);
assertEquals(1, headers1.size()); assertEquals(1, getMessageHeaders(c1, contactId0From1).size());
// When 1's timer has elapsed, the message should be deleted from 1's // When 1's timer has elapsed, the message should be deleted from 1's
// view of the conversation // view of the conversation
c0.getTimeTravel().addCurrentTimeMillis(1); c0.getTimeTravel().addCurrentTimeMillis(1);
c1.getTimeTravel().addCurrentTimeMillis(1); c1.getTimeTravel().addCurrentTimeMillis(1);
headers0 = getMessageHeaders(c0, contactId1From0); assertGroupCount(c0, contactId1From0, 0, 0);
assertEquals(0, headers0.size()); assertEquals(0, getMessageHeaders(c0, contactId1From0).size());
headers1 = getMessageHeaders(c1, contactId0From1); assertGroupCount(c1, contactId0From1, 0, 0);
assertEquals(0, headers1.size()); assertEquals(0, getMessageHeaders(c1, contactId0From1).size());
// 1 creates a message // 1 creates a message
MessageId messageId1 = createMessageWithTimer(c1, contactId0From1); MessageId messageId1 = createMessageWithTimer(c1, contactId0From1);
// The message should have been added to 1's view of the conversation // The message should have been added to 1's view of the conversation
assertGroupCount(c1, contactId0From1, 1, 0);
headers1 = getMessageHeaders(c1, contactId0From1); headers1 = getMessageHeaders(c1, contactId0From1);
assertEquals(1, headers1.size()); assertEquals(1, headers1.size());
assertEquals(messageId1, headers1.get(0).getId()); assertEquals(messageId1, headers1.get(0).getId());
@@ -302,6 +314,7 @@ public class AutoDeleteIntegrationTest
// Sync the ack to 1 - this starts 1's timer // Sync the ack to 1 - this starts 1's timer
ack0To1(1); ack0To1(1);
// The message should have been added to 0's view of the conversation // The message should have been added to 0's view of the conversation
assertGroupCount(c0, contactId1From0, 1, 1);
headers0 = getMessageHeaders(c0, contactId1From0); headers0 = getMessageHeaders(c0, contactId1From0);
assertEquals(1, headers0.size()); assertEquals(1, headers0.size());
assertEquals(messageId1, headers0.get(0).getId()); assertEquals(messageId1, headers0.get(0).getId());
@@ -316,35 +329,36 @@ public class AutoDeleteIntegrationTest
// Before 1's timer elapses, both peers should still see the message // Before 1's timer elapses, both peers should still see the message
c0.getTimeTravel().addCurrentTimeMillis(timerLatency - 1); c0.getTimeTravel().addCurrentTimeMillis(timerLatency - 1);
c1.getTimeTravel().addCurrentTimeMillis(timerLatency - 1); c1.getTimeTravel().addCurrentTimeMillis(timerLatency - 1);
headers0 = getMessageHeaders(c0, contactId1From0); assertGroupCount(c0, contactId1From0, 1, 1);
assertEquals(1, headers0.size()); assertEquals(1, getMessageHeaders(c0, contactId1From0).size());
headers1 = getMessageHeaders(c1, contactId0From1); assertGroupCount(c1, contactId0From1, 1, 0);
assertEquals(1, headers1.size()); assertEquals(1, getMessageHeaders(c1, contactId0From1).size());
// When 1's timer has elapsed, the message should be deleted from 1's // When 1's timer has elapsed, the message should be deleted from 1's
// view of the conversation but 0 should still see the message // view of the conversation but 0 should still see the message
c0.getTimeTravel().addCurrentTimeMillis(1); c0.getTimeTravel().addCurrentTimeMillis(1);
c1.getTimeTravel().addCurrentTimeMillis(1); c1.getTimeTravel().addCurrentTimeMillis(1);
headers0 = getMessageHeaders(c0, contactId1From0); assertGroupCount(c0, contactId1From0, 1, 1);
assertEquals(1, headers0.size()); assertEquals(1, getMessageHeaders(c0, contactId1From0).size());
headers1 = getMessageHeaders(c1, contactId0From1); assertGroupCount(c1, contactId0From1, 0, 0);
assertEquals(0, headers1.size()); assertEquals(0, getMessageHeaders(c1, contactId0From1).size());
// 0 marks the message as read - this starts 0's timer // 0 marks the message as read - this starts 0's timer
markMessageRead(c0, contact1From0, messageId1); markMessageRead(c0, contact1From0, messageId1);
assertGroupCount(c0, contactId1From0, 1, 0);
// Before 0's timer elapses, 0 should still see the message // Before 0's timer elapses, 0 should still see the message
c0.getTimeTravel().addCurrentTimeMillis(timerLatency - 1); c0.getTimeTravel().addCurrentTimeMillis(timerLatency - 1);
c1.getTimeTravel().addCurrentTimeMillis(timerLatency - 1); c1.getTimeTravel().addCurrentTimeMillis(timerLatency - 1);
headers0 = getMessageHeaders(c0, contactId1From0); assertGroupCount(c0, contactId1From0, 1, 0);
assertEquals(1, headers0.size()); assertEquals(1, getMessageHeaders(c0, contactId1From0).size());
headers1 = getMessageHeaders(c1, contactId0From1); assertGroupCount(c1, contactId0From1, 0, 0);
assertEquals(0, headers1.size()); assertEquals(0, getMessageHeaders(c1, contactId0From1).size());
// When 0's timer has elapsed, the message should be deleted from 0's // When 0's timer has elapsed, the message should be deleted from 0's
// view of the conversation // view of the conversation
c0.getTimeTravel().addCurrentTimeMillis(1); c0.getTimeTravel().addCurrentTimeMillis(1);
c1.getTimeTravel().addCurrentTimeMillis(1); c1.getTimeTravel().addCurrentTimeMillis(1);
headers0 = getMessageHeaders(c0, contactId1From0); assertGroupCount(c0, contactId1From0, 0, 0);
assertEquals(0, headers0.size()); assertEquals(0, getMessageHeaders(c0, contactId1From0).size());
headers1 = getMessageHeaders(c1, contactId0From1); assertGroupCount(c1, contactId0From1, 0, 0);
assertEquals(0, headers1.size()); assertEquals(0, getMessageHeaders(c1, contactId0From1).size());
} }
@Test @Test
@@ -358,6 +372,7 @@ public class AutoDeleteIntegrationTest
MessageId messageId = createMessageWithTimer(c0, contactId1From0, MessageId messageId = createMessageWithTimer(c0, contactId1From0,
singletonList(attachmentHeader)); singletonList(attachmentHeader));
// The message should have been added to 0's view of the conversation // The message should have been added to 0's view of the conversation
assertGroupCount(c0, contactId1From0, 1, 0);
List<ConversationMessageHeader> headers0 = List<ConversationMessageHeader> headers0 =
getMessageHeaders(c0, contactId1From0); getMessageHeaders(c0, contactId1From0);
assertEquals(1, headers0.size()); assertEquals(1, headers0.size());
@@ -368,6 +383,7 @@ public class AutoDeleteIntegrationTest
// Sync the acks to 0 - this starts 0's timer // Sync the acks to 0 - this starts 0's timer
ack1To0(2); ack1To0(2);
// The message should have been added to 1's view of the conversation // The message should have been added to 1's view of the conversation
assertGroupCount(c1, contactId0From1, 1, 1);
List<ConversationMessageHeader> headers1 = List<ConversationMessageHeader> headers1 =
getMessageHeaders(c1, contactId0From1); getMessageHeaders(c1, contactId0From1);
assertEquals(1, headers1.size()); assertEquals(1, headers1.size());
@@ -378,41 +394,43 @@ public class AutoDeleteIntegrationTest
long timerLatency = MIN_AUTO_DELETE_TIMER_MS + BATCH_DELAY_MS; long timerLatency = MIN_AUTO_DELETE_TIMER_MS + BATCH_DELAY_MS;
c0.getTimeTravel().addCurrentTimeMillis(timerLatency - 1); c0.getTimeTravel().addCurrentTimeMillis(timerLatency - 1);
c1.getTimeTravel().addCurrentTimeMillis(timerLatency - 1); c1.getTimeTravel().addCurrentTimeMillis(timerLatency - 1);
headers0 = getMessageHeaders(c0, contactId1From0); assertGroupCount(c0, contactId1From0, 1, 0);
assertEquals(1, headers0.size()); assertEquals(1, getMessageHeaders(c0, contactId1From0).size());
assertFalse(messageIsDeleted(c0, attachmentHeader.getMessageId())); assertFalse(messageIsDeleted(c0, attachmentHeader.getMessageId()));
headers1 = getMessageHeaders(c1, contactId0From1); assertGroupCount(c1, contactId0From1, 1, 1);
assertEquals(1, headers1.size()); assertEquals(1, getMessageHeaders(c1, contactId0From1).size());
assertFalse(messageIsDeleted(c1, attachmentHeader.getMessageId())); assertFalse(messageIsDeleted(c1, attachmentHeader.getMessageId()));
// When 0's timer has elapsed, the message should be deleted from 0's // When 0's timer has elapsed, the message should be deleted from 0's
// view of the conversation but 1 should still see the message // view of the conversation but 1 should still see the message
c0.getTimeTravel().addCurrentTimeMillis(1); c0.getTimeTravel().addCurrentTimeMillis(1);
c1.getTimeTravel().addCurrentTimeMillis(1); c1.getTimeTravel().addCurrentTimeMillis(1);
headers0 = getMessageHeaders(c0, contactId1From0); assertGroupCount(c0, contactId1From0, 0, 0);
assertEquals(0, headers0.size()); assertEquals(0, getMessageHeaders(c0, contactId1From0).size());
assertTrue(messageIsDeleted(c0, attachmentHeader.getMessageId())); assertTrue(messageIsDeleted(c0, attachmentHeader.getMessageId()));
headers1 = getMessageHeaders(c1, contactId0From1); assertGroupCount(c1, contactId0From1, 1, 1);
assertEquals(1, headers1.size()); assertEquals(1, getMessageHeaders(c1, contactId0From1).size());
assertFalse(messageIsDeleted(c1, attachmentHeader.getMessageId())); assertFalse(messageIsDeleted(c1, attachmentHeader.getMessageId()));
// 1 marks the message as read - this starts 1's timer // 1 marks the message as read - this starts 1's timer
markMessageRead(c1, contact0From1, messageId); markMessageRead(c1, contact0From1, messageId);
assertGroupCount(c1, contactId0From1, 1, 0);
// Before 1's timer elapses, 1 should still see the message // Before 1's timer elapses, 1 should still see the message
c0.getTimeTravel().addCurrentTimeMillis(timerLatency - 1); c0.getTimeTravel().addCurrentTimeMillis(timerLatency - 1);
c1.getTimeTravel().addCurrentTimeMillis(timerLatency - 1); c1.getTimeTravel().addCurrentTimeMillis(timerLatency - 1);
assertEquals(0, headers0.size()); assertGroupCount(c0, contactId1From0, 0, 0);
assertEquals(0, getMessageHeaders(c0, contactId1From0).size());
assertTrue(messageIsDeleted(c0, attachmentHeader.getMessageId())); assertTrue(messageIsDeleted(c0, attachmentHeader.getMessageId()));
headers1 = getMessageHeaders(c1, contactId0From1); assertGroupCount(c1, contactId0From1, 1, 0);
assertEquals(1, headers1.size()); assertEquals(1, getMessageHeaders(c1, contactId0From1).size());
assertFalse(messageIsDeleted(c1, attachmentHeader.getMessageId())); assertFalse(messageIsDeleted(c1, attachmentHeader.getMessageId()));
// When 1's timer has elapsed, the message should be deleted from 1's // When 1's timer has elapsed, the message should be deleted from 1's
// view of the conversation // view of the conversation
c0.getTimeTravel().addCurrentTimeMillis(1); c0.getTimeTravel().addCurrentTimeMillis(1);
c1.getTimeTravel().addCurrentTimeMillis(1); c1.getTimeTravel().addCurrentTimeMillis(1);
headers0 = getMessageHeaders(c0, contactId1From0); assertGroupCount(c0, contactId1From0, 0, 0);
assertEquals(0, headers0.size()); assertEquals(0, getMessageHeaders(c0, contactId1From0).size());
assertTrue(messageIsDeleted(c0, attachmentHeader.getMessageId())); assertTrue(messageIsDeleted(c0, attachmentHeader.getMessageId()));
headers1 = getMessageHeaders(c1, contactId0From1); assertGroupCount(c1, contactId0From1, 0, 0);
assertEquals(0, headers1.size()); assertEquals(0, getMessageHeaders(c1, contactId0From1).size());
assertTrue(messageIsDeleted(c1, attachmentHeader.getMessageId())); assertTrue(messageIsDeleted(c1, attachmentHeader.getMessageId()));
} }
@@ -428,6 +446,7 @@ public class AutoDeleteIntegrationTest
MessageId messageId = createMessageWithTimer(c0, contactId1From0, MessageId messageId = createMessageWithTimer(c0, contactId1From0,
singletonList(attachmentHeader)); singletonList(attachmentHeader));
// The message should have been added to 0's view of the conversation // The message should have been added to 0's view of the conversation
assertGroupCount(c0, contactId1From0, 1, 0);
List<ConversationMessageHeader> headers0 = List<ConversationMessageHeader> headers0 =
getMessageHeaders(c0, contactId1From0); getMessageHeaders(c0, contactId1From0);
assertEquals(1, headers0.size()); assertEquals(1, headers0.size());
@@ -440,6 +459,7 @@ public class AutoDeleteIntegrationTest
// Sync the ack to 0 - this starts 0's timer // Sync the ack to 0 - this starts 0's timer
ack1To0(1); ack1To0(1);
// The message should have been added to 1's view of the conversation // The message should have been added to 1's view of the conversation
assertGroupCount(c1, contactId0From1, 1, 1);
List<ConversationMessageHeader> headers1 = List<ConversationMessageHeader> headers1 =
getMessageHeaders(c1, contactId0From1); getMessageHeaders(c1, contactId0From1);
assertEquals(1, headers1.size()); assertEquals(1, headers1.size());
@@ -449,39 +469,40 @@ public class AutoDeleteIntegrationTest
long timerLatency = MIN_AUTO_DELETE_TIMER_MS + BATCH_DELAY_MS; long timerLatency = MIN_AUTO_DELETE_TIMER_MS + BATCH_DELAY_MS;
c0.getTimeTravel().addCurrentTimeMillis(timerLatency - 1); c0.getTimeTravel().addCurrentTimeMillis(timerLatency - 1);
c1.getTimeTravel().addCurrentTimeMillis(timerLatency - 1); c1.getTimeTravel().addCurrentTimeMillis(timerLatency - 1);
headers0 = getMessageHeaders(c0, contactId1From0); assertGroupCount(c0, contactId1From0, 1, 0);
assertEquals(1, headers0.size()); assertEquals(1, getMessageHeaders(c0, contactId1From0).size());
assertFalse(messageIsDeleted(c0, attachmentHeader.getMessageId())); assertFalse(messageIsDeleted(c0, attachmentHeader.getMessageId()));
headers1 = getMessageHeaders(c1, contactId0From1); assertGroupCount(c1, contactId0From1, 1, 1);
assertEquals(1, headers1.size()); assertEquals(1, getMessageHeaders(c1, contactId0From1).size());
// When 0's timer has elapsed, the message should be deleted from 0's // When 0's timer has elapsed, the message should be deleted from 0's
// view of the conversation but 1 should still see the message // view of the conversation but 1 should still see the message
c0.getTimeTravel().addCurrentTimeMillis(1); c0.getTimeTravel().addCurrentTimeMillis(1);
c1.getTimeTravel().addCurrentTimeMillis(1); c1.getTimeTravel().addCurrentTimeMillis(1);
headers0 = getMessageHeaders(c0, contactId1From0); assertGroupCount(c0, contactId1From0, 0, 0);
assertEquals(0, headers0.size()); assertEquals(0, getMessageHeaders(c0, contactId1From0).size());
assertTrue(messageIsDeleted(c0, attachmentHeader.getMessageId())); assertTrue(messageIsDeleted(c0, attachmentHeader.getMessageId()));
headers1 = getMessageHeaders(c1, contactId0From1); assertGroupCount(c1, contactId0From1, 1, 1);
assertEquals(1, headers1.size()); assertEquals(1, getMessageHeaders(c1, contactId0From1).size());
// 1 marks the message as read - this starts 1's timer // 1 marks the message as read - this starts 1's timer
markMessageRead(c1, contact0From1, messageId); markMessageRead(c1, contact0From1, messageId);
assertGroupCount(c1, contactId0From1, 1, 0);
// Before 1's timer elapses, 1 should still see the message // Before 1's timer elapses, 1 should still see the message
c0.getTimeTravel().addCurrentTimeMillis(timerLatency - 1); c0.getTimeTravel().addCurrentTimeMillis(timerLatency - 1);
c1.getTimeTravel().addCurrentTimeMillis(timerLatency - 1); c1.getTimeTravel().addCurrentTimeMillis(timerLatency - 1);
headers0 = getMessageHeaders(c0, contactId1From0); assertGroupCount(c0, contactId1From0, 0, 0);
assertEquals(0, headers0.size()); assertEquals(0, getMessageHeaders(c0, contactId1From0).size());
assertTrue(messageIsDeleted(c0, attachmentHeader.getMessageId())); assertTrue(messageIsDeleted(c0, attachmentHeader.getMessageId()));
headers1 = getMessageHeaders(c1, contactId0From1); assertGroupCount(c1, contactId0From1, 1, 0);
assertEquals(1, headers1.size()); assertEquals(1, getMessageHeaders(c1, contactId0From1).size());
// When 1's timer has elapsed, the message should be deleted from 1's // When 1's timer has elapsed, the message should be deleted from 1's
// view of the conversation // view of the conversation
c0.getTimeTravel().addCurrentTimeMillis(1); c0.getTimeTravel().addCurrentTimeMillis(1);
c1.getTimeTravel().addCurrentTimeMillis(1); c1.getTimeTravel().addCurrentTimeMillis(1);
headers0 = getMessageHeaders(c0, contactId1From0); assertGroupCount(c0, contactId1From0, 0, 0);
assertEquals(0, headers0.size()); assertEquals(0, getMessageHeaders(c0, contactId1From0).size());
assertTrue(messageIsDeleted(c0, attachmentHeader.getMessageId())); assertTrue(messageIsDeleted(c0, attachmentHeader.getMessageId()));
headers1 = getMessageHeaders(c1, contactId0From1); assertGroupCount(c1, contactId0From1, 0, 0);
assertEquals(0, headers1.size()); assertEquals(0, getMessageHeaders(c1, contactId0From1).size());
} }
@Test @Test
@@ -495,6 +516,7 @@ public class AutoDeleteIntegrationTest
MessageId messageId = createMessageWithTimer(c0, contactId1From0, MessageId messageId = createMessageWithTimer(c0, contactId1From0,
singletonList(attachmentHeader)); singletonList(attachmentHeader));
// The message should have been added to 0's view of the conversation // The message should have been added to 0's view of the conversation
assertGroupCount(c0, contactId1From0, 1, 0);
List<ConversationMessageHeader> headers0 = List<ConversationMessageHeader> headers0 =
getMessageHeaders(c0, contactId1From0); getMessageHeaders(c0, contactId1From0);
assertEquals(1, headers0.size()); assertEquals(1, headers0.size());
@@ -509,6 +531,7 @@ public class AutoDeleteIntegrationTest
ack1To0(1); ack1To0(1);
// The message should not have been added to 1's view of the // The message should not have been added to 1's view of the
// conversation // conversation
assertGroupCount(c1, contactId0From1, 0, 0);
List<ConversationMessageHeader> headers1 = List<ConversationMessageHeader> headers1 =
getMessageHeaders(c1, contactId0From1); getMessageHeaders(c1, contactId0From1);
assertEquals(0, headers1.size()); assertEquals(0, headers1.size());
@@ -533,50 +556,53 @@ public class AutoDeleteIntegrationTest
// Sync the ack to 0 - this starts 0's timer // Sync the ack to 0 - this starts 0's timer
ack1To0(1); ack1To0(1);
// The message should have been added to 1's view of the conversation // The message should have been added to 1's view of the conversation
assertGroupCount(c1, contactId0From1, 1, 1);
headers1 = getMessageHeaders(c1, contactId0From1); headers1 = getMessageHeaders(c1, contactId0From1);
assertEquals(1, headers1.size()); assertEquals(1, headers1.size());
assertEquals(messageId, headers1.get(0).getId());
assertTrue(messageIsDeleted(c1, attachmentHeader.getMessageId())); assertTrue(messageIsDeleted(c1, attachmentHeader.getMessageId()));
// Before 0's timer elapses, both peers should still see the message // Before 0's timer elapses, both peers should still see the message
// and 0 should still have the attachment (1 has deleted it) // and 0 should still have the attachment (1 has deleted it)
timerLatency = MIN_AUTO_DELETE_TIMER_MS + BATCH_DELAY_MS; timerLatency = MIN_AUTO_DELETE_TIMER_MS + BATCH_DELAY_MS;
c0.getTimeTravel().addCurrentTimeMillis(timerLatency - 1); c0.getTimeTravel().addCurrentTimeMillis(timerLatency - 1);
c1.getTimeTravel().addCurrentTimeMillis(timerLatency - 1); c1.getTimeTravel().addCurrentTimeMillis(timerLatency - 1);
headers0 = getMessageHeaders(c0, contactId1From0); assertGroupCount(c0, contactId1From0, 1, 0);
assertEquals(1, headers0.size()); assertEquals(1, getMessageHeaders(c0, contactId1From0).size());
assertFalse(messageIsDeleted(c0, attachmentHeader.getMessageId())); assertFalse(messageIsDeleted(c0, attachmentHeader.getMessageId()));
headers1 = getMessageHeaders(c1, contactId0From1); assertGroupCount(c1, contactId0From1, 1, 1);
assertEquals(1, headers1.size()); assertEquals(1, getMessageHeaders(c1, contactId0From1).size());
assertTrue(messageIsDeleted(c1, attachmentHeader.getMessageId())); assertTrue(messageIsDeleted(c1, attachmentHeader.getMessageId()));
// When 0's timer has elapsed, the message should be deleted from 0's // When 0's timer has elapsed, the message should be deleted from 0's
// view of the conversation but 1 should still see the message // view of the conversation but 1 should still see the message
c0.getTimeTravel().addCurrentTimeMillis(1); c0.getTimeTravel().addCurrentTimeMillis(1);
c1.getTimeTravel().addCurrentTimeMillis(1); c1.getTimeTravel().addCurrentTimeMillis(1);
headers0 = getMessageHeaders(c0, contactId1From0); assertGroupCount(c0, contactId1From0, 0, 0);
assertEquals(0, headers0.size()); assertEquals(0, getMessageHeaders(c0, contactId1From0).size());
assertTrue(messageIsDeleted(c0, attachmentHeader.getMessageId())); assertTrue(messageIsDeleted(c0, attachmentHeader.getMessageId()));
headers1 = getMessageHeaders(c1, contactId0From1); assertGroupCount(c1, contactId0From1, 1, 1);
assertEquals(1, headers1.size()); assertEquals(1, getMessageHeaders(c1, contactId0From1).size());
assertTrue(messageIsDeleted(c1, attachmentHeader.getMessageId())); assertTrue(messageIsDeleted(c1, attachmentHeader.getMessageId()));
// 1 marks the message as read - this starts 1's timer // 1 marks the message as read - this starts 1's timer
markMessageRead(c1, contact0From1, messageId); markMessageRead(c1, contact0From1, messageId);
assertGroupCount(c1, contactId0From1, 1, 0);
// Before 1's timer elapses, 1 should still see the message // Before 1's timer elapses, 1 should still see the message
c0.getTimeTravel().addCurrentTimeMillis(timerLatency - 1); c0.getTimeTravel().addCurrentTimeMillis(timerLatency - 1);
c1.getTimeTravel().addCurrentTimeMillis(timerLatency - 1); c1.getTimeTravel().addCurrentTimeMillis(timerLatency - 1);
headers0 = getMessageHeaders(c0, contactId1From0); assertGroupCount(c0, contactId1From0, 0, 0);
assertEquals(0, headers0.size()); assertEquals(0, getMessageHeaders(c0, contactId1From0).size());
assertTrue(messageIsDeleted(c0, attachmentHeader.getMessageId())); assertTrue(messageIsDeleted(c0, attachmentHeader.getMessageId()));
headers1 = getMessageHeaders(c1, contactId0From1); assertGroupCount(c1, contactId0From1, 1, 0);
assertEquals(1, headers1.size()); assertEquals(1, getMessageHeaders(c1, contactId0From1).size());
assertTrue(messageIsDeleted(c1, attachmentHeader.getMessageId())); assertTrue(messageIsDeleted(c1, attachmentHeader.getMessageId()));
// When 1's timer has elapsed, the message should be deleted from 1's // When 1's timer has elapsed, the message should be deleted from 1's
// view of the conversation // view of the conversation
c0.getTimeTravel().addCurrentTimeMillis(1); c0.getTimeTravel().addCurrentTimeMillis(1);
c1.getTimeTravel().addCurrentTimeMillis(1); c1.getTimeTravel().addCurrentTimeMillis(1);
headers0 = getMessageHeaders(c0, contactId1From0); assertGroupCount(c0, contactId1From0, 0, 0);
assertEquals(0, headers0.size()); assertEquals(0, getMessageHeaders(c0, contactId1From0).size());
assertTrue(messageIsDeleted(c0, attachmentHeader.getMessageId())); assertTrue(messageIsDeleted(c0, attachmentHeader.getMessageId()));
headers1 = getMessageHeaders(c1, contactId0From1); assertGroupCount(c1, contactId0From1, 0, 0);
assertEquals(0, headers1.size()); assertEquals(0, getMessageHeaders(c1, contactId0From1).size());
assertTrue(messageIsDeleted(c1, attachmentHeader.getMessageId())); assertTrue(messageIsDeleted(c1, attachmentHeader.getMessageId()));
} }
@@ -592,6 +618,7 @@ public class AutoDeleteIntegrationTest
MessageId messageId = createMessageWithTimer(c0, contactId1From0, MessageId messageId = createMessageWithTimer(c0, contactId1From0,
singletonList(attachmentHeader)); singletonList(attachmentHeader));
// The message should have been added to 0's view of the conversation // The message should have been added to 0's view of the conversation
assertGroupCount(c0, contactId1From0, 1, 0);
List<ConversationMessageHeader> headers0 = List<ConversationMessageHeader> headers0 =
getMessageHeaders(c0, contactId1From0); getMessageHeaders(c0, contactId1From0);
assertEquals(1, headers0.size()); assertEquals(1, headers0.size());
@@ -606,6 +633,7 @@ public class AutoDeleteIntegrationTest
ack1To0(1); ack1To0(1);
// The message should not have been added to 1's view of the // The message should not have been added to 1's view of the
// conversation // conversation
assertGroupCount(c1, contactId0From1, 0, 0);
List<ConversationMessageHeader> headers1 = List<ConversationMessageHeader> headers1 =
getMessageHeaders(c1, contactId0From1); getMessageHeaders(c1, contactId0From1);
assertEquals(0, headers1.size()); assertEquals(0, headers1.size());
@@ -621,18 +649,20 @@ public class AutoDeleteIntegrationTest
setMessageShared(c0, messageId); setMessageShared(c0, messageId);
sync0To1(1, true); sync0To1(1, true);
// The message should have been added to 1's view of the conversation // The message should have been added to 1's view of the conversation
assertGroupCount(c1, contactId0From1, 1, 1);
headers1 = getMessageHeaders(c1, contactId0From1); headers1 = getMessageHeaders(c1, contactId0From1);
assertEquals(1, headers1.size()); assertEquals(1, headers1.size());
assertEquals(messageId, headers1.get(0).getId());
assertFalse(messageIsDeleted(c1, attachmentHeader.getMessageId())); assertFalse(messageIsDeleted(c1, attachmentHeader.getMessageId()));
// When 1's timer has elapsed, both peers should still see the message // When 1's timer has elapsed, both peers should still see the message
// and both should still have the attachment // and both should still have the attachment
c0.getTimeTravel().addCurrentTimeMillis(1); c0.getTimeTravel().addCurrentTimeMillis(1);
c1.getTimeTravel().addCurrentTimeMillis(1); c1.getTimeTravel().addCurrentTimeMillis(1);
headers0 = getMessageHeaders(c0, contactId1From0); assertGroupCount(c0, contactId1From0, 1, 0);
assertEquals(1, headers0.size()); assertEquals(1, getMessageHeaders(c0, contactId1From0).size());
assertFalse(messageIsDeleted(c0, attachmentHeader.getMessageId())); assertFalse(messageIsDeleted(c0, attachmentHeader.getMessageId()));
headers1 = getMessageHeaders(c1, contactId0From1); assertGroupCount(c1, contactId0From1, 1, 1);
assertEquals(1, headers1.size()); assertEquals(1, getMessageHeaders(c1, contactId0From1).size());
assertFalse(messageIsDeleted(c1, attachmentHeader.getMessageId())); assertFalse(messageIsDeleted(c1, attachmentHeader.getMessageId()));
// Sync the ack to 0 - this starts 0's timer // Sync the ack to 0 - this starts 0's timer
ack1To0(1); ack1To0(1);
@@ -641,42 +671,43 @@ public class AutoDeleteIntegrationTest
timerLatency = MIN_AUTO_DELETE_TIMER_MS + BATCH_DELAY_MS; timerLatency = MIN_AUTO_DELETE_TIMER_MS + BATCH_DELAY_MS;
c0.getTimeTravel().addCurrentTimeMillis(timerLatency - 1); c0.getTimeTravel().addCurrentTimeMillis(timerLatency - 1);
c1.getTimeTravel().addCurrentTimeMillis(timerLatency - 1); c1.getTimeTravel().addCurrentTimeMillis(timerLatency - 1);
headers0 = getMessageHeaders(c0, contactId1From0); assertGroupCount(c0, contactId1From0, 1, 0);
assertEquals(1, headers0.size()); assertEquals(1, getMessageHeaders(c0, contactId1From0).size());
assertFalse(messageIsDeleted(c0, attachmentHeader.getMessageId())); assertFalse(messageIsDeleted(c0, attachmentHeader.getMessageId()));
headers1 = getMessageHeaders(c1, contactId0From1); assertGroupCount(c1, contactId0From1, 1, 1);
assertEquals(1, headers1.size()); assertEquals(1, getMessageHeaders(c1, contactId0From1).size());
assertFalse(messageIsDeleted(c1, attachmentHeader.getMessageId())); assertFalse(messageIsDeleted(c1, attachmentHeader.getMessageId()));
// When 0's timer has elapsed, the message should be deleted from 0's // When 0's timer has elapsed, the message should be deleted from 0's
// view of the conversation but 1 should still see the message // view of the conversation but 1 should still see the message
c0.getTimeTravel().addCurrentTimeMillis(1); c0.getTimeTravel().addCurrentTimeMillis(1);
c1.getTimeTravel().addCurrentTimeMillis(1); c1.getTimeTravel().addCurrentTimeMillis(1);
headers0 = getMessageHeaders(c0, contactId1From0); assertGroupCount(c0, contactId1From0, 0, 0);
assertEquals(0, headers0.size()); assertEquals(0, getMessageHeaders(c0, contactId1From0).size());
assertTrue(messageIsDeleted(c0, attachmentHeader.getMessageId())); assertTrue(messageIsDeleted(c0, attachmentHeader.getMessageId()));
headers1 = getMessageHeaders(c1, contactId0From1); assertGroupCount(c1, contactId0From1, 1, 1);
assertEquals(1, headers1.size()); assertEquals(1, getMessageHeaders(c1, contactId0From1).size());
assertFalse(messageIsDeleted(c1, attachmentHeader.getMessageId())); assertFalse(messageIsDeleted(c1, attachmentHeader.getMessageId()));
// 1 marks the message as read - this starts 1's timer // 1 marks the message as read - this starts 1's timer
markMessageRead(c1, contact0From1, messageId); markMessageRead(c1, contact0From1, messageId);
assertGroupCount(c1, contactId0From1, 1, 0);
// Before 1's timer elapses, 1 should still see the message // Before 1's timer elapses, 1 should still see the message
c0.getTimeTravel().addCurrentTimeMillis(timerLatency - 1); c0.getTimeTravel().addCurrentTimeMillis(timerLatency - 1);
c1.getTimeTravel().addCurrentTimeMillis(timerLatency - 1); c1.getTimeTravel().addCurrentTimeMillis(timerLatency - 1);
headers0 = getMessageHeaders(c0, contactId1From0); assertGroupCount(c0, contactId1From0, 0, 0);
assertEquals(0, headers0.size()); assertEquals(0, getMessageHeaders(c0, contactId1From0).size());
assertTrue(messageIsDeleted(c0, attachmentHeader.getMessageId())); assertTrue(messageIsDeleted(c0, attachmentHeader.getMessageId()));
headers1 = getMessageHeaders(c1, contactId0From1); assertGroupCount(c1, contactId0From1, 1, 0);
assertEquals(1, headers1.size()); assertEquals(1, getMessageHeaders(c1, contactId0From1).size());
assertFalse(messageIsDeleted(c1, attachmentHeader.getMessageId())); assertFalse(messageIsDeleted(c1, attachmentHeader.getMessageId()));
// When 1's timer has elapsed, the message should be deleted from 1's // When 1's timer has elapsed, the message should be deleted from 1's
// view of the conversation // view of the conversation
c0.getTimeTravel().addCurrentTimeMillis(1); c0.getTimeTravel().addCurrentTimeMillis(1);
c1.getTimeTravel().addCurrentTimeMillis(1); c1.getTimeTravel().addCurrentTimeMillis(1);
headers0 = getMessageHeaders(c0, contactId1From0); assertGroupCount(c0, contactId1From0, 0, 0);
assertEquals(0, headers0.size()); assertEquals(0, getMessageHeaders(c0, contactId1From0).size());
assertTrue(messageIsDeleted(c0, attachmentHeader.getMessageId())); assertTrue(messageIsDeleted(c0, attachmentHeader.getMessageId()));
headers1 = getMessageHeaders(c1, contactId0From1); assertGroupCount(c1, contactId0From1, 0, 0);
assertEquals(0, headers1.size()); assertEquals(0, getMessageHeaders(c1, contactId0From1).size());
assertTrue(messageIsDeleted(c1, attachmentHeader.getMessageId())); assertTrue(messageIsDeleted(c1, attachmentHeader.getMessageId()));
} }
@@ -793,6 +824,18 @@ public class AutoDeleteIntegrationTest
} }
} }
private void assertGroupCount(BriarIntegrationTestComponent component,
ContactId contactId, int messageCount, int unreadCount)
throws DbException {
DatabaseComponent db = component.getDatabaseComponent();
MessagingManager messagingManager = component.getMessagingManager();
GroupCount gc = db.transactionWithResult(true, txn ->
messagingManager.getGroupCount(txn, contactId));
assertEquals(messageCount, gc.getMsgCount());
assertEquals(unreadCount, gc.getUnreadCount());
}
@SuppressWarnings({"UseCompareMethod", "Java8ListSort"}) // Animal Sniffer @SuppressWarnings({"UseCompareMethod", "Java8ListSort"}) // Animal Sniffer
private List<ConversationMessageHeader> sortHeaders( private List<ConversationMessageHeader> sortHeaders(
Collection<ConversationMessageHeader> in) { Collection<ConversationMessageHeader> in) {