Make plugins and polling configurable

* Move PluginConfig out of bramble-android. Projects using bramble now need to provide it.
* Add a PluginConfig#shouldPoll() method which can be used to disable polling altogether.
* Move Poller instantiation to the PluginManager.
This commit is contained in:
goapunk
2018-05-22 14:21:55 +02:00
parent 2f00215a44
commit c6b88b51f0
10 changed files with 114 additions and 89 deletions

View File

@@ -2,6 +2,7 @@ package org.briarproject.bramble.plugin;
import org.briarproject.bramble.api.event.EventBus;
import org.briarproject.bramble.api.plugin.ConnectionManager;
import org.briarproject.bramble.api.plugin.ConnectionRegistry;
import org.briarproject.bramble.api.plugin.PluginConfig;
import org.briarproject.bramble.api.plugin.PluginException;
import org.briarproject.bramble.api.plugin.TransportId;
@@ -13,6 +14,7 @@ import org.briarproject.bramble.api.plugin.simplex.SimplexPluginCallback;
import org.briarproject.bramble.api.plugin.simplex.SimplexPluginFactory;
import org.briarproject.bramble.api.properties.TransportPropertyManager;
import org.briarproject.bramble.api.settings.SettingsManager;
import org.briarproject.bramble.api.system.Clock;
import org.briarproject.bramble.api.ui.UiCallback;
import org.briarproject.bramble.test.BrambleTestCase;
import org.jmock.Expectations;
@@ -20,9 +22,13 @@ import org.jmock.Mockery;
import org.jmock.lib.concurrent.Synchroniser;
import org.junit.Test;
import java.security.SecureRandom;
import java.util.Arrays;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
import java.util.concurrent.RejectedExecutionHandler;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import static org.briarproject.bramble.test.TestUtils.getTransportId;
@@ -34,10 +40,16 @@ public class PluginManagerImplTest extends BrambleTestCase {
setThreadingPolicy(new Synchroniser());
}};
Executor ioExecutor = Executors.newSingleThreadExecutor();
RejectedExecutionHandler policy =
new ScheduledThreadPoolExecutor.DiscardPolicy();
ScheduledExecutorService scheduler = new ScheduledThreadPoolExecutor(1, policy);
SecureRandom random = new SecureRandom();
Clock clock = context.mock(Clock.class);
EventBus eventBus = context.mock(EventBus.class);
PluginConfig pluginConfig = context.mock(PluginConfig.class);
ConnectionManager connectionManager =
context.mock(ConnectionManager.class);
ConnectionRegistry connectionRegistry = context.mock(ConnectionRegistry.class);
SettingsManager settingsManager =
context.mock(SettingsManager.class);
TransportPropertyManager transportPropertyManager =
@@ -71,6 +83,8 @@ public class PluginManagerImplTest extends BrambleTestCase {
will(returnValue(simplexFailId));
allowing(duplexPlugin).getId();
will(returnValue(duplexId));
allowing(pluginConfig).shouldPoll();
will(returnValue(false));
// start()
// First simplex plugin
oneOf(pluginConfig).getSimplexFactories();
@@ -112,9 +126,9 @@ public class PluginManagerImplTest extends BrambleTestCase {
oneOf(duplexPlugin).stop();
}});
PluginManagerImpl p = new PluginManagerImpl(ioExecutor, eventBus,
pluginConfig, connectionManager, settingsManager,
transportPropertyManager, uiCallback);
PluginManagerImpl p = new PluginManagerImpl(ioExecutor, scheduler, eventBus,
pluginConfig, connectionManager, connectionRegistry, settingsManager,
transportPropertyManager, random, clock, uiCallback);
// Two plugins should be started and stopped
p.startService();

View File

@@ -58,6 +58,11 @@ public class TestPluginConfigModule {
public Collection<SimplexPluginFactory> getSimplexFactories() {
return Collections.singletonList(simplex);
}
@Override
public boolean shouldPoll() {
return false;
}
};
return pluginConfig;
}