Ticket #16010: v2-0019-tests-add-PluginHandlerJOSMTooOldTest.patch

File v2-0019-tests-add-PluginHandlerJOSMTooOldTest.patch, 27.0 KB (added by ris, 11 months ago)
  • new file 2001

    From a4cd57b6a24e2b6e38c48a9624d306500db7359f Mon Sep 17 00:00:00 2001
    From: Robert Scott <code@humanleg.org.uk>
    Date: Sat, 24 Feb 2018 11:48:11 +0000
    Subject: [PATCH v2 19/28] tests: add PluginHandlerJOSMTooOldTest
    
    this test is a good example which exercises ExtendedDialogMocker and
    HelpAwareOptionPaneMocker. also consolidate dummy plugins together in
    __files/ directory
    ---
     test/data/__files/plugin/baz_plugin.v6.jar         | Bin 0 -> 2890 bytes
     test/data/__files/plugin/baz_plugin.v7.jar         | Bin 0 -> 2999 bytes
     test/data/__files/plugin/dummy_plugin.v31701.jar   | Bin 0 -> 3130 bytes
     .../{dummy_plugin.jar => dummy_plugin.v31772.jar}  | Bin
     test/data/plugin/dummy_plugin.jar                  | Bin 3043 -> 0 bytes
     .../downloadtasks/PluginDownloadTaskTest.java      |   4 +-
     .../preferences/plugin/PluginPreferenceTest.java   |   2 +-
     .../josm/plugins/PluginHandlerJOSMTooOldTest.java  | 276 +++++++++++++++++++++
     8 files changed, 279 insertions(+), 3 deletions(-)
     create mode 100644 test/data/__files/plugin/baz_plugin.v6.jar
     create mode 100644 test/data/__files/plugin/baz_plugin.v7.jar
     create mode 100644 test/data/__files/plugin/dummy_plugin.v31701.jar
     rename test/data/__files/plugin/{dummy_plugin.jar => dummy_plugin.v31772.jar} (100%)
     delete mode 100644 test/data/plugin/dummy_plugin.jar
     create mode 100644 test/unit/org/openstreetmap/josm/plugins/PluginHandlerJOSMTooOldTest.java
    
    diff --git a/test/data/__files/plugin/baz_plugin.v6.jar b/test/data/__files/plugin/baz_plugin.v6.jar
    new file mode 100644
    index 0000000000000000000000000000000000000000..5e4210de44b2646bbc56ea847ce3dbc507e191e7
    GIT binary patch
    literal 2890
    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
    XE8qgWSwXED1|A^P24)>jaHALig%OZ+
  • new file 0

    literal 0
    HcmV?d00001
    
    diff --git a/test/data/__files/plugin/baz_plugin.v7.jar b/test/data/__files/plugin/baz_plugin.v7.jar
    new file mode 100644
    index 0000000000000000000000000000000000000000..e00bd97b820bfbc096eff5ab30b3b32cc98e1d02
    GIT binary patch
    literal 2999
    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
  • new file 0

    literal 0
    HcmV?d00001
    
    diff --git a/test/data/__files/plugin/dummy_plugin.v31701.jar b/test/data/__files/plugin/dummy_plugin.v31701.jar
    new file mode 100644
    index 0000000000000000000000000000000000000000..530f5fc107b7869d3b437c76bb8eb53ba2ebd301
    GIT binary patch
    literal 3130
    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
    RWdj++1B59+Cm#TJ0szu62Ic?&
  • deleted file literal

    literal 0
    HcmV?d00001
    
    diff --git a/test/data/__files/plugin/dummy_plugin.jar b/test/data/__files/plugin/dummy_plugin.v31772.jar
    similarity index 100%
    rename from test/data/__files/plugin/dummy_plugin.jar
    rename to test/data/__files/plugin/dummy_plugin.v31772.jar
    diff --git a/test/data/plugin/dummy_plugin.jar b/test/data/plugin/dummy_plugin.jar
    deleted file mode 100644
    index 0a1f4086917323129dc8fda92a29389be0d053ff..0000000000000000000000000000000000000000
    GIT binary patch
    literal 0
    HcmV?d00001
  • test/unit/org/openstreetmap/josm/actions/downloadtasks/PluginDownloadTaskTest.java

    literal 3043
    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
    
    diff --git a/test/unit/org/openstreetmap/josm/actions/downloadtasks/PluginDownloadTaskTest.java b/test/unit/org/openstreetmap/josm/actions/downloadtasks/PluginDownloadTaskTest.java
    index 39de9a2b3..f9e3a0668 100644
    a b public class PluginDownloadTaskTest extends AbstractDownloadTaskTestParent { 
    5555     */
    5656    @Test
    5757    public void testUpdatePluginValid() throws Exception {
    58         this.pluginPath = "plugin/dummy_plugin.jar";
     58        this.pluginPath = "plugin/dummy_plugin.v31772.jar";
    5959        this.mockHttp();
    6060
    6161        final File srcPluginFile = new File(
    public class PluginDownloadTaskTest extends AbstractDownloadTaskTestParent { 
    7373        }
    7474
    7575        // get PluginInformation from jar file
    76         final PluginInformation pluginInformation = new PluginInformation(srcPluginFile);
     76        final PluginInformation pluginInformation = new PluginInformation(srcPluginFile, "dummy_plugin");
    7777        // ...and grafting on the downloadlink
    7878        pluginInformation.downloadlink = this.getRemoteFileUrl();
    7979
  • test/unit/org/openstreetmap/josm/gui/preferences/plugin/PluginPreferenceTest.java

    diff --git a/test/unit/org/openstreetmap/josm/gui/preferences/plugin/PluginPreferenceTest.java b/test/unit/org/openstreetmap/josm/gui/preferences/plugin/PluginPreferenceTest.java
    index 7c89cd081..dc2c05575 100644
    a b public class PluginPreferenceTest { 
    5050     */
    5151    public static PluginInformation getDummyPluginInformation() throws PluginException {
    5252        return new PluginInformation(
    53                 new File(TestUtils.getTestDataRoot() + "plugin/dummy_plugin.jar"), "dummy_plugin");
     53                new File(TestUtils.getTestDataRoot() + "__files/plugin/dummy_plugin.v31772.jar"), "dummy_plugin");
    5454    }
    5555
    5656    /**
  • new file test/unit/org/openstreetmap/josm/plugins/PluginHandlerJOSMTooOldTest.java

    diff --git a/test/unit/org/openstreetmap/josm/plugins/PluginHandlerJOSMTooOldTest.java b/test/unit/org/openstreetmap/josm/plugins/PluginHandlerJOSMTooOldTest.java
    new file mode 100644
    index 000000000..66499ec93
    - +  
     1// License: GPL. For details, see LICENSE file.
     2package org.openstreetmap.josm.plugins;
     3
     4import static org.junit.Assert.assertEquals;
     5import static org.junit.Assert.assertFalse;
     6import static org.junit.Assert.assertNotEquals;
     7
     8import java.io.File;
     9import java.nio.file.Files;
     10import java.util.List;
     11
     12import org.junit.Before;
     13import org.junit.Rule;
     14import org.junit.Test;
     15import org.openstreetmap.josm.Main;
     16import org.openstreetmap.josm.TestUtils;
     17import org.openstreetmap.josm.spi.preferences.Config;
     18import org.openstreetmap.josm.testutils.ExtendedDialogMocker;
     19import org.openstreetmap.josm.testutils.HelpAwareOptionPaneMocker;
     20import org.openstreetmap.josm.testutils.JOSMTestRules;
     21import org.openstreetmap.josm.testutils.PluginServer;
     22
     23import com.google.common.collect.ImmutableList;
     24import com.google.common.collect.ImmutableMap;
     25
     26import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
     27
     28import com.github.tomakehurst.wiremock.client.WireMock;
     29import com.github.tomakehurst.wiremock.junit.WireMockRule;
     30
     31import static com.github.tomakehurst.wiremock.core.WireMockConfiguration.options;
     32
     33/**
     34 * Test parts of {@link PluginHandler} class when the reported JOSM version is too old for the plugin.
     35 */
     36public class PluginHandlerJOSMTooOldTest {
     37    /**
     38     * Setup test.
     39     */
     40    @Rule
     41    @SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
     42    public JOSMTestRules test = new JOSMTestRules().preferences().main().assumeRevision(
     43        "Revision: 6000\n"
     44    );
     45
     46    /**
     47     * Plugin server mock.
     48     */
     49    @Rule
     50    public WireMockRule pluginServerRule = new WireMockRule(
     51        options().dynamicPort().usingFilesUnderDirectory(TestUtils.getTestDataRoot())
     52    );
     53
     54    @Before
     55    public void setUp() throws Exception {
     56        Config.getPref().putInt("pluginmanager.version", 999);
     57        Config.getPref().put("pluginmanager.lastupdate", "999");
     58        Config.getPref().putList("pluginmanager.sites",
     59            ImmutableList.of(String.format("http://localhost:%s/plugins", this.pluginServerRule.port()))
     60        );
     61
     62        this.referenceDummyJarOld = new File(TestUtils.getTestDataRoot(), "__files/plugin/dummy_plugin.v31701.jar");
     63        this.referenceDummyJarNew = new File(TestUtils.getTestDataRoot(), "__files/plugin/dummy_plugin.v31772.jar");
     64        this.referenceBazJarOld = new File(TestUtils.getTestDataRoot(), "__files/plugin/baz_plugin.v6.jar");
     65        this.referenceBazJarNew = new File(TestUtils.getTestDataRoot(), "__files/plugin/baz_plugin.v7.jar");
     66        this.pluginDir = Main.pref.getPluginsDirectory();
     67        this.targetDummyJar = new File(this.pluginDir, "dummy_plugin.jar");
     68        this.targetDummyJarNew = new File(this.pluginDir, "dummy_plugin.jar.new");
     69        this.targetBazJar = new File(this.pluginDir, "baz_plugin.jar");
     70        this.targetBazJarNew = new File(this.pluginDir, "baz_plugin.jar.new");
     71        this.pluginDir.mkdirs();
     72    }
     73
     74    private File pluginDir;
     75    private File referenceDummyJarOld;
     76    private File referenceDummyJarNew;
     77    private File referenceBazJarOld;
     78    private File referenceBazJarNew;
     79    private File targetDummyJar;
     80    private File targetDummyJarNew;
     81    private File targetBazJar;
     82    private File targetBazJarNew;
     83
     84    private final String bazPluginVersionReqString = "JOSM version 8,001 required for plugin baz_plugin.";
     85    private final String dummyPluginVersionReqString = "JOSM version 7,001 required for plugin dummy_plugin.";
     86    private final String dummyPluginFailedString = "<html>Updating the following plugin has failed:<ul><li>dummy_plugin</li></ul>"
     87        + "Please open the Preference Dialog after JOSM has started and try to update it manually.</html>";
     88
     89    /**
     90     * test update of plugins when those plugins turn out to require a higher JOSM version, but the
     91     * user chooses to update them anyway.
     92     */
     93    @Test
     94    public void testUpdatePluginsDownloadBoth() throws Exception {
     95        final PluginServer pluginServer = new PluginServer(
     96            new PluginServer.RemotePlugin(this.referenceDummyJarNew),
     97            new PluginServer.RemotePlugin(this.referenceBazJarNew)
     98        );
     99        pluginServer.applyToWireMockServer(this.pluginServerRule);
     100        Config.getPref().putList("plugins", ImmutableList.of("dummy_plugin", "baz_plugin"));
     101
     102        final ExtendedDialogMocker edMocker = new ExtendedDialogMocker(ImmutableMap.<String, Object>builder()
     103            .put(this.bazPluginVersionReqString, "Download Plugin")
     104            .put(this.dummyPluginVersionReqString, "Download Plugin")
     105            .build()
     106        );
     107
     108        Files.copy(this.referenceDummyJarOld.toPath(), this.targetDummyJar.toPath());
     109        Files.copy(this.referenceBazJarOld.toPath(), this.targetBazJar.toPath());
     110
     111        final List<PluginInformation> updatedPlugins = PluginHandler.updatePlugins(
     112            Main.parent,
     113            null,
     114            null,
     115            false
     116        ).stream().sorted((a, b) -> a.name.compareTo(b.name)).collect(ImmutableList.toImmutableList());
     117
     118        assertEquals(
     119            ImmutableList.of(
     120                this.dummyPluginVersionReqString,
     121                this.bazPluginVersionReqString
     122            ),
     123            edMocker.getInvocationLog().stream().map(
     124                invocationEntry -> invocationEntry[1]
     125            ).sorted().collect(ImmutableList.toImmutableList())
     126        );
     127
     128        assertEquals(2, updatedPlugins.size());
     129
     130        assertEquals(updatedPlugins.get(0).name, "baz_plugin");
     131        assertEquals("7", updatedPlugins.get(0).localversion);
     132
     133        assertEquals(updatedPlugins.get(1).name, "dummy_plugin");
     134        assertEquals("31772", updatedPlugins.get(1).localversion);
     135
     136        assertFalse(targetDummyJarNew.exists());
     137        assertFalse(targetBazJarNew.exists());
     138
     139        TestUtils.assertFileContentsEqual(this.referenceDummyJarNew, this.targetDummyJar);
     140        TestUtils.assertFileContentsEqual(this.referenceBazJarNew, this.targetBazJar);
     141
     142        this.pluginServerRule.verify(1, WireMock.getRequestedFor(WireMock.urlEqualTo("/plugins")));
     143        this.pluginServerRule.verify(1, WireMock.getRequestedFor(WireMock.urlEqualTo("/plugin/dummy_plugin.v31772.jar")));
     144        this.pluginServerRule.verify(1, WireMock.getRequestedFor(WireMock.urlEqualTo("/plugin/baz_plugin.v7.jar")));
     145
     146        assertEquals(Config.getPref().getInt("pluginmanager.version", 111), 6000);
     147        // not mocking the time so just check it's not its original value
     148        assertNotEquals(Config.getPref().get("pluginmanager.lastupdate", "999"), "999");
     149    }
     150
     151    /**
     152     * test update of plugins when those plugins turn out to require a higher JOSM version, but the
     153     * user chooses to update one and skip the other.
     154     */
     155    @Test
     156    public void testUpdatePluginsSkipOne() throws Exception {
     157        final PluginServer pluginServer = new PluginServer(
     158            new PluginServer.RemotePlugin(this.referenceDummyJarNew),
     159            new PluginServer.RemotePlugin(this.referenceBazJarNew)
     160        );
     161        pluginServer.applyToWireMockServer(this.pluginServerRule);
     162        Config.getPref().putList("plugins", ImmutableList.of("dummy_plugin", "baz_plugin"));
     163
     164        final ExtendedDialogMocker edMocker = new ExtendedDialogMocker(ImmutableMap.<String, Object>builder()
     165            .put(this.bazPluginVersionReqString, "Download Plugin")
     166            .put(this.dummyPluginVersionReqString, "Skip Download")
     167            .build()
     168        );
     169        final HelpAwareOptionPaneMocker haMocker = new HelpAwareOptionPaneMocker(ImmutableMap.<String, Object>builder()
     170            .put(this.dummyPluginFailedString, "OK")
     171            .build()
     172        );
     173
     174        Files.copy(this.referenceDummyJarOld.toPath(), this.targetDummyJar.toPath());
     175        Files.copy(this.referenceBazJarOld.toPath(), this.targetBazJar.toPath());
     176
     177        final List<PluginInformation> updatedPlugins = PluginHandler.updatePlugins(
     178            Main.parent,
     179            null,
     180            null,
     181            false
     182        ).stream().sorted((a, b) -> a.name.compareTo(b.name)).collect(ImmutableList.toImmutableList());
     183
     184        assertEquals(
     185            ImmutableList.of(
     186                this.dummyPluginVersionReqString,
     187                this.bazPluginVersionReqString
     188            ),
     189            edMocker.getInvocationLog().stream().map(
     190                invocationEntry -> invocationEntry[1]
     191            ).sorted().collect(ImmutableList.toImmutableList())
     192        );
     193
     194        assertEquals(
     195            ImmutableList.of(
     196                this.dummyPluginFailedString
     197            ),
     198            haMocker.getInvocationLog().stream().map(
     199                invocationEntry -> invocationEntry[1]
     200            ).sorted().collect(ImmutableList.toImmutableList())
     201        );
     202
     203        assertEquals(2, updatedPlugins.size());
     204
     205        assertEquals(updatedPlugins.get(0).name, "baz_plugin");
     206        assertEquals("7", updatedPlugins.get(0).localversion);
     207
     208        assertEquals(updatedPlugins.get(1).name, "dummy_plugin");
     209        assertEquals("31701", updatedPlugins.get(1).localversion);
     210
     211        assertFalse(targetDummyJarNew.exists());
     212        assertFalse(targetBazJarNew.exists());
     213
     214        TestUtils.assertFileContentsEqual(this.referenceDummyJarOld, this.targetDummyJar);
     215        TestUtils.assertFileContentsEqual(this.referenceBazJarNew, this.targetBazJar);
     216
     217        this.pluginServerRule.verify(1, WireMock.getRequestedFor(WireMock.urlEqualTo("/plugins")));
     218        this.pluginServerRule.verify(0, WireMock.getRequestedFor(WireMock.urlEqualTo("/plugin/dummy_plugin.v31772.jar")));
     219        this.pluginServerRule.verify(1, WireMock.getRequestedFor(WireMock.urlEqualTo("/plugin/baz_plugin.v7.jar")));
     220
     221        // shouldn't have been updated
     222        assertEquals(Config.getPref().getInt("pluginmanager.version", 111), 999);
     223        assertEquals(Config.getPref().get("pluginmanager.lastupdate", "999"), "999");
     224    }
     225
     226    /**
     227     * When the plugin list suggests that the jar file at the provided URL *doesn't* require a newer JOSM
     228     * but in fact the plugin served *does*, it is installed anyway.
     229     *
     230     * This is probably NOT desirable and should be fixed, however this test documents the behaviour.
     231     */
     232    @Test
     233    public void testUpdatePluginsUnexpectedlyJOSMTooOld() throws Exception {
     234        final PluginServer pluginServer = new PluginServer(
     235            new PluginServer.RemotePlugin(this.referenceDummyJarNew),
     236            new PluginServer.RemotePlugin(this.referenceBazJarNew, ImmutableMap.of(
     237                "Plugin-Mainversion", "5500"
     238            ))
     239        );
     240        pluginServer.applyToWireMockServer(this.pluginServerRule);
     241        Config.getPref().putList("plugins", ImmutableList.of("baz_plugin"));
     242
     243        // setting up blank ExtendedDialogMocker which would raise an exception if any attempt to show
     244        // and ExtendedDialog were made
     245        new ExtendedDialogMocker();
     246
     247        Files.copy(this.referenceBazJarOld.toPath(), this.targetBazJar.toPath());
     248
     249        final List<PluginInformation> updatedPlugins = ImmutableList.copyOf(PluginHandler.updatePlugins(
     250            Main.parent,
     251            null,
     252            null,
     253            false
     254        ));
     255
     256        // questionably correct
     257        assertEquals(1, updatedPlugins.size());
     258
     259        // questionably correct
     260        assertEquals(updatedPlugins.get(0).name, "baz_plugin");
     261        assertEquals("7", updatedPlugins.get(0).localversion);
     262
     263        assertFalse(targetBazJarNew.exists());
     264
     265        // questionably correct
     266        TestUtils.assertFileContentsEqual(this.referenceBazJarNew, this.targetBazJar);
     267
     268        this.pluginServerRule.verify(1, WireMock.getRequestedFor(WireMock.urlEqualTo("/plugins")));
     269        // questionably correct
     270        this.pluginServerRule.verify(1, WireMock.getRequestedFor(WireMock.urlEqualTo("/plugin/baz_plugin.v7.jar")));
     271
     272        // should have been updated
     273        assertEquals(Config.getPref().getInt("pluginmanager.version", 111), 6000);
     274        assertNotEquals(Config.getPref().get("pluginmanager.lastupdate", "999"), "999");
     275    }
     276}