From e0e2c0cc89e2ff7420815a6827f65ec606a2a940 Mon Sep 17 00:00:00 2001 From: akwizgran Date: Tue, 7 Dec 2021 10:33:16 +0000 Subject: [PATCH] Add unit test. --- .../plugin/tor/CircumventionProvider.java | 4 +- .../plugin/tor/CircumventionProviderImpl.java | 4 ++ .../plugin/tor/CircumventionProviderTest.java | 68 +++++++++++++++++++ .../bramble/plugin/tor/BridgeTest.java | 2 + 4 files changed, 76 insertions(+), 2 deletions(-) create mode 100644 bramble-core/src/test/java/org/briarproject/bramble/plugin/tor/CircumventionProviderTest.java diff --git a/bramble-core/src/main/java/org/briarproject/bramble/plugin/tor/CircumventionProvider.java b/bramble-core/src/main/java/org/briarproject/bramble/plugin/tor/CircumventionProvider.java index f4a7b181f..db766324a 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/plugin/tor/CircumventionProvider.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/plugin/tor/CircumventionProvider.java @@ -1,11 +1,11 @@ package org.briarproject.bramble.plugin.tor; import org.briarproject.bramble.api.lifecycle.IoExecutor; +import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import java.util.List; -// TODO: Create a module for this so it doesn't have to be public - +@NotNullByDefault public interface CircumventionProvider { enum BridgeType { diff --git a/bramble-core/src/main/java/org/briarproject/bramble/plugin/tor/CircumventionProviderImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/plugin/tor/CircumventionProviderImpl.java index 2874c9823..c05e78bd0 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/plugin/tor/CircumventionProviderImpl.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/plugin/tor/CircumventionProviderImpl.java @@ -1,6 +1,7 @@ package org.briarproject.bramble.plugin.tor; import org.briarproject.bramble.api.lifecycle.IoExecutor; +import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import java.io.InputStream; import java.util.ArrayList; @@ -9,6 +10,7 @@ import java.util.List; import java.util.Scanner; import java.util.Set; +import javax.annotation.concurrent.Immutable; import javax.inject.Inject; import static java.util.Arrays.asList; @@ -17,6 +19,8 @@ import static org.briarproject.bramble.plugin.tor.CircumventionProvider.BridgeTy import static org.briarproject.bramble.plugin.tor.CircumventionProvider.BridgeType.MEEK; import static org.briarproject.bramble.plugin.tor.CircumventionProvider.BridgeType.NON_DEFAULT_OBFS4; +@Immutable +@NotNullByDefault class CircumventionProviderImpl implements CircumventionProvider { private final static String BRIDGE_FILE_NAME = "bridges"; diff --git a/bramble-core/src/test/java/org/briarproject/bramble/plugin/tor/CircumventionProviderTest.java b/bramble-core/src/test/java/org/briarproject/bramble/plugin/tor/CircumventionProviderTest.java new file mode 100644 index 000000000..caecdd453 --- /dev/null +++ b/bramble-core/src/test/java/org/briarproject/bramble/plugin/tor/CircumventionProviderTest.java @@ -0,0 +1,68 @@ +package org.briarproject.bramble.plugin.tor; + +import org.briarproject.bramble.test.BrambleTestCase; +import org.junit.Test; + +import java.util.HashSet; +import java.util.Set; + +import static java.util.Arrays.asList; +import static org.briarproject.bramble.plugin.tor.CircumventionProvider.BLOCKED; +import static org.briarproject.bramble.plugin.tor.CircumventionProvider.BRIDGES; +import static org.briarproject.bramble.plugin.tor.CircumventionProvider.BridgeType.DEFAULT_OBFS4; +import static org.briarproject.bramble.plugin.tor.CircumventionProvider.BridgeType.MEEK; +import static org.briarproject.bramble.plugin.tor.CircumventionProvider.BridgeType.NON_DEFAULT_OBFS4; +import static org.briarproject.bramble.plugin.tor.CircumventionProvider.DEFAULT_OBFS4_BRIDGES; +import static org.briarproject.bramble.plugin.tor.CircumventionProvider.MEEK_BRIDGES; +import static org.briarproject.bramble.plugin.tor.CircumventionProvider.NON_DEFAULT_OBFS4_BRIDGES; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +public class CircumventionProviderTest extends BrambleTestCase { + + private final CircumventionProvider provider = + new CircumventionProviderImpl(); + + @Test + public void testInvariants() { + Set blocked = new HashSet<>(asList(BLOCKED)); + Set bridges = new HashSet<>(asList(BRIDGES)); + Set defaultObfs4Bridges = + new HashSet<>(asList(DEFAULT_OBFS4_BRIDGES)); + Set nonDefaultObfs4Bridges = + new HashSet<>(asList(NON_DEFAULT_OBFS4_BRIDGES)); + Set meekBridges = new HashSet<>(asList(MEEK_BRIDGES)); + // BRIDGES should be a subset of BLOCKED + assertTrue(blocked.containsAll(bridges)); + // BRIDGES should be the union of the bridge type sets + Set union = new HashSet<>(defaultObfs4Bridges); + union.addAll(nonDefaultObfs4Bridges); + union.addAll(meekBridges); + assertEquals(bridges, union); + // The bridge type sets should not overlap + assertEmptyIntersection(defaultObfs4Bridges, nonDefaultObfs4Bridges); + assertEmptyIntersection(defaultObfs4Bridges, meekBridges); + assertEmptyIntersection(nonDefaultObfs4Bridges, meekBridges); + } + + @Test + public void testGetBestBridgeType() { + for (String country : DEFAULT_OBFS4_BRIDGES) { + assertEquals(DEFAULT_OBFS4, provider.getBestBridgeType(country)); + } + for (String country : NON_DEFAULT_OBFS4_BRIDGES) { + assertEquals(NON_DEFAULT_OBFS4, + provider.getBestBridgeType(country)); + } + for (String country : MEEK_BRIDGES) { + assertEquals(MEEK, provider.getBestBridgeType(country)); + } + assertEquals(DEFAULT_OBFS4, provider.getBestBridgeType("ZZ")); + } + + private void assertEmptyIntersection(Set a, Set b) { + Set intersection = new HashSet<>(a); + intersection.retainAll(b); + assertTrue(intersection.isEmpty()); + } +} diff --git a/bramble-java/src/test/java/org/briarproject/bramble/plugin/tor/BridgeTest.java b/bramble-java/src/test/java/org/briarproject/bramble/plugin/tor/BridgeTest.java index c3b6d41a5..f46d1c085 100644 --- a/bramble-java/src/test/java/org/briarproject/bramble/plugin/tor/BridgeTest.java +++ b/bramble-java/src/test/java/org/briarproject/bramble/plugin/tor/BridgeTest.java @@ -6,6 +6,7 @@ import org.briarproject.bramble.api.crypto.CryptoComponent; import org.briarproject.bramble.api.event.EventBus; import org.briarproject.bramble.api.lifecycle.IoExecutor; import org.briarproject.bramble.api.network.NetworkManager; +import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.plugin.BackoffFactory; import org.briarproject.bramble.api.plugin.duplex.DuplexPlugin; import org.briarproject.bramble.api.system.Clock; @@ -128,6 +129,7 @@ public class BridgeTest extends BrambleTestCase { LocationUtils locationUtils = () -> "US"; SocketFactory torSocketFactory = SocketFactory.getDefault(); + @NotNullByDefault CircumventionProvider bridgeProvider = new CircumventionProvider() { @Override public boolean isTorProbablyBlocked(String countryCode) {