diff options
author | Decebal Suiu <decebal.suiu@gmail.com> | 2021-01-10 00:42:01 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-01-10 00:42:01 +0200 |
commit | 6f16cc47bc2d2c9ba0fc51c043cc53857cf1c40a (patch) | |
tree | ca30363dcbb47268e4489079ea24a82db00e584e /pf4j/src/test | |
parent | 02c52acbd05e4ccea00b98c84318f44eefc1a66d (diff) | |
download | pf4j-6f16cc47bc2d2c9ba0fc51c043cc53857cf1c40a.tar.gz pf4j-6f16cc47bc2d2c9ba0fc51c043cc53857cf1c40a.zip |
Fix for #394 (#417)
Diffstat (limited to 'pf4j/src/test')
-rw-r--r-- | pf4j/src/test/java/org/pf4j/PluginDependencyTest.java | 71 | ||||
-rw-r--r-- | pf4j/src/test/java/org/pf4j/test/PluginZip.java | 14 |
2 files changed, 84 insertions, 1 deletions
diff --git a/pf4j/src/test/java/org/pf4j/PluginDependencyTest.java b/pf4j/src/test/java/org/pf4j/PluginDependencyTest.java index c605d23..662c287 100644 --- a/pf4j/src/test/java/org/pf4j/PluginDependencyTest.java +++ b/pf4j/src/test/java/org/pf4j/PluginDependencyTest.java @@ -15,8 +15,12 @@ */ package org.pf4j; - +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; +import org.pf4j.test.PluginZip; + +import java.nio.file.Path; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; @@ -27,6 +31,16 @@ import static org.junit.jupiter.api.Assertions.assertTrue; */ public class PluginDependencyTest { + private DefaultPluginManager pluginManager; + + @TempDir + Path pluginsPath; + + @BeforeEach + public void setUp() { + pluginManager = new DefaultPluginManager(pluginsPath); + } + /** * Test of getPluginId method, of class PluginDependency. */ @@ -77,4 +91,59 @@ public class PluginDependencyTest { assertEquals("PluginDependency [pluginId=test, pluginVersionSupport=1.0, optional=true]", instance.toString()); } + @Test + public void dependentStop() throws Exception { + // B depends on A + PluginZip pluginA = new PluginZip.Builder(pluginsPath.resolve("A-plugin-1.2.3.zip"), "plugin.a") + .pluginVersion("1.2.3").build(); + + PluginZip pluginB = new PluginZip.Builder(pluginsPath.resolve("B-plugin-1.2.3.zip"), "plugin.b") + .pluginDependencies("plugin.a") + .pluginVersion("1.2.3").build(); + + pluginManager.loadPlugins(); + assertEquals(2, pluginManager.getPlugins().size()); + + pluginManager.startPlugins(); + assertEquals(2, pluginManager.getStartedPlugins().size()); + + // stop A, both A and B should be stopped + pluginManager.stopPlugin("plugin.a"); + assertEquals(0, pluginManager.getStartedPlugins().size()); + + // start all again + pluginManager.startPlugins(); + assertEquals(2, pluginManager.getStartedPlugins().size()); + + // dependent info should be kept. #394 + pluginManager.stopPlugin("plugin.a"); + assertEquals(0, pluginManager.getStartedPlugins().size()); + } + + @Test + public void dependentUnload() throws Exception { + // B depends on A + PluginZip pluginA = new PluginZip.Builder(pluginsPath.resolve("A-plugin-1.2.3.zip"), "plugin.a") + .pluginVersion("1.2.3").build(); + + PluginZip pluginB = new PluginZip.Builder(pluginsPath.resolve("B-plugin-1.2.3.zip"), "plugin.b") + .pluginDependencies("plugin.a") + .pluginVersion("1.2.3").build(); + + pluginManager.loadPlugins(); + assertEquals(2, pluginManager.getPlugins().size()); + + pluginManager.startPlugins(); + assertEquals(2, pluginManager.getStartedPlugins().size()); + + // stop A, both A and B should be stopped + pluginManager.stopPlugin("plugin.a"); + assertEquals(0, pluginManager.getStartedPlugins().size()); + + // unload A, both A and B should be unloaded + pluginManager.unloadPlugin("plugin.a"); + assertEquals(0, pluginManager.getResolvedPlugins().size()); + assertEquals(0, pluginManager.getPlugins().size()); + } + } diff --git a/pf4j/src/test/java/org/pf4j/test/PluginZip.java b/pf4j/src/test/java/org/pf4j/test/PluginZip.java index 5dd2291..4b9a0c9 100644 --- a/pf4j/src/test/java/org/pf4j/test/PluginZip.java +++ b/pf4j/src/test/java/org/pf4j/test/PluginZip.java @@ -39,12 +39,14 @@ public class PluginZip { private final String pluginId; private final String pluginClass; private final String pluginVersion; + private final String pluginDependencies; protected PluginZip(Builder builder) { this.path = builder.path; this.pluginId = builder.pluginId; this.pluginClass = builder.pluginClass; this.pluginVersion = builder.pluginVersion; + this.pluginDependencies = builder.pluginDependencies; } public Path path() { @@ -67,6 +69,8 @@ public class PluginZip { return pluginVersion; } + public String pluginDependencies() { return pluginDependencies; } + public Path unzippedPath() { Path path = path(); String fileName = path.getFileName().toString(); @@ -88,6 +92,7 @@ public class PluginZip { private String pluginClass; private String pluginVersion; + private String pluginDependencies; private Map<String, String> properties = new LinkedHashMap<>(); private Map<Path, byte[]> files = new LinkedHashMap<>(); @@ -108,6 +113,12 @@ public class PluginZip { return this; } + public Builder pluginDependencies(String pluginDependencies) { + this.pluginDependencies = pluginDependencies; + + return this; + } + /** * Add extra properties to the {@code properties} file. * As possible attribute name please see {@link PropertiesPluginDescriptorFinder}. @@ -162,6 +173,9 @@ public class PluginZip { Map<String, String> map = new LinkedHashMap<>(); map.put(PropertiesPluginDescriptorFinder.PLUGIN_ID, pluginId); map.put(PropertiesPluginDescriptorFinder.PLUGIN_VERSION, pluginVersion); + if (pluginDependencies != null) { + map.put(PropertiesPluginDescriptorFinder.PLUGIN_DEPENDENCIES, pluginDependencies); + } if (pluginClass != null) { map.put(PropertiesPluginDescriptorFinder.PLUGIN_CLASS, pluginClass); } |