Fetch supported API versions during connectivity check.

This commit is contained in:
akwizgran
2022-06-20 13:55:05 +01:00
parent 54e434d812
commit c39c2ce124
2 changed files with 15 additions and 6 deletions

View File

@@ -4,11 +4,13 @@ import org.briarproject.bramble.api.db.DbException;
import org.briarproject.bramble.api.db.TransactionManager; import org.briarproject.bramble.api.db.TransactionManager;
import org.briarproject.bramble.api.mailbox.MailboxProperties; import org.briarproject.bramble.api.mailbox.MailboxProperties;
import org.briarproject.bramble.api.mailbox.MailboxSettingsManager; import org.briarproject.bramble.api.mailbox.MailboxSettingsManager;
import org.briarproject.bramble.api.mailbox.MailboxVersion;
import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import org.briarproject.bramble.api.system.Clock; import org.briarproject.bramble.api.system.Clock;
import org.briarproject.bramble.mailbox.MailboxApi.ApiException; import org.briarproject.bramble.mailbox.MailboxApi.ApiException;
import java.io.IOException; import java.io.IOException;
import java.util.List;
import java.util.logging.Logger; import java.util.logging.Logger;
import javax.annotation.concurrent.ThreadSafe; import javax.annotation.concurrent.ThreadSafe;
@@ -55,11 +57,12 @@ class OwnMailboxConnectivityChecker extends ConnectivityCheckerImpl {
private boolean checkConnectivityAndStoreResult( private boolean checkConnectivityAndStoreResult(
MailboxProperties properties) throws DbException { MailboxProperties properties) throws DbException {
try { try {
if (!mailboxApi.checkStatus(properties)) throw new ApiException(); List<MailboxVersion> serverSupports =
mailboxApi.getServerSupports(properties);
LOG.info("Own mailbox is reachable"); LOG.info("Own mailbox is reachable");
long now = clock.currentTimeMillis(); long now = clock.currentTimeMillis();
db.transaction(false, txn -> mailboxSettingsManager db.transaction(false, txn -> mailboxSettingsManager
.recordSuccessfulConnection(txn, now)); .recordSuccessfulConnection(txn, now, serverSupports));
// Call the observers and cache the result // Call the observers and cache the result
onConnectivityCheckSucceeded(now); onConnectivityCheckSucceeded(now);
return false; // Don't retry return false; // Don't retry

View File

@@ -5,6 +5,7 @@ import org.briarproject.bramble.api.db.Transaction;
import org.briarproject.bramble.api.db.TransactionManager; import org.briarproject.bramble.api.db.TransactionManager;
import org.briarproject.bramble.api.mailbox.MailboxProperties; import org.briarproject.bramble.api.mailbox.MailboxProperties;
import org.briarproject.bramble.api.mailbox.MailboxSettingsManager; import org.briarproject.bramble.api.mailbox.MailboxSettingsManager;
import org.briarproject.bramble.api.mailbox.MailboxVersion;
import org.briarproject.bramble.api.system.Clock; import org.briarproject.bramble.api.system.Clock;
import org.briarproject.bramble.mailbox.ConnectivityChecker.ConnectivityObserver; import org.briarproject.bramble.mailbox.ConnectivityChecker.ConnectivityObserver;
import org.briarproject.bramble.test.BrambleMockTestCase; import org.briarproject.bramble.test.BrambleMockTestCase;
@@ -15,8 +16,10 @@ import org.jmock.lib.action.DoAllAction;
import org.junit.Test; import org.junit.Test;
import java.io.IOException; import java.io.IOException;
import java.util.List;
import java.util.concurrent.atomic.AtomicReference; import java.util.concurrent.atomic.AtomicReference;
import static java.util.Collections.singletonList;
import static org.briarproject.bramble.api.mailbox.MailboxConstants.CLIENT_SUPPORTS; import static org.briarproject.bramble.api.mailbox.MailboxConstants.CLIENT_SUPPORTS;
import static org.briarproject.bramble.test.TestUtils.getMailboxProperties; import static org.briarproject.bramble.test.TestUtils.getMailboxProperties;
import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertFalse;
@@ -39,6 +42,8 @@ public class OwnMailboxConnectivityCheckerTest extends BrambleMockTestCase {
private final MailboxProperties properties = private final MailboxProperties properties =
getMailboxProperties(true, CLIENT_SUPPORTS); getMailboxProperties(true, CLIENT_SUPPORTS);
private final long now = System.currentTimeMillis(); private final long now = System.currentTimeMillis();
private final List<MailboxVersion> serverSupports =
singletonList(new MailboxVersion(123, 456));
@Test @Test
public void testObserverIsCalledWhenCheckSucceeds() throws Exception { public void testObserverIsCalledWhenCheckSucceeds() throws Exception {
@@ -62,12 +67,13 @@ public class OwnMailboxConnectivityCheckerTest extends BrambleMockTestCase {
// When the check succeeds, the success should be recorded in the DB // When the check succeeds, the success should be recorded in the DB
// and the observer should be called // and the observer should be called
context.checking(new DbExpectations() {{ context.checking(new DbExpectations() {{
oneOf(mailboxApi).checkStatus(properties); oneOf(mailboxApi).getServerSupports(properties);
will(returnValue(true)); will(returnValue(serverSupports));
oneOf(clock).currentTimeMillis(); oneOf(clock).currentTimeMillis();
will(returnValue(now)); will(returnValue(now));
oneOf(db).transaction(with(false), withDbRunnable(txn)); oneOf(db).transaction(with(false), withDbRunnable(txn));
oneOf(mailboxSettingsManager).recordSuccessfulConnection(txn, now); oneOf(mailboxSettingsManager).recordSuccessfulConnection(txn, now,
serverSupports);
oneOf(observer).onConnectivityCheckSucceeded(); oneOf(observer).onConnectivityCheckSucceeded();
}}); }});
@@ -97,7 +103,7 @@ public class OwnMailboxConnectivityCheckerTest extends BrambleMockTestCase {
// When the check fails, the failure should be recorded in the DB and // When the check fails, the failure should be recorded in the DB and
// the observer should not be called // the observer should not be called
context.checking(new DbExpectations() {{ context.checking(new DbExpectations() {{
oneOf(mailboxApi).checkStatus(properties); oneOf(mailboxApi).getServerSupports(properties);
will(throwException(new IOException())); will(throwException(new IOException()));
oneOf(clock).currentTimeMillis(); oneOf(clock).currentTimeMillis();
will(returnValue(now)); will(returnValue(now));