From 78d7fc21060daec447573845199300807a14bb49 Mon Sep 17 00:00:00 2001 From: akwizgran Date: Tue, 2 Jun 2020 12:00:06 +0100 Subject: [PATCH] Fix bug in reporting of connection state, add regression tests. --- .../connection/ConnectionRegistryImpl.java | 3 ++- .../ConnectionRegistryImplTest.java | 21 +++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/bramble-core/src/main/java/org/briarproject/bramble/connection/ConnectionRegistryImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/connection/ConnectionRegistryImpl.java index 3b3d11e8b..897ef0880 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/connection/ConnectionRegistryImpl.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/connection/ConnectionRegistryImpl.java @@ -214,7 +214,8 @@ class ConnectionRegistryImpl implements ConnectionRegistry { @Override public boolean isConnected(ContactId c) { synchronized (lock) { - return contactConnections.containsKey(c); + List recs = contactConnections.get(c); + return recs != null && !recs.isEmpty(); } } diff --git a/bramble-core/src/test/java/org/briarproject/bramble/connection/ConnectionRegistryImplTest.java b/bramble-core/src/test/java/org/briarproject/bramble/connection/ConnectionRegistryImplTest.java index 3341efdb9..6a2821219 100644 --- a/bramble-core/src/test/java/org/briarproject/bramble/connection/ConnectionRegistryImplTest.java +++ b/bramble-core/src/test/java/org/briarproject/bramble/connection/ConnectionRegistryImplTest.java @@ -74,6 +74,10 @@ public class ConnectionRegistryImplTest extends BrambleMockTestCase { assertEquals(emptyList(), c.getConnectedOrBetterContacts(transportId2)); assertEquals(emptyList(), c.getConnectedContacts(transportId3)); assertEquals(emptyList(), c.getConnectedOrBetterContacts(transportId3)); + assertFalse(c.isConnected(contactId1)); + assertFalse(c.isConnected(contactId1, transportId1)); + assertFalse(c.isConnected(contactId1, transportId2)); + assertFalse(c.isConnected(contactId1, transportId3)); // Check that a registered connection shows up - this should // broadcast a ConnectionOpenedEvent and a ContactConnectedEvent @@ -88,6 +92,8 @@ public class ConnectionRegistryImplTest extends BrambleMockTestCase { c.getConnectedContacts(transportId1)); assertEquals(singletonList(contactId1), c.getConnectedOrBetterContacts(transportId1)); + assertTrue(c.isConnected(contactId1)); + assertTrue(c.isConnected(contactId1, transportId1)); // Register another connection with the same contact and transport - // this should broadcast a ConnectionOpenedEvent and lookup should be @@ -102,6 +108,8 @@ public class ConnectionRegistryImplTest extends BrambleMockTestCase { c.getConnectedContacts(transportId1)); assertEquals(singletonList(contactId1), c.getConnectedOrBetterContacts(transportId1)); + assertTrue(c.isConnected(contactId1)); + assertTrue(c.isConnected(contactId1, transportId1)); // Unregister one of the connections - this should broadcast a // ConnectionClosedEvent and lookup should be unaffected @@ -115,6 +123,8 @@ public class ConnectionRegistryImplTest extends BrambleMockTestCase { c.getConnectedContacts(transportId1)); assertEquals(singletonList(contactId1), c.getConnectedOrBetterContacts(transportId1)); + assertTrue(c.isConnected(contactId1)); + assertTrue(c.isConnected(contactId1, transportId1)); // Unregister the other connection - this should broadcast a // ConnectionClosedEvent and a ContactDisconnectedEvent @@ -128,6 +138,8 @@ public class ConnectionRegistryImplTest extends BrambleMockTestCase { assertEquals(emptyList(), c.getConnectedContacts(transportId1)); assertEquals(emptyList(), c.getConnectedOrBetterContacts(transportId1)); + assertFalse(c.isConnected(contactId1)); + assertFalse(c.isConnected(contactId1, transportId1)); // Try to unregister the connection again - exception should be thrown try { @@ -163,6 +175,15 @@ public class ConnectionRegistryImplTest extends BrambleMockTestCase { c.registerConnection(contactId2, transportId2, conn3, true); context.assertIsSatisfied(); + assertTrue(c.isConnected(contactId1)); + assertTrue(c.isConnected(contactId2)); + + assertTrue(c.isConnected(contactId1, transportId1)); + assertFalse(c.isConnected(contactId1, transportId2)); + + assertTrue(c.isConnected(contactId2, transportId1)); + assertTrue(c.isConnected(contactId2, transportId2)); + Collection connected = c.getConnectedContacts(transportId1); assertEquals(2, connected.size()); assertTrue(connected.contains(contactId1));