diff --git a/briar-core/src/org/briarproject/db/JdbcDatabase.java b/briar-core/src/org/briarproject/db/JdbcDatabase.java index 045cb198f..850ad4248 100644 --- a/briar-core/src/org/briarproject/db/JdbcDatabase.java +++ b/briar-core/src/org/briarproject/db/JdbcDatabase.java @@ -100,7 +100,6 @@ abstract class JdbcDatabase implements Database { + " localAuthorId HASH NOT NULL," + " status INT NOT NULL," + " PRIMARY KEY (contactId)," - + " UNIQUE (authorId)," + " FOREIGN KEY (localAuthorId)" + " REFERENCES localAuthors (authorId)" + " ON DELETE CASCADE)"; diff --git a/briar-tests/src/org/briarproject/db/H2DatabaseTest.java b/briar-tests/src/org/briarproject/db/H2DatabaseTest.java index eb1bbb336..3b127a88b 100644 --- a/briar-tests/src/org/briarproject/db/H2DatabaseTest.java +++ b/briar-tests/src/org/briarproject/db/H2DatabaseTest.java @@ -51,6 +51,7 @@ import static org.briarproject.api.sync.ValidationManager.Validity.VALID; import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; @@ -1157,6 +1158,35 @@ public class H2DatabaseTest extends BriarTestCase { db.close(); } + @Test + public void testDifferentLocalPseudonymsCanHaveTheSameContact() + throws Exception { + AuthorId localAuthorId1 = new AuthorId(TestUtils.getRandomId()); + LocalAuthor localAuthor1 = new LocalAuthor(localAuthorId1, "Carol", + new byte[MAX_PUBLIC_KEY_LENGTH], new byte[123], timestamp, + StorageStatus.ACTIVE); + + Database db = open(false); + Connection txn = db.startTransaction(); + + // Add two local pseudonyms + db.addLocalAuthor(txn, localAuthor); + db.addLocalAuthor(txn, localAuthor1); + + // Add the same contact for each local pseudonym + ContactId contactId = db.addContact(txn, author, localAuthorId); + ContactId contactId1 = db.addContact(txn, author, localAuthorId1); + + // The contacts should be distinct + assertNotEquals(contactId, contactId1); + assertEquals(2, db.getContacts(txn).size()); + assertEquals(1, db.getContacts(txn, localAuthorId).size()); + assertEquals(1, db.getContacts(txn, localAuthorId1).size()); + + db.commitTransaction(txn); + db.close(); + } + @Test public void testExceptionHandling() throws Exception { Database db = open(false);