diff --git a/bramble-api/src/main/java/org/briarproject/bramble/api/db/DatabaseComponent.java b/bramble-api/src/main/java/org/briarproject/bramble/api/db/DatabaseComponent.java index 8835b752629328258708c414c534ef5785edfb54..5e50efdc29b76e75785a9a37de39aad8522c237f 100644 --- a/bramble-api/src/main/java/org/briarproject/bramble/api/db/DatabaseComponent.java +++ b/bramble-api/src/main/java/org/briarproject/bramble/api/db/DatabaseComponent.java @@ -241,7 +241,8 @@ public interface DatabaseComponent { * <p/> * Read-only. */ - Collection<Group> getGroups(Transaction txn, ClientId c) throws DbException; + Collection<Group> getGroups(Transaction txn, ClientId c, int clientVersion) + throws DbException; /** * Returns the given group's visibility to the given contact, or diff --git a/bramble-api/src/main/java/org/briarproject/bramble/api/sync/Group.java b/bramble-api/src/main/java/org/briarproject/bramble/api/sync/Group.java index 5ffe422c2ac7dd369a57ff3673335ddfb88eb25a..40d2da6ff87fdcaf9e89dc1d605e801d1ad25adb 100644 --- a/bramble-api/src/main/java/org/briarproject/bramble/api/sync/Group.java +++ b/bramble-api/src/main/java/org/briarproject/bramble/api/sync/Group.java @@ -17,13 +17,16 @@ public class Group { private final GroupId id; private final ClientId clientId; + private final int clientVersion; private final byte[] descriptor; - public Group(GroupId id, ClientId clientId, byte[] descriptor) { + public Group(GroupId id, ClientId clientId, int clientVersion, + byte[] descriptor) { if (descriptor.length > MAX_GROUP_DESCRIPTOR_LENGTH) throw new IllegalArgumentException(); this.id = id; this.clientId = clientId; + this.clientVersion = clientVersion; this.descriptor = descriptor; } @@ -41,6 +44,13 @@ public class Group { return clientId; } + /** + * Returns the version of the client to which the group belongs. + */ + public int getClientVersion() { + return clientVersion; + } + /** * Returns the group's descriptor. */ diff --git a/bramble-api/src/test/java/org/briarproject/bramble/test/TestUtils.java b/bramble-api/src/test/java/org/briarproject/bramble/test/TestUtils.java index 3ce8d154996355b2a96a6703fc854318c8a9d951..0bff1a547dbbd2e223d822c11d6a3ab0d99f5462 100644 --- a/bramble-api/src/test/java/org/briarproject/bramble/test/TestUtils.java +++ b/bramble-api/src/test/java/org/briarproject/bramble/test/TestUtils.java @@ -117,15 +117,16 @@ public class TestUtils { return new Author(id, FORMAT_VERSION, name, publicKey); } - public static Group getGroup(ClientId clientId) { + public static Group getGroup(ClientId clientId, int clientVersion) { int descriptorLength = 1 + random.nextInt(MAX_GROUP_DESCRIPTOR_LENGTH); - return getGroup(clientId, descriptorLength); + return getGroup(clientId, clientVersion, descriptorLength); } - public static Group getGroup(ClientId clientId, int descriptorLength) { + public static Group getGroup(ClientId clientId, int clientVersion, + int descriptorLength) { GroupId groupId = new GroupId(getRandomId()); byte[] descriptor = getRandomBytes(descriptorLength); - return new Group(groupId, clientId, descriptor); + return new Group(groupId, clientId, clientVersion, descriptor); } public static Message getMessage(GroupId groupId) { diff --git a/bramble-core/src/main/java/org/briarproject/bramble/db/Database.java b/bramble-core/src/main/java/org/briarproject/bramble/db/Database.java index 0c3b2b1bccb0681af813a7e0582ac5bcc7766f52..7a132510fcd670056d21418bb285b58afc9a2189 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/db/Database.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/db/Database.java @@ -266,7 +266,8 @@ interface Database<T> { * <p/> * Read-only. */ - Collection<Group> getGroups(T txn, ClientId c) throws DbException; + Collection<Group> getGroups(T txn, ClientId c, int clientVersion) + throws DbException; /** * Returns the given group's visibility to the given contact, or diff --git a/bramble-core/src/main/java/org/briarproject/bramble/db/DatabaseComponentImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/db/DatabaseComponentImpl.java index 3661039aa8bc06c6a162937706c406700830ba03..b24567bf30aeeb1ea2bccf94363850adc98eb99c 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/db/DatabaseComponentImpl.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/db/DatabaseComponentImpl.java @@ -435,10 +435,10 @@ class DatabaseComponentImpl<T> implements DatabaseComponent { } @Override - public Collection<Group> getGroups(Transaction transaction, ClientId c) - throws DbException { + public Collection<Group> getGroups(Transaction transaction, ClientId c, + int clientVersion) throws DbException { T txn = unbox(transaction); - return db.getGroups(txn, c); + return db.getGroups(txn, c, clientVersion); } @Override diff --git a/bramble-core/src/main/java/org/briarproject/bramble/db/JdbcDatabase.java b/bramble-core/src/main/java/org/briarproject/bramble/db/JdbcDatabase.java index dd0e928a8569c2c52c985fea2a9acb87470ae267..3bffa8529665b78fd4f8ccd2bef7e0db372c15e9 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/db/JdbcDatabase.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/db/JdbcDatabase.java @@ -117,6 +117,7 @@ abstract class JdbcDatabase implements Database<Connection> { "CREATE TABLE groups" + " (groupId _HASH NOT NULL," + " clientId _STRING NOT NULL," + + " clientVersion INT NOT NULL," + " descriptor _BINARY NOT NULL," + " PRIMARY KEY (groupId))"; @@ -275,9 +276,9 @@ abstract class JdbcDatabase implements Database<Connection> { "CREATE INDEX IF NOT EXISTS contactsByAuthorId" + " ON contacts (authorId)"; - private static final String INDEX_GROUPS_BY_CLIENT_ID = - "CREATE INDEX IF NOT EXISTS groupsByClientId" - + " ON groups (clientId)"; + private static final String INDEX_GROUPS_BY_CLIENT_ID_CLIENT_VERSION = + "CREATE INDEX IF NOT EXISTS groupsByClientIdClientVersion" + + " ON groups (clientId, clientVersion)"; private static final String INDEX_MESSAGE_METADATA_BY_GROUP_ID_STATE = "CREATE INDEX IF NOT EXISTS messageMetadataByGroupIdState" @@ -444,7 +445,7 @@ abstract class JdbcDatabase implements Database<Connection> { try { s = txn.createStatement(); s.executeUpdate(INDEX_CONTACTS_BY_AUTHOR_ID); - s.executeUpdate(INDEX_GROUPS_BY_CLIENT_ID); + s.executeUpdate(INDEX_GROUPS_BY_CLIENT_ID_CLIENT_VERSION); s.executeUpdate(INDEX_MESSAGE_METADATA_BY_GROUP_ID_STATE); s.executeUpdate(INDEX_MESSAGE_DEPENDENCIES_BY_DEPENDENCY_ID); s.executeUpdate(INDEX_STATUSES_BY_CONTACT_ID_GROUP_ID); @@ -612,12 +613,14 @@ abstract class JdbcDatabase implements Database<Connection> { public void addGroup(Connection txn, Group g) throws DbException { PreparedStatement ps = null; try { - String sql = "INSERT INTO groups (groupId, clientId, descriptor)" - + " VALUES (?, ?, ?)"; + String sql = "INSERT INTO groups" + + " (groupId, clientId, clientVersion, descriptor)" + + " VALUES (?, ?, ?, ?)"; ps = txn.prepareStatement(sql); ps.setBytes(1, g.getId().getBytes()); ps.setString(2, g.getClientId().getString()); - ps.setBytes(3, g.getDescriptor()); + ps.setInt(3, g.getClientVersion()); + ps.setBytes(4, g.getDescriptor()); int affected = ps.executeUpdate(); if (affected != 1) throw new DbStateException(); ps.close(); @@ -1346,17 +1349,18 @@ abstract class JdbcDatabase implements Database<Connection> { PreparedStatement ps = null; ResultSet rs = null; try { - String sql = "SELECT clientId, descriptor FROM groups" - + " WHERE groupId = ?"; + String sql = "SELECT clientId, clientVersion, descriptor" + + " FROM groups WHERE groupId = ?"; ps = txn.prepareStatement(sql); ps.setBytes(1, g.getBytes()); rs = ps.executeQuery(); if (!rs.next()) throw new DbStateException(); ClientId clientId = new ClientId(rs.getString(1)); - byte[] descriptor = rs.getBytes(2); + int clientVersion = rs.getInt(2); + byte[] descriptor = rs.getBytes(3); rs.close(); ps.close(); - return new Group(g, clientId, descriptor); + return new Group(g, clientId, clientVersion, descriptor); } catch (SQLException e) { tryToClose(rs); tryToClose(ps); @@ -1365,21 +1369,22 @@ abstract class JdbcDatabase implements Database<Connection> { } @Override - public Collection<Group> getGroups(Connection txn, ClientId c) - throws DbException { + public Collection<Group> getGroups(Connection txn, ClientId c, + int clientVersion) throws DbException { PreparedStatement ps = null; ResultSet rs = null; try { String sql = "SELECT groupId, descriptor FROM groups" - + " WHERE clientId = ?"; + + " WHERE clientId = ? AND clientVersion = ?"; ps = txn.prepareStatement(sql); ps.setString(1, c.getString()); + ps.setInt(2, clientVersion); rs = ps.executeQuery(); List<Group> groups = new ArrayList<>(); while (rs.next()) { GroupId id = new GroupId(rs.getBytes(1)); byte[] descriptor = rs.getBytes(2); - groups.add(new Group(id, c, descriptor)); + groups.add(new Group(id, c, clientVersion, descriptor)); } rs.close(); ps.close(); diff --git a/bramble-core/src/main/java/org/briarproject/bramble/sync/GroupFactoryImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/sync/GroupFactoryImpl.java index e7bc4e16e6dca75ee7622f0d42c21d69a56d02b1..6f12e6ff8f0d4adf33df7850ab8647a0f8a0ae07 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/sync/GroupFactoryImpl.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/sync/GroupFactoryImpl.java @@ -34,6 +34,6 @@ class GroupFactoryImpl implements GroupFactory { byte[] hash = crypto.hash(LABEL, new byte[] {FORMAT_VERSION}, StringUtils.toUtf8(c.getString()), clientVersionBytes, descriptor); - return new Group(new GroupId(hash), c, descriptor); + return new Group(new GroupId(hash), c, clientVersion, descriptor); } } diff --git a/bramble-core/src/test/java/org/briarproject/bramble/db/DatabaseComponentImplTest.java b/bramble-core/src/test/java/org/briarproject/bramble/db/DatabaseComponentImplTest.java index ae3e203405e8006461a7d979bc7b82ee50dd7085..5d08264f7dc2c3e230099c24b5c81308af85d8f4 100644 --- a/bramble-core/src/test/java/org/briarproject/bramble/db/DatabaseComponentImplTest.java +++ b/bramble-core/src/test/java/org/briarproject/bramble/db/DatabaseComponentImplTest.java @@ -89,6 +89,7 @@ public class DatabaseComponentImplTest extends BrambleMockTestCase { private final Object txn = new Object(); private final ClientId clientId; + private final int clientVersion; private final GroupId groupId; private final Group group; private final Author author; @@ -106,7 +107,8 @@ public class DatabaseComponentImplTest extends BrambleMockTestCase { public DatabaseComponentImplTest() { clientId = getClientId(); - group = getGroup(clientId); + clientVersion = 123; + group = getGroup(clientId, clientVersion); groupId = group.getId(); author = getAuthor(); localAuthor = getLocalAuthor(); @@ -175,7 +177,7 @@ public class DatabaseComponentImplTest extends BrambleMockTestCase { oneOf(database).containsGroup(txn, groupId); will(returnValue(true)); // getGroups() - oneOf(database).getGroups(txn, clientId); + oneOf(database).getGroups(txn, clientId, clientVersion); will(returnValue(singletonList(group))); // removeGroup() oneOf(database).containsGroup(txn, groupId); @@ -215,7 +217,7 @@ public class DatabaseComponentImplTest extends BrambleMockTestCase { db.addGroup(transaction, group); // First time - listeners called db.addGroup(transaction, group); // Second time - not called assertEquals(singletonList(group), - db.getGroups(transaction, clientId)); + db.getGroups(transaction, clientId, clientVersion)); db.removeGroup(transaction, group); db.removeContact(transaction, contactId); db.removeLocalAuthor(transaction, localAuthor.getId()); diff --git a/bramble-core/src/test/java/org/briarproject/bramble/db/DatabasePerformanceTest.java b/bramble-core/src/test/java/org/briarproject/bramble/db/DatabasePerformanceTest.java index 389f7c1c3a5e50b3152f046578b0a038022f3d60..e46a75b68460ba81166b20aabbfcddcbca1fe4b8 100644 --- a/bramble-core/src/test/java/org/briarproject/bramble/db/DatabasePerformanceTest.java +++ b/bramble-core/src/test/java/org/briarproject/bramble/db/DatabasePerformanceTest.java @@ -267,7 +267,7 @@ public abstract class DatabasePerformanceTest extends BrambleTestCase { String name = "getGroups(T, ClientId)"; benchmark(name, db -> { Connection txn = db.startTransaction(); - db.getGroups(txn, pickRandom(clientIds)); + db.getGroups(txn, pickRandom(clientIds), 123); db.commitTransaction(txn); }); } @@ -550,7 +550,7 @@ public abstract class DatabasePerformanceTest extends BrambleTestCase { contacts.add(db.getContact(txn, c)); contactGroups.put(c, new ArrayList<>()); for (int j = 0; j < GROUPS_PER_CONTACT; j++) { - Group g = getGroup(clientIds.get(j % CLIENTS)); + Group g = getGroup(clientIds.get(j % CLIENTS), 123); groups.add(g); messageMeta.put(g.getId(), new ArrayList<>()); contactGroups.get(c).add(g); @@ -584,7 +584,7 @@ public abstract class DatabasePerformanceTest extends BrambleTestCase { } } for (int i = 0; i < LOCAL_GROUPS; i++) { - Group g = getGroup(clientIds.get(i % CLIENTS)); + Group g = getGroup(clientIds.get(i % CLIENTS), 123); groups.add(g); messageMeta.put(g.getId(), new ArrayList<>()); groupMessages.put(g.getId(), new ArrayList<>()); diff --git a/bramble-core/src/test/java/org/briarproject/bramble/db/JdbcDatabaseTest.java b/bramble-core/src/test/java/org/briarproject/bramble/db/JdbcDatabaseTest.java index 97268d16b3e551b28525517e9d6fb5c7a76b2f1e..71f7b298546a5ffea7bcfda010f4b1bb6ccf003f 100644 --- a/bramble-core/src/test/java/org/briarproject/bramble/db/JdbcDatabaseTest.java +++ b/bramble-core/src/test/java/org/briarproject/bramble/db/JdbcDatabaseTest.java @@ -82,6 +82,7 @@ public abstract class JdbcDatabaseTest extends BrambleTestCase { private final File testDir = TestUtils.getTestDirectory(); private final GroupId groupId; private final ClientId clientId; + private final int clientVersion; private final Group group; private final Author author; private final LocalAuthor localAuthor; @@ -96,7 +97,8 @@ public abstract class JdbcDatabaseTest extends BrambleTestCase { JdbcDatabaseTest() throws Exception { clientId = getClientId(); - group = getGroup(clientId); + clientVersion = 123; + group = getGroup(clientId, clientVersion); groupId = group.getId(); author = getAuthor(); localAuthor = getLocalAuthor(); @@ -1460,7 +1462,7 @@ public abstract class JdbcDatabaseTest extends BrambleTestCase { db.addMessage(txn, message, PENDING, true, contactId); // Add a second group - Group group1 = getGroup(clientId); + Group group1 = getGroup(clientId, 123); GroupId groupId1 = group1.getId(); db.addGroup(txn, group1); @@ -1828,6 +1830,22 @@ public abstract class JdbcDatabaseTest extends BrambleTestCase { db.close(); } + @Test + public void testGetGroups() throws Exception { + Database<Connection> db = open(false); + Connection txn = db.startTransaction(); + + assertEquals(emptyList(), db.getGroups(txn, clientId, clientVersion)); + db.addGroup(txn, group); + assertEquals(singletonList(group), + db.getGroups(txn, clientId, clientVersion)); + db.removeGroup(txn, groupId); + assertEquals(emptyList(), db.getGroups(txn, clientId, clientVersion)); + + db.commitTransaction(txn); + db.close(); + } + @Test public void testExceptionHandling() throws Exception { Database<Connection> db = open(false); diff --git a/bramble-core/src/test/java/org/briarproject/bramble/properties/TransportPropertyManagerImplTest.java b/bramble-core/src/test/java/org/briarproject/bramble/properties/TransportPropertyManagerImplTest.java index 9702c2d5111d37713fdeff3d1775355f42aa343e..1f690b14e5a60b4a58d2a275cf5310daec971fc3 100644 --- a/bramble-core/src/test/java/org/briarproject/bramble/properties/TransportPropertyManagerImplTest.java +++ b/bramble-core/src/test/java/org/briarproject/bramble/properties/TransportPropertyManagerImplTest.java @@ -51,7 +51,7 @@ public class TransportPropertyManagerImplTest extends BrambleMockTestCase { context.mock(ContactGroupFactory.class); private final Clock clock = context.mock(Clock.class); - private final Group localGroup = getGroup(CLIENT_ID); + private final Group localGroup = getGroup(CLIENT_ID, CLIENT_VERSION); private final LocalAuthor localAuthor = getLocalAuthor(); private final BdfDictionary fooPropertiesDict = BdfDictionary.of( new BdfEntry("fooKey1", "fooValue1"), @@ -90,8 +90,8 @@ public class TransportPropertyManagerImplTest extends BrambleMockTestCase { Contact contact1 = getContact(true); Contact contact2 = getContact(true); List<Contact> contacts = Arrays.asList(contact1, contact2); - Group contactGroup1 = getGroup(CLIENT_ID); - Group contactGroup2 = getGroup(CLIENT_ID); + Group contactGroup1 = getGroup(CLIENT_ID, CLIENT_VERSION); + Group contactGroup2 = getGroup(CLIENT_ID, CLIENT_VERSION); context.checking(new Expectations() {{ oneOf(db).containsGroup(txn, localGroup.getId()); @@ -144,7 +144,7 @@ public class TransportPropertyManagerImplTest extends BrambleMockTestCase { public void testCreatesContactGroupWhenAddingContact() throws Exception { Transaction txn = new Transaction(null, false); Contact contact = getContact(true); - Group contactGroup = getGroup(CLIENT_ID); + Group contactGroup = getGroup(CLIENT_ID, CLIENT_VERSION); context.checking(new Expectations() {{ // Create the group and share it with the contact @@ -172,7 +172,7 @@ public class TransportPropertyManagerImplTest extends BrambleMockTestCase { public void testRemovesGroupWhenRemovingContact() throws Exception { Transaction txn = new Transaction(null, false); Contact contact = getContact(true); - Group contactGroup = getGroup(CLIENT_ID); + Group contactGroup = getGroup(CLIENT_ID, CLIENT_VERSION); context.checking(new Expectations() {{ oneOf(contactGroupFactory).createContactGroup(CLIENT_ID, @@ -307,7 +307,7 @@ public class TransportPropertyManagerImplTest extends BrambleMockTestCase { @Test public void testStoresRemotePropertiesWithVersion0() throws Exception { Contact contact = getContact(true); - Group contactGroup = getGroup(CLIENT_ID); + Group contactGroup = getGroup(CLIENT_ID, CLIENT_VERSION); Transaction txn = new Transaction(null, false); Map<TransportId, TransportProperties> properties = new LinkedHashMap<>(); @@ -421,8 +421,8 @@ public class TransportPropertyManagerImplTest extends BrambleMockTestCase { Contact contact3 = getContact(true); List<Contact> contacts = Arrays.asList(contact1, contact2, contact3); - Group contactGroup2 = getGroup(CLIENT_ID); - Group contactGroup3 = getGroup(CLIENT_ID); + Group contactGroup2 = getGroup(CLIENT_ID, CLIENT_VERSION); + Group contactGroup3 = getGroup(CLIENT_ID, CLIENT_VERSION); Map<MessageId, BdfDictionary> messageMetadata3 = new LinkedHashMap<>(); // A remote update for another transport should be ignored @@ -524,7 +524,7 @@ public class TransportPropertyManagerImplTest extends BrambleMockTestCase { public void testMergingNewPropertiesCreatesUpdate() throws Exception { Transaction txn = new Transaction(null, false); Contact contact = getContact(true); - Group contactGroup = getGroup(CLIENT_ID); + Group contactGroup = getGroup(CLIENT_ID, CLIENT_VERSION); context.checking(new Expectations() {{ oneOf(db).startTransaction(false); @@ -559,7 +559,7 @@ public class TransportPropertyManagerImplTest extends BrambleMockTestCase { public void testMergingUpdatedPropertiesCreatesUpdate() throws Exception { Transaction txn = new Transaction(null, false); Contact contact = getContact(true); - Group contactGroup = getGroup(CLIENT_ID); + Group contactGroup = getGroup(CLIENT_ID, CLIENT_VERSION); BdfDictionary oldMetadata = BdfDictionary.of( new BdfEntry("transportId", "foo"), new BdfEntry("version", 1), diff --git a/bramble-core/src/test/java/org/briarproject/bramble/properties/TransportPropertyValidatorTest.java b/bramble-core/src/test/java/org/briarproject/bramble/properties/TransportPropertyValidatorTest.java index cd8424897f69431fa886d4109f62765a592058f9..600fb2ef8e5295890aba19343ec72b91a7d7bc3f 100644 --- a/bramble-core/src/test/java/org/briarproject/bramble/properties/TransportPropertyValidatorTest.java +++ b/bramble-core/src/test/java/org/briarproject/bramble/properties/TransportPropertyValidatorTest.java @@ -18,7 +18,8 @@ import org.junit.Test; import java.io.IOException; import static org.briarproject.bramble.api.plugin.TransportId.MAX_TRANSPORT_ID_LENGTH; -import static org.briarproject.bramble.test.TestUtils.getClientId; +import static org.briarproject.bramble.api.properties.TransportPropertyManager.CLIENT_ID; +import static org.briarproject.bramble.api.properties.TransportPropertyManager.CLIENT_VERSION; import static org.briarproject.bramble.test.TestUtils.getGroup; import static org.briarproject.bramble.test.TestUtils.getMessage; import static org.briarproject.bramble.test.TestUtils.getTransportId; @@ -42,7 +43,7 @@ public class TransportPropertyValidatorTest extends BrambleMockTestCase { transportProperties = new TransportProperties(); transportProperties.put("foo", "bar"); - group = getGroup(getClientId()); + group = getGroup(CLIENT_ID, CLIENT_VERSION); message = getMessage(group.getId()); MetadataEncoder metadataEncoder = context.mock(MetadataEncoder.class); diff --git a/bramble-core/src/test/java/org/briarproject/bramble/sync/ValidationManagerImplTest.java b/bramble-core/src/test/java/org/briarproject/bramble/sync/ValidationManagerImplTest.java index a3a23d4aef7a613b74f28f98ef72c6da1bd8ef46..c6be26f21e7bcda9ecbfcfcb4519b359527ffc5e 100644 --- a/bramble-core/src/test/java/org/briarproject/bramble/sync/ValidationManagerImplTest.java +++ b/bramble-core/src/test/java/org/briarproject/bramble/sync/ValidationManagerImplTest.java @@ -56,7 +56,7 @@ public class ValidationManagerImplTest extends BrambleMockTestCase { private final MessageId messageId = new MessageId(getRandomId()); private final MessageId messageId1 = new MessageId(getRandomId()); private final MessageId messageId2 = new MessageId(getRandomId()); - private final Group group = getGroup(clientId); + private final Group group = getGroup(clientId, 123); private final GroupId groupId = group.getId(); private final long timestamp = System.currentTimeMillis(); private final byte[] raw = new byte[123]; diff --git a/briar-core/src/main/java/org/briarproject/briar/blog/BlogManagerImpl.java b/briar-core/src/main/java/org/briarproject/briar/blog/BlogManagerImpl.java index c7b119ef0c220342866992c2b5af710da0e09922..dab2efccb1ac0e8e40fcd47af2fc908da9aa8bde 100644 --- a/briar-core/src/main/java/org/briarproject/briar/blog/BlogManagerImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/blog/BlogManagerImpl.java @@ -425,7 +425,7 @@ class BlogManagerImpl extends BdfIncomingMessageHook implements BlogManager, Collection<Group> groups; Transaction txn = db.startTransaction(true); try { - groups = db.getGroups(txn, CLIENT_ID); + groups = db.getGroups(txn, CLIENT_ID, CLIENT_VERSION); for (Group g : groups) { blogs.add(blogFactory.parseBlog(g)); } diff --git a/briar-core/src/main/java/org/briarproject/briar/forum/ForumManagerImpl.java b/briar-core/src/main/java/org/briarproject/briar/forum/ForumManagerImpl.java index cdd2ba064bfd135673ef33014d5dbab4dfb42d3f..edac994cdad404a3724323e6b583a448cb7ed6d2 100644 --- a/briar-core/src/main/java/org/briarproject/briar/forum/ForumManagerImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/forum/ForumManagerImpl.java @@ -188,7 +188,7 @@ class ForumManagerImpl extends BdfIncomingMessageHook implements ForumManager { Collection<Group> groups; Transaction txn = db.startTransaction(true); try { - groups = db.getGroups(txn, CLIENT_ID); + groups = db.getGroups(txn, CLIENT_ID, CLIENT_VERSION); db.commitTransaction(txn); } finally { db.endTransaction(txn); diff --git a/briar-core/src/main/java/org/briarproject/briar/privategroup/PrivateGroupManagerImpl.java b/briar-core/src/main/java/org/briarproject/briar/privategroup/PrivateGroupManagerImpl.java index 20ea827a31167b90a2dfb858c7c00a99adc1079d..63b6807d174b400b22512fdb530def894721bd69 100644 --- a/briar-core/src/main/java/org/briarproject/briar/privategroup/PrivateGroupManagerImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/privategroup/PrivateGroupManagerImpl.java @@ -271,7 +271,7 @@ class PrivateGroupManagerImpl extends BdfIncomingMessageHook Collection<Group> groups; Transaction txn = db.startTransaction(true); try { - groups = db.getGroups(txn, CLIENT_ID); + groups = db.getGroups(txn, CLIENT_ID, CLIENT_VERSION); db.commitTransaction(txn); } finally { db.endTransaction(txn); diff --git a/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImpl.java b/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImpl.java index 3c02de9f4653064f98fbb943b104bb961b21ef9d..a03c3840945e3d08f7ebf95f208806bb8d6543b2 100644 --- a/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImpl.java @@ -122,7 +122,8 @@ class GroupInvitationManagerImpl extends ConversationClientImpl throw new AssertionError(e); } // If the contact belongs to any private groups, create a peer session - for (Group pg : db.getGroups(txn, PrivateGroupManager.CLIENT_ID)) { + for (Group pg : db.getGroups(txn, PrivateGroupManager.CLIENT_ID, + PrivateGroupManager.CLIENT_VERSION)) { if (privateGroupManager.isMember(txn, pg.getId(), c.getAuthor())) addingMember(txn, pg.getId(), c); } diff --git a/briar-core/src/test/java/org/briarproject/briar/blog/BlogManagerImplTest.java b/briar-core/src/test/java/org/briarproject/briar/blog/BlogManagerImplTest.java index bbd905705a69572321662a4be9e79edbc69b9c80..3f636748a448b5cf33fd7f713676f0e1a2a707ee 100644 --- a/briar-core/src/test/java/org/briarproject/briar/blog/BlogManagerImplTest.java +++ b/briar-core/src/test/java/org/briarproject/briar/blog/BlogManagerImplTest.java @@ -14,6 +14,7 @@ import org.briarproject.bramble.api.db.Transaction; import org.briarproject.bramble.api.identity.Author; import org.briarproject.bramble.api.identity.IdentityManager; import org.briarproject.bramble.api.identity.LocalAuthor; +import org.briarproject.bramble.api.sync.Group; import org.briarproject.bramble.api.sync.Message; import org.briarproject.bramble.api.sync.MessageId; import org.briarproject.briar.api.blog.Blog; @@ -49,6 +50,7 @@ import static org.briarproject.briar.api.blog.BlogConstants.KEY_TIME_RECEIVED; import static org.briarproject.briar.api.blog.BlogConstants.KEY_TYPE; import static org.briarproject.briar.api.blog.BlogConstants.MAX_BLOG_COMMENT_LENGTH; import static org.briarproject.briar.api.blog.BlogManager.CLIENT_ID; +import static org.briarproject.briar.api.blog.BlogManager.CLIENT_VERSION; import static org.briarproject.briar.api.blog.MessageType.COMMENT; import static org.briarproject.briar.api.blog.MessageType.POST; import static org.briarproject.briar.api.blog.MessageType.WRAPPED_COMMENT; @@ -866,7 +868,8 @@ public class BlogManagerImplTest extends BriarTestCase { } private Blog createBlog(LocalAuthor localAuthor, boolean rssFeed) { - return new Blog(getGroup(CLIENT_ID), localAuthor, rssFeed); + Group group = getGroup(CLIENT_ID, CLIENT_VERSION); + return new Blog(group, localAuthor, rssFeed); } private BdfList authorToBdfList(Author a) { diff --git a/briar-core/src/test/java/org/briarproject/briar/blog/BlogPostValidatorTest.java b/briar-core/src/test/java/org/briarproject/briar/blog/BlogPostValidatorTest.java index f2ca321d7f5c872ed0824db6e06dc1a7e4a2f6ca..77290aa7aac9048d67def2b8cc96ac5571d37b80 100644 --- a/briar-core/src/test/java/org/briarproject/briar/blog/BlogPostValidatorTest.java +++ b/briar-core/src/test/java/org/briarproject/briar/blog/BlogPostValidatorTest.java @@ -64,7 +64,7 @@ public class BlogPostValidatorTest extends BriarTestCase { private final String body = getRandomString(42); public BlogPostValidatorTest() { - group = getGroup(CLIENT_ID); + group = getGroup(CLIENT_ID, CLIENT_VERSION); descriptor = group.getDescriptor(); author = getAuthor(); authorList = BdfList.of( diff --git a/briar-core/src/test/java/org/briarproject/briar/feed/FeedManagerImplTest.java b/briar-core/src/test/java/org/briarproject/briar/feed/FeedManagerImplTest.java index 05a17fee5f776a51997a6a92cd93036b5d936108..4074cebe61a0e7c89ec974b3d9b8434210f993d2 100644 --- a/briar-core/src/test/java/org/briarproject/briar/feed/FeedManagerImplTest.java +++ b/briar-core/src/test/java/org/briarproject/briar/feed/FeedManagerImplTest.java @@ -61,9 +61,10 @@ public class FeedManagerImplTest extends BrambleMockTestCase { private final Clock clock = context.mock(Clock.class); private final Dns noDnsLookups = context.mock(Dns.class); - private final Group localGroup = getGroup(CLIENT_ID); + private final Group localGroup = getGroup(CLIENT_ID, CLIENT_VERSION); private final GroupId localGroupId = localGroup.getId(); - private final Group blogGroup = getGroup(BlogManager.CLIENT_ID); + private final Group blogGroup = + getGroup(BlogManager.CLIENT_ID, BlogManager.CLIENT_VERSION); private final GroupId blogGroupId = blogGroup.getId(); private final LocalAuthor localAuthor = getLocalAuthor(); private final Blog blog = new Blog(blogGroup, localAuthor, true); diff --git a/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/AbstractProtocolEngineTest.java b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/AbstractProtocolEngineTest.java index f7c630f655d37a903406ae069915c127e71f3c92..3ae2fb61e436bea964045b0b681ca19ac4460308 100644 --- a/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/AbstractProtocolEngineTest.java +++ b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/AbstractProtocolEngineTest.java @@ -33,6 +33,7 @@ import static org.briarproject.briar.api.privategroup.PrivateGroupConstants.GROU import static org.briarproject.briar.api.privategroup.PrivateGroupConstants.MAX_GROUP_INVITATION_MSG_LENGTH; import static org.briarproject.briar.api.privategroup.PrivateGroupConstants.MAX_GROUP_NAME_LENGTH; import static org.briarproject.briar.api.privategroup.PrivateGroupManager.CLIENT_ID; +import static org.briarproject.briar.api.privategroup.PrivateGroupManager.CLIENT_VERSION; import static org.briarproject.briar.privategroup.invitation.GroupInvitationConstants.GROUP_KEY_CONTACT_ID; import static org.briarproject.briar.privategroup.invitation.MessageType.ABORT; import static org.briarproject.briar.privategroup.invitation.MessageType.INVITE; @@ -64,7 +65,8 @@ public abstract class AbstractProtocolEngineTest extends BrambleMockTestCase { protected final Transaction txn = new Transaction(null, false); protected final GroupId contactGroupId = new GroupId(getRandomId()); - protected final Group privateGroupGroup = getGroup(CLIENT_ID); + protected final Group privateGroupGroup = + getGroup(CLIENT_ID, CLIENT_VERSION); protected final GroupId privateGroupId = privateGroupGroup.getId(); protected final Author author = getAuthor(); protected final PrivateGroup privateGroup = diff --git a/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImplTest.java b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImplTest.java index c225d056dc7f3436c0ec6e2c5fbdbc11437e1b96..543af95b117b2fe9bd422d2daf4caeb2d4e80d42 100644 --- a/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImplTest.java +++ b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/GroupInvitationManagerImplTest.java @@ -99,9 +99,9 @@ public class GroupInvitationManagerImplTest extends BrambleMockTestCase { private final Author author = getAuthor(); private final Contact contact = new Contact(contactId, author, new AuthorId(getRandomId()), true, true); - private final Group localGroup = getGroup(CLIENT_ID); - private final Group contactGroup = getGroup(CLIENT_ID); - private final Group privateGroup = getGroup(CLIENT_ID); + private final Group localGroup = getGroup(CLIENT_ID, CLIENT_VERSION); + private final Group contactGroup = getGroup(CLIENT_ID, CLIENT_VERSION); + private final Group privateGroup = getGroup(CLIENT_ID, CLIENT_VERSION); private final BdfDictionary meta = BdfDictionary.of(new BdfEntry("m", "e")); private final Message message = new Message(new MessageId(getRandomId()), contactGroup.getId(), @@ -194,7 +194,8 @@ public class GroupInvitationManagerImplTest extends BrambleMockTestCase { SHARED); oneOf(clientHelper) .mergeGroupMetadata(txn, contactGroup.getId(), meta); - oneOf(db).getGroups(txn, PrivateGroupManager.CLIENT_ID); + oneOf(db).getGroups(txn, PrivateGroupManager.CLIENT_ID, + PrivateGroupManager.CLIENT_VERSION); will(returnValue(Collections.singletonList(privateGroup))); oneOf(privateGroupManager) .isMember(txn, privateGroup.getId(), c.getAuthor()); @@ -854,8 +855,8 @@ public class GroupInvitationManagerImplTest extends BrambleMockTestCase { Collection<Contact> contacts = Arrays.asList(contact, contact2, contact3); - Group contactGroup2 = getGroup(CLIENT_ID); - Group contactGroup3 = getGroup(CLIENT_ID); + Group contactGroup2 = getGroup(CLIENT_ID, CLIENT_VERSION); + Group contactGroup3 = getGroup(CLIENT_ID, CLIENT_VERSION); MessageId storageId2 = new MessageId(getRandomId()); MessageId storageId3 = new MessageId(getRandomId()); diff --git a/briar-core/src/test/java/org/briarproject/briar/sharing/BlogSharingManagerImplTest.java b/briar-core/src/test/java/org/briarproject/briar/sharing/BlogSharingManagerImplTest.java index 46a9cb5e969119cce46a669750b7dc24bb03bec3..db3b6af2ccb3a22f0586bdf44a316f828fb214e8 100644 --- a/briar-core/src/test/java/org/briarproject/briar/sharing/BlogSharingManagerImplTest.java +++ b/briar-core/src/test/java/org/briarproject/briar/sharing/BlogSharingManagerImplTest.java @@ -65,11 +65,13 @@ public class BlogSharingManagerImplTest extends BrambleMockTestCase { new Contact(contactId, author, localAuthor.getId(), true, true); private final Collection<Contact> contacts = Collections.singletonList(contact); - private final Group localGroup = getGroup(CLIENT_ID); - private final Group contactGroup = getGroup(CLIENT_ID); - private final Group blogGroup = getGroup(BlogManager.CLIENT_ID); + private final Group localGroup = getGroup(CLIENT_ID, CLIENT_VERSION); + private final Group contactGroup = getGroup(CLIENT_ID, CLIENT_VERSION); + private final Group blogGroup = + getGroup(BlogManager.CLIENT_ID, BlogManager.CLIENT_VERSION); private final Blog blog = new Blog(blogGroup, author, false); - private final Group localBlogGroup = getGroup(BlogManager.CLIENT_ID); + private final Group localBlogGroup = + getGroup(BlogManager.CLIENT_ID, BlogManager.CLIENT_VERSION); private final Blog localBlog = new Blog(localBlogGroup, localAuthor, false); @SuppressWarnings("unchecked") private final ProtocolEngine<Blog> engine = @@ -225,7 +227,7 @@ public class BlogSharingManagerImplTest extends BrambleMockTestCase { private void expectPreShareShareable(Transaction txn, Contact contact, Blog blog, Map<MessageId, BdfDictionary> sessions) throws Exception { - Group contactGroup = getGroup(CLIENT_ID); + Group contactGroup = getGroup(CLIENT_ID, CLIENT_VERSION); BdfDictionary sessionDict = new BdfDictionary(); Message message = new Message(new MessageId(getRandomId()), contactGroup.getId(), 42L, getRandomBytes(1337));