mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-17 05:09:53 +01:00
Unit tests for private messages.
This commit is contained in:
@@ -58,11 +58,11 @@ public class H2DatabaseTest extends TestCase {
|
|||||||
private final BatchId batchId;
|
private final BatchId batchId;
|
||||||
private final ContactId contactId;
|
private final ContactId contactId;
|
||||||
private final GroupId groupId;
|
private final GroupId groupId;
|
||||||
private final MessageId messageId;
|
private final MessageId messageId, privateMessageId;
|
||||||
private final long timestamp;
|
private final long timestamp;
|
||||||
private final int size;
|
private final int size;
|
||||||
private final byte[] raw;
|
private final byte[] raw;
|
||||||
private final Message message;
|
private final Message message, privateMessage;
|
||||||
private final Group group;
|
private final Group group;
|
||||||
private final Map<String, Map<String, String>> transports;
|
private final Map<String, Map<String, String>> transports;
|
||||||
private final Map<Group, Long> subscriptions;
|
private final Map<Group, Long> subscriptions;
|
||||||
@@ -80,12 +80,15 @@ public class H2DatabaseTest extends TestCase {
|
|||||||
contactId = new ContactId(1);
|
contactId = new ContactId(1);
|
||||||
groupId = new GroupId(TestUtils.getRandomId());
|
groupId = new GroupId(TestUtils.getRandomId());
|
||||||
messageId = new MessageId(TestUtils.getRandomId());
|
messageId = new MessageId(TestUtils.getRandomId());
|
||||||
|
privateMessageId = new MessageId(TestUtils.getRandomId());
|
||||||
timestamp = System.currentTimeMillis();
|
timestamp = System.currentTimeMillis();
|
||||||
size = 1234;
|
size = 1234;
|
||||||
raw = new byte[size];
|
raw = new byte[size];
|
||||||
random.nextBytes(raw);
|
random.nextBytes(raw);
|
||||||
message =
|
message =
|
||||||
new TestMessage(messageId, null, groupId, authorId, timestamp, raw);
|
new TestMessage(messageId, null, groupId, authorId, timestamp, raw);
|
||||||
|
privateMessage =
|
||||||
|
new TestMessage(privateMessageId, null, null, null, timestamp, raw);
|
||||||
group = groupFactory.createGroup(groupId, "Group name", null);
|
group = groupFactory.createGroup(groupId, "Group name", null);
|
||||||
transports = Collections.singletonMap("foo",
|
transports = Collections.singletonMap("foo",
|
||||||
Collections.singletonMap("bar", "baz"));
|
Collections.singletonMap("bar", "baz"));
|
||||||
@@ -112,6 +115,9 @@ public class H2DatabaseTest extends TestCase {
|
|||||||
assertFalse(db.containsMessage(txn, messageId));
|
assertFalse(db.containsMessage(txn, messageId));
|
||||||
db.addGroupMessage(txn, message);
|
db.addGroupMessage(txn, message);
|
||||||
assertTrue(db.containsMessage(txn, messageId));
|
assertTrue(db.containsMessage(txn, messageId));
|
||||||
|
assertFalse(db.containsMessage(txn, privateMessageId));
|
||||||
|
db.addPrivateMessage(txn, privateMessage, contactId);
|
||||||
|
assertTrue(db.containsMessage(txn, privateMessageId));
|
||||||
db.commitTransaction(txn);
|
db.commitTransaction(txn);
|
||||||
db.close();
|
db.close();
|
||||||
|
|
||||||
@@ -124,9 +130,13 @@ public class H2DatabaseTest extends TestCase {
|
|||||||
assertTrue(db.containsMessage(txn, messageId));
|
assertTrue(db.containsMessage(txn, messageId));
|
||||||
byte[] raw1 = db.getMessage(txn, messageId);
|
byte[] raw1 = db.getMessage(txn, messageId);
|
||||||
assertTrue(Arrays.equals(raw, raw1));
|
assertTrue(Arrays.equals(raw, raw1));
|
||||||
|
assertTrue(db.containsMessage(txn, privateMessageId));
|
||||||
|
raw1 = db.getMessage(txn, privateMessageId);
|
||||||
|
assertTrue(Arrays.equals(raw, raw1));
|
||||||
// Delete the records
|
// Delete the records
|
||||||
db.removeContact(txn, contactId);
|
|
||||||
db.removeMessage(txn, messageId);
|
db.removeMessage(txn, messageId);
|
||||||
|
db.removeMessage(txn, privateMessageId);
|
||||||
|
db.removeContact(txn, contactId);
|
||||||
db.removeSubscription(txn, groupId);
|
db.removeSubscription(txn, groupId);
|
||||||
db.commitTransaction(txn);
|
db.commitTransaction(txn);
|
||||||
db.close();
|
db.close();
|
||||||
@@ -138,6 +148,7 @@ public class H2DatabaseTest extends TestCase {
|
|||||||
assertEquals(Collections.emptyMap(), db.getTransports(txn, contactId));
|
assertEquals(Collections.emptyMap(), db.getTransports(txn, contactId));
|
||||||
assertFalse(db.containsSubscription(txn, groupId));
|
assertFalse(db.containsSubscription(txn, groupId));
|
||||||
assertFalse(db.containsMessage(txn, messageId));
|
assertFalse(db.containsMessage(txn, messageId));
|
||||||
|
assertFalse(db.containsMessage(txn, privateMessageId));
|
||||||
db.commitTransaction(txn);
|
db.commitTransaction(txn);
|
||||||
db.close();
|
db.close();
|
||||||
}
|
}
|
||||||
@@ -189,7 +200,7 @@ public class H2DatabaseTest extends TestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testUnsubscribingRemovesMessage() throws DbException {
|
public void testUnsubscribingRemovesGroupMessage() throws DbException {
|
||||||
Database<Connection> db = open(false);
|
Database<Connection> db = open(false);
|
||||||
Connection txn = db.startTransaction();
|
Connection txn = db.startTransaction();
|
||||||
|
|
||||||
@@ -197,7 +208,7 @@ public class H2DatabaseTest extends TestCase {
|
|||||||
db.addSubscription(txn, group);
|
db.addSubscription(txn, group);
|
||||||
db.addGroupMessage(txn, message);
|
db.addGroupMessage(txn, message);
|
||||||
|
|
||||||
// Unsubscribing from the group should delete the message
|
// Unsubscribing from the group should remove the message
|
||||||
assertTrue(db.containsMessage(txn, messageId));
|
assertTrue(db.containsMessage(txn, messageId));
|
||||||
db.removeSubscription(txn, groupId);
|
db.removeSubscription(txn, groupId);
|
||||||
assertFalse(db.containsMessage(txn, messageId));
|
assertFalse(db.containsMessage(txn, messageId));
|
||||||
@@ -207,7 +218,93 @@ public class H2DatabaseTest extends TestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testSendableMessagesMustBeSendable() throws DbException {
|
public void testRemovingContactRemovesPrivateMessage() throws DbException {
|
||||||
|
Database<Connection> db = open(false);
|
||||||
|
Connection txn = db.startTransaction();
|
||||||
|
|
||||||
|
// Add a contact and store a private message
|
||||||
|
assertEquals(contactId, db.addContact(txn, transports, secret));
|
||||||
|
db.addPrivateMessage(txn, privateMessage, contactId);
|
||||||
|
|
||||||
|
// Removing the contact should remove the message
|
||||||
|
assertTrue(db.containsMessage(txn, privateMessageId));
|
||||||
|
db.removeContact(txn, contactId);
|
||||||
|
assertFalse(db.containsMessage(txn, privateMessageId));
|
||||||
|
|
||||||
|
db.commitTransaction(txn);
|
||||||
|
db.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testSendablePrivateMessagesMustHaveStatusNew()
|
||||||
|
throws DbException {
|
||||||
|
Database<Connection> db = open(false);
|
||||||
|
Connection txn = db.startTransaction();
|
||||||
|
|
||||||
|
// Add a contact and store a private message
|
||||||
|
assertEquals(contactId, db.addContact(txn, transports, secret));
|
||||||
|
db.addPrivateMessage(txn, privateMessage, contactId);
|
||||||
|
|
||||||
|
// The message has no status yet, so it should not be sendable
|
||||||
|
assertFalse(db.hasSendableMessages(txn, contactId));
|
||||||
|
Iterator<MessageId> it =
|
||||||
|
db.getSendableMessages(txn, contactId, ONE_MEGABYTE).iterator();
|
||||||
|
assertFalse(it.hasNext());
|
||||||
|
|
||||||
|
// Changing the status to NEW should make the message sendable
|
||||||
|
db.setStatus(txn, contactId, privateMessageId, Status.NEW);
|
||||||
|
assertTrue(db.hasSendableMessages(txn, contactId));
|
||||||
|
it = db.getSendableMessages(txn, contactId, ONE_MEGABYTE).iterator();
|
||||||
|
assertTrue(it.hasNext());
|
||||||
|
assertEquals(privateMessageId, it.next());
|
||||||
|
assertFalse(it.hasNext());
|
||||||
|
|
||||||
|
// Changing the status to SENT should make the message unsendable
|
||||||
|
db.setStatus(txn, contactId, privateMessageId, Status.SENT);
|
||||||
|
assertFalse(db.hasSendableMessages(txn, contactId));
|
||||||
|
it = db.getSendableMessages(txn, contactId, ONE_MEGABYTE).iterator();
|
||||||
|
assertFalse(it.hasNext());
|
||||||
|
|
||||||
|
// Changing the status to SEEN should also make the message unsendable
|
||||||
|
db.setStatus(txn, contactId, privateMessageId, Status.SEEN);
|
||||||
|
it = db.getSendableMessages(txn, contactId, ONE_MEGABYTE).iterator();
|
||||||
|
assertFalse(it.hasNext());
|
||||||
|
|
||||||
|
db.commitTransaction(txn);
|
||||||
|
db.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testSendablePrivateMessagesMustFitCapacity()
|
||||||
|
throws DbException {
|
||||||
|
Database<Connection> db = open(false);
|
||||||
|
Connection txn = db.startTransaction();
|
||||||
|
|
||||||
|
// Add a contact and store a private message
|
||||||
|
assertEquals(contactId, db.addContact(txn, transports, secret));
|
||||||
|
db.addPrivateMessage(txn, privateMessage, contactId);
|
||||||
|
db.setStatus(txn, contactId, privateMessageId, Status.NEW);
|
||||||
|
|
||||||
|
// The message is sendable, but too large to send
|
||||||
|
assertTrue(db.hasSendableMessages(txn, contactId));
|
||||||
|
Iterator<MessageId> it =
|
||||||
|
db.getSendableMessages(txn, contactId, size - 1).iterator();
|
||||||
|
assertFalse(it.hasNext());
|
||||||
|
|
||||||
|
// The message is just the right size to send
|
||||||
|
assertTrue(db.hasSendableMessages(txn, contactId));
|
||||||
|
it = db.getSendableMessages(txn, contactId, size).iterator();
|
||||||
|
assertTrue(it.hasNext());
|
||||||
|
assertEquals(privateMessageId, it.next());
|
||||||
|
assertFalse(it.hasNext());
|
||||||
|
|
||||||
|
db.commitTransaction(txn);
|
||||||
|
db.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testSendableGroupMessagesMustHavePositiveSendability()
|
||||||
|
throws DbException {
|
||||||
Database<Connection> db = open(false);
|
Database<Connection> db = open(false);
|
||||||
Connection txn = db.startTransaction();
|
Connection txn = db.startTransaction();
|
||||||
|
|
||||||
@@ -244,7 +341,8 @@ public class H2DatabaseTest extends TestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testSendableMessagesMustHaveStatusNew() throws DbException {
|
public void testSendableGroupMessagesMustHaveStatusNew()
|
||||||
|
throws DbException {
|
||||||
Database<Connection> db = open(false);
|
Database<Connection> db = open(false);
|
||||||
Connection txn = db.startTransaction();
|
Connection txn = db.startTransaction();
|
||||||
|
|
||||||
@@ -286,7 +384,7 @@ public class H2DatabaseTest extends TestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testSendableMessagesMustBeSubscribed() throws DbException {
|
public void testSendableGroupMessagesMustBeSubscribed() throws DbException {
|
||||||
Database<Connection> db = open(false);
|
Database<Connection> db = open(false);
|
||||||
Connection txn = db.startTransaction();
|
Connection txn = db.startTransaction();
|
||||||
|
|
||||||
@@ -324,7 +422,7 @@ public class H2DatabaseTest extends TestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testSendableMessagesMustBeNewerThanSubscriptions()
|
public void testSendableGroupMessagesMustBeNewerThanSubscriptions()
|
||||||
throws DbException {
|
throws DbException {
|
||||||
Database<Connection> db = open(false);
|
Database<Connection> db = open(false);
|
||||||
Connection txn = db.startTransaction();
|
Connection txn = db.startTransaction();
|
||||||
@@ -360,7 +458,7 @@ public class H2DatabaseTest extends TestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testSendableMessagesMustFitCapacity() throws DbException {
|
public void testSendableGroupMessagesMustFitCapacity() throws DbException {
|
||||||
Database<Connection> db = open(false);
|
Database<Connection> db = open(false);
|
||||||
Connection txn = db.startTransaction();
|
Connection txn = db.startTransaction();
|
||||||
|
|
||||||
@@ -391,7 +489,7 @@ public class H2DatabaseTest extends TestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testSendableMessagesMustBeVisible() throws DbException {
|
public void testSendableGroupMessagesMustBeVisible() throws DbException {
|
||||||
Database<Connection> db = open(false);
|
Database<Connection> db = open(false);
|
||||||
Connection txn = db.startTransaction();
|
Connection txn = db.startTransaction();
|
||||||
|
|
||||||
@@ -538,7 +636,7 @@ public class H2DatabaseTest extends TestCase {
|
|||||||
db.setSendability(txn, messageId, 1);
|
db.setSendability(txn, messageId, 1);
|
||||||
db.setStatus(txn, contactId, messageId, Status.NEW);
|
db.setStatus(txn, contactId, messageId, Status.NEW);
|
||||||
|
|
||||||
// Get the message and mark it as sent
|
// Retrieve the message from the database and mark it as sent
|
||||||
Iterator<MessageId> it =
|
Iterator<MessageId> it =
|
||||||
db.getSendableMessages(txn, contactId, ONE_MEGABYTE).iterator();
|
db.getSendableMessages(txn, contactId, ONE_MEGABYTE).iterator();
|
||||||
assertTrue(it.hasNext());
|
assertTrue(it.hasNext());
|
||||||
@@ -551,8 +649,10 @@ public class H2DatabaseTest extends TestCase {
|
|||||||
// The message should no longer be sendable
|
// The message should no longer be sendable
|
||||||
it = db.getSendableMessages(txn, contactId, ONE_MEGABYTE).iterator();
|
it = db.getSendableMessages(txn, contactId, ONE_MEGABYTE).iterator();
|
||||||
assertFalse(it.hasNext());
|
assertFalse(it.hasNext());
|
||||||
|
|
||||||
// Pretend that the batch was acked
|
// Pretend that the batch was acked
|
||||||
db.removeAckedBatch(txn, contactId, batchId);
|
db.removeAckedBatch(txn, contactId, batchId);
|
||||||
|
|
||||||
// The message still should not be sendable
|
// The message still should not be sendable
|
||||||
it = db.getSendableMessages(txn, contactId, ONE_MEGABYTE).iterator();
|
it = db.getSendableMessages(txn, contactId, ONE_MEGABYTE).iterator();
|
||||||
assertFalse(it.hasNext());
|
assertFalse(it.hasNext());
|
||||||
@@ -588,8 +688,10 @@ public class H2DatabaseTest extends TestCase {
|
|||||||
// The message should no longer be sendable
|
// The message should no longer be sendable
|
||||||
it = db.getSendableMessages(txn, contactId, ONE_MEGABYTE).iterator();
|
it = db.getSendableMessages(txn, contactId, ONE_MEGABYTE).iterator();
|
||||||
assertFalse(it.hasNext());
|
assertFalse(it.hasNext());
|
||||||
|
|
||||||
// Pretend that the batch was lost
|
// Pretend that the batch was lost
|
||||||
db.removeLostBatch(txn, contactId, batchId);
|
db.removeLostBatch(txn, contactId, batchId);
|
||||||
|
|
||||||
// The message should be sendable again
|
// The message should be sendable again
|
||||||
it = db.getSendableMessages(txn, contactId, ONE_MEGABYTE).iterator();
|
it = db.getSendableMessages(txn, contactId, ONE_MEGABYTE).iterator();
|
||||||
assertTrue(it.hasNext());
|
assertTrue(it.hasNext());
|
||||||
@@ -611,6 +713,7 @@ public class H2DatabaseTest extends TestCase {
|
|||||||
|
|
||||||
// Add a contact
|
// Add a contact
|
||||||
assertEquals(contactId, db.addContact(txn, transports, secret));
|
assertEquals(contactId, db.addContact(txn, transports, secret));
|
||||||
|
|
||||||
// Add some outstanding batches, a few ms apart
|
// Add some outstanding batches, a few ms apart
|
||||||
for(int i = 0; i < ids.length; i++) {
|
for(int i = 0; i < ids.length; i++) {
|
||||||
db.addOutstandingBatch(txn, contactId, ids[i],
|
db.addOutstandingBatch(txn, contactId, ids[i],
|
||||||
@@ -619,6 +722,7 @@ public class H2DatabaseTest extends TestCase {
|
|||||||
Thread.sleep(5);
|
Thread.sleep(5);
|
||||||
} catch(InterruptedException ignored) {}
|
} catch(InterruptedException ignored) {}
|
||||||
}
|
}
|
||||||
|
|
||||||
// The contact acks the batches in reverse order. The first
|
// The contact acks the batches in reverse order. The first
|
||||||
// RETRANSMIT_THRESHOLD - 1 acks should not trigger any retransmissions
|
// RETRANSMIT_THRESHOLD - 1 acks should not trigger any retransmissions
|
||||||
for(int i = 0; i < Database.RETRANSMIT_THRESHOLD - 1; i++) {
|
for(int i = 0; i < Database.RETRANSMIT_THRESHOLD - 1; i++) {
|
||||||
@@ -626,6 +730,7 @@ public class H2DatabaseTest extends TestCase {
|
|||||||
Collection<BatchId> lost = db.getLostBatches(txn, contactId);
|
Collection<BatchId> lost = db.getLostBatches(txn, contactId);
|
||||||
assertEquals(Collections.emptyList(), lost);
|
assertEquals(Collections.emptyList(), lost);
|
||||||
}
|
}
|
||||||
|
|
||||||
// The next ack should trigger the retransmission of the remaining
|
// The next ack should trigger the retransmission of the remaining
|
||||||
// five outstanding batches
|
// five outstanding batches
|
||||||
int index = ids.length - Database.RETRANSMIT_THRESHOLD;
|
int index = ids.length - Database.RETRANSMIT_THRESHOLD;
|
||||||
@@ -650,6 +755,7 @@ public class H2DatabaseTest extends TestCase {
|
|||||||
|
|
||||||
// Add a contact
|
// Add a contact
|
||||||
assertEquals(contactId, db.addContact(txn, transports, secret));
|
assertEquals(contactId, db.addContact(txn, transports, secret));
|
||||||
|
|
||||||
// Add some outstanding batches, a few ms apart
|
// Add some outstanding batches, a few ms apart
|
||||||
for(int i = 0; i < ids.length; i++) {
|
for(int i = 0; i < ids.length; i++) {
|
||||||
db.addOutstandingBatch(txn, contactId, ids[i],
|
db.addOutstandingBatch(txn, contactId, ids[i],
|
||||||
@@ -658,6 +764,7 @@ public class H2DatabaseTest extends TestCase {
|
|||||||
Thread.sleep(5);
|
Thread.sleep(5);
|
||||||
} catch(InterruptedException ignored) {}
|
} catch(InterruptedException ignored) {}
|
||||||
}
|
}
|
||||||
|
|
||||||
// The contact acks the batches in the order they were sent - nothing
|
// The contact acks the batches in the order they were sent - nothing
|
||||||
// should be retransmitted
|
// should be retransmitted
|
||||||
for(int i = 0; i < ids.length; i++) {
|
for(int i = 0; i < ids.length; i++) {
|
||||||
@@ -781,10 +888,12 @@ public class H2DatabaseTest extends TestCase {
|
|||||||
// Sanity check: there should be enough space on disk for this test
|
// Sanity check: there should be enough space on disk for this test
|
||||||
String path = testDir.getAbsolutePath();
|
String path = testDir.getAbsolutePath();
|
||||||
assertTrue(FileSystemUtils.freeSpaceKb(path) * 1024L > MAX_SIZE);
|
assertTrue(FileSystemUtils.freeSpaceKb(path) * 1024L > MAX_SIZE);
|
||||||
|
|
||||||
// The free space should not be more than the allowed maximum size
|
// The free space should not be more than the allowed maximum size
|
||||||
long free = db.getFreeSpace();
|
long free = db.getFreeSpace();
|
||||||
assertTrue(free <= MAX_SIZE);
|
assertTrue(free <= MAX_SIZE);
|
||||||
assertTrue(free > 0);
|
assertTrue(free > 0);
|
||||||
|
|
||||||
// Storing a message should reduce the free space
|
// Storing a message should reduce the free space
|
||||||
Connection txn = db.startTransaction();
|
Connection txn = db.startTransaction();
|
||||||
db.addSubscription(txn, group);
|
db.addSubscription(txn, group);
|
||||||
@@ -872,13 +981,14 @@ public class H2DatabaseTest extends TestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testUpdateTransportPropertiess() throws DbException {
|
public void testUpdateTransportProperties() throws DbException {
|
||||||
Database<Connection> db = open(false);
|
Database<Connection> db = open(false);
|
||||||
Connection txn = db.startTransaction();
|
Connection txn = db.startTransaction();
|
||||||
|
|
||||||
// Add a contact with some transport properties
|
// Add a contact with some transport properties
|
||||||
assertEquals(contactId, db.addContact(txn, transports, secret));
|
assertEquals(contactId, db.addContact(txn, transports, secret));
|
||||||
assertEquals(transports, db.getTransports(txn, contactId));
|
assertEquals(transports, db.getTransports(txn, contactId));
|
||||||
|
|
||||||
// Replace the transport properties
|
// Replace the transport properties
|
||||||
Map<String, Map<String, String>> transports1 =
|
Map<String, Map<String, String>> transports1 =
|
||||||
new TreeMap<String, Map<String, String>>();
|
new TreeMap<String, Map<String, String>>();
|
||||||
@@ -886,15 +996,18 @@ public class H2DatabaseTest extends TestCase {
|
|||||||
transports1.put("bar", Collections.singletonMap("baz", "quux"));
|
transports1.put("bar", Collections.singletonMap("baz", "quux"));
|
||||||
db.setTransports(txn, contactId, transports1, 1);
|
db.setTransports(txn, contactId, transports1, 1);
|
||||||
assertEquals(transports1, db.getTransports(txn, contactId));
|
assertEquals(transports1, db.getTransports(txn, contactId));
|
||||||
|
|
||||||
// Remove the transport properties
|
// Remove the transport properties
|
||||||
db.setTransports(txn, contactId,
|
db.setTransports(txn, contactId,
|
||||||
Collections.<String, Map<String, String>>emptyMap(), 2);
|
Collections.<String, Map<String, String>>emptyMap(), 2);
|
||||||
assertEquals(Collections.emptyMap(), db.getTransports(txn, contactId));
|
assertEquals(Collections.emptyMap(), db.getTransports(txn, contactId));
|
||||||
|
|
||||||
// Set the local transport properties
|
// Set the local transport properties
|
||||||
for(String name : transports.keySet()) {
|
for(String name : transports.keySet()) {
|
||||||
db.setTransportProperties(txn, name, transports.get(name));
|
db.setTransportProperties(txn, name, transports.get(name));
|
||||||
}
|
}
|
||||||
assertEquals(transports, db.getTransports(txn));
|
assertEquals(transports, db.getTransports(txn));
|
||||||
|
|
||||||
// Remove the local transport properties
|
// Remove the local transport properties
|
||||||
for(String name : transports.keySet()) {
|
for(String name : transports.keySet()) {
|
||||||
db.setTransportProperties(txn, name,
|
db.setTransportProperties(txn, name,
|
||||||
@@ -917,9 +1030,11 @@ public class H2DatabaseTest extends TestCase {
|
|||||||
// Set the transport config
|
// Set the transport config
|
||||||
db.setTransportConfig(txn, "foo", config);
|
db.setTransportConfig(txn, "foo", config);
|
||||||
assertEquals(config, db.getTransportConfig(txn, "foo"));
|
assertEquals(config, db.getTransportConfig(txn, "foo"));
|
||||||
|
|
||||||
// Update the transport config
|
// Update the transport config
|
||||||
db.setTransportConfig(txn, "foo", config1);
|
db.setTransportConfig(txn, "foo", config1);
|
||||||
assertEquals(config1, db.getTransportConfig(txn, "foo"));
|
assertEquals(config1, db.getTransportConfig(txn, "foo"));
|
||||||
|
|
||||||
// Remove the transport config
|
// Remove the transport config
|
||||||
db.setTransportConfig(txn, "foo",
|
db.setTransportConfig(txn, "foo",
|
||||||
Collections.<String, String>emptyMap());
|
Collections.<String, String>emptyMap());
|
||||||
@@ -937,6 +1052,7 @@ public class H2DatabaseTest extends TestCase {
|
|||||||
// Add a contact with some transport properties
|
// Add a contact with some transport properties
|
||||||
assertEquals(contactId, db.addContact(txn, transports, secret));
|
assertEquals(contactId, db.addContact(txn, transports, secret));
|
||||||
assertEquals(transports, db.getTransports(txn, contactId));
|
assertEquals(transports, db.getTransports(txn, contactId));
|
||||||
|
|
||||||
// Replace the transport properties using a timestamp of 2
|
// Replace the transport properties using a timestamp of 2
|
||||||
Map<String, Map<String, String>> transports1 =
|
Map<String, Map<String, String>> transports1 =
|
||||||
new TreeMap<String, Map<String, String>>();
|
new TreeMap<String, Map<String, String>>();
|
||||||
@@ -944,12 +1060,14 @@ public class H2DatabaseTest extends TestCase {
|
|||||||
transports1.put("bar", Collections.singletonMap("baz", "quux"));
|
transports1.put("bar", Collections.singletonMap("baz", "quux"));
|
||||||
db.setTransports(txn, contactId, transports1, 2);
|
db.setTransports(txn, contactId, transports1, 2);
|
||||||
assertEquals(transports1, db.getTransports(txn, contactId));
|
assertEquals(transports1, db.getTransports(txn, contactId));
|
||||||
|
|
||||||
// Try to replace the transport properties using a timestamp of 1
|
// Try to replace the transport properties using a timestamp of 1
|
||||||
Map<String, Map<String, String>> transports2 =
|
Map<String, Map<String, String>> transports2 =
|
||||||
new TreeMap<String, Map<String, String>>();
|
new TreeMap<String, Map<String, String>>();
|
||||||
transports2.put("bar", Collections.singletonMap("baz", "quux"));
|
transports2.put("bar", Collections.singletonMap("baz", "quux"));
|
||||||
transports2.put("baz", Collections.singletonMap("quux", "fnord"));
|
transports2.put("baz", Collections.singletonMap("quux", "fnord"));
|
||||||
db.setTransports(txn, contactId, transports2, 1);
|
db.setTransports(txn, contactId, transports2, 1);
|
||||||
|
|
||||||
// The old properties should still be there
|
// The old properties should still be there
|
||||||
assertEquals(transports1, db.getTransports(txn, contactId));
|
assertEquals(transports1, db.getTransports(txn, contactId));
|
||||||
|
|
||||||
@@ -967,10 +1085,12 @@ public class H2DatabaseTest extends TestCase {
|
|||||||
|
|
||||||
// Add a contact
|
// Add a contact
|
||||||
assertEquals(contactId, db.addContact(txn, transports, secret));
|
assertEquals(contactId, db.addContact(txn, transports, secret));
|
||||||
|
|
||||||
// Add some subscriptions
|
// Add some subscriptions
|
||||||
db.setSubscriptions(txn, contactId, subscriptions, 1);
|
db.setSubscriptions(txn, contactId, subscriptions, 1);
|
||||||
assertEquals(Collections.singletonList(group),
|
assertEquals(Collections.singletonList(group),
|
||||||
db.getSubscriptions(txn, contactId));
|
db.getSubscriptions(txn, contactId));
|
||||||
|
|
||||||
// Update the subscriptions
|
// Update the subscriptions
|
||||||
Map<Group, Long> subscriptions1 = Collections.singletonMap(group1, 0L);
|
Map<Group, Long> subscriptions1 = Collections.singletonMap(group1, 0L);
|
||||||
db.setSubscriptions(txn, contactId, subscriptions1, 2);
|
db.setSubscriptions(txn, contactId, subscriptions1, 2);
|
||||||
@@ -992,13 +1112,16 @@ public class H2DatabaseTest extends TestCase {
|
|||||||
|
|
||||||
// Add a contact
|
// Add a contact
|
||||||
assertEquals(contactId, db.addContact(txn, transports, secret));
|
assertEquals(contactId, db.addContact(txn, transports, secret));
|
||||||
|
|
||||||
// Add some subscriptions
|
// Add some subscriptions
|
||||||
db.setSubscriptions(txn, contactId, subscriptions, 2);
|
db.setSubscriptions(txn, contactId, subscriptions, 2);
|
||||||
assertEquals(Collections.singletonList(group),
|
assertEquals(Collections.singletonList(group),
|
||||||
db.getSubscriptions(txn, contactId));
|
db.getSubscriptions(txn, contactId));
|
||||||
|
|
||||||
// Try to update the subscriptions using a timestamp of 1
|
// Try to update the subscriptions using a timestamp of 1
|
||||||
Map<Group, Long> subscriptions1 = Collections.singletonMap(group1, 0L);
|
Map<Group, Long> subscriptions1 = Collections.singletonMap(group1, 0L);
|
||||||
db.setSubscriptions(txn, contactId, subscriptions1, 1);
|
db.setSubscriptions(txn, contactId, subscriptions1, 1);
|
||||||
|
|
||||||
// The old subscriptions should still be there
|
// The old subscriptions should still be there
|
||||||
assertEquals(Collections.singletonList(group),
|
assertEquals(Collections.singletonList(group),
|
||||||
db.getSubscriptions(txn, contactId));
|
db.getSubscriptions(txn, contactId));
|
||||||
@@ -1036,9 +1159,9 @@ public class H2DatabaseTest extends TestCase {
|
|||||||
db.addSubscription(txn, group);
|
db.addSubscription(txn, group);
|
||||||
db.setSubscriptions(txn, contactId, subscriptions, 1);
|
db.setSubscriptions(txn, contactId, subscriptions, 1);
|
||||||
db.addGroupMessage(txn, message);
|
db.addGroupMessage(txn, message);
|
||||||
// Set the sendability to > 0
|
|
||||||
|
// Set the sendability to > 0 and the status to SEEN
|
||||||
db.setSendability(txn, messageId, 1);
|
db.setSendability(txn, messageId, 1);
|
||||||
// Set the status to SEEN
|
|
||||||
db.setStatus(txn, contactId, messageId, Status.SEEN);
|
db.setStatus(txn, contactId, messageId, Status.SEEN);
|
||||||
|
|
||||||
// The message is not sendable because its status is SEEN
|
// The message is not sendable because its status is SEEN
|
||||||
@@ -1059,9 +1182,9 @@ public class H2DatabaseTest extends TestCase {
|
|||||||
db.addSubscription(txn, group);
|
db.addSubscription(txn, group);
|
||||||
db.setSubscriptions(txn, contactId, subscriptions, 1);
|
db.setSubscriptions(txn, contactId, subscriptions, 1);
|
||||||
db.addGroupMessage(txn, message);
|
db.addGroupMessage(txn, message);
|
||||||
// Set the sendability to 0
|
|
||||||
|
// Set the sendability to 0 and the status to NEW
|
||||||
db.setSendability(txn, messageId, 0);
|
db.setSendability(txn, messageId, 0);
|
||||||
// Set the status to NEW
|
|
||||||
db.setStatus(txn, contactId, messageId, Status.NEW);
|
db.setStatus(txn, contactId, messageId, Status.NEW);
|
||||||
|
|
||||||
// The message is not sendable because its sendability is 0
|
// The message is not sendable because its sendability is 0
|
||||||
@@ -1076,17 +1199,17 @@ public class H2DatabaseTest extends TestCase {
|
|||||||
Database<Connection> db = open(false);
|
Database<Connection> db = open(false);
|
||||||
Connection txn = db.startTransaction();
|
Connection txn = db.startTransaction();
|
||||||
|
|
||||||
// Add a contact, subscribe to a group and store a message
|
// Add a contact, subscribe to a group and store a message -
|
||||||
|
// the message is older than the contact's subscription
|
||||||
assertEquals(contactId, db.addContact(txn, transports, secret));
|
assertEquals(contactId, db.addContact(txn, transports, secret));
|
||||||
db.addSubscription(txn, group);
|
db.addSubscription(txn, group);
|
||||||
db.setVisibility(txn, groupId, Collections.singleton(contactId));
|
db.setVisibility(txn, groupId, Collections.singleton(contactId));
|
||||||
// The message is older than the contact's subscription
|
|
||||||
Map<Group, Long> subs = Collections.singletonMap(group, timestamp + 1);
|
Map<Group, Long> subs = Collections.singletonMap(group, timestamp + 1);
|
||||||
db.setSubscriptions(txn, contactId, subs, 1);
|
db.setSubscriptions(txn, contactId, subs, 1);
|
||||||
db.addGroupMessage(txn, message);
|
db.addGroupMessage(txn, message);
|
||||||
// Set the sendability to > 0
|
|
||||||
|
// Set the sendability to > 0 and the status to NEW
|
||||||
db.setSendability(txn, messageId, 1);
|
db.setSendability(txn, messageId, 1);
|
||||||
// Set the status to NEW
|
|
||||||
db.setStatus(txn, contactId, messageId, Status.NEW);
|
db.setStatus(txn, contactId, messageId, Status.NEW);
|
||||||
|
|
||||||
// The message is not sendable because it's too old
|
// The message is not sendable because it's too old
|
||||||
@@ -1107,9 +1230,9 @@ public class H2DatabaseTest extends TestCase {
|
|||||||
db.setVisibility(txn, groupId, Collections.singleton(contactId));
|
db.setVisibility(txn, groupId, Collections.singleton(contactId));
|
||||||
db.setSubscriptions(txn, contactId, subscriptions, 1);
|
db.setSubscriptions(txn, contactId, subscriptions, 1);
|
||||||
db.addGroupMessage(txn, message);
|
db.addGroupMessage(txn, message);
|
||||||
// Set the sendability to > 0
|
|
||||||
|
// Set the sendability to > 0 and the status to NEW
|
||||||
db.setSendability(txn, messageId, 1);
|
db.setSendability(txn, messageId, 1);
|
||||||
// Set the status to NEW
|
|
||||||
db.setStatus(txn, contactId, messageId, Status.NEW);
|
db.setStatus(txn, contactId, messageId, Status.NEW);
|
||||||
|
|
||||||
// The message is sendable so it should be returned
|
// The message is sendable so it should be returned
|
||||||
@@ -1207,6 +1330,7 @@ public class H2DatabaseTest extends TestCase {
|
|||||||
db.setVisibility(txn, groupId, Collections.singleton(contactId));
|
db.setVisibility(txn, groupId, Collections.singleton(contactId));
|
||||||
db.setSubscriptions(txn, contactId, subscriptions, 1);
|
db.setSubscriptions(txn, contactId, subscriptions, 1);
|
||||||
db.addGroupMessage(txn, message);
|
db.addGroupMessage(txn, message);
|
||||||
|
|
||||||
// The message has already been seen by the contact
|
// The message has already been seen by the contact
|
||||||
db.setStatus(txn, contactId, messageId, Status.SEEN);
|
db.setStatus(txn, contactId, messageId, Status.SEEN);
|
||||||
|
|
||||||
@@ -1228,6 +1352,7 @@ public class H2DatabaseTest extends TestCase {
|
|||||||
db.setVisibility(txn, groupId, Collections.singleton(contactId));
|
db.setVisibility(txn, groupId, Collections.singleton(contactId));
|
||||||
db.setSubscriptions(txn, contactId, subscriptions, 1);
|
db.setSubscriptions(txn, contactId, subscriptions, 1);
|
||||||
db.addGroupMessage(txn, message);
|
db.addGroupMessage(txn, message);
|
||||||
|
|
||||||
// The message has not been seen by the contact
|
// The message has not been seen by the contact
|
||||||
db.setStatus(txn, contactId, messageId, Status.NEW);
|
db.setStatus(txn, contactId, messageId, Status.NEW);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user