mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-21 15:19:53 +01:00
Unit tests and a bug fix for key management methods in JdbcDatabase.
This commit is contained in:
@@ -2347,7 +2347,7 @@ abstract class JdbcDatabase implements Database<Connection> {
|
|||||||
long period, long centre, byte[] bitmap) throws DbException {
|
long period, long centre, byte[] bitmap) throws DbException {
|
||||||
PreparedStatement ps = null;
|
PreparedStatement ps = null;
|
||||||
try {
|
try {
|
||||||
String sql = "UPDATE secrets SET centre = ? AND bitmap = ?"
|
String sql = "UPDATE secrets SET centre = ?, bitmap = ?"
|
||||||
+ " WHERE contactId = ? AND transportId = ? AND period = ?";
|
+ " WHERE contactId = ? AND transportId = ? AND period = ?";
|
||||||
ps = txn.prepareStatement(sql);
|
ps = txn.prepareStatement(sql);
|
||||||
ps.setLong(1, centre);
|
ps.setLong(1, centre);
|
||||||
|
|||||||
@@ -1720,8 +1720,6 @@ public class H2DatabaseTest extends BriarTestCase {
|
|||||||
db.close();
|
db.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
// FIXME: Test new methods
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testTemporarySecrets() throws Exception {
|
public void testTemporarySecrets() throws Exception {
|
||||||
// Create some temporary secrets
|
// Create some temporary secrets
|
||||||
@@ -1814,6 +1812,127 @@ public class H2DatabaseTest extends BriarTestCase {
|
|||||||
db.close();
|
db.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testIncrementConnectionCounter() throws Exception {
|
||||||
|
// Create a temporary secret
|
||||||
|
Random random = new Random();
|
||||||
|
byte[] secret = new byte[32], bitmap = new byte[4];
|
||||||
|
random.nextBytes(secret);
|
||||||
|
TemporarySecret ts = new TemporarySecret(contactId, transportId, 0L,
|
||||||
|
secret, 0L, 0L, bitmap);
|
||||||
|
|
||||||
|
Database<Connection> db = open(false);
|
||||||
|
Connection txn = db.startTransaction();
|
||||||
|
|
||||||
|
// Add a contact and the temporary secret
|
||||||
|
assertEquals(contactId, db.addContact(txn));
|
||||||
|
db.addSecrets(txn, Arrays.asList(ts));
|
||||||
|
|
||||||
|
// Retrieve the secret
|
||||||
|
Collection<TemporarySecret> secrets = db.getSecrets(txn);
|
||||||
|
assertEquals(1, secrets.size());
|
||||||
|
ts = secrets.iterator().next();
|
||||||
|
assertEquals(contactId, ts.getContactId());
|
||||||
|
assertEquals(transportId, ts.getTransportId());
|
||||||
|
assertEquals(0L, ts.getPeriod());
|
||||||
|
assertArrayEquals(secret, ts.getSecret());
|
||||||
|
assertEquals(0L, ts.getOutgoingConnectionCounter());
|
||||||
|
assertEquals(0L, ts.getWindowCentre());
|
||||||
|
assertArrayEquals(bitmap, ts.getWindowBitmap());
|
||||||
|
|
||||||
|
// Increment the connection counter twice and retrieve the secret again
|
||||||
|
db.incrementConnectionCounter(txn, contactId, transportId, 0L);
|
||||||
|
db.incrementConnectionCounter(txn, contactId, transportId, 0L);
|
||||||
|
secrets = db.getSecrets(txn);
|
||||||
|
assertEquals(1, secrets.size());
|
||||||
|
ts = secrets.iterator().next();
|
||||||
|
assertEquals(contactId, ts.getContactId());
|
||||||
|
assertEquals(transportId, ts.getTransportId());
|
||||||
|
assertEquals(0L, ts.getPeriod());
|
||||||
|
assertArrayEquals(secret, ts.getSecret());
|
||||||
|
assertEquals(2L, ts.getOutgoingConnectionCounter());
|
||||||
|
assertEquals(0L, ts.getWindowCentre());
|
||||||
|
assertArrayEquals(bitmap, ts.getWindowBitmap());
|
||||||
|
|
||||||
|
// Incrementing a nonexistent counter should not throw an exception
|
||||||
|
db.incrementConnectionCounter(txn, contactId, transportId, 1L);
|
||||||
|
// The nonexistent counter should not have been created
|
||||||
|
secrets = db.getSecrets(txn);
|
||||||
|
assertEquals(1, secrets.size());
|
||||||
|
ts = secrets.iterator().next();
|
||||||
|
assertEquals(contactId, ts.getContactId());
|
||||||
|
assertEquals(transportId, ts.getTransportId());
|
||||||
|
assertEquals(0L, ts.getPeriod());
|
||||||
|
assertArrayEquals(secret, ts.getSecret());
|
||||||
|
assertEquals(2L, ts.getOutgoingConnectionCounter());
|
||||||
|
assertEquals(0L, ts.getWindowCentre());
|
||||||
|
assertArrayEquals(bitmap, ts.getWindowBitmap());
|
||||||
|
|
||||||
|
db.commitTransaction(txn);
|
||||||
|
db.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testSetConnectionWindow() throws Exception {
|
||||||
|
// Create a temporary secret
|
||||||
|
Random random = new Random();
|
||||||
|
byte[] secret = new byte[32], bitmap = new byte[4];
|
||||||
|
random.nextBytes(secret);
|
||||||
|
TemporarySecret ts = new TemporarySecret(contactId, transportId, 0L,
|
||||||
|
secret, 0L, 0L, bitmap);
|
||||||
|
|
||||||
|
Database<Connection> db = open(false);
|
||||||
|
Connection txn = db.startTransaction();
|
||||||
|
|
||||||
|
// Add a contact and the temporary secret
|
||||||
|
assertEquals(contactId, db.addContact(txn));
|
||||||
|
db.addSecrets(txn, Arrays.asList(ts));
|
||||||
|
|
||||||
|
// Retrieve the secret
|
||||||
|
Collection<TemporarySecret> secrets = db.getSecrets(txn);
|
||||||
|
assertEquals(1, secrets.size());
|
||||||
|
ts = secrets.iterator().next();
|
||||||
|
assertEquals(contactId, ts.getContactId());
|
||||||
|
assertEquals(transportId, ts.getTransportId());
|
||||||
|
assertEquals(0L, ts.getPeriod());
|
||||||
|
assertArrayEquals(secret, ts.getSecret());
|
||||||
|
assertEquals(0L, ts.getOutgoingConnectionCounter());
|
||||||
|
assertEquals(0L, ts.getWindowCentre());
|
||||||
|
assertArrayEquals(bitmap, ts.getWindowBitmap());
|
||||||
|
|
||||||
|
// Update the connection window and retrieve the secret again
|
||||||
|
db.setConnectionWindow(txn, contactId, transportId, 0L, 1L, bitmap);
|
||||||
|
bitmap[0] = 4;
|
||||||
|
db.setConnectionWindow(txn, contactId, transportId, 0L, 1L, bitmap);
|
||||||
|
secrets = db.getSecrets(txn);
|
||||||
|
assertEquals(1, secrets.size());
|
||||||
|
ts = secrets.iterator().next();
|
||||||
|
assertEquals(contactId, ts.getContactId());
|
||||||
|
assertEquals(transportId, ts.getTransportId());
|
||||||
|
assertEquals(0L, ts.getPeriod());
|
||||||
|
assertArrayEquals(secret, ts.getSecret());
|
||||||
|
assertEquals(0L, ts.getOutgoingConnectionCounter());
|
||||||
|
assertEquals(1L, ts.getWindowCentre());
|
||||||
|
assertArrayEquals(bitmap, ts.getWindowBitmap());
|
||||||
|
|
||||||
|
// Updating a nonexistent window should not throw an exception
|
||||||
|
db.setConnectionWindow(txn, contactId, transportId, 1L, 1L, bitmap);
|
||||||
|
// The nonexistent window should not have been created
|
||||||
|
secrets = db.getSecrets(txn);
|
||||||
|
assertEquals(1, secrets.size());
|
||||||
|
ts = secrets.iterator().next();
|
||||||
|
assertEquals(contactId, ts.getContactId());
|
||||||
|
assertEquals(transportId, ts.getTransportId());
|
||||||
|
assertEquals(0L, ts.getPeriod());
|
||||||
|
assertArrayEquals(secret, ts.getSecret());
|
||||||
|
assertEquals(0L, ts.getOutgoingConnectionCounter());
|
||||||
|
assertEquals(1L, ts.getWindowCentre());
|
||||||
|
assertArrayEquals(bitmap, ts.getWindowBitmap());
|
||||||
|
|
||||||
|
db.commitTransaction(txn);
|
||||||
|
db.close();
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testContactTransports() throws Exception {
|
public void testContactTransports() throws Exception {
|
||||||
// Create some contact transports
|
// Create some contact transports
|
||||||
|
|||||||
Reference in New Issue
Block a user