From da4b63f20fbe5426026959767399263dd3cd9072 Mon Sep 17 00:00:00 2001 From: akwizgran <michael@briarproject.org> Date: Wed, 12 Jun 2019 15:11:34 +0100 Subject: [PATCH] Clean up ValidationManagerImplTest. --- .../validation/ValidationManagerImplTest.java | 300 ++++++++---------- 1 file changed, 131 insertions(+), 169 deletions(-) diff --git a/bramble-core/src/test/java/org/briarproject/bramble/sync/validation/ValidationManagerImplTest.java b/bramble-core/src/test/java/org/briarproject/bramble/sync/validation/ValidationManagerImplTest.java index c586b12b5d..09018c36ea 100644 --- a/bramble-core/src/test/java/org/briarproject/bramble/sync/validation/ValidationManagerImplTest.java +++ b/bramble-core/src/test/java/org/briarproject/bramble/sync/validation/ValidationManagerImplTest.java @@ -28,7 +28,6 @@ import java.util.Map; import java.util.concurrent.Executor; import static java.util.Arrays.asList; -import static java.util.Collections.emptyList; import static java.util.Collections.emptyMap; import static java.util.Collections.singletonList; import static java.util.Collections.singletonMap; @@ -80,24 +79,9 @@ public class ValidationManagerImplTest extends BrambleMockTestCase { @Test public void testStartAndStop() throws Exception { - Transaction txn = new Transaction(null, true); - Transaction txn1 = new Transaction(null, true); - Transaction txn2 = new Transaction(null, true); - - context.checking(new DbExpectations() {{ - // validateOutstandingMessages() - oneOf(db).transactionWithResult(with(true), withDbCallable(txn)); - oneOf(db).getMessagesToValidate(txn); - will(returnValue(emptyList())); - // deliverOutstandingMessages() - oneOf(db).transactionWithResult(with(true), withDbCallable(txn1)); - oneOf(db).getPendingMessages(txn1); - will(returnValue(emptyList())); - // shareOutstandingMessages() - oneOf(db).transactionWithResult(with(true), withDbCallable(txn2)); - oneOf(db).getMessagesToShare(txn2); - will(returnValue(emptyList())); - }}); + expectGetMessagesToValidate(); + expectGetPendingMessages(); + expectGetMessagesToShare(); vm.startService(); vm.stopService(); @@ -106,167 +90,134 @@ public class ValidationManagerImplTest extends BrambleMockTestCase { @Test public void testMessagesAreValidatedAtStartup() throws Exception { Transaction txn = new Transaction(null, true); - Transaction txn1 = new Transaction(null, true); - Transaction txn2 = new Transaction(null, false); - Transaction txn3 = new Transaction(null, true); - Transaction txn4 = new Transaction(null, false); - Transaction txn5 = new Transaction(null, true); - Transaction txn6 = new Transaction(null, true); + Transaction txn1 = new Transaction(null, false); + Transaction txn2 = new Transaction(null, true); + Transaction txn3 = new Transaction(null, false); + + expectGetMessagesToValidate(messageId, messageId1); context.checking(new DbExpectations() {{ - // Get messages to validate - oneOf(db).transactionWithResult(with(true), withDbCallable(txn)); - oneOf(db).getMessagesToValidate(txn); - will(returnValue(asList(messageId, messageId1))); // Load the first raw message and group - oneOf(db).transactionWithResult(with(true), withDbCallable(txn1)); - oneOf(db).getMessage(txn1, messageId); + oneOf(db).transactionWithResult(with(true), withDbCallable(txn)); + oneOf(db).getMessage(txn, messageId); will(returnValue(message)); - oneOf(db).getGroup(txn1, groupId); + oneOf(db).getGroup(txn, groupId); will(returnValue(group)); // Validate the first message: valid oneOf(validator).validateMessage(message, group); will(returnValue(validResult)); // Store the validation result for the first message - oneOf(db).transaction(with(false), withDbRunnable(txn2)); - oneOf(db).mergeMessageMetadata(txn2, messageId, metadata); + oneOf(db).transaction(with(false), withDbRunnable(txn1)); + oneOf(db).mergeMessageMetadata(txn1, messageId, metadata); // Deliver the first message - oneOf(hook).incomingMessage(txn2, message, metadata); + oneOf(hook).incomingMessage(txn1, message, metadata); will(returnValue(false)); - oneOf(db).setMessageState(txn2, messageId, DELIVERED); + oneOf(db).setMessageState(txn1, messageId, DELIVERED); // Get any pending dependents - oneOf(db).getMessageDependents(txn2, messageId); + oneOf(db).getMessageDependents(txn1, messageId); will(returnValue(emptyMap())); // Load the second raw message and group - oneOf(db).transactionWithResult(with(true), withDbCallable(txn3)); - oneOf(db).getMessage(txn3, messageId1); + oneOf(db).transactionWithResult(with(true), withDbCallable(txn2)); + oneOf(db).getMessage(txn2, messageId1); will(returnValue(message1)); - oneOf(db).getGroup(txn3, groupId); + oneOf(db).getGroup(txn2, groupId); will(returnValue(group)); // Validate the second message: invalid oneOf(validator).validateMessage(message1, group); will(throwException(new InvalidMessageException())); // Store the validation result for the second message - oneOf(db).transaction(with(false), withDbRunnable(txn4)); - oneOf(db).getMessageState(txn4, messageId1); + oneOf(db).transaction(with(false), withDbRunnable(txn3)); + oneOf(db).getMessageState(txn3, messageId1); will(returnValue(UNKNOWN)); - oneOf(db).setMessageState(txn4, messageId1, INVALID); - oneOf(db).deleteMessage(txn4, messageId1); - oneOf(db).deleteMessageMetadata(txn4, messageId1); + oneOf(db).setMessageState(txn3, messageId1, INVALID); + oneOf(db).deleteMessage(txn3, messageId1); + oneOf(db).deleteMessageMetadata(txn3, messageId1); // Recursively invalidate any dependents - oneOf(db).getMessageDependents(txn4, messageId1); + oneOf(db).getMessageDependents(txn3, messageId1); will(returnValue(emptyMap())); - // Get pending messages to deliver - oneOf(db).transactionWithResult(with(true), withDbCallable(txn5)); - oneOf(db).getPendingMessages(txn5); - will(returnValue(emptyList())); - // Get messages to share - oneOf(db).transactionWithResult(with(true), withDbCallable(txn6)); - oneOf(db).getMessagesToShare(txn6); - will(returnValue(emptyList())); }}); + expectGetPendingMessages(); + expectGetMessagesToShare(); + vm.startService(); } @Test public void testPendingMessagesAreDeliveredAtStartup() throws Exception { - Transaction txn = new Transaction(null, true); - Transaction txn1 = new Transaction(null, true); - Transaction txn2 = new Transaction(null, false); - Transaction txn3 = new Transaction(null, false); - Transaction txn4 = new Transaction(null, true); + Transaction txn = new Transaction(null, false); + Transaction txn1 = new Transaction(null, false); + + expectGetMessagesToValidate(); + expectGetPendingMessages(messageId); context.checking(new DbExpectations() {{ - // Get messages to validate - oneOf(db).transactionWithResult(with(true), withDbCallable(txn)); - oneOf(db).getMessagesToValidate(txn); - will(returnValue(emptyList())); - // Get pending messages to deliver - oneOf(db).transactionWithResult(with(true), withDbCallable(txn1)); - oneOf(db).getPendingMessages(txn1); - will(returnValue(singletonList(messageId))); // Check whether the message is ready to deliver - oneOf(db).transaction(with(false), withDbRunnable(txn2)); - oneOf(db).getMessageState(txn2, messageId); + oneOf(db).transaction(with(false), withDbRunnable(txn)); + oneOf(db).getMessageState(txn, messageId); will(returnValue(PENDING)); - oneOf(db).getMessageDependencies(txn2, messageId); + oneOf(db).getMessageDependencies(txn, messageId); will(returnValue(singletonMap(messageId1, DELIVERED))); // Get the message and its metadata to deliver - oneOf(db).getMessage(txn2, messageId); + oneOf(db).getMessage(txn, messageId); will(returnValue(message)); - oneOf(db).getGroup(txn2, groupId); + oneOf(db).getGroup(txn, groupId); will(returnValue(group)); - oneOf(db).getMessageMetadataForValidator(txn2, messageId); + oneOf(db).getMessageMetadataForValidator(txn, messageId); will(returnValue(new Metadata())); // Deliver the message - oneOf(hook).incomingMessage(txn2, message, metadata); + oneOf(hook).incomingMessage(txn, message, metadata); will(returnValue(false)); - oneOf(db).setMessageState(txn2, messageId, DELIVERED); + oneOf(db).setMessageState(txn, messageId, DELIVERED); // Get any pending dependents - oneOf(db).getMessageDependents(txn2, messageId); + oneOf(db).getMessageDependents(txn, messageId); will(returnValue(singletonMap(messageId2, PENDING))); // Check whether the dependent is ready to deliver - oneOf(db).transaction(with(false), withDbRunnable(txn3)); - oneOf(db).getMessageState(txn3, messageId2); + oneOf(db).transaction(with(false), withDbRunnable(txn1)); + oneOf(db).getMessageState(txn1, messageId2); will(returnValue(PENDING)); - oneOf(db).getMessageDependencies(txn3, messageId2); + oneOf(db).getMessageDependencies(txn1, messageId2); will(returnValue(singletonMap(messageId1, DELIVERED))); // Get the dependent and its metadata to deliver - oneOf(db).getMessage(txn3, messageId2); + oneOf(db).getMessage(txn1, messageId2); will(returnValue(message2)); - oneOf(db).getGroup(txn3, groupId); + oneOf(db).getGroup(txn1, groupId); will(returnValue(group)); - oneOf(db).getMessageMetadataForValidator(txn3, messageId2); + oneOf(db).getMessageMetadataForValidator(txn1, messageId2); will(returnValue(metadata)); // Deliver the dependent - oneOf(hook).incomingMessage(txn3, message2, metadata); + oneOf(hook).incomingMessage(txn1, message2, metadata); will(returnValue(false)); - oneOf(db).setMessageState(txn3, messageId2, DELIVERED); + oneOf(db).setMessageState(txn1, messageId2, DELIVERED); // Get any pending dependents - oneOf(db).getMessageDependents(txn3, messageId2); + oneOf(db).getMessageDependents(txn1, messageId2); will(returnValue(emptyMap())); - - // Get messages to share - oneOf(db).transactionWithResult(with(true), withDbCallable(txn4)); - oneOf(db).getMessagesToShare(txn4); - will(returnValue(emptyList())); }}); + expectGetMessagesToShare(); + vm.startService(); } @Test public void testMessagesAreSharedAtStartup() throws Exception { - Transaction txn = new Transaction(null, true); - Transaction txn1 = new Transaction(null, true); - Transaction txn2 = new Transaction(null, true); - Transaction txn3 = new Transaction(null, false); - Transaction txn4 = new Transaction(null, false); + Transaction txn = new Transaction(null, false); + Transaction txn1 = new Transaction(null, false); - context.checking(new DbExpectations() {{ - // No messages to validate - oneOf(db).transactionWithResult(with(true), withDbCallable(txn)); - oneOf(db).getMessagesToValidate(txn); - will(returnValue(emptyList())); - // No pending messages to deliver - oneOf(db).transactionWithResult(with(true), withDbCallable(txn1)); - oneOf(db).getPendingMessages(txn1); - will(returnValue(emptyList())); + expectGetMessagesToValidate(); + expectGetPendingMessages(); + expectGetMessagesToShare(messageId); - // Get messages to share - oneOf(db).transactionWithResult(with(true), withDbCallable(txn2)); - oneOf(db).getMessagesToShare(txn2); - will(returnValue(singletonList(messageId))); + context.checking(new DbExpectations() {{ // Share message and get dependencies - oneOf(db).transaction(with(false), withDbRunnable(txn3)); - oneOf(db).setMessageShared(txn3, messageId); - oneOf(db).getMessageDependencies(txn3, messageId); + oneOf(db).transaction(with(false), withDbRunnable(txn)); + oneOf(db).setMessageShared(txn, messageId); + oneOf(db).getMessageDependencies(txn, messageId); will(returnValue(singletonMap(messageId2, DELIVERED))); // Share dependency - oneOf(db).transaction(with(false), withDbRunnable(txn4)); - oneOf(db).setMessageShared(txn4, messageId2); - oneOf(db).getMessageDependencies(txn4, messageId2); + oneOf(db).transaction(with(false), withDbRunnable(txn1)); + oneOf(db).setMessageShared(txn1, messageId2); + oneOf(db).getMessageDependencies(txn1, messageId2); will(returnValue(emptyMap())); }}); @@ -318,49 +269,39 @@ public class ValidationManagerImplTest extends BrambleMockTestCase { throws Exception { Transaction txn = new Transaction(null, true); Transaction txn1 = new Transaction(null, true); - Transaction txn2 = new Transaction(null, true); - Transaction txn3 = new Transaction(null, false); - Transaction txn4 = new Transaction(null, true); - Transaction txn5 = new Transaction(null, true); + Transaction txn2 = new Transaction(null, false); + + expectGetMessagesToValidate(messageId, messageId1); context.checking(new DbExpectations() {{ - // Get messages to validate - oneOf(db).transactionWithResult(with(true), withDbCallable(txn)); - oneOf(db).getMessagesToValidate(txn); - will(returnValue(asList(messageId, messageId1))); // Load the first raw message - *gasp* it's gone! - oneOf(db).transactionWithResult(with(true), withDbCallable(txn1)); - oneOf(db).getMessage(txn1, messageId); + oneOf(db).transactionWithResult(with(true), withDbCallable(txn)); + oneOf(db).getMessage(txn, messageId); will(throwException(new NoSuchMessageException())); // Load the second raw message and group - oneOf(db).transactionWithResult(with(true), withDbCallable(txn2)); - oneOf(db).getMessage(txn2, messageId1); + oneOf(db).transactionWithResult(with(true), withDbCallable(txn1)); + oneOf(db).getMessage(txn1, messageId1); will(returnValue(message1)); - oneOf(db).getGroup(txn2, groupId); + oneOf(db).getGroup(txn1, groupId); will(returnValue(group)); // Validate the second message: invalid oneOf(validator).validateMessage(message1, group); will(throwException(new InvalidMessageException())); // Invalidate the second message - oneOf(db).transaction(with(false), withDbRunnable(txn3)); - oneOf(db).getMessageState(txn3, messageId1); + oneOf(db).transaction(with(false), withDbRunnable(txn2)); + oneOf(db).getMessageState(txn2, messageId1); will(returnValue(UNKNOWN)); - oneOf(db).setMessageState(txn3, messageId1, INVALID); - oneOf(db).deleteMessage(txn3, messageId1); - oneOf(db).deleteMessageMetadata(txn3, messageId1); + oneOf(db).setMessageState(txn2, messageId1, INVALID); + oneOf(db).deleteMessage(txn2, messageId1); + oneOf(db).deleteMessageMetadata(txn2, messageId1); // Recursively invalidate dependents - oneOf(db).getMessageDependents(txn3, messageId1); + oneOf(db).getMessageDependents(txn2, messageId1); will(returnValue(emptyMap())); - // Get pending messages to deliver - oneOf(db).transactionWithResult(with(true), withDbCallable(txn4)); - oneOf(db).getPendingMessages(txn4); - will(returnValue(emptyList())); - // Get messages to share - oneOf(db).transactionWithResult(with(true), withDbCallable(txn5)); - oneOf(db).getMessagesToShare(txn5); - will(returnValue(emptyList())); }}); + expectGetPendingMessages(); + expectGetMessagesToShare(); + vm.startService(); } @@ -369,52 +310,42 @@ public class ValidationManagerImplTest extends BrambleMockTestCase { throws Exception { Transaction txn = new Transaction(null, true); Transaction txn1 = new Transaction(null, true); - Transaction txn2 = new Transaction(null, true); - Transaction txn3 = new Transaction(null, false); - Transaction txn4 = new Transaction(null, true); - Transaction txn5 = new Transaction(null, true); + Transaction txn2 = new Transaction(null, false); + + expectGetMessagesToValidate(messageId, messageId1); context.checking(new DbExpectations() {{ - // Get messages to validate - oneOf(db).transactionWithResult(with(true), withDbCallable(txn)); - oneOf(db).getMessagesToValidate(txn); - will(returnValue(asList(messageId, messageId1))); // Load the first raw message - oneOf(db).transactionWithResult(with(true), withDbCallable(txn1)); - oneOf(db).getMessage(txn1, messageId); + oneOf(db).transactionWithResult(with(true), withDbCallable(txn)); + oneOf(db).getMessage(txn, messageId); will(returnValue(message)); // Load the group - *gasp* it's gone! - oneOf(db).getGroup(txn1, groupId); + oneOf(db).getGroup(txn, groupId); will(throwException(new NoSuchGroupException())); // Load the second raw message and group - oneOf(db).transactionWithResult(with(true), withDbCallable(txn2)); - oneOf(db).getMessage(txn2, messageId1); + oneOf(db).transactionWithResult(with(true), withDbCallable(txn1)); + oneOf(db).getMessage(txn1, messageId1); will(returnValue(message1)); - oneOf(db).getGroup(txn2, groupId); + oneOf(db).getGroup(txn1, groupId); will(returnValue(group)); // Validate the second message: invalid oneOf(validator).validateMessage(message1, group); will(throwException(new InvalidMessageException())); // Store the validation result for the second message - oneOf(db).transaction(with(false), withDbRunnable(txn3)); - oneOf(db).getMessageState(txn3, messageId1); + oneOf(db).transaction(with(false), withDbRunnable(txn2)); + oneOf(db).getMessageState(txn2, messageId1); will(returnValue(UNKNOWN)); - oneOf(db).setMessageState(txn3, messageId1, INVALID); - oneOf(db).deleteMessage(txn3, messageId1); - oneOf(db).deleteMessageMetadata(txn3, messageId1); + oneOf(db).setMessageState(txn2, messageId1, INVALID); + oneOf(db).deleteMessage(txn2, messageId1); + oneOf(db).deleteMessageMetadata(txn2, messageId1); // Recursively invalidate dependents - oneOf(db).getMessageDependents(txn3, messageId1); + oneOf(db).getMessageDependents(txn2, messageId1); will(returnValue(emptyMap())); - // Get pending messages to deliver - oneOf(db).transactionWithResult(with(true), withDbCallable(txn4)); - oneOf(db).getPendingMessages(txn4); - will(returnValue(emptyList())); - // Get messages to share - oneOf(db).transactionWithResult(with(true), withDbCallable(txn5)); - oneOf(db).getMessagesToShare(txn5); - will(returnValue(emptyList())); }}); + expectGetPendingMessages(); + expectGetMessagesToShare(); + vm.startService(); } @@ -801,4 +732,35 @@ public class ValidationManagerImplTest extends BrambleMockTestCase { vm.eventOccurred(new MessageAddedEvent(message, contactId)); } + + private void expectGetMessagesToValidate(MessageId... ids) + throws Exception { + Transaction txn = new Transaction(null, true); + + context.checking(new DbExpectations() {{ + oneOf(db).transactionWithResult(with(true), withDbCallable(txn)); + oneOf(db).getMessagesToValidate(txn); + will(returnValue(asList(ids))); + }}); + } + + private void expectGetPendingMessages(MessageId... ids) throws Exception { + Transaction txn = new Transaction(null, true); + + context.checking(new DbExpectations() {{ + oneOf(db).transactionWithResult(with(true), withDbCallable(txn)); + oneOf(db).getPendingMessages(txn); + will(returnValue(asList(ids))); + }}); + } + + private void expectGetMessagesToShare(MessageId... ids) throws Exception { + Transaction txn = new Transaction(null, true); + + context.checking(new DbExpectations() {{ + oneOf(db).transactionWithResult(with(true), withDbCallable(txn)); + oneOf(db).getMessagesToShare(txn); + will(returnValue(asList(ids))); + }}); + } } -- GitLab