diff --git a/pom.xml b/pom.xml index 15114b14f..168f7fc03 100644 --- a/pom.xml +++ b/pom.xml @@ -233,6 +233,10 @@ org.antlr antlr4-runtime + + org.apache.ant + ant + org.apache.commons commons-compress @@ -327,6 +331,12 @@ org.reflections reflections 0.10.2 + + + com.google.code.findbugs + jsr305 + + junit diff --git a/src/main/java/org/jenkins/tools/test/CliOptions.java b/src/main/java/org/jenkins/tools/test/CliOptions.java index ddef962ff..8028d11ea 100644 --- a/src/main/java/org/jenkins/tools/test/CliOptions.java +++ b/src/main/java/org/jenkins/tools/test/CliOptions.java @@ -29,8 +29,6 @@ import java.util.ArrayList; import java.util.List; -import javax.annotation.CheckForNull; - import org.jenkins.tools.test.model.PCTPlugin; import org.jenkins.tools.test.model.TestStatus; @@ -39,9 +37,11 @@ import com.beust.jcommander.Parameter; import com.beust.jcommander.ParameterException; +import edu.umd.cs.findbugs.annotations.CheckForNull; +import edu.umd.cs.findbugs.annotations.NonNull; + import hudson.util.VersionNumber; import java.util.Collections; -import javax.annotation.Nonnull; /** * POJO containing CLI arguments & help. @@ -232,7 +232,7 @@ public String getMavenPropertiesFile() { return mavenPropertiesFile; } - @Nonnull + @NonNull public List getMavenOptions() { return mavenOptions != null ? Collections.unmodifiableList(mavenOptions) : Collections.emptyList(); } diff --git a/src/main/java/org/jenkins/tools/test/PluginCompatTester.java b/src/main/java/org/jenkins/tools/test/PluginCompatTester.java index a2adf6ea0..13ffeacf3 100644 --- a/src/main/java/org/jenkins/tools/test/PluginCompatTester.java +++ b/src/main/java/org/jenkins/tools/test/PluginCompatTester.java @@ -25,8 +25,7 @@ */ package org.jenkins.tools.test; -import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableSet; +import edu.umd.cs.findbugs.annotations.NonNull; import hudson.AbortException; import hudson.Functions; import hudson.model.UpdateSite; @@ -39,7 +38,9 @@ import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; +import java.io.UncheckedIOException; import java.lang.reflect.Constructor; +import java.net.MalformedURLException; import java.net.URL; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; @@ -65,7 +66,6 @@ import java.util.regex.Pattern; import java.util.stream.Collectors; import java.util.stream.Stream; -import javax.annotation.Nonnull; import javax.xml.transform.Result; import javax.xml.transform.Source; import javax.xml.transform.Transformer; @@ -189,7 +189,7 @@ public PluginCompatReport testPlugins() // Scan bundled plugins // If there is any bundled plugin, only these plugins will be taken under the consideration for the PCT run - UpdateSite.Data data = null; + UpdateSite.Data data; if (config.getBom() != null) { data = scanBom(pluginGroupIds, "([^/.]+)[.][hj]pi"); } else { @@ -457,7 +457,7 @@ private TestExecutionResult testPluginAgainst(MavenCoordinates coreCoordinates, System.out.println(String.format("%n%n%n%n%n")); File pluginCheckoutDir = new File(config.workDirectory.getAbsolutePath() + File.separator + plugin.name + File.separator); - String parentFolder = StringUtils.EMPTY; + String parentFolder = ""; try { // Run any precheckout hooks @@ -534,7 +534,7 @@ private TestExecutionResult testPluginAgainst(MavenCoordinates coreCoordinates, beforeCompile.put("pomData", pomData); beforeCompile.put("config", config); beforeCompile.put("core", coreCoordinates); - if (StringUtils.isNotEmpty(parentFolder)) { + if (parentFolder != null && !parentFolder.isEmpty()) { beforeCompile.put("parentFolder", parentFolder); } Map hookInfo = pcth.runBeforeCompilation(beforeCompile); @@ -573,7 +573,7 @@ private TestExecutionResult testPluginAgainst(MavenCoordinates coreCoordinates, List args = new ArrayList<>(); Map userProperties = mconfig.userProperties; - args.add(String.format("--define=forkCount=%s",userProperties.containsKey("forkCount") ? userProperties.get("forkCount") : "1")); + args.add(String.format("--define=forkCount=%s", userProperties.getOrDefault("forkCount", "1"))); args.add("hpi:resolve-test-dependencies"); args.add("hpi:test-hpl"); args.add("surefire:test"); @@ -597,7 +597,7 @@ private TestExecutionResult testPluginAgainst(MavenCoordinates coreCoordinates, userProperties.put("types", String.join(",", types)); // Execute with tests - runner.run(mconfig, pluginCheckoutDir, buildLogFile, args.toArray(new String[args.size()])); + runner.run(mconfig, pluginCheckoutDir, buildLogFile, args.toArray(new String[0])); return new TestExecutionResult(((PomData)forExecutionHooks.get("pomData")).getWarningMessages(), new ExecutedTestNamesSolver().solve(types, runner.getExecutedTests(), pluginCheckoutDir)); } catch (ExecutedTestNamesSolverException e) { throw new PomExecutionException(e); @@ -614,13 +614,13 @@ private TestExecutionResult testPluginAgainst(MavenCoordinates coreCoordinates, public void cloneFromSCM(PomData pomData, String name, String version, File checkoutDirectory, String tag) throws ComponentLookupException, ScmException, IOException { String scmTag = !(tag.equals("")) ? tag : getScmTag(pomData, name, version); String connectionURLPomData = pomData.getConnectionUrl(); - List connectionURLs = new ArrayList(); + List connectionURLs = new ArrayList<>(); connectionURLs.add(connectionURLPomData); if(config.getFallbackGitHubOrganization() != null){ connectionURLs = getFallbackConnectionURL(connectionURLs, connectionURLPomData, config.getFallbackGitHubOrganization()); } - Boolean repositoryCloned = false; + boolean repositoryCloned = false; String errorMessage = ""; ScmRepository repository; ScmManager scmManager = SCMManagerFactory.getInstance().createScmManager(); @@ -686,12 +686,17 @@ private boolean onlyOnePluginIncluded() { */ private UpdateSite.Data extractUpdateCenterData(Map groupIDs){ URL url; - String jsonp; try { url = new URL(config.updateCenterUrl); - jsonp = IOUtils.toString(url.openStream()); + } catch (MalformedURLException e) { + throw new UncheckedIOException(e); + } + + String jsonp; + try (InputStream is = url.openStream()) { + jsonp = new String(is.readAllBytes(), Charset.defaultCharset()); }catch(IOException e){ - throw new RuntimeException("Invalid update center url : "+config.updateCenterUrl, e); + throw new UncheckedIOException("Invalid Update Center URL: " + config.updateCenterUrl, e); } String json = jsonp.substring(jsonp.indexOf('(')+1,jsonp.lastIndexOf(')')); @@ -775,7 +780,7 @@ private UpdateSite.Data scanBom(HashMap pluginGroupIds, String p if (!top.has("core")) { // Not all boms have the jenkins core dependency explicit, so, assume the bom version matches the jenkins version String core = solveCoreVersionFromBom(); - if (StringUtils.isEmpty(core)) { + if (core == null || core.isEmpty()) { throw new IllegalStateException("Unable to retrieve any version for the core"); } top.put("core", new JSONObject().accumulate("name", "core").accumulate("version",core).accumulate("url", "https://foobar")); @@ -800,8 +805,6 @@ private List getBomEntries() throws IOException, XmlPullParserException, P /** * @return Provides the core version from the bomfile and in case it is not found, the bom version, if bom version does not exist, it provides from its parent - * @throws IOException - * @throws XmlPullParserException */ private String solveCoreVersionFromBom() throws IOException, XmlPullParserException { Model model = new MavenBom(config.getBom()).getModel(); @@ -816,14 +819,12 @@ private String solveCoreVersionFromBom() throws IOException, XmlPullParserExcept private String solveVersionFromModel(Model model) { String version = model.getVersion(); Parent parent = model.getParent(); - return version != null ? version : parent != null ? parent.getVersion() : StringUtils.EMPTY; + return version != null ? version : parent != null ? parent.getVersion() : ""; } /** * Given a value and a model, it checks if it is an interpolated value. In negative case it returns the same * value. In affirmative case, it retrieves its value from the properties of the Maven model. - * @param model - * @param version * @return the effective value of an specific value in a model */ private String getProperty(Model model, String value) { @@ -846,7 +847,7 @@ private String getProperty(Model model, String value) { * in the war file * @return Update center data */ - private UpdateSite.Data scanWAR(File war, @Nonnull Map pluginGroupIds, String pluginRegExp) throws IOException { + private UpdateSite.Data scanWAR(File war, @NonNull Map pluginGroupIds, String pluginRegExp) throws IOException { JSONObject top = new JSONObject(); top.put("id", DEFAULT_SOURCE_ID); JSONObject plugins = new JSONObject(); @@ -936,19 +937,19 @@ public static String getMavenModule(String plugin, File pluginPath, MavenRunner if (absolutePath.endsWith(plugin)) { return plugin; } - String module = absolutePath.substring(absolutePath.lastIndexOf(File.separatorChar) + 1, absolutePath.length()); + String module = absolutePath.substring(absolutePath.lastIndexOf(File.separatorChar) + 1); File parentFile = pluginPath.getParentFile(); if (parentFile == null) { return null; } File log = new File(parentFile.getAbsolutePath() + File.separatorChar + "modules.log"); runner.run(mavenConfig, parentFile, log, "-Dexpression=project.modules", "-q", "-DforceStdout", "help:evaluate"); - for (String line : org.apache.commons.io.FileUtils.readLines(log)) { + for (String line : Files.readAllLines(log.toPath(), Charset.defaultCharset())) { if (!StringUtils.startsWith(line.trim(), "")) { continue; } String mvnModule = line.replace("", "").replace("", "").trim(); - if (StringUtils.contains(mvnModule, module)) { + if (mvnModule != null && mvnModule.contains(module)) { return mvnModule; } } @@ -961,11 +962,11 @@ private void addSplitPluginDependencies(String thisPlugin, MavenRunner.Config mc Map pluginDeps = new HashMap<>(); Map pluginDepsTest = new HashMap<>(); try { - if (StringUtils.isBlank(parentFolder)) { + if (parentFolder == null || parentFolder.isBlank()) { runner.run(mconfig, pluginCheckoutDir, tmp, "dependency:resolve"); } else { String mavenModule = getMavenModule(thisPlugin, pluginCheckoutDir, runner, mconfig); - if (StringUtils.isBlank(mavenModule)) { + if (mavenModule == null || mavenModule.isBlank()) { throw new IOException(String.format("Unable to retrieve the Maven module for plugin %s on %s", thisPlugin, pluginCheckoutDir)); } runner.run(mconfig, pluginCheckoutDir.getParentFile(), tmp, "dependency:resolve", "-am", "-pl", mavenModule); @@ -1227,7 +1228,7 @@ private List removeSplitsBasedOnJDK(List splits, JavaSpecificati private static Stream configLines(InputStream is) throws IOException { return IOUtils.readLines(is, StandardCharsets.UTF_8).stream().filter(line -> !line.matches("#.*|\\s*")); } - private static final ImmutableList HISTORICAL_SPLITS = ImmutableList.of( + private static final List HISTORICAL_SPLITS = List.of( "maven-plugin 1.296 1.296", "subversion 1.310 1.0", "cvs 1.340 0.1", @@ -1245,7 +1246,7 @@ private static Stream configLines(InputStream is) throws IOException { "bouncycastle-api 2.16 2.16.0", "command-launcher 2.86 1.0" ); - private static final ImmutableSet HISTORICAL_SPLIT_CYCLES = ImmutableSet.of( + private static final Set HISTORICAL_SPLIT_CYCLES = Set.of( "script-security matrix-auth", "script-security windows-slaves", "script-security antisamy-markup-formatter", diff --git a/src/main/java/org/jenkins/tools/test/PluginCompatTesterCli.java b/src/main/java/org/jenkins/tools/test/PluginCompatTesterCli.java index c4e45524a..0cc89e15c 100644 --- a/src/main/java/org/jenkins/tools/test/PluginCompatTesterCli.java +++ b/src/main/java/org/jenkins/tools/test/PluginCompatTesterCli.java @@ -31,8 +31,8 @@ import java.io.File; import java.io.IOException; import java.nio.file.Files; -import java.util.Arrays; import java.util.HashMap; +import java.util.List; import java.util.Map; import org.codehaus.plexus.PlexusContainerException; import org.jenkins.tools.test.model.PluginCompatTesterConfig; @@ -118,13 +118,13 @@ public static void main(String[] args) throws IOException, PlexusContainerExcept config.setExternalMaven(options.getExternalMaven()); if(options.getIncludePlugins() != null && !options.getIncludePlugins().isEmpty()){ - config.setIncludePlugins(Arrays.asList(options.getIncludePlugins().toLowerCase().split(","))); + config.setIncludePlugins(List.of(options.getIncludePlugins().toLowerCase().split(","))); } if(options.getExcludePlugins() != null && !options.getExcludePlugins().isEmpty()){ - config.setExcludePlugins(Arrays.asList(options.getExcludePlugins().toLowerCase().split(","))); + config.setExcludePlugins(List.of(options.getExcludePlugins().toLowerCase().split(","))); } if(options.getExcludeHooks() != null && !options.getExcludeHooks().isEmpty()){ - config.setExcludeHooks(Arrays.asList(options.getExcludeHooks().split(","))); + config.setExcludeHooks(List.of(options.getExcludeHooks().split(","))); } if(options.getSkipTestCache() != null){ config.setSkipTestCache(Boolean.parseBoolean(options.getSkipTestCache())); @@ -136,7 +136,7 @@ public static void main(String[] args) throws IOException, PlexusContainerExcept config.setCacheThresholdStatus(TestStatus.valueOf(options.getCacheThresholdStatus())); } if(options.getHookPrefixes() != null && !options.getHookPrefixes().isEmpty()){ - config.setHookPrefixes(Arrays.asList(options.getHookPrefixes().split(","))); + config.setHookPrefixes(List.of(options.getHookPrefixes().split(","))); } if(options.getExternalHooksJars() != null && !options.getExternalHooksJars().isEmpty()){ config.setExternalHooksJars(options.getExternalHooksJars()); diff --git a/src/main/java/org/jenkins/tools/test/exception/PomExecutionException.java b/src/main/java/org/jenkins/tools/test/exception/PomExecutionException.java index ae82ed754..675629ef3 100644 --- a/src/main/java/org/jenkins/tools/test/exception/PomExecutionException.java +++ b/src/main/java/org/jenkins/tools/test/exception/PomExecutionException.java @@ -32,9 +32,6 @@ import java.util.Arrays; import java.util.Collections; import java.util.List; -import java.util.Set; -import java.util.TreeSet; - import org.jenkins.tools.test.util.ExecutedTestNamesDetails; /** @@ -49,7 +46,7 @@ public class PomExecutionException extends Exception { private final ExecutedTestNamesDetails testDetails; public PomExecutionException(Throwable cause) { - this(cause.toString(), Collections.emptyList(), Collections.singletonList(cause), Collections.emptyList(), new ExecutedTestNamesDetails()); + this(cause.toString(), Collections.emptyList(), List.of(cause), Collections.emptyList(), new ExecutedTestNamesDetails()); } public PomExecutionException(PomExecutionException exceptionToCopy){ diff --git a/src/main/java/org/jenkins/tools/test/hook/AbstractMultiParentHook.java b/src/main/java/org/jenkins/tools/test/hook/AbstractMultiParentHook.java index aa479cf3f..e4b79b635 100644 --- a/src/main/java/org/jenkins/tools/test/hook/AbstractMultiParentHook.java +++ b/src/main/java/org/jenkins/tools/test/hook/AbstractMultiParentHook.java @@ -11,12 +11,10 @@ import org.apache.maven.scm.ScmFileSet; import org.apache.maven.scm.ScmTag; import org.apache.maven.scm.command.checkout.CheckOutScmResult; -import org.apache.maven.scm.manager.NoSuchScmProviderException; import org.apache.maven.scm.manager.ScmManager; import org.apache.maven.scm.repository.ScmRepository; -import org.apache.maven.scm.repository.ScmRepositoryException; import org.codehaus.plexus.component.repository.exception.ComponentLookupException; -import org.codehaus.plexus.util.FileUtils; +import org.apache.commons.io.FileUtils; import org.jenkins.tools.test.PluginCompatTester; import org.jenkins.tools.test.SCMManagerFactory; import org.jenkins.tools.test.model.PluginCompatTesterConfig; @@ -82,15 +80,15 @@ public Map action(Map moreInfo) throws Exception } private void cloneFromSCM(UpdateSite.Plugin currentPlugin, File parentPath, String scmTag, String url, String fallbackGitHubOrganization) - throws ComponentLookupException, ScmRepositoryException, NoSuchScmProviderException, ScmException, IOException { + throws ComponentLookupException, ScmException, IOException { - List connectionURLs = new ArrayList(); + List connectionURLs = new ArrayList<>(); connectionURLs.add(url); if(fallbackGitHubOrganization != null){ connectionURLs = PluginCompatTester.getFallbackConnectionURL(connectionURLs, url, fallbackGitHubOrganization); } - Boolean repositoryCloned = false; + boolean repositoryCloned = false; String errorMessage = ""; ScmRepository repository; ScmManager scmManager = SCMManagerFactory.getInstance().createScmManager(); diff --git a/src/main/java/org/jenkins/tools/test/hook/ExampleMultiParent.java b/src/main/java/org/jenkins/tools/test/hook/ExampleMultiParent.java index 5f6fcdaf4..987e79a0f 100644 --- a/src/main/java/org/jenkins/tools/test/hook/ExampleMultiParent.java +++ b/src/main/java/org/jenkins/tools/test/hook/ExampleMultiParent.java @@ -2,7 +2,6 @@ import hudson.model.UpdateSite.Plugin; import java.io.File; -import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Map; @@ -24,7 +23,7 @@ public class ExampleMultiParent { //extends PluginCompatTesterHookBeforeCheckout { private String parentUrl = "scm:git:git@github.com:jenkinsci/parent_repo.git"; private String parentName = "parent_repo"; - private List allBundlePlugins = Arrays.asList("possible", "plugins"); + private List allBundlePlugins = List.of("possible", "plugins"); boolean firstRun = true; public ExampleMultiParent() {} diff --git a/src/main/java/org/jenkins/tools/test/hook/JacocoHook.java b/src/main/java/org/jenkins/tools/test/hook/JacocoHook.java index 9078fc2fd..92a768818 100644 --- a/src/main/java/org/jenkins/tools/test/hook/JacocoHook.java +++ b/src/main/java/org/jenkins/tools/test/hook/JacocoHook.java @@ -19,7 +19,7 @@ public boolean check(Map info) { } @Override - public Map action(Map info) throws Exception { + public Map action(Map info) { List args = (List) info.get("args"); if (args != null) { diff --git a/src/main/java/org/jenkins/tools/test/hook/MultiParentCompileHook.java b/src/main/java/org/jenkins/tools/test/hook/MultiParentCompileHook.java index ae828753a..e774b6192 100644 --- a/src/main/java/org/jenkins/tools/test/hook/MultiParentCompileHook.java +++ b/src/main/java/org/jenkins/tools/test/hook/MultiParentCompileHook.java @@ -7,6 +7,7 @@ import java.io.File; import java.io.IOException; +import java.nio.charset.Charset; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.StandardCopyOption; @@ -121,7 +122,7 @@ private void compile(MavenRunner.Config mavenConfig, File path, File localChecko // "process-test-classes" not working properly on multi-module plugin. See https://issues.jenkins.io/browse/JENKINS-62658 // installs dependencies into local repository String mavenModule = getMavenModule(pluginName, path, runner, mavenConfig); - if (StringUtils.isBlank(mavenModule)) { + if (mavenModule == null || mavenModule.isBlank()) { throw new IOException(String.format("Unable to retrieve the Maven module for plugin %s on %s", pluginName, path)); } runner.run(mavenConfig, path.getParentFile(), setupCompileResources(path.getParentFile()), "clean", "install", "-DskipTests", "-Dinvoker.skip", "-Denforcer.skip", "-Dmaven.javadoc.skip", "-am", "-pl", mavenModule); @@ -138,7 +139,7 @@ private boolean isSnapshotMultiParentPlugin(String parentFolder, File path, File if (localCheckoutDir != null) { return false; } - if (StringUtils.isBlank(parentFolder)) { + if (parentFolder == null || parentFolder.isBlank()) { return false; } if (!path.getAbsolutePath().contains(parentFolder)) { @@ -153,7 +154,7 @@ private boolean isSnapshotMultiParentPlugin(String parentFolder, File path, File File log = new File(parentFile.getAbsolutePath() + File.separatorChar + "version.log"); runner.run(mavenConfig, parentFile, log, "-Dexpression=project.version", "-q", "-DforceStdout", "help:evaluate"); - List output = FileUtils.readLines(log); + List output = Files.readAllLines(log.toPath(), Charset.defaultCharset()); return output.get(output.size() - 1).endsWith("-SNAPSHOT"); } diff --git a/src/main/java/org/jenkins/tools/test/hook/NodeCleanupBeforeCompileHook.java b/src/main/java/org/jenkins/tools/test/hook/NodeCleanupBeforeCompileHook.java index 31f0c3ee3..31a45b8f5 100644 --- a/src/main/java/org/jenkins/tools/test/hook/NodeCleanupBeforeCompileHook.java +++ b/src/main/java/org/jenkins/tools/test/hook/NodeCleanupBeforeCompileHook.java @@ -1,7 +1,6 @@ package org.jenkins.tools.test.hook; import org.apache.commons.io.FileUtils; -import org.jenkins.tools.test.exception.PomExecutionException; import org.jenkins.tools.test.model.PluginCompatTesterConfig; import org.jenkins.tools.test.model.hook.PluginCompatTesterHookBeforeCompile; @@ -14,7 +13,7 @@ public class NodeCleanupBeforeCompileHook extends PluginCompatTesterHookBeforeCo @Override public Map action(Map moreInfo) throws Exception { PluginCompatTesterConfig config = (PluginCompatTesterConfig) moreInfo.get("config"); - boolean shouldExecuteHook = (config.getIncludePlugins().contains("sse-gateway") || (config.getIncludePlugins().contains("workflow-cps"))); + boolean shouldExecuteHook = config.getIncludePlugins().contains("sse-gateway") || config.getIncludePlugins().contains("workflow-cps"); if (shouldExecuteHook) { File pluginDir = (File) moreInfo.get("pluginDir"); @@ -37,7 +36,7 @@ public Map action(Map moreInfo) throws Exception public void validate(Map toCheck) { } - private void compile(File path) throws PomExecutionException, IOException { + private void compile(File path) throws IOException { System.out.println("Calling removeNodeFolders"); removeNodeFolders(path); } diff --git a/src/main/java/org/jenkins/tools/test/hook/NonStandardTagHook.java b/src/main/java/org/jenkins/tools/test/hook/NonStandardTagHook.java index e716c93e7..3d8fbdece 100644 --- a/src/main/java/org/jenkins/tools/test/hook/NonStandardTagHook.java +++ b/src/main/java/org/jenkins/tools/test/hook/NonStandardTagHook.java @@ -9,12 +9,6 @@ import java.util.List; import java.util.Map; import java.util.Properties; -import org.apache.maven.scm.ScmFileSet; -import org.apache.maven.scm.ScmTag; -import org.apache.maven.scm.command.checkout.CheckOutScmResult; -import org.apache.maven.scm.manager.ScmManager; -import org.apache.maven.scm.repository.ScmRepository; -import org.jenkins.tools.test.SCMManagerFactory; import org.jenkins.tools.test.PluginCompatTester; import org.jenkins.tools.test.model.PluginCompatTesterConfig; import org.jenkins.tools.test.model.PomData; diff --git a/src/main/java/org/jenkins/tools/test/hook/PipelineStageViewHook.java b/src/main/java/org/jenkins/tools/test/hook/PipelineStageViewHook.java index 2e66fc745..090537e09 100644 --- a/src/main/java/org/jenkins/tools/test/hook/PipelineStageViewHook.java +++ b/src/main/java/org/jenkins/tools/test/hook/PipelineStageViewHook.java @@ -19,7 +19,7 @@ protected String getParentProjectName() { @Override protected String getPluginFolderName(UpdateSite.Plugin currentPlugin){ - return (currentPlugin.getDisplayName().equals("pipeline-rest-api")) ? "rest-api" : "ui"; + return currentPlugin.getDisplayName().equals("pipeline-rest-api") ? "rest-api" : "ui"; } @Override diff --git a/src/main/java/org/jenkins/tools/test/hook/PluginWithFailsafeIntegrationTestsHook.java b/src/main/java/org/jenkins/tools/test/hook/PluginWithFailsafeIntegrationTestsHook.java index 1e47a4824..133ddc930 100644 --- a/src/main/java/org/jenkins/tools/test/hook/PluginWithFailsafeIntegrationTestsHook.java +++ b/src/main/java/org/jenkins/tools/test/hook/PluginWithFailsafeIntegrationTestsHook.java @@ -1,9 +1,7 @@ package org.jenkins.tools.test.hook; -import java.util.Arrays; import java.util.Collection; import java.util.List; -import java.util.Map; /** * Workaround for those plugins with integration tests since they need execute the failsafe:integration-test goal before execution. @@ -12,12 +10,12 @@ public class PluginWithFailsafeIntegrationTestsHook extends PluginWithIntegratio @Override public Collection getGoals() { - return Arrays.asList("failsafe:integration-test"); + return List.of("failsafe:integration-test"); } @Override public Collection getTestTypes() { - return Arrays.asList("failsafe"); + return List.of("failsafe"); } } diff --git a/src/main/java/org/jenkins/tools/test/hook/PluginWithIntegrationTestsHook.java b/src/main/java/org/jenkins/tools/test/hook/PluginWithIntegrationTestsHook.java index 2b91cdcbb..d812afc29 100644 --- a/src/main/java/org/jenkins/tools/test/hook/PluginWithIntegrationTestsHook.java +++ b/src/main/java/org/jenkins/tools/test/hook/PluginWithIntegrationTestsHook.java @@ -23,7 +23,7 @@ public abstract class PluginWithIntegrationTestsHook extends PluginCompatTesterH @SuppressWarnings("unchecked") @Override - public Map action(Map info) throws Exception { + public Map action(Map info) { List args = (List) info.get("args"); if (args != null) { diff --git a/src/main/java/org/jenkins/tools/test/hook/SkipUIHelperPlugins.java b/src/main/java/org/jenkins/tools/test/hook/SkipUIHelperPlugins.java index aeb488d45..204cd8002 100644 --- a/src/main/java/org/jenkins/tools/test/hook/SkipUIHelperPlugins.java +++ b/src/main/java/org/jenkins/tools/test/hook/SkipUIHelperPlugins.java @@ -1,6 +1,5 @@ package org.jenkins.tools.test.hook; -import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Map; @@ -17,7 +16,7 @@ * @see https://github.com/jenkinsci/js-libs */ public class SkipUIHelperPlugins extends PluginCompatTesterHookBeforeCheckout { - private static List allBundlePlugins = Arrays.asList( + private static List allBundlePlugins = List.of( "ace-editor", "bootstrap", "handlebars", "jquery-detached", "js-module-base", "momentjs", "numeraljs"); @@ -35,7 +34,7 @@ public List transformedPlugins() { @Override public Map action(Map moreInfo) { moreInfo.put("executionResult", - new TestExecutionResult(Collections.singletonList("Plugin unsupported at this time, skipping"))); + new TestExecutionResult(List.of("Plugin unsupported at this time, skipping"))); moreInfo.put("runCheckout", false); return moreInfo; } diff --git a/src/main/java/org/jenkins/tools/test/hook/StructsHook.java b/src/main/java/org/jenkins/tools/test/hook/StructsHook.java index 6f90c43b7..729f06dcb 100644 --- a/src/main/java/org/jenkins/tools/test/hook/StructsHook.java +++ b/src/main/java/org/jenkins/tools/test/hook/StructsHook.java @@ -3,7 +3,6 @@ import hudson.model.UpdateSite; import hudson.util.VersionNumber; import java.util.Map; -import java.util.logging.Level; import java.util.logging.Logger; import org.jenkins.tools.test.model.PomData; diff --git a/src/main/java/org/jenkins/tools/test/maven/ExternalMavenRunner.java b/src/main/java/org/jenkins/tools/test/maven/ExternalMavenRunner.java index eaf5f777e..75abd013f 100644 --- a/src/main/java/org/jenkins/tools/test/maven/ExternalMavenRunner.java +++ b/src/main/java/org/jenkins/tools/test/maven/ExternalMavenRunner.java @@ -1,5 +1,7 @@ package org.jenkins.tools.test.maven; +import edu.umd.cs.findbugs.annotations.CheckForNull; + import java.io.BufferedReader; import java.io.File; import java.io.FileOutputStream; @@ -9,7 +11,6 @@ import java.io.PrintWriter; import java.nio.charset.Charset; import java.util.ArrayList; -import java.util.Arrays; import java.util.Collections; import java.util.HashSet; import java.util.List; @@ -18,8 +19,6 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; -import javax.annotation.CheckForNull; - import org.jenkins.tools.test.exception.PomExecutionException; import org.jenkins.tools.test.util.ExecutedTestNamesSolver; @@ -66,7 +65,7 @@ public void run(Config config, File baseDirectory, File buildLogFile, String... cmd.add("--define=" + entry); } cmd.addAll(config.mavenOptions); - cmd.addAll(Arrays.asList(goals)); + cmd.addAll(List.of(goals)); System.out.println("running " + cmd + " in " + baseDirectory + " >> " + buildLogFile); try { Process p = new ProcessBuilder(cmd).directory(baseDirectory).redirectErrorStream(true).start(); @@ -122,9 +121,7 @@ private Set getTypes(Config config) { return result; } String types = config.userProperties.get("types"); - for (String type : types.split(",")) { - result.add(type); - } + result.addAll(List.of(types.split(","))); return result; } diff --git a/src/main/java/org/jenkins/tools/test/model/MavenBom.java b/src/main/java/org/jenkins/tools/test/model/MavenBom.java index 2987e6e9d..15c1bac6c 100644 --- a/src/main/java/org/jenkins/tools/test/model/MavenBom.java +++ b/src/main/java/org/jenkins/tools/test/model/MavenBom.java @@ -3,7 +3,6 @@ import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; -import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; @@ -47,8 +46,6 @@ public File writeFullDepPom(File workDir) throws IOException { try (FileOutputStream out = new FileOutputStream(fullDepPom)) { writer.write(out, modified); return fullDepPom; - } catch (FileNotFoundException e) { - e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } @@ -56,8 +53,7 @@ public File writeFullDepPom(File workDir) throws IOException { } public boolean containsDep(Dependency toCheck, Model model) { - return model.getDependencies().stream().filter(dep -> getDepDescription(dep).equals(getDepDescription(toCheck))) - .count() > 0; + return model.getDependencies().stream().anyMatch(dep -> getDepDescription(dep).equals(getDepDescription(toCheck))); } private String getDepDescription(Dependency toCheck) { diff --git a/src/main/java/org/jenkins/tools/test/model/MavenCoordinates.java b/src/main/java/org/jenkins/tools/test/model/MavenCoordinates.java index 85a122040..4517c8aad 100644 --- a/src/main/java/org/jenkins/tools/test/model/MavenCoordinates.java +++ b/src/main/java/org/jenkins/tools/test/model/MavenCoordinates.java @@ -25,10 +25,8 @@ */ package org.jenkins.tools.test.model; -import javax.annotation.Nonnull; -import org.apache.commons.lang.StringUtils; -import org.apache.commons.lang.builder.EqualsBuilder; -import org.apache.commons.lang.builder.HashCodeBuilder; +import edu.umd.cs.findbugs.annotations.NonNull; +import java.util.Objects; import org.jenkins.tools.test.model.comparators.VersionComparator; /** @@ -47,7 +45,7 @@ public class MavenCoordinates implements Comparable { * * @throws IllegalArgumentException one of the parameters is invalid. */ - public MavenCoordinates(@Nonnull String groupId, @Nonnull String artifactId, @Nonnull String version){ + public MavenCoordinates(@NonNull String groupId, @NonNull String artifactId, @NonNull String version){ this.groupId = verifyInput( groupId, artifactId, version,"groupId", groupId); this.artifactId = verifyInput( groupId, artifactId, version,"artifactId", artifactId); this.version = verifyInput( groupId, artifactId, version,"version", version); @@ -55,7 +53,7 @@ public MavenCoordinates(@Nonnull String groupId, @Nonnull String artifactId, @No private static String verifyInput(String groupId, String artifactId, String version, String fieldName, String value) throws IllegalArgumentException { - if (value == null || StringUtils.isBlank(value)) { + if (value == null || value.isBlank()) { throw new IllegalArgumentException( String.format("Invalid parameter passed for %s:%s:%s: Field %s; %s", groupId, artifactId, version, fieldName, value)); @@ -65,16 +63,19 @@ private static String verifyInput(String groupId, String artifactId, String vers @Override public boolean equals(Object o){ - if (!(o instanceof MavenCoordinates)) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { return false; } MavenCoordinates c2 = (MavenCoordinates)o; - return new EqualsBuilder().append(groupId, c2.groupId).append(artifactId, c2.artifactId).append(version, c2.version).isEquals(); + return Objects.equals(groupId, c2.groupId) && Objects.equals(artifactId, c2.artifactId) && Objects.equals(version, c2.version); } @Override public int hashCode(){ - return new HashCodeBuilder().append(groupId).append(artifactId).append(version).toHashCode(); + return Objects.hash(groupId, artifactId, version); } @Override diff --git a/src/main/java/org/jenkins/tools/test/model/MavenPom.java b/src/main/java/org/jenkins/tools/test/model/MavenPom.java index ae7eabc4c..370d8b34b 100644 --- a/src/main/java/org/jenkins/tools/test/model/MavenPom.java +++ b/src/main/java/org/jenkins/tools/test/model/MavenPom.java @@ -25,6 +25,7 @@ */ package org.jenkins.tools.test.model; +import edu.umd.cs.findbugs.annotations.NonNull; import hudson.util.VersionNumber; import java.io.File; import java.io.IOException; @@ -42,7 +43,6 @@ import java.util.Set; import java.util.logging.Level; import java.util.logging.Logger; -import javax.annotation.Nonnull; import org.apache.commons.lang.StringUtils; import org.codehaus.plexus.util.FileUtils; import org.dom4j.Document; @@ -119,7 +119,7 @@ public void transformPom(MavenCoordinates coreCoordinates) throws PomTransformat /** * Removes the dependency if it exists. */ - public void removeDependency(@Nonnull String groupId, @Nonnull String artifactId) throws IOException { + public void removeDependency(@NonNull String groupId, @NonNull String artifactId) throws IOException { File pom = new File(rootDir.getAbsolutePath() + "/" + pomFileName); Document doc; try { @@ -132,7 +132,7 @@ public void removeDependency(@Nonnull String groupId, @Nonnull String artifactId dependencies = doc.getRootElement().addElement("dependencies"); } - for (Element mavenDependency : (List) dependencies.elements("dependency")) { + for (Element mavenDependency : dependencies.elements("dependency")) { Element artifactIdElem = mavenDependency.element(ARTIFACT_ID_ELEMENT); if (artifactIdElem == null || !artifactId.equalsIgnoreCase(artifactIdElem.getText())) { continue; @@ -151,9 +151,7 @@ public void removeDependency(@Nonnull String groupId, @Nonnull String artifactId /** * Create/Update a plugin management section with a set of plugins - * @param pluginsToAdd * @param includeGroupId - specify if we want to add the groupId or not - * @throws IOException */ public void addPluginManagement(List pluginsToAdd, boolean includeGroupId) throws IOException { File pom = new File(rootDir.getAbsolutePath() + "/" + pomFileName); @@ -195,8 +193,6 @@ public void addPluginManagement(List pluginsToAdd, boolean inc /** * Create/Update the properties section adding/updating some of them - * @param propertiesToAdd - * @throws IOException */ public void addProperties(Properties propertiesToAdd) throws IOException { File pom = new File(rootDir.getAbsolutePath() + "/" + pomFileName); @@ -258,7 +254,7 @@ private void manageDependencies(Map toAdd, Map toAddTest, Map toReplaceTest, Map pluginGroupIds, Document doc, Element dependencies, boolean addition) { Set depsWithoutClassifier = new HashSet<>(); - for (Element mavenDependency : (List) dependencies.elements("dependency")) { + for (Element mavenDependency : dependencies.elements("dependency")) { Element artifactId = mavenDependency.element(ARTIFACT_ID_ELEMENT); if (mavenDependency.element(CLASSIFIER_ELEMENT) == null) { depsWithoutClassifier.add(artifactId.getTextTrim()); @@ -268,7 +264,7 @@ private void manageDependencies(Map toAdd, Map toReplaceUsed = new LinkedHashMap<>(); Map toReplaceTestUsed = new LinkedHashMap<>(); - for (Element mavenDependency : (List) dependencies.elements("dependency")) { + for (Element mavenDependency : dependencies.elements("dependency")) { Element artifactId = mavenDependency.element(ARTIFACT_ID_ELEMENT); Element groupId = mavenDependency.element(GROUP_ID_ELEMENT); if (artifactId == null || groupId == null) { @@ -295,7 +291,7 @@ private void manageDependencies(Map toAdd, Map) properties.elements()) { + for (Element mavenProperty : properties.elements()) { if (StringUtils.equals(property, mavenProperty.getQName().getName())) { propertyToUpdate = mavenProperty; break; diff --git a/src/main/java/org/jenkins/tools/test/model/PCTPlugin.java b/src/main/java/org/jenkins/tools/test/model/PCTPlugin.java index a0a841878..de9b07d6b 100644 --- a/src/main/java/org/jenkins/tools/test/model/PCTPlugin.java +++ b/src/main/java/org/jenkins/tools/test/model/PCTPlugin.java @@ -1,7 +1,7 @@ package org.jenkins.tools.test.model; +import edu.umd.cs.findbugs.annotations.CheckForNull; import hudson.util.VersionNumber; -import javax.annotation.CheckForNull; public class PCTPlugin { private String name; diff --git a/src/main/java/org/jenkins/tools/test/model/PluginCompatReport.java b/src/main/java/org/jenkins/tools/test/model/PluginCompatReport.java index 346a07d96..df78270b3 100644 --- a/src/main/java/org/jenkins/tools/test/model/PluginCompatReport.java +++ b/src/main/java/org/jenkins/tools/test/model/PluginCompatReport.java @@ -27,6 +27,7 @@ import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.io.xml.Xpp3DomDriver; +import edu.umd.cs.findbugs.annotations.NonNull; import hudson.util.XStream2; import java.io.File; import java.io.FileInputStream; @@ -45,7 +46,6 @@ import java.util.SortedSet; import java.util.TreeMap; import java.util.TreeSet; -import javax.annotation.Nonnull; /** * POJO allowing to store the Plugin Compatibility Tester report @@ -97,19 +97,19 @@ public void save(File reportPath) throws IOException { Files.move(tempReportPath.toPath(), reportPath.toPath(), StandardCopyOption.ATOMIC_MOVE); } - public static String getXslFilename(@Nonnull File reportPath){ + public static String getXslFilename(@NonNull File reportPath){ return getBaseFilename(reportPath)+".xsl"; } - public static File getXslFilepath(@Nonnull File reportPath){ + public static File getXslFilepath(@NonNull File reportPath){ return new File(getBaseFilepath(reportPath)+".xsl"); } - public static File getHtmlFilepath(@Nonnull File reportPath){ + public static File getHtmlFilepath(@NonNull File reportPath){ return new File(getBaseFilepath(reportPath)+".html"); } - public static String getBaseFilepath(@Nonnull File reportPath){ + public static String getBaseFilepath(@NonNull File reportPath){ File parentFile = reportPath.getParentFile(); if (parentFile == null) { throw new IllegalArgumentException("The report path " + reportPath + " does not have a directory specification. " + @@ -159,7 +159,7 @@ public boolean isCompatTestResultAlreadyInCache(PluginInfos pluginInfos, MavenCo * @return Report. If the file does not exist, an empty report will be returned * @throws IOException Unexpected read error. */ - @Nonnull + @NonNull public static PluginCompatReport fromXml(File reportPath) throws IOException { PluginCompatReport report; diff --git a/src/main/java/org/jenkins/tools/test/model/PluginCompatResult.java b/src/main/java/org/jenkins/tools/test/model/PluginCompatResult.java index 1732e97df..a1d649ccd 100644 --- a/src/main/java/org/jenkins/tools/test/model/PluginCompatResult.java +++ b/src/main/java/org/jenkins/tools/test/model/PluginCompatResult.java @@ -27,13 +27,10 @@ import java.util.Collections; import java.util.Date; -import java.util.LinkedList; import java.util.List; +import java.util.Objects; import java.util.Set; -import org.apache.commons.lang.builder.EqualsBuilder; -import org.apache.commons.lang.builder.HashCodeBuilder; - /** * POJO storing a plugin compatibility test result * @@ -76,16 +73,19 @@ private PluginCompatResult(MavenCoordinates coreCoordinates, TestStatus status, @Override public boolean equals(Object o){ - if (!(o instanceof PluginCompatResult)) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { return false; } PluginCompatResult res = (PluginCompatResult)o; - return new EqualsBuilder().append(coreCoordinates, res.coreCoordinates).isEquals(); + return Objects.equals(coreCoordinates, res.coreCoordinates); } @Override public int hashCode(){ - return new HashCodeBuilder().append(coreCoordinates).toHashCode(); + return Objects.hash(coreCoordinates); } @Override diff --git a/src/main/java/org/jenkins/tools/test/model/PluginCompatTesterConfig.java b/src/main/java/org/jenkins/tools/test/model/PluginCompatTesterConfig.java index f68be440e..0e3037502 100644 --- a/src/main/java/org/jenkins/tools/test/model/PluginCompatTesterConfig.java +++ b/src/main/java/org/jenkins/tools/test/model/PluginCompatTesterConfig.java @@ -25,6 +25,8 @@ */ package org.jenkins.tools.test.model; +import edu.umd.cs.findbugs.annotations.CheckForNull; +import edu.umd.cs.findbugs.annotations.NonNull; import java.io.File; import java.io.FileInputStream; import java.io.IOException; @@ -35,10 +37,7 @@ import java.util.Map; import java.util.Properties; import java.util.logging.Logger; -import javax.annotation.CheckForNull; -import javax.annotation.Nonnull; -import org.apache.commons.io.IOUtils; -import org.apache.commons.lang.StringUtils; +import org.jenkins.tools.test.util.StreamGobbler; /** * POJO used to configure Plugin Compatibility Tester execution @@ -130,7 +129,7 @@ public class PluginCompatTesterConfig { private List mavenOptions = Collections.emptyList(); // Classpath prefixes of the extra hooks - private List hookPrefixes = new ArrayList<>(Collections.singletonList("org.jenkins")); + private List hookPrefixes = new ArrayList<>(List.of("org.jenkins")); // External hooks jar files path locations private List externalHooksJars = new ArrayList<>(); @@ -279,7 +278,7 @@ public void setFallbackGitHubOrganization(String fallbackGitHubOrganization) { this.fallbackGitHubOrganization = fallbackGitHubOrganization; } - public void setMavenProperties(@Nonnull Map mavenProperties) { + public void setMavenProperties(@NonNull Map mavenProperties) { this.mavenProperties = new HashMap<>(mavenProperties); } @@ -287,7 +286,7 @@ public void setMavenProperties(@Nonnull Map mavenProperties) { * Gets a list of Maven properties defined in the configuration. It is not a full list of * properties; {@link #retrieveMavenProperties()} should be used to construct it. */ - @Nonnull + @NonNull public Map getMavenProperties() { return Collections.unmodifiableMap(mavenProperties); } @@ -328,7 +327,7 @@ public Map retrieveMavenProperties() throws IOException { Map res = new HashMap<>(mavenProperties); // Read properties from File - if ( StringUtils.isNotBlank( mavenPropertiesFile )) { + if (mavenPropertiesFile != null && !mavenPropertiesFile.isBlank()) { File file = new File (mavenPropertiesFile); if (file.exists() && file.isFile()) { try(FileInputStream fileInputStream = new FileInputStream(file)) { @@ -363,7 +362,7 @@ public Map retrieveMavenProperties() throws IOException { } // Merge test Java args if needed - if (StringUtils.isNotBlank(testJavaArgs)) { + if (testJavaArgs != null && !testJavaArgs.isBlank()) { if (res.containsKey("argLine")) { System.out.println("WARNING: Maven properties already contain the 'argLine' argument. " + "Merging value from properties and from the command line"); @@ -396,8 +395,19 @@ public String getTestJavaVersion() throws IOException { LOGGER.info("testJdkHome unset, using java available from the PATH"); javaCmdAbsolutePath = "java"; } - final Process process = new ProcessBuilder().command(javaCmdAbsolutePath, "-XshowSettings:properties -version").redirectErrorStream(true).start(); - final String javaVersionOutput = IOUtils.toString(process.getInputStream()); + final Process process = new ProcessBuilder().command(javaCmdAbsolutePath, "-XshowSettings:properties", "-version").redirectErrorStream(true).start(); + StreamGobbler gobbler = new StreamGobbler(process.getInputStream()); + gobbler.start(); + try { + int exitStatus = process.waitFor(); + gobbler.join(); + if (exitStatus != 0) { + throw new IOException("java -XshowSettings:properties -version failed with exit status " + exitStatus + ": " + gobbler.getOutput().trim()); + } + } catch (InterruptedException e) { + throw new IOException("interrupted while getting Java version", e); + } + final String javaVersionOutput = gobbler.getOutput().trim(); final String[] lines = javaVersionOutput.split("[\\r\\n]+"); for (String line: lines) { String trimmed = line.trim(); @@ -408,7 +418,18 @@ public String getTestJavaVersion() throws IOException { } // Default to fullversion output as before final Process process2 = new ProcessBuilder().command(javaCmdAbsolutePath, "-fullversion").redirectErrorStream(true).start(); - final String javaVersionOutput2 = IOUtils.toString(process2.getInputStream()); + StreamGobbler gobbler2 = new StreamGobbler(process2.getInputStream()); + gobbler2.start(); + try { + int exitStatus2 = process2.waitFor(); + gobbler2.join(); + if (exitStatus2 != 0) { + throw new IOException("java -fullversion failed with exit status " + exitStatus2 + ": " + gobbler2.getOutput().trim()); + } + } catch (InterruptedException e) { + throw new IOException("interrupted while getting full Java version", e); + } + final String javaVersionOutput2 = gobbler2.getOutput().trim(); // Expected format is something like openjdk full version "1.8.0_181-8u181-b13-2~deb9u1-b13" // We shorten it by removing the "full version" in the middle return javaVersionOutput2. diff --git a/src/main/java/org/jenkins/tools/test/model/PluginInfos.java b/src/main/java/org/jenkins/tools/test/model/PluginInfos.java index 794b0c9a7..440af5a74 100644 --- a/src/main/java/org/jenkins/tools/test/model/PluginInfos.java +++ b/src/main/java/org/jenkins/tools/test/model/PluginInfos.java @@ -25,8 +25,8 @@ */ package org.jenkins.tools.test.model; -import org.apache.commons.lang.builder.EqualsBuilder; -import org.apache.commons.lang.builder.HashCodeBuilder; + +import java.util.Objects; /** * POJO describing a versioned plugin @@ -46,16 +46,19 @@ public PluginInfos(String pluginName, String pluginVersion, String pluginUrl){ @Override public boolean equals(Object o){ - if (!(o instanceof PluginInfos)) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { return false; } PluginInfos infos = (PluginInfos)o; - return new EqualsBuilder().append(pluginName, infos.pluginName).append(pluginVersion, infos.pluginVersion).isEquals(); + return Objects.equals(pluginName, infos.pluginName) && Objects.equals(pluginVersion, infos.pluginVersion); } @Override public int hashCode(){ - return new HashCodeBuilder().append(pluginName).append(pluginVersion).toHashCode(); + return Objects.hash(pluginName, pluginVersion); } @Override diff --git a/src/main/java/org/jenkins/tools/test/model/PluginRemoting.java b/src/main/java/org/jenkins/tools/test/model/PluginRemoting.java index d8ced4c13..2a7cdb1b2 100644 --- a/src/main/java/org/jenkins/tools/test/model/PluginRemoting.java +++ b/src/main/java/org/jenkins/tools/test/model/PluginRemoting.java @@ -25,18 +25,21 @@ */ package org.jenkins.tools.test.model; +import edu.umd.cs.findbugs.annotations.CheckForNull; +import edu.umd.cs.findbugs.annotations.NonNull; import java.io.File; import java.io.IOException; import java.io.InputStream; +import java.io.StringReader; import java.net.MalformedURLException; import java.net.URL; import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; import java.util.logging.Level; import java.util.logging.Logger; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; -import javax.annotation.CheckForNull; -import javax.annotation.Nonnull; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; @@ -47,9 +50,9 @@ import javax.xml.xpath.XPathFactory; import org.apache.commons.io.FileUtils; import org.apache.commons.lang.StringUtils; -import org.apache.tools.ant.filters.StringInputStream; import org.jenkins.tools.test.exception.PluginSourcesUnavailableException; import org.w3c.dom.Document; +import org.xml.sax.InputSource; import org.xml.sax.SAXException; /** @@ -130,7 +133,7 @@ private String retrievePomContentFromInputStream(InputStream pluginUrlStream) th private String retrievePomContentFromXmlFile() throws PluginSourcesUnavailableException{ try { - return FileUtils.readFileToString(pomFile); + return Files.readString(pomFile.toPath(), StandardCharsets.UTF_8); } catch(Exception e) { System.err.println("Error : " + e.getMessage()); throw new PluginSourcesUnavailableException(String.format("Problem while retrieving pom content from file %s", pomFile), e); @@ -149,7 +152,7 @@ public PomData retrievePomData() throws PluginSourcesUnavailableException { DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance(); try { DocumentBuilder builder = docBuilderFactory.newDocumentBuilder(); - Document doc = builder.parse(new StringInputStream(pomContent)); + Document doc = builder.parse(new InputSource(new StringReader(pomContent))); XPathFactory xpathFactory = XPathFactory.newInstance(); XPath xpath = xpathFactory.newXPath(); @@ -166,7 +169,7 @@ public PomData retrievePomData() throws PluginSourcesUnavailableException { packaging = StringUtils.trimToNull((String)packagingXPath.evaluate(doc, XPathConstants.STRING)); String parentNode = xpath.evaluate("/project/parent", doc); - if (StringUtils.isNotBlank(parentNode)) { + if (parentNode != null && !parentNode.isBlank()) { LOGGER.log(Level.INFO, parentNode); parent = new MavenCoordinates( getValueOrFail(doc, xpath, "/project/parent/groupId"), @@ -197,7 +200,7 @@ public PomData retrievePomData() throws PluginSourcesUnavailableException { * * @throws IOException parsing error */ - @Nonnull + @NonNull private static String getValueOrFail(Document doc, XPath xpath, String field) throws IOException { String res; try { @@ -206,7 +209,7 @@ private static String getValueOrFail(Document doc, XPath xpath, String field) th throw new IOException("Expression failed for the field " + field, e); } - if (StringUtils.isBlank(res)) { + if (res == null || res.isBlank()) { throw new IOException("Field is either null or blank: " + field); } return res; diff --git a/src/main/java/org/jenkins/tools/test/model/PomData.java b/src/main/java/org/jenkins/tools/test/model/PomData.java index e5bc8ac19..370a34e25 100644 --- a/src/main/java/org/jenkins/tools/test/model/PomData.java +++ b/src/main/java/org/jenkins/tools/test/model/PomData.java @@ -25,10 +25,10 @@ */ package org.jenkins.tools.test.model; +import edu.umd.cs.findbugs.annotations.CheckForNull; +import edu.umd.cs.findbugs.annotations.NonNull; import java.util.ArrayList; import java.util.List; -import javax.annotation.CheckForNull; -import javax.annotation.Nonnull; /** * POJO containing important data residing in plugin's POM @@ -39,7 +39,7 @@ public class PomData { public final String artifactId; public final String groupId; - @Nonnull + @NonNull private final String packaging; @CheckForNull @@ -69,7 +69,7 @@ public List getWarningMessages() { return warningMessages; } - @Nonnull + @NonNull public String getPackaging() { return packaging; } diff --git a/src/main/java/org/jenkins/tools/test/model/TestExecutionResult.java b/src/main/java/org/jenkins/tools/test/model/TestExecutionResult.java index a183b87aa..869f05759 100644 --- a/src/main/java/org/jenkins/tools/test/model/TestExecutionResult.java +++ b/src/main/java/org/jenkins/tools/test/model/TestExecutionResult.java @@ -27,7 +27,6 @@ import java.util.Collections; import java.util.List; -import java.util.Set; import org.jenkins.tools.test.util.ExecutedTestNamesDetails; diff --git a/src/main/java/org/jenkins/tools/test/model/comparators/MavenCoordinatesComparator.java b/src/main/java/org/jenkins/tools/test/model/comparators/MavenCoordinatesComparator.java deleted file mode 100644 index ce596a5e9..000000000 --- a/src/main/java/org/jenkins/tools/test/model/comparators/MavenCoordinatesComparator.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * The MIT License - * - * Copyright (c) 2004-2010, Sun Microsystems, Inc., Kohsuke Kawaguchi, - * Erik Ramfelt, Koichi Fujikawa, Red Hat, Inc., Seiji Sogabe, - * Stephen Connolly, Tom Huybrechts, Yahoo! Inc., Alan Harder, CloudBees, Inc. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package org.jenkins.tools.test.model.comparators; - -import java.io.Serializable; -import java.util.Comparator; -import org.jenkins.tools.test.model.MavenCoordinates; - -/** - * Class used to compare MavenCoordinates - * - * @deprecated For backward compatibility only. Use {@link MavenCoordinates#compareTo} instead. - * @author Frederic Camblor - */ -public class MavenCoordinatesComparator implements Comparator, Serializable { - @Override - public int compare(MavenCoordinates o1, MavenCoordinates o2) { - return o1.compareTo(o2); - } -} diff --git a/src/main/java/org/jenkins/tools/test/model/hook/PluginCompatTesterHooks.java b/src/main/java/org/jenkins/tools/test/model/hook/PluginCompatTesterHooks.java index 2ab5efad7..79a37177e 100644 --- a/src/main/java/org/jenkins/tools/test/model/hook/PluginCompatTesterHooks.java +++ b/src/main/java/org/jenkins/tools/test/model/hook/PluginCompatTesterHooks.java @@ -7,7 +7,6 @@ import java.net.URL; import java.net.URLClassLoader; import java.util.ArrayList; -import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; @@ -29,7 +28,7 @@ * never be called. */ public class PluginCompatTesterHooks { - private Set classLoaders = new HashSet<>(Collections.singletonList(PluginCompatTesterHooks.class.getClassLoader())); + private Set classLoaders = new HashSet<>(List.of(PluginCompatTesterHooks.class.getClassLoader())); private List hookPrefixes = new ArrayList<>(); private static Map>> hooksByType = new HashMap<>(); private List excludeHooks = new ArrayList<>(); @@ -59,7 +58,7 @@ public PluginCompatTesterHooks(List extraPrefixes, List externalJa } private void setupHooksByType() { - for(String stage : Arrays.asList("checkout", "execution", "compilation")) { + for (String stage : List.of("checkout", "execution", "compilation")) { hooksByType.put(stage, findHooks(stage)); } } @@ -143,7 +142,7 @@ private Map> findHooks(String stage) { // Search for all hooks defined within the given classpath prefix ConfigurationBuilder configurationBuilder = new ConfigurationBuilder(); - ClassLoader[] loaders = classLoaders.toArray(new ClassLoader[classLoaders.size()]); + ClassLoader[] loaders = classLoaders.toArray(new ClassLoader[0]); configurationBuilder.addClassLoaders(loaders); for (String hookPrefix : hookPrefixes) { configurationBuilder.forPackage(hookPrefix, loaders); diff --git a/src/main/java/org/jenkins/tools/test/util/ExecutedTestNamesDetails.java b/src/main/java/org/jenkins/tools/test/util/ExecutedTestNamesDetails.java index b8a8eb2c3..8c1dd2628 100644 --- a/src/main/java/org/jenkins/tools/test/util/ExecutedTestNamesDetails.java +++ b/src/main/java/org/jenkins/tools/test/util/ExecutedTestNamesDetails.java @@ -50,10 +50,7 @@ private Set get(String key) { } private void add(String key, String test) { - if (this.tests.get(key) == null) { - this.tests.put(key, new TreeSet()); - } - this.tests.get(key).add(test); + this.tests.computeIfAbsent(key, unused -> new TreeSet<>()).add(test); } public boolean hasBeenExecuted() { diff --git a/src/main/java/org/jenkins/tools/test/util/StreamGobbler.java b/src/main/java/org/jenkins/tools/test/util/StreamGobbler.java new file mode 100644 index 000000000..34df06b49 --- /dev/null +++ b/src/main/java/org/jenkins/tools/test/util/StreamGobbler.java @@ -0,0 +1,38 @@ +package org.jenkins.tools.test.util; + +import edu.umd.cs.findbugs.annotations.NonNull; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.Reader; +import java.io.UncheckedIOException; +import java.nio.charset.Charset; + +public class StreamGobbler extends Thread { + + @NonNull private final InputStream is; + + private final StringBuilder output = new StringBuilder(); + + public StreamGobbler(@NonNull InputStream is) { + this.is = is; + } + + public String getOutput() { + return output.toString(); + } + + @Override + public void run() { + try (Reader r = new InputStreamReader(is, Charset.defaultCharset()); BufferedReader br = new BufferedReader(r)) { + String line; + while ((line = br.readLine()) != null) { + output.append(line); + output.append(System.lineSeparator()); + } + } catch (IOException e) { + throw new UncheckedIOException(e); + } + } +} diff --git a/src/test/java/org/jenkins/tools/test/NonStandardTagHookTest.java b/src/test/java/org/jenkins/tools/test/NonStandardTagHookTest.java index ceaf5e13d..a5ef03eee 100644 --- a/src/test/java/org/jenkins/tools/test/NonStandardTagHookTest.java +++ b/src/test/java/org/jenkins/tools/test/NonStandardTagHookTest.java @@ -84,7 +84,7 @@ public void testActuallyPerformsTheCheckoutWithVersionGreaterThanMinimum() { PluginCompatTesterConfig config = new PluginCompatTesterConfig(testFolder.getRoot(), new File("../reports/PluginCompatReport.xml"), new ClassPathResource("m2-settings.xml").getFile()); - config.setIncludePlugins(Collections.singletonList("electricflow")); + config.setIncludePlugins(List.of("electricflow")); config.setSkipTestCache(true); config.setCacheThresholdStatus(TestStatus.TEST_FAILURES); config.setTestCacheTimeout(345600000); diff --git a/src/test/java/org/jenkins/tools/test/PluginCompatTesterTest.java b/src/test/java/org/jenkins/tools/test/PluginCompatTesterTest.java index 52de03b27..b740e1b58 100644 --- a/src/test/java/org/jenkins/tools/test/PluginCompatTesterTest.java +++ b/src/test/java/org/jenkins/tools/test/PluginCompatTesterTest.java @@ -38,7 +38,6 @@ import java.io.IOException; import java.nio.file.Paths; -import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.List; @@ -67,8 +66,6 @@ import org.jvnet.hudson.test.Issue; import org.springframework.core.io.ClassPathResource; -import com.google.common.collect.ImmutableList; - import hudson.util.VersionNumber; /** @@ -103,7 +100,7 @@ public void tearDown() { @Ignore("TODO broken by https://github.com/jenkinsci/active-directory-plugin/releases/tag/active-directory-2.17; figure out how to pin a version") @Test public void testWithUrl() throws Throwable { - PluginCompatTesterConfig config = getConfig(ImmutableList.of("active-directory")); + PluginCompatTesterConfig config = getConfig(List.of("active-directory")); config.setStoreAll(true); PluginCompatTester tester = new PluginCompatTester(config); @@ -144,7 +141,7 @@ public void testWithUrl() throws Throwable { @Ignore("TODO broken by https://github.com/jenkinsci/active-directory-plugin/releases/tag/active-directory-2.17; figure out how to pin a version") @Test public void testWithIsolatedTest() throws Throwable { - PluginCompatTesterConfig config = getConfig(ImmutableList.of("active-directory")); + PluginCompatTesterConfig config = getConfig(List.of("active-directory")); config.setStoreAll(true); Map mavenProperties = new HashMap<>(); mavenProperties.put("test","ActiveDirectoryAuthenticationProviderTest#testEscape"); @@ -170,7 +167,7 @@ public void testWithIsolatedTest() throws Throwable { @Test public void testStoreOnlyFailedTests() throws Throwable { - PluginCompatTesterConfig config = getConfig(ImmutableList.of("analysis-collector")); + PluginCompatTesterConfig config = getConfig(List.of("analysis-collector")); config.setStoreAll(false); PluginCompatTester tester = new PluginCompatTester(config); @@ -192,7 +189,7 @@ public void testStoreOnlyFailedTests() throws Throwable { @Test public void testBom() throws IOException, PlexusContainerException, PomExecutionException, XmlPullParserException { - PluginCompatTesterConfig config = getConfig(ImmutableList.of("workflow-api", // From BOM + PluginCompatTesterConfig config = getConfig(List.of("workflow-api", // From BOM "accurev" // From Update Center )); @@ -205,11 +202,11 @@ public void testBom() throws IOException, PlexusContainerException, PomExecution @Test public void testWithCasCProperties() throws Throwable { - PluginCompatTesterConfig config = getConfig(ImmutableList.of("ec2")); + PluginCompatTesterConfig config = getConfig(List.of("ec2")); Map mavenProperties = new HashMap<>(); mavenProperties.put("test","ConfigurationAsCodeTest#testConfigAsCodeExport"); config.setMavenProperties(mavenProperties); - List overridenPlugins = Arrays.asList(new PCTPlugin("configuration-as-code", "io.jenkins", new VersionNumber("1.38"))); + List overridenPlugins = List.of(new PCTPlugin("configuration-as-code", "io.jenkins", new VersionNumber("1.38"))); config.setOverridenPlugins(overridenPlugins); PluginCompatTester tester = new PluginCompatTester(config); @@ -219,7 +216,7 @@ public void testWithCasCProperties() throws Throwable { @Test public void testWithInvalidExclusionList() throws Throwable { File exclusionList = new ClassPathResource("bad-surefire-exclusion-list").getFile(); - PluginCompatTesterConfig config = getConfig(ImmutableList.of("active-directory")); + PluginCompatTesterConfig config = getConfig(List.of("active-directory")); Map mavenProperties = new HashMap<>(); mavenProperties.put("surefire.excludesFile", exclusionList.getAbsolutePath()); config.setMavenProperties(mavenProperties); @@ -272,7 +269,7 @@ public void testWithoutAlternativeUrl() throws Throwable { MavenCoordinates mavenCoordinates = new MavenCoordinates("org.jenkins-ci.plugins", "plugin", "3.54"); PluginCompatTesterConfig config = new PluginCompatTesterConfig(testFolder.getRoot(), new File(REPORT_FILE), getSettingsFile()); - config.setIncludePlugins(ImmutableList.of(pluginName)); + config.setIncludePlugins(List.of(pluginName)); PluginCompatTester pct = new PluginCompatTester(config); PomData pomData = new PomData(pluginName, "hpi", nonWorkingConnectionURL, pluginName + "-" + version, @@ -282,7 +279,7 @@ public void testWithoutAlternativeUrl() throws Throwable { } @Ignore("TODO broken by GH protocol changes. Requesting user data access via https on local execution") - @Test(expected = Test.None.class) + @Test public void testWithAlternativeUrl() throws Throwable { String pluginName = "workflow-api"; String version = "2.39"; @@ -290,7 +287,7 @@ public void testWithAlternativeUrl() throws Throwable { MavenCoordinates mavenCoordinates = new MavenCoordinates("org.jenkins-ci.plugins", "plugin", "3.54"); PluginCompatTesterConfig config = new PluginCompatTesterConfig(testFolder.getRoot(), new File(REPORT_FILE), getSettingsFile()); - config.setIncludePlugins(ImmutableList.of(pluginName)); + config.setIncludePlugins(List.of(pluginName)); config.setFallbackGitHubOrganization("jenkinsci"); PluginCompatTester pct = new PluginCompatTester(config); diff --git a/src/test/java/org/jenkins/tools/test/ScmConnectionSpecialCasesTest.java b/src/test/java/org/jenkins/tools/test/ScmConnectionSpecialCasesTest.java index bf1932a70..c0ba7df2f 100644 --- a/src/test/java/org/jenkins/tools/test/ScmConnectionSpecialCasesTest.java +++ b/src/test/java/org/jenkins/tools/test/ScmConnectionSpecialCasesTest.java @@ -27,7 +27,7 @@ import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.is; -import static org.junit.Assert.assertThat; +import static org.hamcrest.MatcherAssert.assertThat; import org.jenkins.tools.test.model.MavenCoordinates; import org.jenkins.tools.test.model.PluginRemoting; diff --git a/src/test/java/org/jenkins/tools/test/VersionComparatorTest.java b/src/test/java/org/jenkins/tools/test/VersionComparatorTest.java index bfc092808..5dd92bd5b 100644 --- a/src/test/java/org/jenkins/tools/test/VersionComparatorTest.java +++ b/src/test/java/org/jenkins/tools/test/VersionComparatorTest.java @@ -27,9 +27,9 @@ import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.is; -import static org.junit.Assert.assertThat; +import static org.hamcrest.MatcherAssert.assertThat; -import com.google.common.collect.ImmutableMap; +import java.util.Map; import org.jenkins.tools.test.model.comparators.VersionComparator; import org.junit.Test; @@ -40,7 +40,7 @@ */ public class VersionComparatorTest { - private static final ImmutableMap OPERAND_CONVERSION = ImmutableMap.of( + private static final Map OPERAND_CONVERSION = Map.of( "<", -1, "=", 0, ">", 1 diff --git a/src/test/java/org/jenkins/tools/test/hook/JacocoHookTest.java b/src/test/java/org/jenkins/tools/test/hook/JacocoHookTest.java index a10d856c2..f18620b28 100644 --- a/src/test/java/org/jenkins/tools/test/hook/JacocoHookTest.java +++ b/src/test/java/org/jenkins/tools/test/hook/JacocoHookTest.java @@ -1,10 +1,10 @@ package org.jenkins.tools.test.hook; -import com.google.common.collect.Lists; import org.jenkins.tools.test.model.MavenCoordinates; import org.jenkins.tools.test.model.PomData; import org.junit.Test; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -33,36 +33,36 @@ public void testCheckMethod() { } @Test - public void testAction() throws Exception { + public void testAction() { final JacocoHook hook = new JacocoHook(); Map info = new HashMap<>(); - info.put("args", Lists.newArrayList( + info.put("args", new ArrayList<>(List.of( "--define=forkCount=1", "hpi:resolve-test-dependencies", "hpi:test-hpl", - "surefire:test")); + "surefire:test"))); Map afterAction = hook.action(info); List args = (List) afterAction.get("args"); assertThat(args.size(), is(5)); assertThat(args.get(1), is("jacoco:prepare-agent")); info = new HashMap<>(); - info.put("args", Lists.newArrayList( + info.put("args", new ArrayList<>(List.of( "--define=forkCount=1", "other-plugin:other-goal", - "surefire:test")); + "surefire:test"))); afterAction = hook.action(info); args = (List) afterAction.get("args"); assertThat(args.size(), is(4)); assertThat(args.get(2), is("jacoco:prepare-agent")); info = new HashMap<>(); - info.put("args", Lists.newArrayList( + info.put("args", new ArrayList<>(List.of( "element1", "element2", "element3", - "element4")); + "element4"))); afterAction = hook.action(info); args = (List) afterAction.get("args"); assertThat(args.size(), is(4)); diff --git a/src/test/java/org/jenkins/tools/test/hook/WarningsNGExecutionHookTest.java b/src/test/java/org/jenkins/tools/test/hook/WarningsNGExecutionHookTest.java index f54a7a0c1..cfd9be12c 100644 --- a/src/test/java/org/jenkins/tools/test/hook/WarningsNGExecutionHookTest.java +++ b/src/test/java/org/jenkins/tools/test/hook/WarningsNGExecutionHookTest.java @@ -1,10 +1,10 @@ package org.jenkins.tools.test.hook; -import com.google.common.collect.Lists; import org.jenkins.tools.test.model.MavenCoordinates; import org.jenkins.tools.test.model.PomData; import org.junit.Test; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -37,11 +37,11 @@ public void testAction() throws Exception { final WarningsNGExecutionHook hook = new WarningsNGExecutionHook(); Map info = new HashMap<>(); - info.put("args", Lists.newArrayList( + info.put("args", new ArrayList<>(List.of( "--define=forkCount=1", "hpi:resolve-test-dependencies", "hpi:test-hpl", - "surefire:test")); + "surefire:test"))); Map afterAction = hook.action(info); List args = (List) afterAction.get("args"); assertThat(args.size(), is(5)); @@ -53,7 +53,7 @@ public void testType() throws Exception { final WarningsNGExecutionHook hook = new WarningsNGExecutionHook(); Map info = new HashMap<>(); - info.put("types", Lists.newArrayList("surefire")); + info.put("types", new ArrayList<>(List.of("surefire"))); Map afterAction = hook.action(info); List types = (List) afterAction.get("types"); assertThat(types.size(), is(2)); diff --git a/src/test/java/org/jenkins/tools/test/model/MavenPomTest.java b/src/test/java/org/jenkins/tools/test/model/MavenPomTest.java index f8ac2fb7d..3b2846f36 100644 --- a/src/test/java/org/jenkins/tools/test/model/MavenPomTest.java +++ b/src/test/java/org/jenkins/tools/test/model/MavenPomTest.java @@ -1,17 +1,18 @@ package org.jenkins.tools.test.model; -import com.google.common.collect.ImmutableMap; import hudson.util.VersionNumber; import java.io.File; import java.io.IOException; -import java.nio.charset.Charset; +import java.net.URISyntaxException; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Paths; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.commons.io.FileUtils; -import org.apache.commons.io.IOUtils; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; import org.junit.Rule; import org.junit.Test; import org.junit.rules.TemporaryFolder; @@ -28,21 +29,21 @@ public void addDependenciesWithTestsClassifier() throws Exception { File prj = tmp.newFolder(); File pom = createPomFileFromResource(prj, "credentials-binding-pom-before.xml"); - Map toAdd = new HashMap<>(Collections.singletonMap("trilead-api", new VersionNumber("1.0.8"))); - Map toReplace = new HashMap<>(ImmutableMap.of("credentials", new VersionNumber("2.3.12"), "ssh-credentials", new VersionNumber("1.18.1"), "plain-credentials", new VersionNumber("1.7"))); + Map toAdd = new HashMap<>(Map.of("trilead-api", new VersionNumber("1.0.8"))); + Map toReplace = new HashMap<>(Map.of("credentials", new VersionNumber("2.3.12"), "ssh-credentials", new VersionNumber("1.18.1"), "plain-credentials", new VersionNumber("1.7"))); Map toAddTest = new HashMap<>(); - Map toReplaceTest = new HashMap<>(ImmutableMap.of("workflow-scm-step", new VersionNumber("2.11"), "workflow-durable-task-step", new VersionNumber("2.35"), "display-url-api", new VersionNumber("2.3.3"), "script-security", new VersionNumber("1.74"), "workflow-cps", new VersionNumber("2.83"))); - toReplaceTest.putAll(ImmutableMap.of("workflow-support", new VersionNumber("3.5"), "workflow-job", new VersionNumber("2.39"), "workflow-basic-steps", new VersionNumber("2.20"))); - Map pluginGroupIds = new HashMap<>(ImmutableMap.of("credentials-binding", "org.jenkins-ci.plugins", "pipeline-build-step", "org.jenkins-ci.plugins", "credentials", "org.jenkins-ci.plugins", "jdk-tool", "org.jenkins-ci.plugins", "snakeyaml-api", "io.jenkins.plugins")); - pluginGroupIds.putAll(ImmutableMap.of("workflow-step-api", "org.jenkins-ci.plugins.workflow", "plain-credentials", "org.jenkins-ci.plugins", "trilead-api", "org.jenkins-ci.plugins", "command-launcher", "org.jenkins-ci.plugins", "jquery", "org.jenkins-ci.plugins")); - pluginGroupIds.putAll(ImmutableMap.of("matrix-project", "org.jenkins-ci.plugins", "jquery-detached", "org.jenkins-ci.ui", "ace-editor", "org.jenkins-ci.ui", "git", "org.jenkins-ci.plugins", "workflow-durable-task-step", "org.jenkins-ci.plugins.workflow")); - pluginGroupIds.putAll(ImmutableMap.of("git-client", "org.jenkins-ci.plugins", "ssh-credentials", "org.jenkins-ci.plugins", "variant", "org.jenkins-ci.plugins", "cloudbees-folder", "org.jenkins-ci.plugins", "scm-api", "org.jenkins-ci.plugins")); - pluginGroupIds.putAll(ImmutableMap.of("pipeline-stage-step", "org.jenkins-ci.plugins", "junit-attachments", "org.jenkins-ci.plugins", "durable-task", "org.jenkins-ci.plugins", "workflow-job", "org.jenkins-ci.plugins.workflow", "workflow-basic-steps", "org.jenkins-ci.plugins.workflow")); - pluginGroupIds.putAll(ImmutableMap.of("jsch", "org.jenkins-ci.plugins", "timestamper", "org.jenkins-ci.plugins", "junit", "org.jenkins-ci.plugins", "apache-httpcomponents-client-4-api", "org.jenkins-ci.plugins", "structs", "org.jenkins-ci.plugins")); - pluginGroupIds.putAll(ImmutableMap.of("workflow-cps-global-lib", "org.jenkins-ci.plugins.workflow", "configuration-as-code", "io.jenkins", "workflow-cps", "org.jenkins-ci.plugins.workflow", "workflow-support", "org.jenkins-ci.plugins.workflow", "ssh-slaves", "org.jenkins-ci.plugins")); - pluginGroupIds.putAll(ImmutableMap.of("htmlpublisher", "org.jenkins-ci.plugins", "mailer", "org.jenkins-ci.plugins", "ansicolor", "org.jenkins-ci.plugins", "jackson2-api", "org.jenkins-ci.plugins", "workflow-scm-step", "org.jenkins-ci.plugins.workflow")); - pluginGroupIds.putAll(ImmutableMap.of("display-url-api", "org.jenkins-ci.plugins", "token-macro", "org.jenkins-ci.plugins", "script-security", "org.jenkins-ci.plugins", "pipeline-input-step", "org.jenkins-ci.plugins", "branch-api", "org.jenkins-ci.plugins")); - pluginGroupIds.putAll(ImmutableMap.of("workflow-api", "org.jenkins-ci.plugins.workflow", "git-server", "org.jenkins-ci.plugins")); + Map toReplaceTest = new HashMap<>(Map.of("workflow-scm-step", new VersionNumber("2.11"), "workflow-durable-task-step", new VersionNumber("2.35"), "display-url-api", new VersionNumber("2.3.3"), "script-security", new VersionNumber("1.74"), "workflow-cps", new VersionNumber("2.83"))); + toReplaceTest.putAll(Map.of("workflow-support", new VersionNumber("3.5"), "workflow-job", new VersionNumber("2.39"), "workflow-basic-steps", new VersionNumber("2.20"))); + Map pluginGroupIds = new HashMap<>(Map.of("credentials-binding", "org.jenkins-ci.plugins", "pipeline-build-step", "org.jenkins-ci.plugins", "credentials", "org.jenkins-ci.plugins", "jdk-tool", "org.jenkins-ci.plugins", "snakeyaml-api", "io.jenkins.plugins")); + pluginGroupIds.putAll(Map.of("workflow-step-api", "org.jenkins-ci.plugins.workflow", "plain-credentials", "org.jenkins-ci.plugins", "trilead-api", "org.jenkins-ci.plugins", "command-launcher", "org.jenkins-ci.plugins", "jquery", "org.jenkins-ci.plugins")); + pluginGroupIds.putAll(Map.of("matrix-project", "org.jenkins-ci.plugins", "jquery-detached", "org.jenkins-ci.ui", "ace-editor", "org.jenkins-ci.ui", "git", "org.jenkins-ci.plugins", "workflow-durable-task-step", "org.jenkins-ci.plugins.workflow")); + pluginGroupIds.putAll(Map.of("git-client", "org.jenkins-ci.plugins", "ssh-credentials", "org.jenkins-ci.plugins", "variant", "org.jenkins-ci.plugins", "cloudbees-folder", "org.jenkins-ci.plugins", "scm-api", "org.jenkins-ci.plugins")); + pluginGroupIds.putAll(Map.of("pipeline-stage-step", "org.jenkins-ci.plugins", "junit-attachments", "org.jenkins-ci.plugins", "durable-task", "org.jenkins-ci.plugins", "workflow-job", "org.jenkins-ci.plugins.workflow", "workflow-basic-steps", "org.jenkins-ci.plugins.workflow")); + pluginGroupIds.putAll(Map.of("jsch", "org.jenkins-ci.plugins", "timestamper", "org.jenkins-ci.plugins", "junit", "org.jenkins-ci.plugins", "apache-httpcomponents-client-4-api", "org.jenkins-ci.plugins", "structs", "org.jenkins-ci.plugins")); + pluginGroupIds.putAll(Map.of("workflow-cps-global-lib", "org.jenkins-ci.plugins.workflow", "configuration-as-code", "io.jenkins", "workflow-cps", "org.jenkins-ci.plugins.workflow", "workflow-support", "org.jenkins-ci.plugins.workflow", "ssh-slaves", "org.jenkins-ci.plugins")); + pluginGroupIds.putAll(Map.of("htmlpublisher", "org.jenkins-ci.plugins", "mailer", "org.jenkins-ci.plugins", "ansicolor", "org.jenkins-ci.plugins", "jackson2-api", "org.jenkins-ci.plugins", "workflow-scm-step", "org.jenkins-ci.plugins.workflow")); + pluginGroupIds.putAll(Map.of("display-url-api", "org.jenkins-ci.plugins", "token-macro", "org.jenkins-ci.plugins", "script-security", "org.jenkins-ci.plugins", "pipeline-input-step", "org.jenkins-ci.plugins", "branch-api", "org.jenkins-ci.plugins")); + pluginGroupIds.putAll(Map.of("workflow-api", "org.jenkins-ci.plugins.workflow", "git-server", "org.jenkins-ci.plugins")); List toConvert = Collections.emptyList(); new MavenPom(prj).addDependencies(toAdd, toReplace, toAddTest, toReplaceTest, pluginGroupIds, toConvert); @@ -82,11 +83,10 @@ public void doNotDuplicateDependenciesWhoseVersionsAreProperties() throws Except assertResourceEqualsXmlFile("demo-plugin-properties-pom-after.xml", pomFile); } - private void assertResourceEqualsXmlFile(String resource, File pom) throws IOException { - Charset charset = Charset.forName("UTF-8"); + private void assertResourceEqualsXmlFile(String resource, File pom) throws IOException, URISyntaxException { assertEquals( - normalizeXmlString(IOUtils.toString(MavenPomTest.class.getResource(resource), charset)), - normalizeXmlString(FileUtils.readFileToString(pom, charset)) + normalizeXmlString(Files.readString(Paths.get(getClass().getResource(resource).toURI()), StandardCharsets.UTF_8)), + normalizeXmlString(FileUtils.readFileToString(pom, StandardCharsets.UTF_8)) ); }