Broadcast event when auto delete timer is mirrored

This commit is contained in:
Torsten Grote
2020-12-15 15:23:29 -03:00
parent 4ea3ce0e3c
commit 7a3be374c8
3 changed files with 59 additions and 0 deletions

View File

@@ -0,0 +1,28 @@
package org.briarproject.briar.api.autodelete.event;
import org.briarproject.bramble.api.contact.ContactId;
import org.briarproject.bramble.api.event.Event;
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import javax.annotation.concurrent.Immutable;
@Immutable
@NotNullByDefault
public class AutoDeleteTimerMirroredEvent extends Event {
private final ContactId contactId;
private final long newTimer;
public AutoDeleteTimerMirroredEvent(ContactId contactId, long newTimer) {
this.contactId = contactId;
this.newTimer = newTimer;
}
public ContactId getContactId() {
return contactId;
}
public long getNewTimer() {
return newTimer;
}
}

View File

@@ -16,6 +16,7 @@ import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import org.briarproject.bramble.api.sync.Group;
import org.briarproject.bramble.api.sync.GroupFactory;
import org.briarproject.briar.api.autodelete.AutoDeleteManager;
import org.briarproject.briar.api.autodelete.event.AutoDeleteTimerMirroredEvent;
import java.util.logging.Logger;
@@ -155,6 +156,7 @@ class AutoDeleteManagerImpl
LOG.info("Mirroring auto-delete timer " + timer);
}
meta.put(GROUP_KEY_TIMER, timer);
txn.attach(new AutoDeleteTimerMirroredEvent(c, timer));
} else if (timer != oldTimer) {
// Their sent change trumps our unsent change. Mirror their
// timer and clear the previous timer to drop our unsent change
@@ -164,6 +166,7 @@ class AutoDeleteManagerImpl
}
meta.put(GROUP_KEY_TIMER, timer);
meta.put(GROUP_KEY_PREVIOUS_TIMER, NO_PREVIOUS_TIMER);
txn.attach(new AutoDeleteTimerMirroredEvent(c, timer));
}
// Always update the timestamp
meta.put(GROUP_KEY_TIMESTAMP, timestamp);

View File

@@ -5,11 +5,15 @@ import org.briarproject.bramble.api.client.ContactGroupFactory;
import org.briarproject.bramble.api.contact.Contact;
import org.briarproject.bramble.api.data.BdfDictionary;
import org.briarproject.bramble.api.data.BdfEntry;
import org.briarproject.bramble.api.db.CommitAction;
import org.briarproject.bramble.api.db.DatabaseComponent;
import org.briarproject.bramble.api.db.EventAction;
import org.briarproject.bramble.api.db.Transaction;
import org.briarproject.bramble.api.event.Event;
import org.briarproject.bramble.api.sync.Group;
import org.briarproject.bramble.api.sync.GroupFactory;
import org.briarproject.bramble.test.BrambleMockTestCase;
import org.briarproject.briar.api.autodelete.event.AutoDeleteTimerMirroredEvent;
import org.jmock.Expectations;
import org.junit.Test;
@@ -27,6 +31,7 @@ import static org.briarproject.briar.autodelete.AutoDeleteConstants.GROUP_KEY_TI
import static org.briarproject.briar.autodelete.AutoDeleteConstants.GROUP_KEY_TIMESTAMP;
import static org.briarproject.briar.autodelete.AutoDeleteConstants.NO_PREVIOUS_TIMER;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
@SuppressWarnings("UnnecessaryLocalVariable") // Using them for readability
public class AutoDeleteManagerImplTest extends BrambleMockTestCase {
@@ -241,6 +246,9 @@ public class AutoDeleteManagerImplTest extends BrambleMockTestCase {
autoDeleteManager.receiveAutoDeleteTimer(txn, contact.getId(),
remoteTimer, remoteTimestamp);
// no events broadcast
assertTrue(txn.getActions().isEmpty());
}
@Test
@@ -270,6 +278,9 @@ public class AutoDeleteManagerImplTest extends BrambleMockTestCase {
autoDeleteManager.receiveAutoDeleteTimer(txn, contact.getId(),
remoteTimer, remoteTimestamp);
// assert that event is broadcast with new timer
assertEvent(txn, remoteTimer);
}
@Test
@@ -299,6 +310,9 @@ public class AutoDeleteManagerImplTest extends BrambleMockTestCase {
autoDeleteManager.receiveAutoDeleteTimer(txn, contact.getId(),
remoteTimer, remoteTimestamp);
// no events broadcast
assertTrue(txn.getActions().isEmpty());
}
@Test
@@ -332,6 +346,9 @@ public class AutoDeleteManagerImplTest extends BrambleMockTestCase {
autoDeleteManager.receiveAutoDeleteTimer(txn, contact.getId(),
newRemoteTimer, remoteTimestamp);
// assert that event is broadcast with new timer
assertEvent(txn, newRemoteTimer);
}
private void expectGetContact(Transaction txn) throws Exception {
@@ -348,4 +365,15 @@ public class AutoDeleteManagerImplTest extends BrambleMockTestCase {
will(returnValue(contactGroup));
}});
}
private void assertEvent(Transaction txn, long timer) {
assertEquals(1, txn.getActions().size());
CommitAction action = txn.getActions().get(0);
assertTrue(action instanceof EventAction);
Event event = ((EventAction) action).getEvent();
assertTrue(event instanceof AutoDeleteTimerMirroredEvent);
AutoDeleteTimerMirroredEvent e = (AutoDeleteTimerMirroredEvent) event;
assertEquals(contact.getId(), e.getContactId());
assertEquals(timer, e.getNewTimer());
}
}