|
|
|
@ -17,8 +17,16 @@ package ro.fortsoft.pf4j;
|
|
|
|
|
|
|
|
|
|
import com.github.zafarkhaja.semver.Version; |
|
|
|
|
import java.io.File; |
|
|
|
|
import java.net.URL; |
|
|
|
|
import java.io.IOException; |
|
|
|
|
import java.nio.charset.Charset; |
|
|
|
|
import java.nio.file.Files; |
|
|
|
|
import java.nio.file.Paths; |
|
|
|
|
import java.util.Arrays; |
|
|
|
|
import java.util.List; |
|
|
|
|
import org.junit.Before; |
|
|
|
|
import org.junit.Rule; |
|
|
|
|
import org.junit.Test; |
|
|
|
|
import org.junit.rules.TemporaryFolder; |
|
|
|
|
|
|
|
|
|
import static org.junit.Assert.assertEquals; |
|
|
|
|
import static org.junit.Assert.assertTrue; |
|
|
|
@ -29,16 +37,50 @@ import static org.junit.Assert.assertTrue;
|
|
|
|
|
*/ |
|
|
|
|
public class ManifestPluginDescriptorFinderTest { |
|
|
|
|
|
|
|
|
|
@Rule |
|
|
|
|
public TemporaryFolder testFolder = new TemporaryFolder(); |
|
|
|
|
|
|
|
|
|
@Before |
|
|
|
|
public void setUp() throws IOException { |
|
|
|
|
Charset charset = Charset.forName("UTF-8"); |
|
|
|
|
|
|
|
|
|
File plugin = testFolder.newFolder("test-plugin-1", "classes", "META-INF"); |
|
|
|
|
Files.write(Paths.get(plugin.getPath(), "extensions.idx"), "ro.fortsoft.pf4j.demo.hello.HelloPlugin$HelloGreeting".getBytes()); |
|
|
|
|
Files.write(Paths.get(plugin.getPath(), "MANIFEST.MF"), getPlugin1Manifest(), charset); |
|
|
|
|
|
|
|
|
|
plugin = testFolder.newFolder("test-plugin-2", "classes", "META-INF"); |
|
|
|
|
Files.write(Paths.get(plugin.getPath(), "extensions.idx"), "ro.fortsoft.pf4j.demo.hello.HelloPlugin$HelloGreeting".getBytes()); |
|
|
|
|
Files.write(Paths.get(plugin.getPath(), "MANIFEST.MF"), getPlugin2Manifest(), charset); |
|
|
|
|
|
|
|
|
|
// Empty Plugin
|
|
|
|
|
testFolder.newFolder("test-plugin-3"); |
|
|
|
|
|
|
|
|
|
// No Plugin Class
|
|
|
|
|
plugin = testFolder.newFolder("test-plugin-4", "classes", "META-INF"); |
|
|
|
|
Files.write(Paths.get(plugin.getPath(), "extensions.idx"), "ro.fortsoft.pf4j.demo.hello.HelloPlugin$HelloGreeting".getBytes()); |
|
|
|
|
Files.write(Paths.get(plugin.getPath(), "MANIFEST.MF"), getPlugin4Manifest(), charset); |
|
|
|
|
|
|
|
|
|
// No Plugin Version
|
|
|
|
|
plugin = testFolder.newFolder("test-plugin-5", "classes", "META-INF"); |
|
|
|
|
Files.write(Paths.get(plugin.getPath(), "extensions.idx"), "ro.fortsoft.pf4j.demo.hello.HelloPlugin$HelloGreeting".getBytes()); |
|
|
|
|
Files.write(Paths.get(plugin.getPath(), "MANIFEST.MF"), getPlugin5Manifest(), charset); |
|
|
|
|
|
|
|
|
|
// No Plugin Id
|
|
|
|
|
plugin = testFolder.newFolder("test-plugin-6", "classes", "META-INF"); |
|
|
|
|
Files.write(Paths.get(plugin.getPath(), "extensions.idx"), "ro.fortsoft.pf4j.demo.hello.HelloPlugin$HelloGreeting".getBytes()); |
|
|
|
|
Files.write(Paths.get(plugin.getPath(), "MANIFEST.MF"), getPlugin6Manifest(), charset); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Test of find method, of class ManifestPluginDescriptorFinder. |
|
|
|
|
*/ |
|
|
|
|
@Test |
|
|
|
|
public void testFind() throws Exception { |
|
|
|
|
DefaultPluginDescriptorFinder instance = new DefaultPluginDescriptorFinder(new PluginClasspath()); |
|
|
|
|
URL url = getClass().getResource("/test-plugin-1"); |
|
|
|
|
PluginDescriptor plugin1 = instance.find(new File(url.getPath())); |
|
|
|
|
url = getClass().getResource("/test-plugin-2"); |
|
|
|
|
PluginDescriptor plugin2 = instance.find(new File(url.getPath())); |
|
|
|
|
|
|
|
|
|
PluginDescriptor plugin1 = instance.find(Paths.get(testFolder.getRoot().getPath(),"test-plugin-1").toFile()); |
|
|
|
|
|
|
|
|
|
PluginDescriptor plugin2 = instance.find(Paths.get(testFolder.getRoot().getPath(),"test-plugin-2").toFile()); |
|
|
|
|
|
|
|
|
|
assertEquals("test-plugin-1", plugin1.getPluginId()); |
|
|
|
|
assertEquals("Test Plugin 1", plugin1.getPluginDescription()); |
|
|
|
@ -67,41 +109,146 @@ public class ManifestPluginDescriptorFinderTest {
|
|
|
|
|
public void testFindNotFound() throws Exception { |
|
|
|
|
|
|
|
|
|
ManifestPluginDescriptorFinder instance = new DefaultPluginDescriptorFinder(new PluginClasspath()); |
|
|
|
|
URL url = getClass().getResource("/test-plugin-3"); |
|
|
|
|
PluginDescriptor result = instance.find(new File(url.getPath())); |
|
|
|
|
PluginDescriptor result = instance.find(Paths.get(testFolder.getRoot().getPath(),"test-plugin-3").toFile()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Test of find method, of class ManifestPluginDescriptorFinder. |
|
|
|
|
*/ |
|
|
|
|
@Test(expected = PluginException.class) |
|
|
|
|
public void testFindMissingPluginId() throws Exception { |
|
|
|
|
public void testFindMissingPluginClass() throws Exception { |
|
|
|
|
|
|
|
|
|
ManifestPluginDescriptorFinder instance = new DefaultPluginDescriptorFinder(new PluginClasspath()); |
|
|
|
|
URL url = getClass().getResource("/test-plugin-6"); |
|
|
|
|
PluginDescriptor result = instance.find(new File(url.getPath())); |
|
|
|
|
PluginDescriptor result = instance.find(Paths.get(testFolder.getRoot().getPath(),"test-plugin-4").toFile()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Test of find method, of class ManifestPluginDescriptorFinder. |
|
|
|
|
*/ |
|
|
|
|
@Test(expected = PluginException.class) |
|
|
|
|
public void testFindMissingPluginClass() throws Exception { |
|
|
|
|
public void testFindMissingPluginVersion() throws Exception { |
|
|
|
|
|
|
|
|
|
ManifestPluginDescriptorFinder instance = new DefaultPluginDescriptorFinder(new PluginClasspath()); |
|
|
|
|
URL url = getClass().getResource("/test-plugin-4"); |
|
|
|
|
PluginDescriptor result = instance.find(new File(url.getPath())); |
|
|
|
|
PluginDescriptor result = instance.find(Paths.get(testFolder.getRoot().getPath(),"test-plugin-5").toFile()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Test of find method, of class ManifestPluginDescriptorFinder. |
|
|
|
|
*/ |
|
|
|
|
@Test(expected = PluginException.class) |
|
|
|
|
public void testFindMissingPluginVersion() throws Exception { |
|
|
|
|
public void testFindMissingPluginId() throws Exception { |
|
|
|
|
|
|
|
|
|
ManifestPluginDescriptorFinder instance = new DefaultPluginDescriptorFinder(new PluginClasspath()); |
|
|
|
|
URL url = getClass().getResource("/test-plugin-5"); |
|
|
|
|
PluginDescriptor result = instance.find(new File(url.getPath())); |
|
|
|
|
PluginDescriptor result = instance.find(Paths.get(testFolder.getRoot().getPath(),"test-plugin-6").toFile()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private List<String> getPlugin1Manifest() { |
|
|
|
|
|
|
|
|
|
String[] lines = new String[]{"Manifest-Version: 1.0\n" |
|
|
|
|
+ "Implementation-Title: Test Plugin #1\n" |
|
|
|
|
+ "Implementation-Version: 0.10.0-SNAPSHOT\n" |
|
|
|
|
+ "Archiver-Version: Plexus Archiver\n" |
|
|
|
|
+ "Built-By: Mario Franco\n" |
|
|
|
|
+ "Specification-Title: Test Plugin #1\n" |
|
|
|
|
+ "Implementation-Vendor-Id: ro.fortsoft.pf4j.demo\n" |
|
|
|
|
+ "Plugin-Version: 0.0.1\n" |
|
|
|
|
+ "Plugin-Id: test-plugin-1\n" |
|
|
|
|
+ "Plugin-Description: Test Plugin 1\n" |
|
|
|
|
+ "Plugin-Provider: Decebal Suiu\n" |
|
|
|
|
+ "Plugin-Class: ro.fortsoft.pf4j.plugin.TestPlugin\n" |
|
|
|
|
+ "Plugin-Dependencies: test-plugin-2,test-plugin-3@~1.0\n" |
|
|
|
|
+ "Plugin-Requires: *\n" |
|
|
|
|
+ "Created-By: Apache Maven 3.0.5\n" |
|
|
|
|
+ "Build-Jdk: 1.8.0_45\n" |
|
|
|
|
+ "Specification-Version: 0.10.0-SNAPSHOT\n" |
|
|
|
|
+ "\n" |
|
|
|
|
+ ""}; |
|
|
|
|
|
|
|
|
|
return Arrays.asList(lines); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private List<String> getPlugin2Manifest() { |
|
|
|
|
|
|
|
|
|
String[] lines = new String[]{"Manifest-Version: 1.0\n" |
|
|
|
|
+ "Plugin-Dependencies: \n" |
|
|
|
|
+ "Implementation-Title: Test Plugin #2\n" |
|
|
|
|
+ "Implementation-Version: 0.10.0-SNAPSHOT\n" |
|
|
|
|
+ "Archiver-Version: Plexus Archiver\n" |
|
|
|
|
+ "Built-By: Mario Franco\n" |
|
|
|
|
+ "Specification-Title: Test Plugin #2\n" |
|
|
|
|
+ "Implementation-Vendor-Id: ro.fortsoft.pf4j.demo\n" |
|
|
|
|
+ "Plugin-Version: 0.0.1\n" |
|
|
|
|
+ "Plugin-Id: test-plugin-2\n" |
|
|
|
|
+ "Plugin-Provider: Decebal Suiu\n" |
|
|
|
|
+ "Plugin-Class: ro.fortsoft.pf4j.plugin.TestPlugin\n" |
|
|
|
|
+ "Created-By: Apache Maven 3.0.5\n" |
|
|
|
|
+ "Build-Jdk: 1.8.0_45\n" |
|
|
|
|
+ "Specification-Version: 0.10.0-SNAPSHOT\n" |
|
|
|
|
+ "\n" |
|
|
|
|
+ ""}; |
|
|
|
|
|
|
|
|
|
return Arrays.asList(lines); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private List<String> getPlugin4Manifest() { |
|
|
|
|
|
|
|
|
|
String[] lines = new String[]{"Manifest-Version: 1.0\n" |
|
|
|
|
+ "Implementation-Title: Test Plugin #4\n" |
|
|
|
|
+ "Implementation-Version: 0.10.0-SNAPSHOT\n" |
|
|
|
|
+ "Archiver-Version: Plexus Archiver\n" |
|
|
|
|
+ "Built-By: Mario Franco\n" |
|
|
|
|
+ "Specification-Title: Test Plugin #4\n" |
|
|
|
|
+ "Implementation-Vendor-Id: ro.fortsoft.pf4j.demo\n" |
|
|
|
|
+ "Plugin-Version: 0.0.1\n" |
|
|
|
|
+ "Plugin-Id: test-plugin-2\n" |
|
|
|
|
+ "Plugin-Provider: Decebal Suiu\n" |
|
|
|
|
+ "Created-By: Apache Maven 3.0.5\n" |
|
|
|
|
+ "Build-Jdk: 1.8.0_45\n" |
|
|
|
|
+ "Specification-Version: 0.10.0-SNAPSHOT\n" |
|
|
|
|
+ "\n" |
|
|
|
|
+ ""}; |
|
|
|
|
|
|
|
|
|
return Arrays.asList(lines); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private List<String> getPlugin5Manifest() { |
|
|
|
|
|
|
|
|
|
String[] lines = new String[]{"Manifest-Version: 1.0\n" |
|
|
|
|
+ "Implementation-Title: Test Plugin #5\n" |
|
|
|
|
+ "Implementation-Version: 0.10.0-SNAPSHOT\n" |
|
|
|
|
+ "Archiver-Version: Plexus Archiver\n" |
|
|
|
|
+ "Built-By: Mario Franco\n" |
|
|
|
|
+ "Specification-Title: Test Plugin #5\n" |
|
|
|
|
+ "Implementation-Vendor-Id: ro.fortsoft.pf4j.demo\n" |
|
|
|
|
+ "Plugin-Id: test-plugin-2\n" |
|
|
|
|
+ "Plugin-Provider: Decebal Suiu\n" |
|
|
|
|
+ "Plugin-Class: ro.fortsoft.pf4j.plugin.TestPlugin\n" |
|
|
|
|
+ "Created-By: Apache Maven 3.0.5\n" |
|
|
|
|
+ "Build-Jdk: 1.8.0_45\n" |
|
|
|
|
+ "Specification-Version: 0.10.0-SNAPSHOT\n" |
|
|
|
|
+ "\n" |
|
|
|
|
+ ""}; |
|
|
|
|
|
|
|
|
|
return Arrays.asList(lines); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private List<String> getPlugin6Manifest() { |
|
|
|
|
|
|
|
|
|
String[] lines = new String[]{"Manifest-Version: 1.0\n" |
|
|
|
|
+ "Implementation-Title: Test Plugin #6\n" |
|
|
|
|
+ "Implementation-Version: 0.10.0-SNAPSHOT\n" |
|
|
|
|
+ "Archiver-Version: Plexus Archiver\n" |
|
|
|
|
+ "Built-By: Mario Franco\n" |
|
|
|
|
+ "Specification-Title: Test Plugin #6\n" |
|
|
|
|
+ "Implementation-Vendor-Id: ro.fortsoft.pf4j.demo\n" |
|
|
|
|
+ "Plugin-Provider: Decebal Suiu\n" |
|
|
|
|
+ "Plugin-Class: ro.fortsoft.pf4j.plugin.TestPlugin\n" |
|
|
|
|
+ "Created-By: Apache Maven 3.0.5\n" |
|
|
|
|
+ "Build-Jdk: 1.8.0_45\n" |
|
|
|
|
+ "Specification-Version: 0.10.0-SNAPSHOT\n" |
|
|
|
|
+ "\n" |
|
|
|
|
+ ""}; |
|
|
|
|
|
|
|
|
|
return Arrays.asList(lines); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|