diff --git a/briar-core/src/org/briarproject/db/JdbcDatabase.java b/briar-core/src/org/briarproject/db/JdbcDatabase.java index 045cb198f8a56bc972d2bb14ccce354e353f62ed..850ad42487f939bdcba15229a376647a07f5dee2 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<Connection> { + " 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 eb1bbb336c2ac938128919e927655c3e18c8e302..3b127a88bcd7e527224f7b73adbed609d2df9758 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<Connection> 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<Connection> db = open(false);