From 1a16be8ad024d3c5fac380ec819bf6e17644c375 Mon Sep 17 00:00:00 2001 From: Decebal Suiu Date: Sun, 7 Apr 2024 00:11:21 +0300 Subject: [PATCH] Fix #576 --- .../java/org/pf4j/AbstractPluginManager.java | 3 ++ .../org/pf4j/DefaultPluginManagerTest.java | 36 +++++++++++++++++++ 2 files changed, 39 insertions(+) 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()); + } + } -- 2.39.5