diff --git a/bramble-core/src/test/java/org/briarproject/bramble/plugin/tcp/TestLanTcpPluginFactory.java b/bramble-core/src/test/java/org/briarproject/bramble/plugin/tcp/TestLanTcpPluginFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..ea2c2098a500ed5c47aeb0f800bff0036f8b38a3 --- /dev/null +++ b/bramble-core/src/test/java/org/briarproject/bramble/plugin/tcp/TestLanTcpPluginFactory.java @@ -0,0 +1,73 @@ +package org.briarproject.bramble.plugin.tcp; + +import org.briarproject.bramble.api.event.EventBus; +import org.briarproject.bramble.api.lifecycle.IoExecutor; +import org.briarproject.bramble.api.plugin.Backoff; +import org.briarproject.bramble.api.plugin.BackoffFactory; +import org.briarproject.bramble.api.plugin.PluginCallback; +import org.briarproject.bramble.api.plugin.TransportId; +import org.briarproject.bramble.api.plugin.duplex.DuplexPlugin; +import org.briarproject.bramble.api.plugin.duplex.DuplexPluginFactory; +import org.briarproject.bramble.api.system.WakefulIoExecutor; +import org.briarproject.nullsafety.NotNullByDefault; + +import java.util.concurrent.Executor; + +import javax.annotation.concurrent.Immutable; +import javax.inject.Inject; + +import static org.briarproject.bramble.api.plugin.LanTcpConstants.ID; + +@Immutable +@NotNullByDefault +@SuppressWarnings("unused") // This class is used in briar-desktop +public class TestLanTcpPluginFactory implements DuplexPluginFactory { + + private static final int MAX_LATENCY = 30_000; // 30 seconds + private static final int MAX_IDLE_TIME = 30_000; // 30 seconds + private static final int CONNECTION_TIMEOUT = 3_000; // 3 seconds + private static final int MIN_POLLING_INTERVAL = 60_000; // 1 minute + private static final int MAX_POLLING_INTERVAL = 600_000; // 10 mins + private static final double BACKOFF_BASE = 1.2; + + private final Executor ioExecutor, wakefulIoExecutor; + private final EventBus eventBus; + private final BackoffFactory backoffFactory; + + @Inject + public TestLanTcpPluginFactory(@IoExecutor Executor ioExecutor, + @WakefulIoExecutor Executor wakefulIoExecutor, + EventBus eventBus, + BackoffFactory backoffFactory) { + this.ioExecutor = ioExecutor; + this.wakefulIoExecutor = wakefulIoExecutor; + this.eventBus = eventBus; + this.backoffFactory = backoffFactory; + } + + @Override + public TransportId getId() { + return ID; + } + + @Override + public long getMaxLatency() { + return MAX_LATENCY; + } + + @Override + public DuplexPlugin createPlugin(PluginCallback callback) { + Backoff backoff = backoffFactory.createBackoff(MIN_POLLING_INTERVAL, + MAX_POLLING_INTERVAL, BACKOFF_BASE); + LanTcpPlugin plugin = new LanTcpPlugin(ioExecutor, wakefulIoExecutor, + backoff, callback, MAX_LATENCY, MAX_IDLE_TIME, + CONNECTION_TIMEOUT) { + @Override + protected boolean canConnectToOwnAddress() { + return true; + } + }; + eventBus.addListener(plugin); + return plugin; + } +}