diff --git a/scm-webapp/src/test/java/sonia/scm/plugin/PluginProcessorTest.java b/scm-webapp/src/test/java/sonia/scm/plugin/PluginProcessorTest.java index 923e569d16..e78fc1db77 100644 --- a/scm-webapp/src/test/java/sonia/scm/plugin/PluginProcessorTest.java +++ b/scm-webapp/src/test/java/sonia/scm/plugin/PluginProcessorTest.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ - + package sonia.scm.plugin; //~--- non-JDK imports -------------------------------------------------------- @@ -37,6 +37,8 @@ import org.junit.Test; import org.junit.rules.TemporaryFolder; import sonia.scm.lifecycle.classloading.ClassLoaderLifeCycle; +import javax.xml.bind.JAXB; + import static org.hamcrest.Matchers.*; import static org.junit.Assert.*; @@ -53,6 +55,8 @@ import java.lang.reflect.InvocationTargetException; import java.net.URL; import java.util.Set; +import java.util.zip.ZipEntry; +import java.util.zip.ZipOutputStream; /** * @@ -96,8 +100,40 @@ public class PluginProcessorTest new PluginResource("sonia/scm/plugin/scm-f-plugin-1.0.1.smp", "scm-f-plugin.smp", "scm-f-plugin:1.0.1"); + private static final String PLUGIN_G = "sonia/scm/plugin/scm-g-plugin.xml"; + private static final String PLUGIN_H = "sonia/scm/plugin/scm-h-plugin.xml"; + private static final String PLUGIN_I = "sonia/scm/plugin/scm-i-plugin.xml"; + //~--- methods -------------------------------------------------------------- + @Test(expected = PluginConditionFailedException.class) + public void testFailedPluginCondition() throws IOException { + createPlugin(PLUGIN_G); + collectPlugins(); + } + + + @Test(expected = DependencyVersionMismatchException.class) + public void testWrongVersionOfDependency() throws IOException { + createPlugin(PLUGIN_H); + createPlugin(PLUGIN_I); + collectPlugins(); + } + + @SuppressWarnings("UnstableApiUsage") + private void createPlugin(String descriptorResource) throws IOException { + URL resource = Resources.getResource(descriptorResource); + InstalledPluginDescriptor descriptor = JAXB.unmarshal(resource, InstalledPluginDescriptor.class); + + File file = new File(pluginDirectory, descriptor.getInformation().getName() + ".smp"); + + try (ZipOutputStream zip = new ZipOutputStream(new FileOutputStream(file))) { + zip.putNextEntry(new ZipEntry("META-INF/scm/plugin.xml")); + Resources.copy(resource, zip); + } + } + + /** * Method description * diff --git a/scm-webapp/src/test/resources/sonia/scm/plugin/scm-g-plugin.xml b/scm-webapp/src/test/resources/sonia/scm/plugin/scm-g-plugin.xml new file mode 100644 index 0000000000..c6b3339938 --- /dev/null +++ b/scm-webapp/src/test/resources/sonia/scm/plugin/scm-g-plugin.xml @@ -0,0 +1,45 @@ + + + + + 2 + + + sonia.scm.plugins + scm-g-plugin + 1.0.0 + scm-g-plugin + Plugin g has a min version over 9000 + + + + 9000.0.0 + + + + sonia.scm.plugins + + + diff --git a/scm-webapp/src/test/resources/sonia/scm/plugin/scm-h-plugin.xml b/scm-webapp/src/test/resources/sonia/scm/plugin/scm-h-plugin.xml new file mode 100644 index 0000000000..fa2d0767cc --- /dev/null +++ b/scm-webapp/src/test/resources/sonia/scm/plugin/scm-h-plugin.xml @@ -0,0 +1,41 @@ + + + + + 2 + + + sonia.scm.plugins + scm-h-plugin + 1.0.0 + scm-h-plugin + Plugin h is nothing special + + + + sonia.scm.plugins + + + diff --git a/scm-webapp/src/test/resources/sonia/scm/plugin/scm-i-plugin.xml b/scm-webapp/src/test/resources/sonia/scm/plugin/scm-i-plugin.xml new file mode 100644 index 0000000000..0fd2c1999a --- /dev/null +++ b/scm-webapp/src/test/resources/sonia/scm/plugin/scm-i-plugin.xml @@ -0,0 +1,45 @@ + + + + + 2 + + + sonia.scm.plugins + scm-i-plugin + 1.0.0 + scm-i-plugin + Plugin i depends on h in version 1.2.0 + + + + sonia.scm.plugins + + + + scm-h-plugin + + +