mirror of https://github.com/pf4j/pf4j.git
wolframhaussig
4 years ago
committed by
GitHub
4 changed files with 592 additions and 5 deletions
@ -0,0 +1,305 @@ |
|||||||
|
package org.pf4j; |
||||||
|
|
||||||
|
import java.nio.file.Path; |
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.Arrays; |
||||||
|
import java.util.Collections; |
||||||
|
import java.util.List; |
||||||
|
import java.util.Set; |
||||||
|
import java.util.stream.Collectors; |
||||||
|
|
||||||
|
/** |
||||||
|
* Use this class to wrap the original plugin manager to prevent full access from within plugins. |
||||||
|
* Override AbstractPluginManager.createPluginWrapper to use this class
|
||||||
|
* @author Wolfram Haussig |
||||||
|
* |
||||||
|
*/ |
||||||
|
public class SecurePluginManagerWrapper implements PluginManager { |
||||||
|
|
||||||
|
private static final String PLUGIN_PREFIX = "Plugin "; |
||||||
|
/** |
||||||
|
* the current plugin |
||||||
|
*/ |
||||||
|
private String currentPluginId; |
||||||
|
/** |
||||||
|
* the original plugin manager |
||||||
|
*/ |
||||||
|
private PluginManager original; |
||||||
|
|
||||||
|
/** |
||||||
|
* The registered {@link PluginStateListener}s. |
||||||
|
*/ |
||||||
|
protected List<PluginStateListener> pluginStateListeners = new ArrayList<>(); |
||||||
|
/** |
||||||
|
* wrapper for pluginStateListeners |
||||||
|
*/ |
||||||
|
private PluginStateListenerWrapper listenerWrapper = new PluginStateListenerWrapper(); |
||||||
|
|
||||||
|
/** |
||||||
|
* constructor |
||||||
|
* @param original the original plugin manager |
||||||
|
* @param currentPlugin the current pluginId |
||||||
|
*/ |
||||||
|
public SecurePluginManagerWrapper(PluginManager original, String currentPluginId) { |
||||||
|
this.original = original; |
||||||
|
this.currentPluginId = currentPluginId; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean isDevelopment() { |
||||||
|
return original.isDevelopment(); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean isNotDevelopment() { |
||||||
|
return original.isNotDevelopment(); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public List<PluginWrapper> getPlugins() { |
||||||
|
return Arrays.asList(getPlugin(currentPluginId)); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public List<PluginWrapper> getPlugins(PluginState pluginState) { |
||||||
|
return getPlugins().stream().filter(p -> p.getPluginState() == pluginState).collect(Collectors.toList()); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public List<PluginWrapper> getResolvedPlugins() { |
||||||
|
return getPlugins().stream().filter(p -> p.getPluginState().ordinal() >= PluginState.RESOLVED.ordinal()).collect(Collectors.toList()); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public List<PluginWrapper> getUnresolvedPlugins() { |
||||||
|
return Collections.emptyList(); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public List<PluginWrapper> getStartedPlugins() { |
||||||
|
return getPlugins(PluginState.STARTED); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public PluginWrapper getPlugin(String pluginId) { |
||||||
|
if (currentPluginId.equals(pluginId)) { |
||||||
|
return original.getPlugin(pluginId); |
||||||
|
} else { |
||||||
|
throw new IllegalAccessError(PLUGIN_PREFIX + currentPluginId + " tried to execute getPlugin for foreign pluginId!"); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void loadPlugins() { |
||||||
|
throw new IllegalAccessError(PLUGIN_PREFIX + currentPluginId + " tried to execute loadPlugins!"); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String loadPlugin(Path pluginPath) { |
||||||
|
throw new IllegalAccessError(PLUGIN_PREFIX + currentPluginId + " tried to execute loadPlugin!"); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void startPlugins() { |
||||||
|
throw new IllegalAccessError(PLUGIN_PREFIX + currentPluginId + " tried to execute startPlugins!"); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public PluginState startPlugin(String pluginId) { |
||||||
|
throw new IllegalAccessError(PLUGIN_PREFIX + currentPluginId + " tried to execute startPlugin!"); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void stopPlugins() { |
||||||
|
throw new IllegalAccessError(PLUGIN_PREFIX + currentPluginId + " tried to execute stopPlugins!"); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public PluginState stopPlugin(String pluginId) { |
||||||
|
if (currentPluginId.equals(pluginId)) { |
||||||
|
return original.stopPlugin(pluginId); |
||||||
|
} else { |
||||||
|
throw new IllegalAccessError(PLUGIN_PREFIX + currentPluginId + " tried to execute stopPlugin for foreign pluginId!"); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void unloadPlugins() { |
||||||
|
throw new IllegalAccessError(PLUGIN_PREFIX + currentPluginId + " tried to execute unloadPlugins!"); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean unloadPlugin(String pluginId) { |
||||||
|
if (currentPluginId.equals(pluginId)) { |
||||||
|
return original.unloadPlugin(pluginId); |
||||||
|
} else { |
||||||
|
throw new IllegalAccessError(PLUGIN_PREFIX + currentPluginId + " tried to execute unloadPlugin for foreign pluginId!"); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean disablePlugin(String pluginId) { |
||||||
|
if (currentPluginId.equals(pluginId)) { |
||||||
|
return original.disablePlugin(pluginId); |
||||||
|
} else { |
||||||
|
throw new IllegalAccessError(PLUGIN_PREFIX + currentPluginId + " tried to execute disablePlugin for foreign pluginId!"); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean enablePlugin(String pluginId) { |
||||||
|
throw new IllegalAccessError(PLUGIN_PREFIX + currentPluginId + " tried to execute enablePlugin!"); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public boolean deletePlugin(String pluginId) { |
||||||
|
if (currentPluginId.equals(pluginId)) { |
||||||
|
return original.deletePlugin(pluginId); |
||||||
|
} else { |
||||||
|
throw new IllegalAccessError(PLUGIN_PREFIX + currentPluginId + " tried to execute deletePlugin for foreign pluginId!"); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public ClassLoader getPluginClassLoader(String pluginId) { |
||||||
|
if (currentPluginId.equals(pluginId)) { |
||||||
|
return original.getPluginClassLoader(pluginId); |
||||||
|
} else { |
||||||
|
throw new IllegalAccessError(PLUGIN_PREFIX + currentPluginId + " tried to execute getPluginClassLoader for foreign pluginId!"); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public List<Class<?>> getExtensionClasses(String pluginId) { |
||||||
|
if (currentPluginId.equals(pluginId)) { |
||||||
|
return original.getExtensionClasses(pluginId); |
||||||
|
} else { |
||||||
|
throw new IllegalAccessError(PLUGIN_PREFIX + currentPluginId + " tried to execute getExtensionClasses for foreign pluginId!"); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public <T> List<Class<? extends T>> getExtensionClasses(Class<T> type) { |
||||||
|
return getExtensionClasses(type, currentPluginId); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public <T> List<Class<? extends T>> getExtensionClasses(Class<T> type, String pluginId) { |
||||||
|
if (currentPluginId.equals(pluginId)) { |
||||||
|
return original.getExtensionClasses(type, pluginId); |
||||||
|
} else { |
||||||
|
throw new IllegalAccessError(PLUGIN_PREFIX + currentPluginId + " tried to execute getExtensionClasses for foreign pluginId!"); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public <T> List<T> getExtensions(Class<T> type) { |
||||||
|
return getExtensions(type, currentPluginId); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public <T> List<T> getExtensions(Class<T> type, String pluginId) { |
||||||
|
if (currentPluginId.equals(pluginId)) { |
||||||
|
return original.getExtensions(type, pluginId); |
||||||
|
} else { |
||||||
|
throw new IllegalAccessError(PLUGIN_PREFIX + currentPluginId + " tried to execute getExtensions for foreign pluginId!"); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public List<?> getExtensions(String pluginId) { |
||||||
|
if (currentPluginId.equals(pluginId)) { |
||||||
|
return original.getExtensions(pluginId); |
||||||
|
} else { |
||||||
|
throw new IllegalAccessError(PLUGIN_PREFIX + currentPluginId + " tried to execute getExtensions for foreign pluginId!"); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public Set<String> getExtensionClassNames(String pluginId) { |
||||||
|
if (currentPluginId.equals(pluginId)) { |
||||||
|
return original.getExtensionClassNames(pluginId); |
||||||
|
} else { |
||||||
|
throw new IllegalAccessError(PLUGIN_PREFIX + currentPluginId + " tried to execute getExtensionClassNames for foreign pluginId!"); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public ExtensionFactory getExtensionFactory() { |
||||||
|
return original.getExtensionFactory(); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public RuntimeMode getRuntimeMode() { |
||||||
|
return original.getRuntimeMode(); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public PluginWrapper whichPlugin(Class<?> clazz) { |
||||||
|
ClassLoader classLoader = clazz.getClassLoader(); |
||||||
|
PluginWrapper plugin = getPlugin(currentPluginId); |
||||||
|
if (plugin.getPluginClassLoader() == classLoader) { |
||||||
|
return plugin; |
||||||
|
} |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void addPluginStateListener(PluginStateListener listener) { |
||||||
|
if (pluginStateListeners.isEmpty()) { |
||||||
|
this.original.addPluginStateListener(listenerWrapper); |
||||||
|
} |
||||||
|
pluginStateListeners.add(listener); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void removePluginStateListener(PluginStateListener listener) { |
||||||
|
pluginStateListeners.remove(listener); |
||||||
|
if (pluginStateListeners.isEmpty()) { |
||||||
|
this.original.removePluginStateListener(listenerWrapper); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void setSystemVersion(String version) { |
||||||
|
throw new IllegalAccessError(PLUGIN_PREFIX + currentPluginId + " tried to execute setSystemVersion!"); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String getSystemVersion() { |
||||||
|
return original.getSystemVersion(); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public Path getPluginsRoot() { |
||||||
|
throw new IllegalAccessError(PLUGIN_PREFIX + currentPluginId + " tried to execute getPluginsRoot!"); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public List<Path> getPluginsRoots() { |
||||||
|
throw new IllegalAccessError(PLUGIN_PREFIX + currentPluginId + " tried to execute getPluginsRoots!"); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public VersionManager getVersionManager() { |
||||||
|
return original.getVersionManager(); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Wrapper for PluginStateListener events. will only propagate events if they match the current pluginId |
||||||
|
* @author Wolfram Haussig |
||||||
|
* |
||||||
|
*/ |
||||||
|
private class PluginStateListenerWrapper implements PluginStateListener { |
||||||
|
|
||||||
|
@Override |
||||||
|
public void pluginStateChanged(PluginStateEvent event) { |
||||||
|
if (event.getPlugin().getPluginId().equals(currentPluginId)) { |
||||||
|
for (PluginStateListener listener : pluginStateListeners) { |
||||||
|
listener.pluginStateChanged(event); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
} |
@ -0,0 +1,272 @@ |
|||||||
|
package org.pf4j; |
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertTrue; |
||||||
|
import static org.junit.Assert.assertNotNull; |
||||||
|
import static org.junit.jupiter.api.Assertions.assertEquals; |
||||||
|
import static org.junit.jupiter.api.Assertions.assertThrows; |
||||||
|
|
||||||
|
import java.io.IOException; |
||||||
|
import java.nio.file.Path; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
import org.junit.jupiter.api.AfterEach; |
||||||
|
import org.junit.jupiter.api.BeforeEach; |
||||||
|
import org.junit.jupiter.api.Test; |
||||||
|
import org.junit.jupiter.api.io.TempDir; |
||||||
|
import org.pf4j.test.PluginJar; |
||||||
|
import org.pf4j.test.TestExtension; |
||||||
|
import org.pf4j.test.TestExtensionPoint; |
||||||
|
import org.pf4j.test.TestPlugin; |
||||||
|
|
||||||
|
public class SecurePluginManagerWrapperTest { |
||||||
|
|
||||||
|
private static final String OTHER_PLUGIN_ID = "test-plugin-2"; |
||||||
|
private static final String THIS_PLUGIN_ID = "test-plugin-1"; |
||||||
|
private PluginJar thisPlugin; |
||||||
|
private PluginJar otherPlugin; |
||||||
|
private PluginManager pluginManager; |
||||||
|
private PluginManager wrappedPluginManager; |
||||||
|
private int pluginManagerEvents = 0; |
||||||
|
private int wrappedPluginManagerEvents = 0; |
||||||
|
|
||||||
|
@TempDir |
||||||
|
Path pluginsPath; |
||||||
|
|
||||||
|
@BeforeEach |
||||||
|
public void setUp() throws IOException { |
||||||
|
pluginManagerEvents = 0; |
||||||
|
wrappedPluginManagerEvents = 0; |
||||||
|
thisPlugin = new PluginJar.Builder(pluginsPath.resolve("test-plugin1.jar"), THIS_PLUGIN_ID).pluginClass(TestPlugin.class.getName()).pluginVersion("1.2.3").extension(TestExtension.class.getName()).build(); |
||||||
|
otherPlugin = new PluginJar.Builder(pluginsPath.resolve("test-plugin2.jar"), OTHER_PLUGIN_ID).pluginClass(TestPlugin.class.getName()).pluginVersion("1.2.3").extension(TestExtension.class.getName()).build(); |
||||||
|
|
||||||
|
pluginManager = new JarPluginManager(pluginsPath); |
||||||
|
wrappedPluginManager = new SecurePluginManagerWrapper(pluginManager, THIS_PLUGIN_ID); |
||||||
|
} |
||||||
|
|
||||||
|
@AfterEach |
||||||
|
public void tearDown() { |
||||||
|
pluginManager.unloadPlugins(); |
||||||
|
|
||||||
|
thisPlugin = null; |
||||||
|
otherPlugin = null; |
||||||
|
pluginManager = null; |
||||||
|
} |
||||||
|
|
||||||
|
@Test |
||||||
|
public void pluginStateListeners() { |
||||||
|
pluginManager.addPluginStateListener(new PluginStateListener() { |
||||||
|
@Override |
||||||
|
public void pluginStateChanged(PluginStateEvent event) { |
||||||
|
pluginManagerEvents++; |
||||||
|
} |
||||||
|
}); |
||||||
|
wrappedPluginManager.addPluginStateListener(new PluginStateListener() { |
||||||
|
@Override |
||||||
|
public void pluginStateChanged(PluginStateEvent event) { |
||||||
|
wrappedPluginManagerEvents++; |
||||||
|
} |
||||||
|
}); |
||||||
|
pluginManager.loadPlugins(); |
||||||
|
pluginManager.startPlugins(); |
||||||
|
assertEquals(4, pluginManagerEvents); |
||||||
|
assertEquals(2, wrappedPluginManagerEvents); |
||||||
|
} |
||||||
|
|
||||||
|
@Test |
||||||
|
public void deletePlugin() { |
||||||
|
pluginManager.loadPlugins(); |
||||||
|
assertThrows(IllegalAccessError.class, () -> wrappedPluginManager.deletePlugin(OTHER_PLUGIN_ID)); |
||||||
|
assertTrue(wrappedPluginManager.deletePlugin(THIS_PLUGIN_ID)); |
||||||
|
} |
||||||
|
|
||||||
|
@Test |
||||||
|
public void disablePlugin() { |
||||||
|
pluginManager.loadPlugins(); |
||||||
|
assertThrows(IllegalAccessError.class, () -> wrappedPluginManager.disablePlugin(OTHER_PLUGIN_ID)); |
||||||
|
assertTrue(wrappedPluginManager.disablePlugin(THIS_PLUGIN_ID)); |
||||||
|
} |
||||||
|
|
||||||
|
@Test |
||||||
|
public void enablePlugin() { |
||||||
|
pluginManager.loadPlugins(); |
||||||
|
assertThrows(IllegalAccessError.class, () -> wrappedPluginManager.enablePlugin(OTHER_PLUGIN_ID)); |
||||||
|
assertThrows(IllegalAccessError.class, () -> wrappedPluginManager.enablePlugin(THIS_PLUGIN_ID)); |
||||||
|
} |
||||||
|
|
||||||
|
@Test |
||||||
|
public void getExtensionClasses() { |
||||||
|
pluginManager.loadPlugins(); |
||||||
|
pluginManager.startPlugins(); |
||||||
|
assertEquals(1, wrappedPluginManager.getExtensionClasses(TestExtensionPoint.class).size()); |
||||||
|
|
||||||
|
assertThrows(IllegalAccessError.class, () -> wrappedPluginManager.getExtensionClasses(TestExtensionPoint.class, OTHER_PLUGIN_ID)); |
||||||
|
assertEquals(1, wrappedPluginManager.getExtensionClasses(TestExtensionPoint.class, THIS_PLUGIN_ID).size()); |
||||||
|
|
||||||
|
assertThrows(IllegalAccessError.class, () -> wrappedPluginManager.getExtensionClasses(OTHER_PLUGIN_ID)); |
||||||
|
assertEquals(1, wrappedPluginManager.getExtensionClasses(THIS_PLUGIN_ID).size()); |
||||||
|
} |
||||||
|
|
||||||
|
@Test |
||||||
|
public void getExtensionClassNames() { |
||||||
|
pluginManager.loadPlugins(); |
||||||
|
assertThrows(IllegalAccessError.class, () -> wrappedPluginManager.getExtensionClassNames(OTHER_PLUGIN_ID)); |
||||||
|
assertEquals(1, wrappedPluginManager.getExtensionClassNames(THIS_PLUGIN_ID).size()); |
||||||
|
} |
||||||
|
|
||||||
|
@Test |
||||||
|
public void getExtensionFactory() { |
||||||
|
pluginManager.loadPlugins(); |
||||||
|
assertEquals(pluginManager.getExtensionFactory(), wrappedPluginManager.getExtensionFactory()); |
||||||
|
} |
||||||
|
|
||||||
|
@Test |
||||||
|
public void getExtensions() { |
||||||
|
pluginManager.loadPlugins(); |
||||||
|
pluginManager.startPlugins(); |
||||||
|
assertEquals(1, wrappedPluginManager.getExtensions(TestExtensionPoint.class).size()); |
||||||
|
|
||||||
|
assertThrows(IllegalAccessError.class, () -> wrappedPluginManager.getExtensions(TestExtensionPoint.class, OTHER_PLUGIN_ID)); |
||||||
|
assertEquals(1, wrappedPluginManager.getExtensions(TestExtensionPoint.class, THIS_PLUGIN_ID).size()); |
||||||
|
|
||||||
|
assertThrows(IllegalAccessError.class, () -> wrappedPluginManager.getExtensions(OTHER_PLUGIN_ID)); |
||||||
|
assertEquals(1, wrappedPluginManager.getExtensions(THIS_PLUGIN_ID).size()); |
||||||
|
} |
||||||
|
|
||||||
|
@Test |
||||||
|
public void getPlugin() { |
||||||
|
pluginManager.loadPlugins(); |
||||||
|
assertThrows(IllegalAccessError.class, () -> wrappedPluginManager.getPlugin(OTHER_PLUGIN_ID)); |
||||||
|
assertEquals(THIS_PLUGIN_ID, wrappedPluginManager.getPlugin(THIS_PLUGIN_ID).getPluginId()); |
||||||
|
} |
||||||
|
|
||||||
|
@Test |
||||||
|
public void getPluginClassLoader() { |
||||||
|
pluginManager.loadPlugins(); |
||||||
|
assertThrows(IllegalAccessError.class, () -> wrappedPluginManager.getPluginClassLoader(OTHER_PLUGIN_ID)); |
||||||
|
assertNotNull(wrappedPluginManager.getPluginClassLoader(THIS_PLUGIN_ID)); |
||||||
|
} |
||||||
|
|
||||||
|
@Test |
||||||
|
public void getPlugins() { |
||||||
|
pluginManager.loadPlugins(); |
||||||
|
assertEquals(2, pluginManager.getPlugins().size()); |
||||||
|
assertEquals(1, wrappedPluginManager.getPlugins().size()); |
||||||
|
} |
||||||
|
|
||||||
|
@Test |
||||||
|
public void getPluginsRoot() { |
||||||
|
assertThrows(IllegalAccessError.class, () -> wrappedPluginManager.getPluginsRoot()); |
||||||
|
} |
||||||
|
|
||||||
|
@Test |
||||||
|
public void getPluginsRoots() { |
||||||
|
assertThrows(IllegalAccessError.class, () -> wrappedPluginManager.getPluginsRoots()); |
||||||
|
} |
||||||
|
|
||||||
|
@Test |
||||||
|
public void getResolvedPlugins() { |
||||||
|
pluginManager.loadPlugins(); |
||||||
|
assertEquals(2, pluginManager.getResolvedPlugins().size()); |
||||||
|
assertEquals(1, wrappedPluginManager.getResolvedPlugins().size()); |
||||||
|
} |
||||||
|
|
||||||
|
@Test |
||||||
|
public void getRuntimeMode() { |
||||||
|
assertEquals(pluginManager.getRuntimeMode(), wrappedPluginManager.getRuntimeMode()); |
||||||
|
} |
||||||
|
|
||||||
|
@Test |
||||||
|
public void getStartedPlugins() { |
||||||
|
pluginManager.loadPlugins(); |
||||||
|
pluginManager.startPlugins(); |
||||||
|
assertEquals(2, pluginManager.getStartedPlugins().size()); |
||||||
|
assertEquals(1, wrappedPluginManager.getStartedPlugins().size()); |
||||||
|
} |
||||||
|
|
||||||
|
@Test |
||||||
|
public void getSystemVersion() { |
||||||
|
assertEquals(pluginManager.getSystemVersion(), wrappedPluginManager.getSystemVersion()); |
||||||
|
} |
||||||
|
|
||||||
|
@Test |
||||||
|
public void getUnresolvedPlugins() { |
||||||
|
assertNotNull(wrappedPluginManager); |
||||||
|
assertNotNull(wrappedPluginManager.getUnresolvedPlugins()); |
||||||
|
assertTrue(wrappedPluginManager.getUnresolvedPlugins().isEmpty()); |
||||||
|
} |
||||||
|
|
||||||
|
@Test |
||||||
|
public void getVersionManager() { |
||||||
|
assertEquals(pluginManager.getVersionManager(), wrappedPluginManager.getVersionManager()); |
||||||
|
} |
||||||
|
|
||||||
|
@Test |
||||||
|
public void isDevelopment() { |
||||||
|
assertEquals(pluginManager.isDevelopment(), wrappedPluginManager.isDevelopment()); |
||||||
|
} |
||||||
|
|
||||||
|
@Test |
||||||
|
public void isNotDevelopment() { |
||||||
|
assertEquals(pluginManager.isNotDevelopment(), wrappedPluginManager.isNotDevelopment()); |
||||||
|
} |
||||||
|
|
||||||
|
@Test |
||||||
|
public void loadPlugin() { |
||||||
|
assertThrows(IllegalAccessError.class, () -> wrappedPluginManager.loadPlugin(thisPlugin.path())); |
||||||
|
} |
||||||
|
|
||||||
|
@Test |
||||||
|
public void loadPlugins() { |
||||||
|
assertThrows(IllegalAccessError.class, () -> wrappedPluginManager.loadPlugins()); |
||||||
|
} |
||||||
|
|
||||||
|
@Test |
||||||
|
public void setSystemVersion() { |
||||||
|
assertThrows(IllegalAccessError.class, () -> wrappedPluginManager.setSystemVersion("1.0.0")); |
||||||
|
} |
||||||
|
|
||||||
|
@Test |
||||||
|
public void startPlugin() { |
||||||
|
pluginManager.loadPlugins(); |
||||||
|
assertThrows(IllegalAccessError.class, () -> wrappedPluginManager.startPlugin(OTHER_PLUGIN_ID)); |
||||||
|
assertThrows(IllegalAccessError.class, () -> wrappedPluginManager.startPlugin(THIS_PLUGIN_ID)); |
||||||
|
} |
||||||
|
|
||||||
|
@Test |
||||||
|
public void startPlugins() { |
||||||
|
assertThrows(IllegalAccessError.class, () -> wrappedPluginManager.startPlugins()); |
||||||
|
} |
||||||
|
|
||||||
|
@Test |
||||||
|
public void stopPlugin() { |
||||||
|
pluginManager.loadPlugins(); |
||||||
|
pluginManager.startPlugins(); |
||||||
|
assertThrows(IllegalAccessError.class, () -> wrappedPluginManager.stopPlugin(OTHER_PLUGIN_ID)); |
||||||
|
assertEquals(PluginState.STOPPED, wrappedPluginManager.stopPlugin(THIS_PLUGIN_ID)); |
||||||
|
} |
||||||
|
|
||||||
|
@Test |
||||||
|
public void stopPlugins() { |
||||||
|
assertThrows(IllegalAccessError.class, () -> wrappedPluginManager.stopPlugins()); |
||||||
|
} |
||||||
|
|
||||||
|
@Test |
||||||
|
public void unloadPlugin() { |
||||||
|
pluginManager.loadPlugins(); |
||||||
|
assertThrows(IllegalAccessError.class, () -> wrappedPluginManager.unloadPlugin(OTHER_PLUGIN_ID)); |
||||||
|
assertTrue(wrappedPluginManager.unloadPlugin(THIS_PLUGIN_ID)); |
||||||
|
} |
||||||
|
|
||||||
|
@Test |
||||||
|
public void unloadPlugins() { |
||||||
|
assertThrows(IllegalAccessError.class, () -> wrappedPluginManager.unloadPlugins()); |
||||||
|
} |
||||||
|
|
||||||
|
@Test |
||||||
|
public void whichPlugin() { |
||||||
|
pluginManager.loadPlugins(); |
||||||
|
pluginManager.startPlugins(); |
||||||
|
assertEquals(null, wrappedPluginManager.whichPlugin(pluginManager.getExtensionClasses(OTHER_PLUGIN_ID).get(0))); |
||||||
|
assertEquals(THIS_PLUGIN_ID, wrappedPluginManager.whichPlugin(pluginManager.getExtensionClasses(THIS_PLUGIN_ID).get(0)).getPluginId()); |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue