From 1bd47434442b769e4b05531b65253cb60f38a05b Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Sun, 7 Dec 2014 18:28:24 +0100 Subject: [PATCH] added unit test for plugin updates --- .../sonia/scm/plugin/PluginProcessor.java | 21 ++++++++++++- .../sonia/scm/plugin/PluginProcessorTest.java | 29 ++++++++++++++++++ .../sonia/scm/plugin/scm-f-plugin-1.0.0.smp | Bin 0 -> 4822 bytes .../sonia/scm/plugin/scm-f-plugin-1.0.1.smp | Bin 0 -> 4826 bytes 4 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 scm-webapp/src/test/resources/sonia/scm/plugin/scm-f-plugin-1.0.0.smp create mode 100644 scm-webapp/src/test/resources/sonia/scm/plugin/scm-f-plugin-1.0.1.smp diff --git a/scm-webapp/src/main/java/sonia/scm/plugin/PluginProcessor.java b/scm-webapp/src/main/java/sonia/scm/plugin/PluginProcessor.java index 7acf7b0546..2de00a0f58 100644 --- a/scm-webapp/src/main/java/sonia/scm/plugin/PluginProcessor.java +++ b/scm-webapp/src/main/java/sonia/scm/plugin/PluginProcessor.java @@ -77,6 +77,9 @@ import javax.xml.bind.JAXBException; public final class PluginProcessor { + /** Field description */ + private static final String INSTALLEDNAME_FORMAT = "%s.%03d"; + /** Field description */ private static final String DIRECTORY_CLASSES = "classes"; @@ -640,7 +643,23 @@ public final class PluginProcessor Files.createDirectories(installedDirectory); } - Files.move(archive, installedDirectory.resolve(archive.getFileName())); + Path installed = null; + + for (int i = 0; i < 1000; i++) + { + String name = String.format(INSTALLEDNAME_FORMAT, archive.getFileName(), i); + + installed = installedDirectory.resolve(name); + + if (!Files.exists(installed)) + { + break; + } + } + + logger.debug("move installed archive to {}", installed); + + Files.move(archive, installed); } //~--- inner classes -------------------------------------------------------- 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 eaf6963e9c..694b07e54f 100644 --- a/scm-webapp/src/test/java/sonia/scm/plugin/PluginProcessorTest.java +++ b/scm-webapp/src/test/java/sonia/scm/plugin/PluginProcessorTest.java @@ -92,6 +92,16 @@ public class PluginProcessorTest new PluginResource("sonia/scm/plugin/scm-e-plugin.smp", "scm-e-plugin.smp", "sonia.scm.plugins:scm-e-plugin:1.0.0-SNAPSHOT"); + /** Field description */ + private static final PluginResource PLUGIN_F_1_0_0 = + new PluginResource("sonia/scm/plugin/scm-f-plugin-1.0.0.smp", + "scm-f-plugin.smp", "sonia.scm.plugins:scm-f-plugin:1.0.0"); + + /** Field description */ + private static final PluginResource PLUGIN_F_1_0_1 = + new PluginResource("sonia/scm/plugin/scm-f-plugin-1.0.1.smp", + "scm-f-plugin.smp", "sonia.scm.plugins:scm-f-plugin:1.0.1"); + //~--- methods -------------------------------------------------------------- /** @@ -247,6 +257,25 @@ public class PluginProcessorTest assertThat(Resources.toString(url, Charsets.UTF_8), is("hello")); } + /** + * Method description + * + * + * @throws IOException + */ + @Test + public void testUpdate() throws IOException + { + copySmp(PLUGIN_F_1_0_0); + + PluginWrapper plugin = collectAndGetFirst(); + + assertThat(plugin.getId(), is(PLUGIN_F_1_0_0.id)); + copySmp(PLUGIN_F_1_0_1); + plugin = collectAndGetFirst(); + assertThat(plugin.getId(), is(PLUGIN_F_1_0_1.id)); + } + //~--- set methods ---------------------------------------------------------- /** diff --git a/scm-webapp/src/test/resources/sonia/scm/plugin/scm-f-plugin-1.0.0.smp b/scm-webapp/src/test/resources/sonia/scm/plugin/scm-f-plugin-1.0.0.smp new file mode 100644 index 0000000000000000000000000000000000000000..cfcaae8427b446944574f877a2904199c48a28ed GIT binary patch literal 4822 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