Metadata for groups. #221

This commit is contained in:
akwizgran
2016-01-20 13:01:52 +00:00
parent 3c543b0d62
commit 88a8081351
7 changed files with 207 additions and 27 deletions

View File

@@ -533,11 +533,11 @@ public class DatabaseComponentImplTest extends BriarTestCase {
final EventBus eventBus = context.mock(EventBus.class);
context.checking(new Expectations() {{
// Check whether the subscription is in the DB (which it's not)
exactly(5).of(database).startTransaction();
exactly(7).of(database).startTransaction();
will(returnValue(txn));
exactly(5).of(database).containsGroup(txn, groupId);
exactly(7).of(database).containsGroup(txn, groupId);
will(returnValue(false));
exactly(5).of(database).abortTransaction(txn);
exactly(7).of(database).abortTransaction(txn);
// This is needed for getMessageStatus() to proceed
exactly(1).of(database).containsContact(txn, contactId);
will(returnValue(true));
@@ -552,6 +552,13 @@ public class DatabaseComponentImplTest extends BriarTestCase {
// Expected
}
try {
db.getGroupMetadata(groupId);
fail();
} catch (NoSuchSubscriptionException expected) {
// Expected
}
try {
db.getMessageStatus(contactId, groupId);
fail();
@@ -566,6 +573,13 @@ public class DatabaseComponentImplTest extends BriarTestCase {
// Expected
}
try {
db.mergeGroupMetadata(groupId, metadata);
fail();
} catch (NoSuchSubscriptionException expected) {
// Expected
}
try {
db.removeGroup(group);
fail();

View File

@@ -43,6 +43,7 @@ import java.util.concurrent.CountDownLatch;
import java.util.concurrent.atomic.AtomicBoolean;
import static java.util.concurrent.TimeUnit.SECONDS;
import static org.briarproject.api.db.Metadata.REMOVE;
import static org.briarproject.api.identity.AuthorConstants.MAX_PUBLIC_KEY_LENGTH;
import static org.briarproject.api.sync.SyncConstants.MAX_GROUP_DESCRIPTOR_LENGTH;
import static org.briarproject.api.sync.SyncConstants.MAX_MESSAGE_LENGTH;
@@ -1031,6 +1032,44 @@ public class H2DatabaseTest extends BriarTestCase {
db.close();
}
@Test
public void testGroupMetadata() throws Exception {
Database<Connection> db = open(false);
Connection txn = db.startTransaction();
// Add a group
db.addGroup(txn, group);
// Attach some metadata to the group
Metadata metadata = new Metadata();
metadata.put("foo", new byte[]{'b', 'a', 'r'});
metadata.put("baz", new byte[]{'b', 'a', 'm'});
db.mergeGroupMetadata(txn, groupId, metadata);
// Retrieve the metadata for the group
Metadata retrieved = db.getGroupMetadata(txn, groupId);
assertEquals(2, retrieved.size());
assertTrue(retrieved.containsKey("foo"));
assertArrayEquals(metadata.get("foo"), retrieved.get("foo"));
assertTrue(retrieved.containsKey("baz"));
assertArrayEquals(metadata.get("baz"), retrieved.get("baz"));
// Update the metadata
metadata.put("foo", REMOVE);
metadata.put("baz", new byte[] {'q', 'u', 'x'});
db.mergeGroupMetadata(txn, groupId, metadata);
// Retrieve the metadata again
retrieved = db.getGroupMetadata(txn, groupId);
assertEquals(1, retrieved.size());
assertFalse(retrieved.containsKey("foo"));
assertTrue(retrieved.containsKey("baz"));
assertArrayEquals(metadata.get("baz"), retrieved.get("baz"));
db.commitTransaction(txn);
db.close();
}
@Test
public void testMessageMetadata() throws Exception {
Database<Connection> db = open(false);
@@ -1043,22 +1082,49 @@ public class H2DatabaseTest extends BriarTestCase {
// Attach some metadata to the message
Metadata metadata = new Metadata();
metadata.put("foo", new byte[]{'b', 'a', 'r'});
metadata.put("baz", new byte[]{'b', 'a', 'm'});
db.mergeMessageMetadata(txn, messageId, metadata);
// Retrieve the metadata for the message
Metadata retrieved = db.getMessageMetadata(txn, messageId);
assertEquals(1, retrieved.size());
assertEquals(2, retrieved.size());
assertTrue(retrieved.containsKey("foo"));
assertArrayEquals(metadata.get("foo"), retrieved.get("foo"));
assertTrue(retrieved.containsKey("baz"));
assertArrayEquals(metadata.get("baz"), retrieved.get("baz"));
// Retrieve the metadata for the group
Map<MessageId, Metadata> all = db.getMessageMetadata(txn, groupId);
assertEquals(1, all.size());
assertTrue(all.containsKey(messageId));
retrieved = all.get(messageId);
assertEquals(1, retrieved.size());
assertEquals(2, retrieved.size());
assertTrue(retrieved.containsKey("foo"));
assertArrayEquals(metadata.get("foo"), retrieved.get("foo"));
assertTrue(retrieved.containsKey("baz"));
assertArrayEquals(metadata.get("baz"), retrieved.get("baz"));
// Update the metadata
metadata.put("foo", REMOVE);
metadata.put("baz", new byte[] {'q', 'u', 'x'});
db.mergeMessageMetadata(txn, messageId, metadata);
// Retrieve the metadata again
retrieved = db.getMessageMetadata(txn, messageId);
assertEquals(1, retrieved.size());
assertFalse(retrieved.containsKey("foo"));
assertTrue(retrieved.containsKey("baz"));
assertArrayEquals(metadata.get("baz"), retrieved.get("baz"));
// Retrieve the metadata for the group again
all = db.getMessageMetadata(txn, groupId);
assertEquals(1, all.size());
assertTrue(all.containsKey(messageId));
retrieved = all.get(messageId);
assertEquals(1, retrieved.size());
assertFalse(retrieved.containsKey("foo"));
assertTrue(retrieved.containsKey("baz"));
assertArrayEquals(metadata.get("baz"), retrieved.get("baz"));
db.commitTransaction(txn);
db.close();