From 4a67cf3ce781adcca417a5a074df49436810313f Mon Sep 17 00:00:00 2001 From: akwizgran Date: Mon, 17 Jun 2019 10:22:08 +0100 Subject: [PATCH] Don't cache default state when adding pending contact. This can overwrite the initial state broadcast by the rendezvous poller. --- .../bramble/contact/ContactManagerImpl.java | 1 - .../ContactExchangeIntegrationTest.java | 30 +++++++++++++++++-- 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/bramble-core/src/main/java/org/briarproject/bramble/contact/ContactManagerImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/contact/ContactManagerImpl.java index f3138fd75..a03206ad2 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/contact/ContactManagerImpl.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/contact/ContactManagerImpl.java @@ -147,7 +147,6 @@ class ContactManagerImpl implements ContactManager, EventListener { } finally { db.endTransaction(txn); } - states.put(p.getId(), WAITING_FOR_CONNECTION); return p; } diff --git a/bramble-core/src/test/java/org/briarproject/bramble/contact/ContactExchangeIntegrationTest.java b/bramble-core/src/test/java/org/briarproject/bramble/contact/ContactExchangeIntegrationTest.java index 0409571f9..4bf7ae48d 100644 --- a/bramble-core/src/test/java/org/briarproject/bramble/contact/ContactExchangeIntegrationTest.java +++ b/bramble-core/src/test/java/org/briarproject/bramble/contact/ContactExchangeIntegrationTest.java @@ -6,11 +6,15 @@ import org.briarproject.bramble.api.contact.ContactManager; import org.briarproject.bramble.api.contact.PendingContact; import org.briarproject.bramble.api.contact.PendingContactState; import org.briarproject.bramble.api.contact.event.ContactAddedEvent; +import org.briarproject.bramble.api.contact.event.PendingContactStateChangedEvent; import org.briarproject.bramble.api.crypto.PublicKey; import org.briarproject.bramble.api.crypto.SecretKey; +import org.briarproject.bramble.api.event.Event; +import org.briarproject.bramble.api.event.EventListener; import org.briarproject.bramble.api.identity.Identity; import org.briarproject.bramble.api.identity.IdentityManager; import org.briarproject.bramble.api.lifecycle.LifecycleManager; +import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.test.BrambleTestCase; import org.briarproject.bramble.test.TestDatabaseConfigModule; import org.briarproject.bramble.test.TestDuplexTransportConnection; @@ -27,7 +31,7 @@ import static java.util.concurrent.TimeUnit.MILLISECONDS; import static junit.framework.TestCase.assertNotNull; import static junit.framework.TestCase.assertNull; import static junit.framework.TestCase.fail; -import static org.briarproject.bramble.api.contact.PendingContactState.WAITING_FOR_CONNECTION; +import static org.briarproject.bramble.api.contact.PendingContactState.OFFLINE; import static org.briarproject.bramble.test.TestDuplexTransportConnection.createPair; import static org.briarproject.bramble.test.TestPluginConfigModule.DUPLEX_TRANSPORT_ID; import static org.briarproject.bramble.test.TestUtils.deleteTestDirectory; @@ -188,9 +192,14 @@ public class ContactExchangeIntegrationTest extends BrambleTestCase { private PendingContact addPendingContact( ContactExchangeIntegrationTestComponent local, ContactExchangeIntegrationTestComponent remote) throws Exception { + EventWaiter waiter = new EventWaiter(); + local.getEventBus().addListener(waiter); String link = remote.getContactManager().getHandshakeLink(); String alias = remote.getIdentityManager().getLocalAuthor().getName(); - return local.getContactManager().addPendingContact(link, alias); + PendingContact pendingContact = + local.getContactManager().addPendingContact(link, alias); + waiter.latch.await(TIMEOUT, MILLISECONDS); + return pendingContact; } private void assertContacts(boolean verified, @@ -237,7 +246,7 @@ public class ContactExchangeIntegrationTest extends BrambleTestCase { assertEquals(1, pairs.size()); Pair pair = pairs.iterator().next(); - assertEquals(WAITING_FOR_CONNECTION, pair.getSecond()); + assertEquals(OFFLINE, pair.getSecond()); PendingContact pendingContact = pair.getFirst(); assertEquals(expectedIdentity.getLocalAuthor().getName(), pendingContact.getAlias()); @@ -261,4 +270,19 @@ public class ContactExchangeIntegrationTest extends BrambleTestCase { tearDown(bob); deleteTestDirectory(testDir); } + + @NotNullByDefault + private static class EventWaiter implements EventListener { + + private final CountDownLatch latch = new CountDownLatch(1); + + @Override + public void eventOccurred(Event e) { + if (e instanceof PendingContactStateChangedEvent) { + PendingContactStateChangedEvent p = + (PendingContactStateChangedEvent) e; + if (p.getPendingContactState() == OFFLINE) latch.countDown(); + } + } + } }