Include meek bridge in test and mark it as essential.

This commit is contained in:
akwizgran
2021-12-13 11:56:52 +00:00
parent 75cc19e578
commit d5b2ebdb23

View File

@@ -13,6 +13,7 @@ import org.briarproject.bramble.api.system.Clock;
import org.briarproject.bramble.api.system.LocationUtils; import org.briarproject.bramble.api.system.LocationUtils;
import org.briarproject.bramble.api.system.ResourceProvider; import org.briarproject.bramble.api.system.ResourceProvider;
import org.briarproject.bramble.api.system.WakefulIoExecutor; import org.briarproject.bramble.api.system.WakefulIoExecutor;
import org.briarproject.bramble.plugin.tor.CircumventionProvider.BridgeType;
import org.briarproject.bramble.test.BrambleJavaIntegrationTestComponent; import org.briarproject.bramble.test.BrambleJavaIntegrationTestComponent;
import org.briarproject.bramble.test.BrambleTestCase; import org.briarproject.bramble.test.BrambleTestCase;
import org.briarproject.bramble.test.DaggerBrambleJavaIntegrationTestComponent; import org.briarproject.bramble.test.DaggerBrambleJavaIntegrationTestComponent;
@@ -41,6 +42,7 @@ import static org.briarproject.bramble.api.plugin.Plugin.State.ACTIVE;
import static org.briarproject.bramble.api.plugin.TorConstants.DEFAULT_CONTROL_PORT; import static org.briarproject.bramble.api.plugin.TorConstants.DEFAULT_CONTROL_PORT;
import static org.briarproject.bramble.api.plugin.TorConstants.DEFAULT_SOCKS_PORT; import static org.briarproject.bramble.api.plugin.TorConstants.DEFAULT_SOCKS_PORT;
import static org.briarproject.bramble.plugin.tor.CircumventionProvider.BridgeType.DEFAULT_OBFS4; 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.BridgeType.NON_DEFAULT_OBFS4;
import static org.briarproject.bramble.test.TestUtils.deleteTestDirectory; import static org.briarproject.bramble.test.TestUtils.deleteTestDirectory;
import static org.briarproject.bramble.test.TestUtils.getTestDirectory; import static org.briarproject.bramble.test.TestUtils.getTestDirectory;
@@ -63,10 +65,13 @@ public class BridgeTest extends BrambleTestCase {
CircumventionProvider provider = component.getCircumventionProvider(); CircumventionProvider provider = component.getCircumventionProvider();
List<Params> states = new ArrayList<>(); List<Params> states = new ArrayList<>();
for (String bridge : provider.getBridges(DEFAULT_OBFS4)) { for (String bridge : provider.getBridges(DEFAULT_OBFS4)) {
states.add(new Params(bridge, true, failures)); states.add(new Params(bridge, DEFAULT_OBFS4, failures, false));
} }
for (String bridge : provider.getBridges(NON_DEFAULT_OBFS4)) { for (String bridge : provider.getBridges(NON_DEFAULT_OBFS4)) {
states.add(new Params(bridge, false, failures)); states.add(new Params(bridge, NON_DEFAULT_OBFS4, failures, false));
}
for (String bridge : provider.getBridges(MEEK)) {
states.add(new Params(bridge, MEEK, failures, true));
} }
return states; return states;
} }
@@ -100,16 +105,12 @@ public class BridgeTest extends BrambleTestCase {
CryptoComponent crypto; CryptoComponent crypto;
private final File torDir = getTestDirectory(); private final File torDir = getTestDirectory();
private final String bridge; private final Params params;
private final boolean isDefault;
private final AtomicInteger failures;
private UnixTorPluginFactory factory; private UnixTorPluginFactory factory;
public BridgeTest(Params params) { public BridgeTest(Params params) {
bridge = params.bridge; this.params = params;
isDefault = params.isDefault;
failures = params.failures;
} }
@Before @Before
@@ -143,12 +144,12 @@ public class BridgeTest extends BrambleTestCase {
@Override @Override
public BridgeType getBestBridgeType(String countryCode) { public BridgeType getBestBridgeType(String countryCode) {
return isDefault ? DEFAULT_OBFS4 : NON_DEFAULT_OBFS4; return params.bridgeType;
} }
@Override @Override
public List<String> getBridges(BridgeType bridgeType) { public List<String> getBridges(BridgeType bridgeType) {
return singletonList(bridge); return singletonList(params.bridge);
} }
}; };
factory = new UnixTorPluginFactory(ioExecutor, wakefulIoExecutor, factory = new UnixTorPluginFactory(ioExecutor, wakefulIoExecutor,
@@ -170,7 +171,7 @@ public class BridgeTest extends BrambleTestCase {
assertNotNull(duplexPlugin); assertNotNull(duplexPlugin);
UnixTorPlugin plugin = (UnixTorPlugin) duplexPlugin; UnixTorPlugin plugin = (UnixTorPlugin) duplexPlugin;
LOG.warning("Testing " + bridge); LOG.warning("Testing " + params.bridge);
try { try {
plugin.start(); plugin.start();
long start = clock.currentTimeMillis(); long start = clock.currentTimeMillis();
@@ -180,8 +181,11 @@ public class BridgeTest extends BrambleTestCase {
} }
if (plugin.getState() != ACTIVE) { if (plugin.getState() != ACTIVE) {
LOG.warning("Could not connect to Tor within timeout"); LOG.warning("Could not connect to Tor within timeout");
if (failures.incrementAndGet() > NUM_FAILURES_ALLOWED) { if (params.failures.incrementAndGet() > NUM_FAILURES_ALLOWED) {
fail(failures.get() + " bridges are unreachable"); fail(params.failures.get() + " bridges are unreachable");
}
if (params.mustSucceed) {
fail("essential bridge is unreachable");
} }
} }
} finally { } finally {
@@ -192,14 +196,16 @@ public class BridgeTest extends BrambleTestCase {
private static class Params { private static class Params {
private final String bridge; private final String bridge;
private final boolean isDefault; private final BridgeType bridgeType;
private final AtomicInteger failures; private final AtomicInteger failures;
private final boolean mustSucceed;
private Params(String bridge, boolean isDefault, private Params(String bridge, BridgeType bridgeType,
AtomicInteger failures) { AtomicInteger failures, boolean mustSucceed) {
this.bridge = bridge; this.bridge = bridge;
this.isDefault = isDefault; this.bridgeType = bridgeType;
this.failures = failures; this.failures = failures;
this.mustSucceed = mustSucceed;
} }
} }
} }