mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-18 05:39:53 +01:00
Merge branch 'make-bridge-test-more-robust' into 'master'
Make bridge test more robust See merge request briar/briar!1601
This commit is contained in:
@@ -98,6 +98,7 @@ bridge test:
|
|||||||
allow_failure: true
|
allow_failure: true
|
||||||
script:
|
script:
|
||||||
- OPTIONAL_TESTS=org.briarproject.bramble.plugin.tor.BridgeTest ./gradlew --info bramble-java:test --tests BridgeTest
|
- OPTIONAL_TESTS=org.briarproject.bramble.plugin.tor.BridgeTest ./gradlew --info bramble-java:test --tests BridgeTest
|
||||||
|
timeout: 3h
|
||||||
|
|
||||||
mailbox integration test:
|
mailbox integration test:
|
||||||
extends: .optional_tests
|
extends: .optional_tests
|
||||||
|
|||||||
@@ -1,4 +1,6 @@
|
|||||||
|
d Bridge obfs4 192.95.36.142:443 CDF2E852BF539B82BD10E27E9115A31734E378C2 cert=qUVQ0srL1JI/vO6V6m/24anYXiJD3QP2HgzUKQtQ7GRqqUvs7P+tG43RtAqdhLOALP7DJQ iat-mode=1
|
||||||
d Bridge obfs4 38.229.1.78:80 C8CBDB2464FC9804A69531437BCF2BE31FDD2EE4 cert=Hmyfd2ev46gGY7NoVxA9ngrPF2zCZtzskRTzoWXbxNkzeVnGFPWmrTtILRyqCTjHR+s9dg iat-mode=1
|
d Bridge obfs4 38.229.1.78:80 C8CBDB2464FC9804A69531437BCF2BE31FDD2EE4 cert=Hmyfd2ev46gGY7NoVxA9ngrPF2zCZtzskRTzoWXbxNkzeVnGFPWmrTtILRyqCTjHR+s9dg iat-mode=1
|
||||||
|
d Bridge obfs4 38.229.33.83:80 0BAC39417268B96B9F514E7F63FA6FBA1A788955 cert=VwEFpk9F/UN9JED7XpG1XOjm/O8ZCXK80oPecgWnNDZDv5pdkhq1OpbAH0wNqOT6H6BmRQ iat-mode=1
|
||||||
d Bridge obfs4 37.218.245.14:38224 D9A82D2F9C2F65A18407B1D2B764F130847F8B5D cert=bjRaMrr1BRiAW8IE9U5z27fQaYgOhX1UCmOpg2pFpoMvo6ZgQMzLsaTzzQNTlm7hNcb+Sg iat-mode=0
|
d Bridge obfs4 37.218.245.14:38224 D9A82D2F9C2F65A18407B1D2B764F130847F8B5D cert=bjRaMrr1BRiAW8IE9U5z27fQaYgOhX1UCmOpg2pFpoMvo6ZgQMzLsaTzzQNTlm7hNcb+Sg iat-mode=0
|
||||||
d Bridge obfs4 85.31.186.98:443 011F2599C0E9B27EE74B353155E244813763C3E5 cert=ayq0XzCwhpdysn5o0EyDUbmSOx3X/oTEbzDMvczHOdBJKlvIdHHLJGkZARtT4dcBFArPPg iat-mode=0
|
d Bridge obfs4 85.31.186.98:443 011F2599C0E9B27EE74B353155E244813763C3E5 cert=ayq0XzCwhpdysn5o0EyDUbmSOx3X/oTEbzDMvczHOdBJKlvIdHHLJGkZARtT4dcBFArPPg iat-mode=0
|
||||||
d Bridge obfs4 85.31.186.26:443 91A6354697E6B02A386312F68D82CF86824D3606 cert=PBwr+S8JTVZo6MPdHnkTwXJPILWADLqfMGoVvhZClMq/Urndyd42BwX9YFJHZnBB3H0XCw iat-mode=0
|
d Bridge obfs4 85.31.186.26:443 91A6354697E6B02A386312F68D82CF86824D3606 cert=PBwr+S8JTVZo6MPdHnkTwXJPILWADLqfMGoVvhZClMq/Urndyd42BwX9YFJHZnBB3H0XCw iat-mode=0
|
||||||
@@ -6,10 +8,7 @@ d Bridge obfs4 193.11.166.194:27015 2D82C2E354D531A68469ADF7F878FA6060C6BACA cer
|
|||||||
d Bridge obfs4 193.11.166.194:27020 86AC7B8D430DAC4117E9F42C9EAED18133863AAF cert=0LDeJH4JzMDtkJJrFphJCiPqKx7loozKN7VNfuukMGfHO0Z8OGdzHVkhVAOfo1mUdv9cMg iat-mode=0
|
d Bridge obfs4 193.11.166.194:27020 86AC7B8D430DAC4117E9F42C9EAED18133863AAF cert=0LDeJH4JzMDtkJJrFphJCiPqKx7loozKN7VNfuukMGfHO0Z8OGdzHVkhVAOfo1mUdv9cMg iat-mode=0
|
||||||
d Bridge obfs4 193.11.166.194:27025 1AE2C08904527FEA90C4C4F8C1083EA59FBC6FAF cert=ItvYZzW5tn6v3G4UnQa6Qz04Npro6e81AP70YujmK/KXwDFPTs3aHXcHp4n8Vt6w/bv8cA iat-mode=0
|
d Bridge obfs4 193.11.166.194:27025 1AE2C08904527FEA90C4C4F8C1083EA59FBC6FAF cert=ItvYZzW5tn6v3G4UnQa6Qz04Npro6e81AP70YujmK/KXwDFPTs3aHXcHp4n8Vt6w/bv8cA iat-mode=0
|
||||||
d Bridge obfs4 209.148.46.65:443 74FAD13168806246602538555B5521A0383A1875 cert=ssH+9rP8dG2NLDN2XuFw63hIO/9MNNinLmxQDpVa+7kTOa9/m+tGWT1SmSYpQ9uTBGa6Hw iat-mode=0
|
d Bridge obfs4 209.148.46.65:443 74FAD13168806246602538555B5521A0383A1875 cert=ssH+9rP8dG2NLDN2XuFw63hIO/9MNNinLmxQDpVa+7kTOa9/m+tGWT1SmSYpQ9uTBGa6Hw iat-mode=0
|
||||||
d Bridge obfs4 146.57.248.225:22 10A6CD36A537FCE513A322361547444B393989F0 cert=K1gDtDAIcUfeLqbstggjIw2rtgIKqdIhUlHp82XRqNSq/mtAjp1BIC9vHKJ2FAEpGssTPw iat-mode=0
|
|
||||||
d Bridge obfs4 45.145.95.6:27015 C5B7CD6946FF10C5B3E89691A7D3F2C122D2117C cert=TD7PbUO0/0k6xYHMPW3vJxICfkMZNdkRrb63Zhl5j9dW3iRGiCx0A7mPhe5T2EDzQ35+Zw iat-mode=0
|
|
||||||
d Bridge obfs4 51.222.13.177:80 5EDAC3B810E12B01F6FD8050D2FD3E277B289A08 cert=2uplIpLQ0q9+0qMFrK5pkaYRDOe460LL9WHBvatgkuRr/SL31wBOEupaMMJ6koRE6Ld0ew iat-mode=0
|
d Bridge obfs4 51.222.13.177:80 5EDAC3B810E12B01F6FD8050D2FD3E277B289A08 cert=2uplIpLQ0q9+0qMFrK5pkaYRDOe460LL9WHBvatgkuRr/SL31wBOEupaMMJ6koRE6Ld0ew iat-mode=0
|
||||||
d Bridge obfs4 185.100.85.3:443 5B403DFE34F4872EB027059CECAE30B0C864B3A2 cert=bWUdFUe8io9U6JkSLoGAvSAUDcB779/shovCYmYAQb/pW/iEAMZtO/lCd94OokOF909TPA iat-mode=2
|
|
||||||
n Bridge obfs4 46.226.107.197:10300 A38FD6BDFD902882F5F5B9B7CCC95602A20B0BC4 cert=t8tA9q2AeGlmp/dO6oW9bkY5RqqmvqjArCEM9wjJoDnk6XtnaejkF0JTA7VamdyOzcvuBg iat-mode=0
|
n Bridge obfs4 46.226.107.197:10300 A38FD6BDFD902882F5F5B9B7CCC95602A20B0BC4 cert=t8tA9q2AeGlmp/dO6oW9bkY5RqqmvqjArCEM9wjJoDnk6XtnaejkF0JTA7VamdyOzcvuBg iat-mode=0
|
||||||
n Bridge obfs4 23.88.49.56:443 1CDA1660823AE2565D7F50DE8EB99DFDDE96074B cert=4bwNXedHutVD0ZqCm6ph90Vik9dRY4n9qnBHiLiqQOSsIvui4iHwuMFQK6oqiK8tyhVcDw iat-mode=0
|
n Bridge obfs4 23.88.49.56:443 1CDA1660823AE2565D7F50DE8EB99DFDDE96074B cert=4bwNXedHutVD0ZqCm6ph90Vik9dRY4n9qnBHiLiqQOSsIvui4iHwuMFQK6oqiK8tyhVcDw iat-mode=0
|
||||||
n Bridge obfs4 185.181.11.86:443 A961609729E7FDF520B4E81F1F1B8FA1045285C3 cert=e5faG9Zk4Ni+e7z2YgGfevyKPQlMvkVGi4ublSsHYjaBovKeNXpOhbeFxzbZZoAzxAoGUQ iat-mode=0
|
n Bridge obfs4 185.181.11.86:443 A961609729E7FDF520B4E81F1F1B8FA1045285C3 cert=e5faG9Zk4Ni+e7z2YgGfevyKPQlMvkVGi4ublSsHYjaBovKeNXpOhbeFxzbZZoAzxAoGUQ iat-mode=0
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package org.briarproject.bramble.plugin.tor;
|
package org.briarproject.bramble.plugin.tor;
|
||||||
|
|
||||||
import org.briarproject.bramble.BrambleCoreIntegrationTestEagerSingletons;
|
import org.briarproject.bramble.BrambleCoreIntegrationTestEagerSingletons;
|
||||||
|
import org.briarproject.bramble.api.Multiset;
|
||||||
import org.briarproject.bramble.api.battery.BatteryManager;
|
import org.briarproject.bramble.api.battery.BatteryManager;
|
||||||
import org.briarproject.bramble.api.crypto.CryptoComponent;
|
import org.briarproject.bramble.api.crypto.CryptoComponent;
|
||||||
import org.briarproject.bramble.api.event.EventBus;
|
import org.briarproject.bramble.api.event.EventBus;
|
||||||
@@ -28,10 +29,12 @@ import org.junit.runners.Parameterized.Parameters;
|
|||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.TreeSet;
|
||||||
import java.util.concurrent.Executor;
|
import java.util.concurrent.Executor;
|
||||||
import java.util.concurrent.atomic.AtomicInteger;
|
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
|
import javax.annotation.concurrent.GuardedBy;
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
import javax.net.SocketFactory;
|
import javax.net.SocketFactory;
|
||||||
|
|
||||||
@@ -60,24 +63,28 @@ public class BridgeTest extends BrambleTestCase {
|
|||||||
DaggerBrambleJavaIntegrationTestComponent.builder().build();
|
DaggerBrambleJavaIntegrationTestComponent.builder().build();
|
||||||
BrambleCoreIntegrationTestEagerSingletons.Helper
|
BrambleCoreIntegrationTestEagerSingletons.Helper
|
||||||
.injectEagerSingletons(component);
|
.injectEagerSingletons(component);
|
||||||
// Share a failure counter among all the test instances
|
// Share stats among all the test instances
|
||||||
AtomicInteger failures = new AtomicInteger(0);
|
Stats stats = new Stats();
|
||||||
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 (int i = 0; i < ATTEMPTS_PER_BRIDGE; i++) {
|
||||||
states.add(new Params(bridge, DEFAULT_OBFS4, failures, false));
|
for (String bridge : provider.getBridges(DEFAULT_OBFS4)) {
|
||||||
}
|
states.add(new Params(bridge, DEFAULT_OBFS4, stats, false));
|
||||||
for (String bridge : provider.getBridges(NON_DEFAULT_OBFS4)) {
|
}
|
||||||
states.add(new Params(bridge, NON_DEFAULT_OBFS4, failures, false));
|
for (String bridge : provider.getBridges(NON_DEFAULT_OBFS4)) {
|
||||||
}
|
states.add(new Params(bridge, NON_DEFAULT_OBFS4, stats, false));
|
||||||
for (String bridge : provider.getBridges(MEEK)) {
|
}
|
||||||
states.add(new Params(bridge, MEEK, failures, true));
|
for (String bridge : provider.getBridges(MEEK)) {
|
||||||
|
states.add(new Params(bridge, MEEK, stats, true));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return states;
|
return states;
|
||||||
}
|
}
|
||||||
|
|
||||||
private final static long TIMEOUT = MINUTES.toMillis(5);
|
private final static long OBFS4_TIMEOUT = MINUTES.toMillis(2);
|
||||||
private final static int NUM_FAILURES_ALLOWED = 1;
|
private final static long MEEK_TIMEOUT = MINUTES.toMillis(6);
|
||||||
|
private final static int UNREACHABLE_BRIDGES_ALLOWED = 4;
|
||||||
|
private final static int ATTEMPTS_PER_BRIDGE = 5;
|
||||||
|
|
||||||
private final static Logger LOG = getLogger(BridgeTest.class.getName());
|
private final static Logger LOG = getLogger(BridgeTest.class.getName());
|
||||||
|
|
||||||
@@ -175,18 +182,16 @@ public class BridgeTest extends BrambleTestCase {
|
|||||||
try {
|
try {
|
||||||
plugin.start();
|
plugin.start();
|
||||||
long start = clock.currentTimeMillis();
|
long start = clock.currentTimeMillis();
|
||||||
while (clock.currentTimeMillis() - start < TIMEOUT) {
|
long timeout = params.bridgeType == MEEK
|
||||||
|
? MEEK_TIMEOUT : OBFS4_TIMEOUT;
|
||||||
|
while (clock.currentTimeMillis() - start < timeout) {
|
||||||
if (plugin.getState() == ACTIVE) return;
|
if (plugin.getState() == ACTIVE) return;
|
||||||
clock.sleep(500);
|
clock.sleep(500);
|
||||||
}
|
}
|
||||||
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 (params.failures.incrementAndGet() > NUM_FAILURES_ALLOWED) {
|
+ params.bridge);
|
||||||
fail(params.failures.get() + " bridges are unreachable");
|
params.stats.countFailure(params.bridge, params.essential);
|
||||||
}
|
|
||||||
if (params.mustSucceed) {
|
|
||||||
fail("essential bridge is unreachable");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
plugin.stop();
|
plugin.stop();
|
||||||
@@ -197,15 +202,39 @@ public class BridgeTest extends BrambleTestCase {
|
|||||||
|
|
||||||
private final String bridge;
|
private final String bridge;
|
||||||
private final BridgeType bridgeType;
|
private final BridgeType bridgeType;
|
||||||
private final AtomicInteger failures;
|
private final Stats stats;
|
||||||
private final boolean mustSucceed;
|
private final boolean essential;
|
||||||
|
|
||||||
private Params(String bridge, BridgeType bridgeType,
|
private Params(String bridge, BridgeType bridgeType,
|
||||||
AtomicInteger failures, boolean mustSucceed) {
|
Stats stats, boolean essential) {
|
||||||
this.bridge = bridge;
|
this.bridge = bridge;
|
||||||
this.bridgeType = bridgeType;
|
this.bridgeType = bridgeType;
|
||||||
this.failures = failures;
|
this.stats = stats;
|
||||||
this.mustSucceed = mustSucceed;
|
this.essential = essential;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static class Stats {
|
||||||
|
|
||||||
|
@GuardedBy("this")
|
||||||
|
private final Multiset<String> failures = new Multiset<>();
|
||||||
|
@GuardedBy("this")
|
||||||
|
private final Set<String> unreachable = new TreeSet<>();
|
||||||
|
|
||||||
|
private synchronized void countFailure(String bridge,
|
||||||
|
boolean essential) {
|
||||||
|
if (failures.add(bridge) == ATTEMPTS_PER_BRIDGE) {
|
||||||
|
LOG.warning("Bridge is unreachable after "
|
||||||
|
+ ATTEMPTS_PER_BRIDGE + " attempts: " + bridge);
|
||||||
|
unreachable.add(bridge);
|
||||||
|
if (unreachable.size() > UNREACHABLE_BRIDGES_ALLOWED) {
|
||||||
|
fail(unreachable.size() + " bridges are unreachable: "
|
||||||
|
+ unreachable);
|
||||||
|
}
|
||||||
|
if (essential) {
|
||||||
|
fail("essential bridge is unreachable");
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user