Ticket #16010: v1-0005-tests-add-PluginHandlerUpdatePluginsTest.patch
File v1-0005-tests-add-PluginHandlerUpdatePluginsTest.patch, 10.0 KB (added by , 7 years ago) |
---|
-
new file test/data/__files/plugin/MANIFEST.MF
From 3519931dd4381beb80da80111bdaf421f4b8f268 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 v1 5/5] tests: add PluginHandlerUpdatePluginsTest --- test/data/__files/plugin/MANIFEST.MF | 12 +++ test/data/__files/plugin/baz_plugin.jar | Bin 0 -> 2999 bytes test/data/plugin/remotePluginsList | 25 +++++ .../plugins/PluginHandlerUpdatePluginsTest.java | 114 +++++++++++++++++++++ 4 files changed, 151 insertions(+) create mode 100644 test/data/__files/plugin/MANIFEST.MF create mode 100644 test/data/__files/plugin/baz_plugin.jar create mode 100644 test/data/plugin/remotePluginsList create mode 100644 test/unit/org/openstreetmap/josm/plugins/PluginHandlerUpdatePluginsTest.java diff --git a/test/data/__files/plugin/MANIFEST.MF b/test/data/__files/plugin/MANIFEST.MF new file mode 100644 index 000000000..fd0ed67e3
- + 1 Manifest-Version: 1.0 2 Ant-Version: Apache Ant 1.9.6 3 Created-By: 1.8.0_141-15 (Oracle Corporation) 4 Plugin-Mainversion: 8001 5 Plugin-Version: 7 6 Plugin-Class: org.openstreetmap.josm.plugins.baz.BazPlugin 7 Plugin-Description: A functionless example plugin 8 Plugin-Date: 2017-12-31T00:58:30.642 9 Author: Author A 10 Plugin-Link: https://example.com/author-a/josm-baz 11 Plugin-Icon: images/icons/24x24/baz.png 12 -
new file test/data/__files/plugin/baz_plugin.jar
diff --git a/test/data/__files/plugin/baz_plugin.jar b/test/data/__files/plugin/baz_plugin.jar new file mode 100644 index 0000000000000000000000000000000000000000..e00bd97b820bfbc096eff5ab30b3b32cc98e1d02 GIT binary patch literal 2999 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
-
new file test/data/plugin/remotePluginsList
literal 0 HcmV?d00001 diff --git a/test/data/plugin/remotePluginsList b/test/data/plugin/remotePluginsList new file mode 100644 index 000000000..c2c2df93b
- + 1 dummy_plugin.jar;http://localhost:%1$s/plugin/dummy_plugin.jar 2 Manifest-Version: 1.0 3 Ant-Version: Apache Ant 1.9.6 4 Author: Don-vip 5 Created-By: 1.7.0_91-b02 (Oracle Corporation) 6 Plugin-Canloadatruntime: true 7 Plugin-Class: org.openstreetmap.josm.plugins.fr.epci.EpciPlugin 8 Plugin-Date: 2015-11-19T08:21:07.645033Z 9 Plugin-Description: Handling of French EPCIs (boundary=local_authority) 10 Plugin-Early: true 11 Plugin-Link: http://wiki.openstreetmap.org/wiki/FR:JOSM/Fr:Plugin/EPCI-fr 12 Plugin-Mainversion: 7001 13 Plugin-Version: 31772 14 baz_plugin.jar;http://localhost:%1$s/plugin/baz_plugin.jar 15 Manifest-Version: 1.0 16 Ant-Version: Apache Ant 1.9.6 17 Created-By: 1.8.0_141-15 (Oracle Corporation) 18 Plugin-Mainversion: 8001 19 Plugin-Version: 7 20 Plugin-Class: org.openstreetmap.josm.plugins.baz.BazPlugin 21 Plugin-Description: A functionless example plugin 22 Plugin-Date: 2017-12-31T00:58:30.642 23 Author: Author A 24 Plugin-Link: https://example.com/author-a/josm-baz 25 Plugin-Icon: images/icons/24x24/baz.png -
new file test/unit/org/openstreetmap/josm/plugins/PluginHandlerUpdatePluginsTest.java
diff --git a/test/unit/org/openstreetmap/josm/plugins/PluginHandlerUpdatePluginsTest.java b/test/unit/org/openstreetmap/josm/plugins/PluginHandlerUpdatePluginsTest.java new file mode 100644 index 000000000..92455363e
- + 1 // License: GPL. For details, see LICENSE file. 2 package org.openstreetmap.josm.plugins; 3 4 import static org.junit.Assert.assertEquals; 5 import static com.github.tomakehurst.wiremock.core.WireMockConfiguration.options; 6 7 import java.io.File; 8 import java.io.FileReader; 9 import java.util.ArrayList; 10 11 import org.junit.Before; 12 import org.junit.Rule; 13 import org.junit.Test; 14 import org.openstreetmap.josm.Main; 15 import org.openstreetmap.josm.TestUtils; 16 import org.openstreetmap.josm.spi.preferences.Config; 17 import org.openstreetmap.josm.testutils.ExtendedDialogMocker; 18 import org.openstreetmap.josm.testutils.JOSMTestRules; 19 20 import com.google.common.io.CharStreams; 21 import com.google.common.collect.ImmutableList; 22 import com.google.common.collect.ImmutableMap; 23 24 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; 25 26 import com.github.tomakehurst.wiremock.client.WireMock; 27 import com.github.tomakehurst.wiremock.junit.WireMockRule; 28 29 /** 30 * Further unit tests of {@link PluginHandler} class. 31 */ 32 public class PluginHandlerUpdatePluginsTest { 33 /** 34 * Setup test. 35 */ 36 @Rule 37 @SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD") 38 public JOSMTestRules test = new JOSMTestRules().preferences().main().assumeRevision( 39 "Revision: 6000\n" 40 ); 41 42 /** 43 * HTTP mock. 44 */ 45 @Rule 46 public WireMockRule wireMockRule = new WireMockRule( 47 options().dynamicPort().usingFilesUnderDirectory(TestUtils.getTestDataRoot()) 48 ); 49 50 @Before 51 public void setUp() throws Exception { 52 try ( 53 FileReader pluginListReader = new FileReader( 54 new File(TestUtils.getTestDataRoot(), "plugin/remotePluginsList") 55 ); 56 ) { 57 final String pluginList = String.format( 58 CharStreams.toString(pluginListReader), 59 this.wireMockRule.port() 60 ); 61 62 this.wireMockRule.stubFor( 63 WireMock.get(WireMock.urlEqualTo("/plugins")).willReturn( 64 WireMock.aResponse() 65 .withStatus(200) 66 .withHeader("Content-Type", "text/plain") 67 .withBody(pluginList) 68 ) 69 ); 70 ImmutableList.of("dummy_plugin", "baz_plugin").forEach(plugin_name -> this.wireMockRule.stubFor( 71 WireMock.get(WireMock.urlEqualTo("/plugin/" + plugin_name + ".jar")).willReturn( 72 WireMock.aResponse() 73 .withStatus(200) 74 .withHeader("Content-Type", "application/java-archive") 75 .withBodyFile("plugin/" + plugin_name + ".jar") 76 ) 77 )); 78 } 79 } 80 81 /** 82 * test update of plugins when those plugins turn out to require a higher JOSM version, but the 83 * user chooses to update them anyway. 84 */ 85 @Test 86 public void testUpdatePlugins() { 87 new ExtendedDialogMocker(ImmutableMap.<String, Object>builder() 88 .put("JOSM version 8,001 required for plugin baz_plugin.", "Download Plugin") 89 .put("JOSM version 7,001 required for plugin dummy_plugin.", "Download Plugin") 90 .build() 91 ); 92 93 Config.getPref().putList("plugins", ImmutableList.of("dummy_plugin", "baz_plugin")); 94 Config.getPref().putList("pluginmanager.sites", 95 ImmutableList.of(String.format("http://localhost:%s/plugins", this.wireMockRule.port())) 96 ); 97 98 final ArrayList<PluginInformation> updatedPlugins = new ArrayList<>(PluginHandler.updatePlugins(Main.parent, null, null, false)); 99 100 updatedPlugins.sort((a, b) -> a.name.compareTo(b.name)); 101 102 assertEquals(2, updatedPlugins.size()); 103 104 assertEquals(updatedPlugins.get(0).name, "baz_plugin"); 105 assertEquals("7", updatedPlugins.get(0).localversion); 106 107 assertEquals(updatedPlugins.get(1).name, "dummy_plugin"); 108 assertEquals("31772", updatedPlugins.get(1).localversion); 109 110 this.wireMockRule.verify(1, WireMock.getRequestedFor(WireMock.urlEqualTo("/plugins"))); 111 this.wireMockRule.verify(1, WireMock.getRequestedFor(WireMock.urlEqualTo("/plugin/dummy_plugin.jar"))); 112 this.wireMockRule.verify(1, WireMock.getRequestedFor(WireMock.urlEqualTo("/plugin/baz_plugin.jar"))); 113 } 114 }