diff options
-rw-r--r-- | pf4j/src/main/java/org/pf4j/AbstractPluginManager.java | 3 | ||||
-rw-r--r-- | pf4j/src/test/java/org/pf4j/DefaultPluginManagerTest.java | 36 |
2 files changed, 39 insertions, 0 deletions
diff --git a/pf4j/src/main/java/org/pf4j/AbstractPluginManager.java b/pf4j/src/main/java/org/pf4j/AbstractPluginManager.java index 559fc81..d602abf 100644 --- a/pf4j/src/main/java/org/pf4j/AbstractPluginManager.java +++ b/pf4j/src/main/java/org/pf4j/AbstractPluginManager.java @@ -331,6 +331,9 @@ public abstract class AbstractPluginManager implements PluginManager { } } + // resolve the plugins again (update plugins graph) + resolveDependencies(); + return true; } diff --git a/pf4j/src/test/java/org/pf4j/DefaultPluginManagerTest.java b/pf4j/src/test/java/org/pf4j/DefaultPluginManagerTest.java index d10689f..33f9db0 100644 --- a/pf4j/src/test/java/org/pf4j/DefaultPluginManagerTest.java +++ b/pf4j/src/test/java/org/pf4j/DefaultPluginManagerTest.java @@ -396,4 +396,40 @@ public class DefaultPluginManagerTest { assertThrows(PluginNotFoundException.class, () -> pluginManager.stopPlugin(pluginZip2.pluginId())); } + @Test + void deletePluginWithDependency() throws IOException { + PluginZip pluginZip1 = new PluginZip.Builder(pluginsPath.resolve("my-first-plugin-1.1.1.zip"), "myPlugin1") + .pluginVersion("1.1.1") + .build(); + + PluginZip pluginZip2 = new PluginZip.Builder(pluginsPath.resolve("my-second-plugin-2.2.2.zip"), "myPlugin2") + .pluginVersion("2.2.2") + .pluginDependencies("myPlugin1") + .build(); + + PluginZip pluginZip3 = new PluginZip.Builder(pluginsPath.resolve("my-third-plugin-3.3.3.zip"), "myPlugin3") + .pluginVersion("3.3.3") + .pluginDependencies("myPlugin2") + .build(); + + pluginManager.loadPlugins(); + pluginManager.startPlugins(); + + assertEquals(PluginState.STARTED, pluginManager.getPlugin(pluginZip1.pluginId()).getPluginState()); + assertEquals(PluginState.STARTED, pluginManager.getPlugin(pluginZip2.pluginId()).getPluginState()); + assertEquals(PluginState.STARTED, pluginManager.getPlugin(pluginZip3.pluginId()).getPluginState()); + + System.out.println("Stopping " + pluginZip2.pluginId()); + pluginManager.stopPlugin(pluginZip2.pluginId()); + assertEquals(PluginState.STOPPED, pluginManager.getPlugin(pluginZip2.pluginId()).getPluginState()); + + boolean deleted = pluginManager.deletePlugin(pluginZip2.pluginId()); + assertTrue(deleted); + + assertEquals(1, pluginManager.getPlugins().size()); // myPlugin1 should still be there, myPlugin2 and myPlugin3 should be gone + + pluginManager.stopPlugin(pluginZip1.pluginId()); + assertEquals(PluginState.STOPPED, pluginManager.getPlugin(pluginZip1.pluginId()).getPluginState()); + } + } |