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
+
+
+