From 6354e91b552a006286c266af4f9cca1007ed153f Mon Sep 17 00:00:00 2001 From: akwizgran Date: Tue, 4 May 2021 13:13:57 +0100 Subject: [PATCH] Allow BridgeTest to pass if one bridge is unreachable. --- .../bramble/plugin/tor/BridgeTest.java | 35 ++++++++++++++++--- 1 file changed, 30 insertions(+), 5 deletions(-) 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 f18289cc9..99ebef925 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 @@ -23,8 +23,10 @@ import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameters; import java.io.File; +import java.util.ArrayList; import java.util.List; import java.util.concurrent.Executor; +import java.util.concurrent.atomic.AtomicInteger; import java.util.logging.Logger; import javax.inject.Inject; @@ -45,15 +47,22 @@ import static org.junit.Assume.assumeTrue; public class BridgeTest extends BrambleTestCase { @Parameters - public static Iterable data() { + public static Iterable data() { BrambleJavaIntegrationTestComponent component = DaggerBrambleJavaIntegrationTestComponent.builder().build(); BrambleCoreIntegrationTestEagerSingletons.Helper .injectEagerSingletons(component); - return component.getCircumventionProvider().getBridges(false); + // Share a failure counter among all the test instances + AtomicInteger failures = new AtomicInteger(0); + List bridges = + component.getCircumventionProvider().getBridges(false); + List states = new ArrayList<>(bridges.size()); + for (String bridge : bridges) states.add(new Params(bridge, failures)); + return states; } private final static long TIMEOUT = SECONDS.toMillis(60); + private final static int NUM_FAILURES_ALLOWED = 1; private final static Logger LOG = getLogger(BridgeTest.class.getName()); @@ -80,11 +89,13 @@ public class BridgeTest extends BrambleTestCase { private final File torDir = getTestDirectory(); private final String bridge; + private final AtomicInteger failures; private UnixTorPluginFactory factory; - public BridgeTest(String bridge) { - this.bridge = bridge; + public BridgeTest(Params params) { + bridge = params.bridge; + failures = params.failures; } @Before @@ -152,10 +163,24 @@ public class BridgeTest extends BrambleTestCase { clock.sleep(500); } if (plugin.getState() != ACTIVE) { - fail("Could not connect to Tor within timeout."); + LOG.warning("Could not connect to Tor within timeout"); + if (failures.incrementAndGet() > NUM_FAILURES_ALLOWED) { + fail(failures.get() + " bridges are unreachable"); + } } } finally { plugin.stop(); } } + + private static class Params { + + private final String bridge; + private final AtomicInteger failures; + + private Params(String bridge, AtomicInteger failures) { + this.bridge = bridge; + this.failures = failures; + } + } }