From 68e534348f031af8f1742744d12b02f05b59a5b4 Mon Sep 17 00:00:00 2001 From: Daniel Lublin Date: Fri, 1 Apr 2022 09:14:50 +0200 Subject: [PATCH] Broadcast event when recording connection status of own mailbox --- .../OwnMailboxConnectionStatusEvent.java | 25 +++++++++++++++++++ .../mailbox/MailboxSettingsManagerImpl.java | 10 ++++++-- .../mailbox/MailboxPairingTaskImplTest.java | 3 +++ .../MailboxSettingsManagerImplTest.java | 3 +++ 4 files changed, 39 insertions(+), 2 deletions(-) create mode 100644 bramble-api/src/main/java/org/briarproject/bramble/api/mailbox/OwnMailboxConnectionStatusEvent.java diff --git a/bramble-api/src/main/java/org/briarproject/bramble/api/mailbox/OwnMailboxConnectionStatusEvent.java b/bramble-api/src/main/java/org/briarproject/bramble/api/mailbox/OwnMailboxConnectionStatusEvent.java new file mode 100644 index 000000000..b137052ea --- /dev/null +++ b/bramble-api/src/main/java/org/briarproject/bramble/api/mailbox/OwnMailboxConnectionStatusEvent.java @@ -0,0 +1,25 @@ +package org.briarproject.bramble.api.mailbox; + +import org.briarproject.bramble.api.event.Event; +import org.briarproject.bramble.api.nullsafety.NotNullByDefault; + +import javax.annotation.concurrent.Immutable; + +/** + * An event that is broadcast by {@link MailboxSettingsManager} when + * recording the connection status of own Mailbox. + */ +@Immutable +@NotNullByDefault +public class OwnMailboxConnectionStatusEvent extends Event { + + private final MailboxStatus status; + + public OwnMailboxConnectionStatusEvent(MailboxStatus status) { + this.status = status; + } + + public MailboxStatus getStatus() { + return status; + } +} diff --git a/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxSettingsManagerImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxSettingsManagerImpl.java index fe74bc6b6..a93117870 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxSettingsManagerImpl.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxSettingsManagerImpl.java @@ -8,6 +8,7 @@ import org.briarproject.bramble.api.mailbox.MailboxAuthToken; import org.briarproject.bramble.api.mailbox.MailboxProperties; import org.briarproject.bramble.api.mailbox.MailboxSettingsManager; import org.briarproject.bramble.api.mailbox.MailboxStatus; +import org.briarproject.bramble.api.mailbox.OwnMailboxConnectionStatusEvent; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.settings.Settings; import org.briarproject.bramble.api.settings.SettingsManager; @@ -92,6 +93,8 @@ class MailboxSettingsManagerImpl implements MailboxSettingsManager { s.putLong(SETTINGS_KEY_LAST_SUCCESS, now); s.putInt(SETTINGS_KEY_ATTEMPTS, 0); settingsManager.mergeSettings(txn, s, SETTINGS_NAMESPACE); + MailboxStatus status = new MailboxStatus(now, now, 0); + txn.attach(new OwnMailboxConnectionStatusEvent(status)); } @Override @@ -99,11 +102,14 @@ class MailboxSettingsManagerImpl implements MailboxSettingsManager { throws DbException { Settings oldSettings = settingsManager.getSettings(txn, SETTINGS_NAMESPACE); - int attempts = oldSettings.getInt(SETTINGS_KEY_ATTEMPTS, 0); + int newAttempts = 1 + oldSettings.getInt(SETTINGS_KEY_ATTEMPTS, 0); + long lastSuccess = oldSettings.getLong(SETTINGS_KEY_LAST_SUCCESS, 0); Settings newSettings = new Settings(); newSettings.putLong(SETTINGS_KEY_LAST_ATTEMPT, now); - newSettings.putInt(SETTINGS_KEY_ATTEMPTS, attempts + 1); + newSettings.putInt(SETTINGS_KEY_ATTEMPTS, newAttempts); settingsManager.mergeSettings(txn, newSettings, SETTINGS_NAMESPACE); + MailboxStatus status = new MailboxStatus(now, lastSuccess, newAttempts); + txn.attach(new OwnMailboxConnectionStatusEvent(status)); } @Override diff --git a/bramble-core/src/test/java/org/briarproject/bramble/mailbox/MailboxPairingTaskImplTest.java b/bramble-core/src/test/java/org/briarproject/bramble/mailbox/MailboxPairingTaskImplTest.java index f960e5b24..05b2babee 100644 --- a/bramble-core/src/test/java/org/briarproject/bramble/mailbox/MailboxPairingTaskImplTest.java +++ b/bramble-core/src/test/java/org/briarproject/bramble/mailbox/MailboxPairingTaskImplTest.java @@ -9,6 +9,7 @@ import org.briarproject.bramble.api.mailbox.MailboxPairingState; import org.briarproject.bramble.api.mailbox.MailboxPairingTask; import org.briarproject.bramble.api.mailbox.MailboxProperties; import org.briarproject.bramble.api.mailbox.MailboxSettingsManager; +import org.briarproject.bramble.api.mailbox.OwnMailboxConnectionStatusEvent; import org.briarproject.bramble.api.system.Clock; import org.briarproject.bramble.test.BrambleMockTestCase; import org.briarproject.bramble.test.DbExpectations; @@ -25,6 +26,7 @@ import java.util.concurrent.atomic.AtomicInteger; import static org.briarproject.bramble.test.TestUtils.getRandomBytes; import static org.briarproject.bramble.test.TestUtils.getRandomId; +import static org.briarproject.bramble.test.TestUtils.hasEvent; import static org.briarproject.bramble.util.StringUtils.getRandomString; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; @@ -118,6 +120,7 @@ public class MailboxPairingTaskImplTest extends BrambleMockTestCase { i.getAndIncrement(); }); task.run(); + hasEvent(txn, OwnMailboxConnectionStatusEvent.class); } @Test diff --git a/bramble-core/src/test/java/org/briarproject/bramble/mailbox/MailboxSettingsManagerImplTest.java b/bramble-core/src/test/java/org/briarproject/bramble/mailbox/MailboxSettingsManagerImplTest.java index 21fe9266f..7fd10b1ce 100644 --- a/bramble-core/src/test/java/org/briarproject/bramble/mailbox/MailboxSettingsManagerImplTest.java +++ b/bramble-core/src/test/java/org/briarproject/bramble/mailbox/MailboxSettingsManagerImplTest.java @@ -6,6 +6,7 @@ import org.briarproject.bramble.api.mailbox.MailboxAuthToken; import org.briarproject.bramble.api.mailbox.MailboxProperties; import org.briarproject.bramble.api.mailbox.MailboxSettingsManager; import org.briarproject.bramble.api.mailbox.MailboxStatus; +import org.briarproject.bramble.api.mailbox.OwnMailboxConnectionStatusEvent; import org.briarproject.bramble.api.settings.Settings; import org.briarproject.bramble.api.settings.SettingsManager; import org.briarproject.bramble.test.BrambleMockTestCase; @@ -22,6 +23,7 @@ import static org.briarproject.bramble.mailbox.MailboxSettingsManagerImpl.SETTIN import static org.briarproject.bramble.mailbox.MailboxSettingsManagerImpl.SETTINGS_NAMESPACE; import static org.briarproject.bramble.mailbox.MailboxSettingsManagerImpl.SETTINGS_UPLOADS_NAMESPACE; import static org.briarproject.bramble.test.TestUtils.getRandomId; +import static org.briarproject.bramble.test.TestUtils.hasEvent; import static org.briarproject.bramble.util.StringUtils.getRandomString; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; @@ -144,6 +146,7 @@ public class MailboxSettingsManagerImplTest extends BrambleMockTestCase { }}); manager.recordSuccessfulConnection(txn, now); + hasEvent(txn, OwnMailboxConnectionStatusEvent.class); } @Test