diff --git a/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxModule.java b/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxModule.java index e1ad79555..d4969c8cb 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxModule.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxModule.java @@ -7,10 +7,13 @@ import org.briarproject.bramble.api.lifecycle.LifecycleManager; import org.briarproject.bramble.api.mailbox.MailboxManager; import org.briarproject.bramble.api.mailbox.MailboxSettingsManager; import org.briarproject.bramble.api.mailbox.MailboxUpdateManager; +import org.briarproject.bramble.api.mailbox.MailboxVersion; import org.briarproject.bramble.api.sync.validation.ValidationManager; import org.briarproject.bramble.api.system.Clock; import org.briarproject.bramble.api.versioning.ClientVersioningManager; +import java.util.List; + import javax.inject.Inject; import javax.inject.Singleton; @@ -20,6 +23,7 @@ import dagger.Provides; import static org.briarproject.bramble.api.mailbox.MailboxUpdateManager.CLIENT_ID; import static org.briarproject.bramble.api.mailbox.MailboxUpdateManager.MAJOR_VERSION; import static org.briarproject.bramble.api.mailbox.MailboxUpdateManager.MINOR_VERSION; +import static org.briarproject.bramble.mailbox.MailboxApi.CLIENT_SUPPORTS; @Module public class MailboxModule { @@ -66,6 +70,11 @@ public class MailboxModule { return validator; } + @Provides + List provideClientSupports() { + return CLIENT_SUPPORTS; + } + @Provides @Singleton MailboxUpdateManager provideMailboxUpdateManager( diff --git a/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxUpdateManagerImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxUpdateManagerImpl.java index 5627bdd44..5262e4ebd 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxUpdateManagerImpl.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxUpdateManagerImpl.java @@ -46,13 +46,13 @@ import javax.annotation.Nullable; import javax.inject.Inject; import static org.briarproject.bramble.api.sync.validation.IncomingMessageHook.DeliveryAction.ACCEPT_DO_NOT_SHARE; -import static org.briarproject.bramble.mailbox.MailboxApi.CLIENT_SUPPORTS; @NotNullByDefault class MailboxUpdateManagerImpl implements MailboxUpdateManager, OpenDatabaseHook, ContactHook, ClientVersioningHook, IncomingMessageHook, MailboxHook { + private final List clientSupports; private final DatabaseComponent db; private final ClientHelper clientHelper; private final ClientVersioningManager clientVersioningManager; @@ -64,12 +64,14 @@ class MailboxUpdateManagerImpl implements MailboxUpdateManager, private final Group localGroup; @Inject - MailboxUpdateManagerImpl(DatabaseComponent db, ClientHelper clientHelper, + MailboxUpdateManagerImpl(List clientSupports, + DatabaseComponent db, ClientHelper clientHelper, ClientVersioningManager clientVersioningManager, MetadataParser metadataParser, ContactGroupFactory contactGroupFactory, Clock clock, MailboxSettingsManager mailboxSettingsManager, CryptoComponent crypto) { + this.clientSupports = clientSupports; this.db = db; this.clientHelper = clientHelper; this.clientVersioningManager = clientVersioningManager; @@ -90,7 +92,7 @@ class MailboxUpdateManagerImpl implements MailboxUpdateManager, txn, localGroup.getId()); BdfList sent = meta.getList(GROUP_KEY_SENT_CLIENT_SUPPORTS); if (clientHelper.parseMailboxVersionList(sent) - .equals(CLIENT_SUPPORTS)) { + .equals(clientSupports)) { return; } } catch (FormatException e) { @@ -103,10 +105,9 @@ class MailboxUpdateManagerImpl implements MailboxUpdateManager, MailboxUpdate updated; if (latest.hasMailbox()) { updated = new MailboxUpdateWithMailbox( - (MailboxUpdateWithMailbox) latest, - CLIENT_SUPPORTS); + (MailboxUpdateWithMailbox) latest, clientSupports); } else { - updated = new MailboxUpdate(CLIENT_SUPPORTS); + updated = new MailboxUpdate(clientSupports); } Group g = getContactGroup(c); storeMessageReplaceLatest(txn, g.getId(), updated); @@ -122,7 +123,7 @@ class MailboxUpdateManagerImpl implements MailboxUpdateManager, try { BdfDictionary meta = BdfDictionary.of(new BdfEntry( GROUP_KEY_SENT_CLIENT_SUPPORTS, - encodeSupportsList(CLIENT_SUPPORTS))); + encodeSupportsList(clientSupports))); clientHelper.mergeGroupMetadata(txn, localGroup.getId(), meta); } catch (FormatException e) { throw new DbException(); @@ -242,7 +243,7 @@ class MailboxUpdateManagerImpl implements MailboxUpdateManager, List serverSupports, String ownOnion) throws DbException { MailboxUpdate u = new MailboxUpdateWithMailbox( - CLIENT_SUPPORTS, serverSupports, ownOnion, + clientSupports, serverSupports, ownOnion, new MailboxAuthToken(crypto.generateUniqueId().getBytes()), new MailboxFolderId(crypto.generateUniqueId().getBytes()), new MailboxFolderId(crypto.generateUniqueId().getBytes())); @@ -259,7 +260,7 @@ class MailboxUpdateManagerImpl implements MailboxUpdateManager, private void sendUpdateNoMailbox(Transaction txn, Contact c) throws DbException { Group g = getContactGroup(c); - MailboxUpdate u = new MailboxUpdate(CLIENT_SUPPORTS); + MailboxUpdate u = new MailboxUpdate(clientSupports); storeMessageReplaceLatest(txn, g.getId(), u); } diff --git a/bramble-core/src/test/java/org/briarproject/bramble/mailbox/MailboxPairingTaskImplTest.java b/bramble-core/src/test/java/org/briarproject/bramble/mailbox/MailboxPairingTaskImplTest.java index be7555d90..10c1a74fa 100644 --- a/bramble-core/src/test/java/org/briarproject/bramble/mailbox/MailboxPairingTaskImplTest.java +++ b/bramble-core/src/test/java/org/briarproject/bramble/mailbox/MailboxPairingTaskImplTest.java @@ -12,6 +12,7 @@ import org.briarproject.bramble.api.mailbox.MailboxProperties; import org.briarproject.bramble.api.mailbox.MailboxSettingsManager; import org.briarproject.bramble.api.mailbox.MailboxUpdate; import org.briarproject.bramble.api.mailbox.MailboxUpdateManager; +import org.briarproject.bramble.api.mailbox.MailboxVersion; import org.briarproject.bramble.api.mailbox.OwnMailboxConnectionStatusEvent; import org.briarproject.bramble.api.system.Clock; import org.briarproject.bramble.test.BrambleMockTestCase; @@ -29,7 +30,6 @@ import java.util.concurrent.Executor; import java.util.concurrent.atomic.AtomicInteger; import static java.util.Collections.singletonList; -import static org.briarproject.bramble.mailbox.MailboxApi.CLIENT_SUPPORTS; import static org.briarproject.bramble.test.TestUtils.getContact; import static org.briarproject.bramble.test.TestUtils.getRandomBytes; import static org.briarproject.bramble.test.TestUtils.getRandomId; @@ -107,7 +107,8 @@ public class MailboxPairingTaskImplTest extends BrambleMockTestCase { }}); Contact contact1 = getContact(); Transaction txn = new Transaction(null, false); - MailboxUpdate updateNoMailbox = new MailboxUpdate(CLIENT_SUPPORTS); + MailboxUpdate updateNoMailbox = new MailboxUpdate( + singletonList(new MailboxVersion(47, 11))); context.checking(new DbExpectations() {{ oneOf(db).transaction(with(false), withDbRunnable(txn)); oneOf(mailboxSettingsManager).setOwnMailboxProperties( diff --git a/bramble-core/src/test/java/org/briarproject/bramble/mailbox/MailboxUpdateManagerImplTest.java b/bramble-core/src/test/java/org/briarproject/bramble/mailbox/MailboxUpdateManagerImplTest.java index 17e991ee7..5814faf89 100644 --- a/bramble-core/src/test/java/org/briarproject/bramble/mailbox/MailboxUpdateManagerImplTest.java +++ b/bramble-core/src/test/java/org/briarproject/bramble/mailbox/MailboxUpdateManagerImplTest.java @@ -45,7 +45,6 @@ import static org.briarproject.bramble.api.mailbox.MailboxUpdateManager.PROP_KEY import static org.briarproject.bramble.api.mailbox.MailboxUpdateManager.PROP_KEY_OUTBOXID; import static org.briarproject.bramble.api.sync.Group.Visibility.SHARED; import static org.briarproject.bramble.api.sync.validation.IncomingMessageHook.DeliveryAction.ACCEPT_DO_NOT_SHARE; -import static org.briarproject.bramble.mailbox.MailboxApi.CLIENT_SUPPORTS; import static org.briarproject.bramble.test.TestUtils.getContact; import static org.briarproject.bramble.test.TestUtils.getGroup; import static org.briarproject.bramble.test.TestUtils.getMessage; @@ -75,33 +74,33 @@ public class MailboxUpdateManagerImplTest extends BrambleMockTestCase { private final Group localGroup = getGroup(CLIENT_ID, MAJOR_VERSION); private final BdfDictionary propsDict; private final BdfDictionary emptyPropsDict = new BdfDictionary(); - private final BdfList realClientSupports; - private final BdfList someClientSupports; private final List someClientSupportsList; - private final BdfList emptyServerSupports; - private final BdfList someServerSupports; + private final BdfList someClientSupports; private final List someServerSupportsList; + private final BdfList someServerSupports; + private final BdfList emptyServerSupports = new BdfList(); private final MailboxUpdateWithMailbox updateWithMailbox; private final MailboxUpdate updateNoMailbox; private final MailboxProperties ownProps; public MailboxUpdateManagerImplTest() { - someClientSupports = BdfList.of(BdfList.of(1, 0)); - someClientSupportsList = singletonList(new MailboxVersion(1, 0)); - emptyServerSupports = new BdfList(); - someServerSupports = BdfList.of(BdfList.of(1, 0)); - someServerSupportsList = singletonList(new MailboxVersion(1, 0)); - realClientSupports = new BdfList(); - for (MailboxVersion v : CLIENT_SUPPORTS) { - realClientSupports.add(BdfList.of(v.getMajor(), v.getMinor())); - } + someClientSupportsList = singletonList(new MailboxVersion(47, 11)); + someClientSupports = BdfList.of(BdfList.of( + someClientSupportsList.get(0).getMajor(), + someClientSupportsList.get(0).getMinor())); + + someServerSupportsList = singletonList(new MailboxVersion(42, 0)); + someServerSupports = BdfList.of(BdfList.of( + someServerSupportsList.get(0).getMajor(), + someServerSupportsList.get(0).getMinor())); + + updateNoMailbox = new MailboxUpdate(someClientSupportsList); + ownProps = new MailboxProperties("http://bar.onion", new MailboxAuthToken(getRandomId()), true, someServerSupportsList); - updateWithMailbox = new MailboxUpdateWithMailbox( - singletonList(new MailboxVersion(1, 0)), - singletonList(new MailboxVersion(1, 0)), - ownProps.getOnion(), + updateWithMailbox = new MailboxUpdateWithMailbox(someClientSupportsList, + someServerSupportsList, ownProps.getOnion(), new MailboxAuthToken(getRandomId()), new MailboxFolderId(getRandomId()), new MailboxFolderId(getRandomId())); @@ -113,18 +112,18 @@ public class MailboxUpdateManagerImplTest extends BrambleMockTestCase { .getBytes()); propsDict.put(PROP_KEY_OUTBOXID, updateWithMailbox.getOutboxId() .getBytes()); - updateNoMailbox = new MailboxUpdate(someClientSupportsList); } - private MailboxUpdateManagerImpl createInstance() { + private MailboxUpdateManagerImpl createInstance( + List clientSupports) { context.checking(new Expectations() {{ oneOf(contactGroupFactory).createLocalGroup(CLIENT_ID, MAJOR_VERSION); will(returnValue(localGroup)); }}); - return new MailboxUpdateManagerImpl(db, clientHelper, - clientVersioningManager, metadataParser, contactGroupFactory, - clock, mailboxSettingsManager, crypto); + return new MailboxUpdateManagerImpl(clientSupports, db, + clientHelper, clientVersioningManager, metadataParser, + contactGroupFactory, clock, mailboxSettingsManager, crypto); } @Test @@ -135,7 +134,7 @@ public class MailboxUpdateManagerImplTest extends BrambleMockTestCase { Map messageMetadata = new LinkedHashMap<>(); BdfDictionary sentDict = BdfDictionary.of(new BdfEntry( GROUP_KEY_SENT_CLIENT_SUPPORTS, - realClientSupports)); + someClientSupports)); context.checking(new Expectations() {{ oneOf(db).containsGroup(txn, localGroup.getId()); @@ -164,14 +163,14 @@ public class MailboxUpdateManagerImplTest extends BrambleMockTestCase { oneOf(clientHelper).getMessageMetadataAsDictionary(txn, contactGroup.getId()); will(returnValue(messageMetadata)); - expectStoreMessage(txn, contactGroup.getId(), 1, realClientSupports, + expectStoreMessage(txn, contactGroup.getId(), 1, someClientSupports, emptyServerSupports, emptyPropsDict, true); oneOf(clientHelper).mergeGroupMetadata(txn, localGroup.getId(), sentDict); }}); - MailboxUpdateManagerImpl t = createInstance(); + MailboxUpdateManagerImpl t = createInstance(someClientSupportsList); t.onDatabaseOpened(txn); } @@ -184,7 +183,7 @@ public class MailboxUpdateManagerImplTest extends BrambleMockTestCase { Map messageMetadata = new LinkedHashMap<>(); BdfDictionary sentDict = BdfDictionary.of(new BdfEntry( GROUP_KEY_SENT_CLIENT_SUPPORTS, - realClientSupports)); + someClientSupports)); context.checking(new Expectations() {{ oneOf(db).containsGroup(txn, localGroup.getId()); @@ -219,14 +218,14 @@ public class MailboxUpdateManagerImplTest extends BrambleMockTestCase { oneOf(clientHelper).getMessageMetadataAsDictionary(txn, contactGroup.getId()); will(returnValue(messageMetadata)); - expectStoreMessage(txn, contactGroup.getId(), 1, realClientSupports, + expectStoreMessage(txn, contactGroup.getId(), 1, someClientSupports, someServerSupports, propsDict, true); oneOf(clientHelper).mergeGroupMetadata(txn, localGroup.getId(), sentDict); }}); - MailboxUpdateManagerImpl t = createInstance(); + MailboxUpdateManagerImpl t = createInstance(someClientSupportsList); t.onDatabaseOpened(txn); } @@ -242,7 +241,7 @@ public class MailboxUpdateManagerImplTest extends BrambleMockTestCase { new LinkedHashMap<>(); BdfDictionary sentDict = BdfDictionary.of(new BdfEntry( GROUP_KEY_SENT_CLIENT_SUPPORTS, - realClientSupports)); + someClientSupports)); context.checking(new Expectations() {{ oneOf(db).containsGroup(txn, localGroup.getId()); @@ -271,14 +270,14 @@ public class MailboxUpdateManagerImplTest extends BrambleMockTestCase { oneOf(clientHelper).getMessageMetadataAsDictionary(txn, contactGroup.getId()); will(returnValue(emptyMessageMetadata)); - expectStoreMessage(txn, contactGroup.getId(), 1, realClientSupports, + expectStoreMessage(txn, contactGroup.getId(), 1, someClientSupports, emptyServerSupports, emptyPropsDict, true); oneOf(clientHelper).mergeGroupMetadata(txn, localGroup.getId(), sentDict); }}); - MailboxUpdateManagerImpl t = createInstance(); + MailboxUpdateManagerImpl t = createInstance(someClientSupportsList); t.onDatabaseOpened(txn); context.checking(new Expectations() {{ @@ -287,11 +286,11 @@ public class MailboxUpdateManagerImplTest extends BrambleMockTestCase { oneOf(clientHelper).getGroupMetadataAsDictionary(txn, localGroup.getId()); will(returnValue(sentDict)); - oneOf(clientHelper).parseMailboxVersionList(realClientSupports); - will(returnValue(CLIENT_SUPPORTS)); + oneOf(clientHelper).parseMailboxVersionList(someClientSupports); + will(returnValue(someClientSupportsList)); }}); - t = createInstance(); + t = createInstance(someClientSupportsList); t.onDatabaseOpened(txn); } @@ -324,11 +323,11 @@ public class MailboxUpdateManagerImplTest extends BrambleMockTestCase { oneOf(clientHelper).getMessageMetadataAsDictionary(txn, contactGroup.getId()); will(returnValue(messageMetadata)); - expectStoreMessage(txn, contactGroup.getId(), 1, realClientSupports, + expectStoreMessage(txn, contactGroup.getId(), 1, someClientSupports, emptyServerSupports, emptyPropsDict, true); }}); - MailboxUpdateManagerImpl t = createInstance(); + MailboxUpdateManagerImpl t = createInstance(someClientSupportsList); t.addingContact(txn, contact); } @@ -371,7 +370,7 @@ public class MailboxUpdateManagerImplTest extends BrambleMockTestCase { someServerSupports, propsDict, true); }}); - MailboxUpdateManagerImpl t = createInstance(); + MailboxUpdateManagerImpl t = createInstance(someClientSupportsList); t.addingContact(txn, contact); } @@ -388,7 +387,7 @@ public class MailboxUpdateManagerImplTest extends BrambleMockTestCase { oneOf(db).removeGroup(txn, contactGroup); }}); - MailboxUpdateManagerImpl t = createInstance(); + MailboxUpdateManagerImpl t = createInstance(someClientSupportsList); t.removingContact(txn, contact); } @@ -430,7 +429,7 @@ public class MailboxUpdateManagerImplTest extends BrambleMockTestCase { oneOf(db).resetUnackedMessagesToSend(txn, contact.getId()); }}); - MailboxUpdateManagerImpl t = createInstance(); + MailboxUpdateManagerImpl t = createInstance(someClientSupportsList); assertEquals(ACCEPT_DO_NOT_SHARE, t.incomingMessage(txn, message, meta)); assertTrue(hasEvent(txn, RemoteMailboxUpdateEvent.class)); @@ -482,7 +481,7 @@ public class MailboxUpdateManagerImplTest extends BrambleMockTestCase { oneOf(db).resetUnackedMessagesToSend(txn, contact.getId()); }}); - MailboxUpdateManagerImpl t = createInstance(); + MailboxUpdateManagerImpl t = createInstance(someClientSupportsList); assertEquals(ACCEPT_DO_NOT_SHARE, t.incomingMessage(txn, message, meta)); assertTrue(hasEvent(txn, RemoteMailboxUpdateEvent.class)); @@ -516,7 +515,7 @@ public class MailboxUpdateManagerImplTest extends BrambleMockTestCase { oneOf(db).deleteMessageMetadata(txn, message.getId()); }}); - MailboxUpdateManagerImpl t = createInstance(); + MailboxUpdateManagerImpl t = createInstance(someClientSupportsList); assertEquals(ACCEPT_DO_NOT_SHARE, t.incomingMessage(txn, message, meta)); assertFalse(hasEvent(txn, RemoteMailboxUpdateEvent.class)); @@ -562,7 +561,7 @@ public class MailboxUpdateManagerImplTest extends BrambleMockTestCase { oneOf(db).removeMessage(txn, latestId); }}); - MailboxUpdateManagerImpl t = createInstance(); + MailboxUpdateManagerImpl t = createInstance(someClientSupportsList); t.mailboxPaired(txn, ownProps.getOnion(), someServerSupportsList); } @@ -600,7 +599,7 @@ public class MailboxUpdateManagerImplTest extends BrambleMockTestCase { oneOf(db).removeMessage(txn, latestId); }}); - MailboxUpdateManagerImpl t = createInstance(); + MailboxUpdateManagerImpl t = createInstance(someClientSupportsList); t.mailboxUnpaired(txn); } @@ -635,7 +634,7 @@ public class MailboxUpdateManagerImplTest extends BrambleMockTestCase { will(returnValue(updateWithMailbox)); }}); - MailboxUpdateManagerImpl t = createInstance(); + MailboxUpdateManagerImpl t = createInstance(someClientSupportsList); MailboxUpdate remote = t.getRemoteUpdate(txn, contact.getId()); assertTrue(mailboxUpdateEqual(remote, updateWithMailbox)); } @@ -660,7 +659,7 @@ public class MailboxUpdateManagerImplTest extends BrambleMockTestCase { will(returnValue(emptyMessageMetadata)); }}); - MailboxUpdateManagerImpl t = createInstance(); + MailboxUpdateManagerImpl t = createInstance(someClientSupportsList); assertNull(t.getRemoteUpdate(txn, contact.getId())); } @@ -695,7 +694,7 @@ public class MailboxUpdateManagerImplTest extends BrambleMockTestCase { will(returnValue(updateNoMailbox)); }}); - MailboxUpdateManagerImpl t = createInstance(); + MailboxUpdateManagerImpl t = createInstance(someClientSupportsList); MailboxUpdate remote = t.getRemoteUpdate(txn, contact.getId()); assertTrue(mailboxUpdateEqual(remote, updateNoMailbox)); } @@ -731,7 +730,7 @@ public class MailboxUpdateManagerImplTest extends BrambleMockTestCase { will(returnValue(updateWithMailbox)); }}); - MailboxUpdateManagerImpl t = createInstance(); + MailboxUpdateManagerImpl t = createInstance(someClientSupportsList); MailboxUpdate local = t.getLocalUpdate(txn, contact.getId()); assertTrue(mailboxUpdateEqual(local, updateWithMailbox)); } @@ -767,7 +766,7 @@ public class MailboxUpdateManagerImplTest extends BrambleMockTestCase { will(returnValue(updateNoMailbox)); }}); - MailboxUpdateManagerImpl t = createInstance(); + MailboxUpdateManagerImpl t = createInstance(someClientSupportsList); MailboxUpdate local = t.getLocalUpdate(txn, contact.getId()); assertTrue(mailboxUpdateEqual(local, updateNoMailbox)); }