/**
* Returns a copy of plugins.
- *
- * @return
*/
@Override
public List<PluginWrapper> getPlugins() {
/**
* Returns a copy of plugins with that state.
- *
- * @param pluginState
- * @return
*/
@Override
public List<PluginWrapper> getPlugins(PluginState pluginState) {
}
protected void resolvePlugins() throws PluginException {
- // retrieves the plugins descriptors
+ // retrieves the plugins descriptors
List<PluginDescriptor> descriptors = new ArrayList<>();
for (PluginWrapper plugin : plugins.values()) {
descriptors.add(plugin.getDescriptor());
PluginWrapper pluginWrapper = plugins.get(pluginId);
if (unresolvedPlugins.remove(pluginWrapper)) {
PluginState pluginState = pluginWrapper.getPluginState();
- pluginWrapper.setPluginState(PluginState.RESOLVED);
+ if (pluginState != PluginState.DISABLED) {
+ pluginWrapper.setPluginState(PluginState.RESOLVED);
+ }
resolvedPlugins.add(pluginWrapper);
log.info("Plugin '{}' resolved", getPluginLabel(pluginWrapper.getDescriptor()));
// validate the plugin
if (!isPluginValid(pluginWrapper)) {
- log.info("Plugin '{}' is disabled", pluginPath);
+ log.warn("Plugin '{}' is invalid and it will be disabled", pluginPath);
pluginWrapper.setPluginState(PluginState.DISABLED);
}
/**
* The plugin label is used in logging and it's a string in format {@code pluginId@pluginVersion}.
- *
- * @param pluginDescriptor
- * @return
*/
protected String getPluginLabel(PluginDescriptor pluginDescriptor) {
return pluginDescriptor.getPluginId() + "@" + pluginDescriptor.getVersion();
*/
package org.pf4j;
+import org.junit.After;
import org.junit.Before;
+import org.junit.Rule;
import org.junit.Test;
+import org.junit.rules.TemporaryFolder;
+import org.pf4j.plugin.PluginZip;
import java.io.IOException;
import java.nio.file.Files;
+import java.nio.file.Path;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
public class DefaultPluginManagerTest {
- private DefaultPluginDescriptor pd1 = null;
- private DefaultPluginManager pluginManager = new DefaultPluginManager();
- private PluginWrapper pw1;
+ private DefaultPluginManager pluginManager;
+ private DefaultPluginDescriptor pluginDescriptor;
+ private PluginWrapper pluginWrapper;
+ private Path pluginsPath;
+
+ @Rule
+ public TemporaryFolder pluginsFolder = new TemporaryFolder();
@Before
- public void init() throws IOException {
- pd1 = new DefaultPluginDescriptor();
- pd1.setPluginId("myPlugin");
- pd1.setPluginVersion("1.2.3");
- pd1.setPluginDescription("My plugin");
- pd1.setDependencies("bar, baz");
- pd1.setProvider("Me");
- pd1.setRequires("5.0.0");
-
- pw1 = new PluginWrapper(pluginManager, pd1, Files.createTempDirectory("test"), getClass().getClassLoader());
+ public void setUp() throws IOException {
+ pluginsPath = pluginsFolder.getRoot().toPath();
+ pluginManager = new DefaultPluginManager(pluginsPath);
+
+ pluginDescriptor = new DefaultPluginDescriptor();
+ pluginDescriptor.setPluginId("myPlugin");
+ pluginDescriptor.setPluginVersion("1.2.3");
+ pluginDescriptor.setPluginDescription("My plugin");
+ pluginDescriptor.setDependencies("bar, baz");
+ pluginDescriptor.setProvider("Me");
+ pluginDescriptor.setRequires("5.0.0");
+
+ pluginWrapper = new PluginWrapper(pluginManager, pluginDescriptor, Files.createTempDirectory("test"), getClass().getClassLoader());
+ }
+
+ @After
+ public void tearDown() {
+ pluginManager = null;
+ pluginDescriptor = null;
+ pluginWrapper = null;
}
@Test
public void validateOK() throws PluginException {
- pluginManager.validatePluginDescriptor(pd1);
+ pluginManager.validatePluginDescriptor(pluginDescriptor);
}
@Test(expected = PluginException.class)
public void validateFailsOnId() throws PluginException {
- pd1.setPluginId("");
- pluginManager.validatePluginDescriptor(pd1);
+ pluginDescriptor.setPluginId("");
+ pluginManager.validatePluginDescriptor(pluginDescriptor);
}
@Test(expected = PluginException.class)
public void validateFailsOnVersion() throws PluginException {
- pd1.setPluginVersion(null);
- pluginManager.validatePluginDescriptor(pd1);
+ pluginDescriptor.setPluginVersion(null);
+ pluginManager.validatePluginDescriptor(pluginDescriptor);
}
@Test
public void validateNoPluginClass() throws PluginException {
- pluginManager.validatePluginDescriptor(pd1);
- assertEquals(Plugin.class.getName(), pd1.getPluginClass());
+ pluginManager.validatePluginDescriptor(pluginDescriptor);
+ assertEquals(Plugin.class.getName(), pluginDescriptor.getPluginClass());
}
@Test
public void isPluginValid() {
// By default accept all since system version not given
- assertTrue(pluginManager.isPluginValid(pw1));
+ assertTrue(pluginManager.isPluginValid(pluginWrapper));
pluginManager.setSystemVersion("1.0.0");
- assertFalse(pluginManager.isPluginValid(pw1));
+ assertFalse(pluginManager.isPluginValid(pluginWrapper));
pluginManager.setSystemVersion("5.0.0");
- assertTrue(pluginManager.isPluginValid(pw1));
+ assertTrue(pluginManager.isPluginValid(pluginWrapper));
pluginManager.setSystemVersion("6.0.0");
- assertTrue(pluginManager.isPluginValid(pw1));
+ assertTrue(pluginManager.isPluginValid(pluginWrapper));
}
@Test
pluginManager.setExactVersionAllowed(true);
// By default accept all since system version not given
- assertTrue(pluginManager.isPluginValid(pw1));
+ assertTrue(pluginManager.isPluginValid(pluginWrapper));
pluginManager.setSystemVersion("1.0.0");
- assertFalse(pluginManager.isPluginValid(pw1));
+ assertFalse(pluginManager.isPluginValid(pluginWrapper));
pluginManager.setSystemVersion("5.0.0");
- assertTrue(pluginManager.isPluginValid(pw1));
+ assertTrue(pluginManager.isPluginValid(pluginWrapper));
pluginManager.setSystemVersion("6.0.0");
- assertFalse(pluginManager.isPluginValid(pw1));
+ assertFalse(pluginManager.isPluginValid(pluginWrapper));
}
@Test
public void testDefaultExactVersionAllowed() {
- assertEquals(false, pluginManager.isExactVersionAllowed());
+ assertFalse(pluginManager.isExactVersionAllowed());
+ }
+
+ /**
+ * Test that a disabled plugin doesn't start.
+ * See https://github.com/pf4j/pf4j/issues/223.
+ */
+ @Test
+ public void testPluginDisabledNoStart() throws IOException {
+ new PluginZip.Builder(pluginsFolder.newFile("my-plugin-1.2.3.zip"), "myPlugin")
+ .pluginVersion("1.2.3")
+ .build();
+
+ final PluginStatusProvider statusProvider = mock(PluginStatusProvider.class);
+ when(statusProvider.isPluginDisabled("myPlugin")).thenReturn(true);
+
+ PluginManager pluginManager = new DefaultPluginManager(pluginsPath) {
+
+ protected PluginStatusProvider createPluginStatusProvider() {
+ return statusProvider;
+ }
+
+ };
+
+ pluginManager.loadPlugins();
+ pluginManager.startPlugins();
+
+ assertEquals(1, pluginManager.getPlugins().size());
+ assertEquals(0, pluginManager.getStartedPlugins().size());
+
+ PluginWrapper plugin = pluginManager.getPlugin("myPlugin");
+ assertSame(PluginState.DISABLED, plugin.getPluginState());
}
}