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 1a92ed970cd4c5b879003b2b7680d524e2b4412f..52ffb400f5e289fe9bd3f30f989d55c39c9f4294 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
@@ -30,6 +30,7 @@ import org.junit.runners.Parameterized.Parameters;
 
 import java.io.File;
 import java.util.ArrayList;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 import java.util.TreeSet;
@@ -198,6 +199,11 @@ public class BridgeTest extends BrambleTestCase {
 
 	@Test
 	public void testBridges() throws Exception {
+		if (params.stats.hasSucceeded(params.bridge)) {
+			LOG.info("Skipping previously successful bridge: " + params.bridge);
+			return;
+		}
+
 		DuplexPlugin duplexPlugin =
 				factory.createPlugin(new TestPluginCallback());
 		assertNotNull(duplexPlugin);
@@ -209,10 +215,13 @@ public class BridgeTest extends BrambleTestCase {
 			long start = clock.currentTimeMillis();
 			long timeout = params.bridgeType == MEEK ? MEEK_TIMEOUT : TIMEOUT;
 			while (clock.currentTimeMillis() - start < timeout) {
-				if (plugin.getState() == ACTIVE) return;
+				if (plugin.getState() == ACTIVE) break;
 				clock.sleep(500);
 			}
-			if (plugin.getState() != ACTIVE) {
+			if (plugin.getState() == ACTIVE) {
+				LOG.info("Connected to Tor: " + params.bridge);
+				params.stats.countSuccess(params.bridge);
+			} else {
 				LOG.warning("Could not connect to Tor within timeout: "
 						+ params.bridge);
 				params.stats.countFailure(params.bridge, params.essential);
@@ -240,11 +249,21 @@ public class BridgeTest extends BrambleTestCase {
 
 	private static class Stats {
 
+		@GuardedBy("this")
+		private final Set<String> successes = new HashSet<>();
 		@GuardedBy("this")
 		private final Multiset<String> failures = new Multiset<>();
 		@GuardedBy("this")
 		private final Set<String> unreachable = new TreeSet<>();
 
+		private synchronized boolean hasSucceeded(String bridge) {
+			return successes.contains(bridge);
+		}
+
+		private synchronized  void countSuccess(String bridge) {
+			successes.add(bridge);
+		}
+
 		private synchronized void countFailure(String bridge,
 				boolean essential) {
 			if (failures.add(bridge) == ATTEMPTS_PER_BRIDGE) {