mirror of https://github.com/pf4j/pf4j.git
decebals
6 years ago
1 changed files with 48 additions and 44 deletions
@ -1,69 +1,73 @@
|
||||
/* |
||||
* Copyright (C) 2012-present the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
package org.pf4j; |
||||
|
||||
import static org.hamcrest.MatcherAssert.assertThat; |
||||
import static org.hamcrest.Matchers.contains; |
||||
import static org.hamcrest.Matchers.equalTo; |
||||
import static org.hamcrest.Matchers.is; |
||||
import static org.hamcrest.Matchers.notNullValue; |
||||
import static org.junit.jupiter.api.Assumptions.assumeTrue; |
||||
import org.junit.jupiter.api.Test; |
||||
import org.junit.jupiter.api.condition.EnabledOnOs; |
||||
import org.junit.jupiter.api.io.TempDir; |
||||
import org.pf4j.plugin.PluginJar; |
||||
import org.pf4j.plugin.TestExtension; |
||||
import org.pf4j.plugin.TestPlugin; |
||||
|
||||
import java.io.IOException; |
||||
import java.nio.file.Path; |
||||
import java.util.Locale; |
||||
import java.util.Map; |
||||
import java.util.Set; |
||||
|
||||
import org.junit.jupiter.api.Test; |
||||
import org.junit.jupiter.api.io.TempDir; |
||||
import org.pf4j.plugin.PluginJar; |
||||
import static org.hamcrest.MatcherAssert.assertThat; |
||||
import static org.hamcrest.Matchers.contains; |
||||
import static org.junit.jupiter.api.Assertions.assertEquals; |
||||
import static org.junit.jupiter.api.Assertions.assertFalse; |
||||
import static org.junit.jupiter.api.Assertions.assertNotNull; |
||||
import static org.junit.jupiter.api.Assertions.assertTrue; |
||||
import static org.junit.jupiter.api.condition.OS.WINDOWS; |
||||
|
||||
public class LegacyExtensionFinderTest { |
||||
|
||||
@TempDir |
||||
public Path pluginsPath; |
||||
|
||||
public static class TestPlugin extends Plugin { |
||||
|
||||
public TestPlugin(PluginWrapper wrapper) { |
||||
super(wrapper); |
||||
} |
||||
} |
||||
|
||||
@Extension |
||||
public static class TestExtension implements ExtensionPoint { |
||||
|
||||
} |
||||
|
||||
private static boolean systemIsWindows() { |
||||
String os = System.getProperty("os.name").toLowerCase(Locale.ENGLISH); |
||||
return os.startsWith("win"); |
||||
} |
||||
Path pluginsPath; |
||||
|
||||
@Test |
||||
public void shouldUnlockFileAfterReadingExtensionsFromPlugin() throws IOException, PluginException { |
||||
|
||||
assumeTrue(systemIsWindows()); |
||||
final Path pluginJarPath = pluginsPath.resolve("test-plugin.jar"); |
||||
PluginJar pluginJar = new PluginJar.Builder(pluginJarPath, "test-plugin") |
||||
@EnabledOnOs(WINDOWS) |
||||
public void shouldUnlockFileAfterReadingExtensionsFromPlugin() throws Exception { |
||||
PluginJar pluginJar = new PluginJar.Builder(pluginsPath.resolve("test-plugin.jar"), "test-plugin") |
||||
.pluginClass(TestPlugin.class.getName()) |
||||
.pluginVersion("1.2.3") |
||||
.extension(TestExtension.class.getName()) |
||||
.build(); |
||||
|
||||
JarPluginManager pluginManager = new JarPluginManager(pluginsPath); |
||||
assertTrue(pluginJar.file().exists()); |
||||
|
||||
PluginManager pluginManager = new JarPluginManager(pluginsPath); |
||||
pluginManager.loadPlugins(); |
||||
|
||||
assertEquals(1, pluginManager.getPlugins().size()); |
||||
|
||||
LegacyExtensionFinder extensionFinder = new LegacyExtensionFinder(pluginManager); |
||||
Map<String, Set<String>> pluginStorages = extensionFinder.readPluginsStorages(); |
||||
pluginManager.unloadPlugin(pluginJar.pluginId()); |
||||
boolean fileDeleted = pluginJarPath.toFile().delete(); |
||||
Map<String, Set<String>> pluginsStorages = extensionFinder.readPluginsStorages(); |
||||
assertNotNull(pluginsStorages); |
||||
|
||||
assertThat(pluginStorages, is(notNullValue())); |
||||
assertThat(pluginStorages.get(pluginJar.pluginId()), is(notNullValue())); |
||||
assertThat(pluginStorages.get(pluginJar.pluginId()).size(), is(equalTo(1))); |
||||
assertThat(pluginStorages.get(pluginJar.pluginId()), |
||||
contains("org.pf4j.LegacyExtensionFinderTest$TestExtension")); |
||||
assertThat(fileDeleted, is(equalTo(true))); |
||||
pluginManager.unloadPlugin(pluginJar.pluginId()); |
||||
boolean fileDeleted = pluginJar.file().delete(); |
||||
|
||||
Set<String> pluginStorages = pluginsStorages.get(pluginJar.pluginId()); |
||||
assertNotNull(pluginStorages); |
||||
assertEquals(1, pluginStorages.size()); |
||||
assertThat(pluginStorages, contains(TestExtension.class.getName())); |
||||
assertTrue(fileDeleted); |
||||
assertFalse(pluginJar.file().exists()); |
||||
} |
||||
|
||||
} |
||||
|
Loading…
Reference in new issue