From 25ba3f7a1629a0b6d9b9146f64730a023c85ff14 Mon Sep 17 00:00:00 2001 From: Basil Crow Date: Mon, 30 Jan 2023 14:24:18 -0800 Subject: [PATCH] Clean up imports and whitespace --- pom.xml | 50 ++++++++- .../org/jenkins/tools/test/CliOptions.java | 29 +++-- .../tools/test/PluginCompatTester.java | 17 ++- .../tools/test/PluginCompatTesterCli.java | 7 +- .../ExecutedTestNamesSolverException.java | 2 +- .../PluginSourcesUnavailableException.java | 7 +- .../test/exception/PomExecutionException.java | 3 +- .../exception/PomTransformationException.java | 7 +- .../test/hook/AbstractMultiParentHook.java | 10 +- .../tools/test/hook/BlueOceanHook.java | 1 - .../test/hook/ConfigurationAsCodeHook.java | 1 - .../test/hook/DeclarativePipelineHook.java | 1 - .../DeclarativePipelineMigrationHook.java | 4 +- .../jenkins/tools/test/hook/JacocoHook.java | 5 +- .../jenkins/tools/test/hook/MinaSshdApi.java | 1 - .../test/hook/MultiParentCompileHook.java | 19 ++-- .../hook/NodeCleanupBeforeCompileHook.java | 7 +- .../test/hook/PipelineStageViewHook.java | 2 - ...luginWithFailsafeIntegrationTestsHook.java | 2 +- .../hook/PluginWithIntegrationTestsHook.java | 12 +- .../tools/test/hook/SkipUIHelperPlugins.java | 4 +- .../jenkins/tools/test/hook/SwarmHook.java | 1 - .../test/hook/WarningsNGCheckoutHook.java | 4 +- .../test/hook/WarningsNGExecutionHook.java | 3 +- .../tools/test/maven/ExternalMavenRunner.java | 3 +- .../tools/test/model/MavenCoordinates.java | 1 + .../jenkins/tools/test/model/MavenPom.java | 27 ++--- .../tools/test/model/PluginCompatReport.java | 2 +- .../tools/test/model/PluginCompatResult.java | 4 +- .../test/model/PluginCompatTesterConfig.java | 11 +- .../jenkins/tools/test/model/PluginInfos.java | 2 +- .../tools/test/model/PluginRemoting.java | 106 +++++++++--------- .../org/jenkins/tools/test/model/PomData.java | 1 + .../tools/test/model/TestExecutionResult.java | 4 +- .../jenkins/tools/test/model/TestStatus.java | 1 + .../model/comparators/VersionComparator.java | 1 + .../model/hook/PluginCompatTesterHook.java | 2 +- .../PluginCompatTesterHookBeforeCheckout.java | 6 +- .../PluginCompatTesterHookBeforeCompile.java | 2 +- ...PluginCompatTesterHookBeforeExecution.java | 8 +- .../model/hook/PluginCompatTesterHooks.java | 23 ++-- .../test/util/ExecutedTestNamesDetails.java | 22 ++-- .../tools/test/logging/logging.properties | 4 +- .../tools/test/PluginCompatTesterTest.java | 2 +- .../test/ScmConnectionSpecialCasesTest.java | 2 +- .../tools/test/VersionComparatorTest.java | 1 + .../tools/test/hook/JacocoHookTest.java | 15 ++- .../hook/WarningsNGExecutionHookTest.java | 21 ++-- .../tools/test/model/MavenPomTest.java | 3 +- 49 files changed, 248 insertions(+), 225 deletions(-) diff --git a/pom.xml b/pom.xml index 9a692661f..b5208cb24 100644 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 - + org.jenkins-ci jenkins 1.94 @@ -19,8 +19,8 @@ scm:git:ssh://git@github.com/${gitHubRepo}.git scm:git:ssh://git@github.com/${gitHubRepo}.git - https://github.com/${gitHubRepo} ${scmTag} + https://github.com/${gitHubRepo} @@ -164,21 +164,59 @@ - repo.jenkins-ci.org - https://repo.jenkins-ci.org/public/ + repo.jenkins-ci.org + https://repo.jenkins-ci.org/public/ - repo.jenkins-ci.org - https://repo.jenkins-ci.org/public/ + repo.jenkins-ci.org + https://repo.jenkins-ci.org/public/ ${project.artifactId} + + com.diffplug.spotless + spotless-maven-plugin + 2.31.0 + + + + + + true + + + + + + + ${project.build.sourceEncoding} + \n + false + true + scope,groupId,artifactId + groupId,artifactId + scope,groupId,artifactId + true + true + + + + + + + + + check + + + + org.apache.maven.plugins maven-jar-plugin diff --git a/src/main/java/org/jenkins/tools/test/CliOptions.java b/src/main/java/org/jenkins/tools/test/CliOptions.java index 5f0ee2e37..242c9787b 100644 --- a/src/main/java/org/jenkins/tools/test/CliOptions.java +++ b/src/main/java/org/jenkins/tools/test/CliOptions.java @@ -23,23 +23,20 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ -package org.jenkins.tools.test; - -import java.io.File; -import java.util.ArrayList; -import java.util.List; -import org.jenkins.tools.test.model.TestStatus; +package org.jenkins.tools.test; import com.beust.jcommander.IParameterValidator; import com.beust.jcommander.IStringConverter; 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 java.io.File; +import java.util.ArrayList; import java.util.Collections; +import java.util.List; +import org.jenkins.tools.test.model.TestStatus; /** * POJO containing CLI arguments & help. @@ -132,7 +129,7 @@ public class CliOptions { @Parameter(names="-hookPrefixes", description = "Prefixes of the extra hooks' classes") private String hookPrefixes; - + @Parameter(names="-externalHooksJars", description = "Comma-separated list of external hooks jar file locations", listConverter = FileListConverter.class, validateWith = FileValidator.class) private List externalHooksJars; @@ -144,10 +141,10 @@ public class CliOptions { @Parameter(names = "-failOnError", description = "Immediately if the PCT run fails for a plugin. Error status will be also reported as a return code") private boolean failOnError; - - @Parameter(names = "-storeAll", - description = "By default only failed tests are stored in PCT report file. \n" + - "If set, the PCT will store ALL executed test names for each plugin in report file. \n" + + + @Parameter(names = "-storeAll", + description = "By default only failed tests are stored in PCT report file. \n" + + "If set, the PCT will store ALL executed test names for each plugin in report file. \n" + "Disabled by default because it may bloat reports for plugins which thousands of tests." ) private Boolean storeAll = null; @@ -218,7 +215,7 @@ public String getCacheThresholdStatus() { public String getHookPrefixes() { return hookPrefixes; } - + public List getExternalHooksJars() { return externalHooksJars != null ? Collections.unmodifiableList(externalHooksJars) : null; } @@ -244,7 +241,7 @@ public String getTestJavaArgs() { public boolean isFailOnError() { return failOnError; } - + public Boolean isStoreAll() { return storeAll; } @@ -260,7 +257,7 @@ public List convert(String files) { return fileList; } } - + public static class FileValidator implements IParameterValidator { @Override public void validate(String name, String value) throws ParameterException { diff --git a/src/main/java/org/jenkins/tools/test/PluginCompatTester.java b/src/main/java/org/jenkins/tools/test/PluginCompatTester.java index ff90a3edf..c0f4dda03 100644 --- a/src/main/java/org/jenkins/tools/test/PluginCompatTester.java +++ b/src/main/java/org/jenkins/tools/test/PluginCompatTester.java @@ -23,6 +23,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ + package org.jenkins.tools.test; import edu.umd.cs.findbugs.annotations.NonNull; @@ -65,9 +66,10 @@ import net.sf.json.JSONObject; import org.apache.commons.io.FileUtils; import org.apache.commons.lang.StringUtils; +import org.jenkins.tools.test.exception.ExecutedTestNamesSolverException; import org.jenkins.tools.test.exception.PluginSourcesUnavailableException; import org.jenkins.tools.test.exception.PomExecutionException; -import org.jenkins.tools.test.exception.ExecutedTestNamesSolverException; +import org.jenkins.tools.test.exception.PomTransformationException; import org.jenkins.tools.test.maven.ExternalMavenRunner; import org.jenkins.tools.test.maven.MavenRunner; import org.jenkins.tools.test.model.MavenCoordinates; @@ -84,7 +86,6 @@ import org.jenkins.tools.test.model.hook.PluginCompatTesterHooks; import org.jenkins.tools.test.util.ExecutedTestNamesSolver; import org.jenkins.tools.test.util.StreamGobbler; -import org.jenkins.tools.test.exception.PomTransformationException; /** * Frontend for plugin compatibility tests @@ -107,7 +108,7 @@ public PluginCompatTester(PluginCompatTesterConfig config){ runner = new ExternalMavenRunner(config.getExternalMaven()); } - public PluginCompatReport testPlugins() + public PluginCompatReport testPlugins() throws IOException, PomExecutionException { PluginCompatTesterHooks pcth = new PluginCompatTesterHooks(config.getHookPrefixes(), config.getExternalHooksJars(), config.getExcludeHooks()); // Providing XSL Stylesheet along xml report file @@ -158,7 +159,6 @@ public PluginCompatReport testPlugins() } } - PluginCompatReport report = PluginCompatReport.fromXml(config.reportFile); MavenCoordinates coreCoordinates = new MavenCoordinates("org.jenkins-ci.main", "jenkins-war", data.core.version); @@ -233,8 +233,8 @@ public PluginCompatReport testPlugins() status = TestStatus.COMPILATION_ERROR; } else if (!e.getTestDetails().hasBeenExecuted()) { // testing was not able to start properly (i.e: invalid exclusion list file format) status = TestStatus.INTERNAL_ERROR; - } else if (e.getTestDetails().hasFailures()) { - status = TestStatus.TEST_FAILURES; + } else if (e.getTestDetails().hasFailures()) { + status = TestStatus.TEST_FAILURES; } else { // ??? status = TestStatus.INTERNAL_ERROR; } @@ -252,7 +252,6 @@ public PluginCompatReport testPlugins() } } - File buildLogFile = createBuildLogFile(config.reportFile, plugin.name, plugin.version, coreCoordinates); String buildLogFilePath = ""; if(buildLogFile.exists()){ @@ -474,7 +473,7 @@ private TestExecutionResult testPluginAgainst(MavenCoordinates coreCoordinates, } public void cloneFromSCM(PomData pomData, String name, String version, File checkoutDirectory, String tag) throws IOException { - String scmTag = !(tag.equals("")) ? tag : getScmTag(pomData, name, version); + String scmTag = !(tag.equals("")) ? tag : getScmTag(pomData, name, version); String connectionURLPomData = pomData.getConnectionUrl(); List connectionURLs = new ArrayList<>(); connectionURLs.add(connectionURLPomData); @@ -721,7 +720,7 @@ private UpdateSite.Data scanWAR(File war, @NonNull Map pluginGro } /** - * Provides the Maven module used for a plugin on a {@code mvn [...] -pl} operation in the parent path + * Provides the Maven module used for a plugin on a {@code mvn [...] -pl} operation in the parent path */ public static String getMavenModule(String plugin, File pluginPath, MavenRunner runner, MavenRunner.Config mavenConfig) throws PomExecutionException, IOException { String absolutePath = pluginPath.getAbsolutePath(); diff --git a/src/main/java/org/jenkins/tools/test/PluginCompatTesterCli.java b/src/main/java/org/jenkins/tools/test/PluginCompatTesterCli.java index 6a95b8549..19aa288d6 100644 --- a/src/main/java/org/jenkins/tools/test/PluginCompatTesterCli.java +++ b/src/main/java/org/jenkins/tools/test/PluginCompatTesterCli.java @@ -23,6 +23,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ + package org.jenkins.tools.test; import com.beust.jcommander.JCommander; @@ -34,9 +35,9 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import org.jenkins.tools.test.exception.PomExecutionException; import org.jenkins.tools.test.logging.LoggingConfiguration; import org.jenkins.tools.test.model.PluginCompatTesterConfig; -import org.jenkins.tools.test.exception.PomExecutionException; import org.jenkins.tools.test.model.TestStatus; /** @@ -58,7 +59,7 @@ public class PluginCompatTesterCli { value = "NP_NULL_ON_SOME_PATH_FROM_RETURN_VALUE", justification = "We're already checking for null in each relevant instance, so why does SpotBugs complain?") - public static void main(String[] args) throws IOException, PomExecutionException { + public static void main(String[] args) throws IOException, PomExecutionException { CliOptions options = new CliOptions(); JCommander jcommander = null; try { @@ -139,7 +140,7 @@ public static void main(String[] args) throws IOException, PomExecutionException //TODO: also interpolate it for the case when a single plugin passed? config.setFailOnError(true); } - + if (options.isStoreAll() != null) { config.setStoreAll(options.isStoreAll().booleanValue()); } else { diff --git a/src/main/java/org/jenkins/tools/test/exception/ExecutedTestNamesSolverException.java b/src/main/java/org/jenkins/tools/test/exception/ExecutedTestNamesSolverException.java index c0b79352e..36cceb41e 100644 --- a/src/main/java/org/jenkins/tools/test/exception/ExecutedTestNamesSolverException.java +++ b/src/main/java/org/jenkins/tools/test/exception/ExecutedTestNamesSolverException.java @@ -19,4 +19,4 @@ public ExecutedTestNamesSolverException(String msg, Exception e) { public ExecutedTestNamesSolverException(Exception e) { super(e); } -} +} diff --git a/src/main/java/org/jenkins/tools/test/exception/PluginSourcesUnavailableException.java b/src/main/java/org/jenkins/tools/test/exception/PluginSourcesUnavailableException.java index 56a82c74e..fc0e8e0e4 100644 --- a/src/main/java/org/jenkins/tools/test/exception/PluginSourcesUnavailableException.java +++ b/src/main/java/org/jenkins/tools/test/exception/PluginSourcesUnavailableException.java @@ -23,6 +23,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ + package org.jenkins.tools.test.exception; /** @@ -33,7 +34,7 @@ */ public class PluginSourcesUnavailableException extends Exception { - public PluginSourcesUnavailableException(String message, Throwable cause){ - super(message, cause); - } + public PluginSourcesUnavailableException(String message, Throwable cause){ + super(message, cause); + } } 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 675629ef3..29595fd2c 100644 --- a/src/main/java/org/jenkins/tools/test/exception/PomExecutionException.java +++ b/src/main/java/org/jenkins/tools/test/exception/PomExecutionException.java @@ -23,6 +23,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ + package org.jenkins.tools.test.exception; import java.io.PrintWriter; @@ -77,7 +78,7 @@ public String getErrorMessage(){ public List getPomWarningMessages() { return pomWarningMessages; } - + public ExecutedTestNamesDetails getTestDetails() { return testDetails; } diff --git a/src/main/java/org/jenkins/tools/test/exception/PomTransformationException.java b/src/main/java/org/jenkins/tools/test/exception/PomTransformationException.java index 069e497b3..d7fe61de7 100644 --- a/src/main/java/org/jenkins/tools/test/exception/PomTransformationException.java +++ b/src/main/java/org/jenkins/tools/test/exception/PomTransformationException.java @@ -23,6 +23,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ + package org.jenkins.tools.test.exception; /** @@ -32,7 +33,7 @@ */ public class PomTransformationException extends Exception { - public PomTransformationException(String message, Throwable cause){ - super(message, cause); - } + public PomTransformationException(String message, Throwable cause){ + super(message, cause); + } } 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 1cfa510fe..8d984279c 100644 --- a/src/main/java/org/jenkins/tools/test/hook/AbstractMultiParentHook.java +++ b/src/main/java/org/jenkins/tools/test/hook/AbstractMultiParentHook.java @@ -9,7 +9,6 @@ import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; - import org.jenkins.tools.test.PluginCompatTester; import org.jenkins.tools.test.model.PluginCompatTesterConfig; import org.jenkins.tools.test.model.PomData; @@ -23,7 +22,7 @@ public abstract class AbstractMultiParentHook extends PluginCompatTesterHookBefo private static final Logger LOGGER = Logger.getLogger(AbstractMultiParentHook.class.getName()); protected boolean firstRun = true; - + private PomData pomData; @Override @@ -31,7 +30,6 @@ public Map action(Map moreInfo) throws Exception PluginCompatTesterConfig config = (PluginCompatTesterConfig)moreInfo.get("config"); UpdateSite.Plugin currentPlugin = (UpdateSite.Plugin)moreInfo.get("plugin"); - // We should not execute the hook if using localCheckoutDir boolean shouldExecuteHook = config.getLocalCheckoutDir() == null || !config.getLocalCheckoutDir().exists(); @@ -77,13 +75,13 @@ public Map action(Map moreInfo) throws Exception private void cloneFromSCM(UpdateSite.Plugin currentPlugin, File parentPath, String scmTag, String url, String fallbackGitHubOrganization) throws IOException { - + List connectionURLs = new ArrayList<>(); connectionURLs.add(url); if(fallbackGitHubOrganization != null){ connectionURLs = PluginCompatTester.getFallbackConnectionURL(connectionURLs, url, fallbackGitHubOrganization); } - + IOException lastException = null; for (String connectionURL: connectionURLs){ if (connectionURL != null) { @@ -99,7 +97,7 @@ private void cloneFromSCM(UpdateSite.Plugin currentPlugin, File parentPath, Stri lastException = e; } } - + if (lastException != null) { throw new UncheckedIOException(lastException); } diff --git a/src/main/java/org/jenkins/tools/test/hook/BlueOceanHook.java b/src/main/java/org/jenkins/tools/test/hook/BlueOceanHook.java index 2f276a689..28b64aad5 100644 --- a/src/main/java/org/jenkins/tools/test/hook/BlueOceanHook.java +++ b/src/main/java/org/jenkins/tools/test/hook/BlueOceanHook.java @@ -14,7 +14,6 @@ protected String getParentFolder() { return "blueocean-plugin"; } - @Override protected String getParentProjectName() { return "blueocean-parent"; diff --git a/src/main/java/org/jenkins/tools/test/hook/ConfigurationAsCodeHook.java b/src/main/java/org/jenkins/tools/test/hook/ConfigurationAsCodeHook.java index 237f5777c..b596b3d7e 100644 --- a/src/main/java/org/jenkins/tools/test/hook/ConfigurationAsCodeHook.java +++ b/src/main/java/org/jenkins/tools/test/hook/ConfigurationAsCodeHook.java @@ -11,7 +11,6 @@ protected String getParentFolder() { return "configuration-as-code-plugin"; } - @Override protected String getParentProjectName() { return "configuration-as-code"; diff --git a/src/main/java/org/jenkins/tools/test/hook/DeclarativePipelineHook.java b/src/main/java/org/jenkins/tools/test/hook/DeclarativePipelineHook.java index d2b6849fb..0bd07e5d4 100644 --- a/src/main/java/org/jenkins/tools/test/hook/DeclarativePipelineHook.java +++ b/src/main/java/org/jenkins/tools/test/hook/DeclarativePipelineHook.java @@ -20,7 +20,6 @@ protected String getParentFolder() { return "pipeline-model-definition-plugin"; } - @Override protected String getParentProjectName() { return "pipeline-model-definition"; diff --git a/src/main/java/org/jenkins/tools/test/hook/DeclarativePipelineMigrationHook.java b/src/main/java/org/jenkins/tools/test/hook/DeclarativePipelineMigrationHook.java index 2308c5d17..e4162862b 100644 --- a/src/main/java/org/jenkins/tools/test/hook/DeclarativePipelineMigrationHook.java +++ b/src/main/java/org/jenkins/tools/test/hook/DeclarativePipelineMigrationHook.java @@ -1,10 +1,9 @@ package org.jenkins.tools.test.hook; -import org.jenkins.tools.test.model.PomData; import hudson.model.UpdateSite; - import java.util.Map; import java.util.Set; +import org.jenkins.tools.test.model.PomData; /** * Workaround for the Declarative Pipeline Migration Assistant plugins since they are @@ -21,7 +20,6 @@ protected String getParentFolder() { return "declarative-pipeline-migration-assistant-plugin"; } - @Override protected String getParentProjectName() { return "declarative-pipeline-migration-assistant"; 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 92a768818..e70c77e15 100644 --- a/src/main/java/org/jenkins/tools/test/hook/JacocoHook.java +++ b/src/main/java/org/jenkins/tools/test/hook/JacocoHook.java @@ -1,11 +1,10 @@ package org.jenkins.tools.test.hook; -import org.jenkins.tools.test.model.PomData; -import org.jenkins.tools.test.model.hook.PluginCompatTesterHookBeforeExecution; - import java.util.List; import java.util.Map; import java.util.stream.IntStream; +import org.jenkins.tools.test.model.PomData; +import org.jenkins.tools.test.model.hook.PluginCompatTesterHookBeforeExecution; /** * Workaround for JaCoCo plugin since it needs execute the jacoco:prepare-agent goal before execution. diff --git a/src/main/java/org/jenkins/tools/test/hook/MinaSshdApi.java b/src/main/java/org/jenkins/tools/test/hook/MinaSshdApi.java index ebda8b729..e4fba60a8 100644 --- a/src/main/java/org/jenkins/tools/test/hook/MinaSshdApi.java +++ b/src/main/java/org/jenkins/tools/test/hook/MinaSshdApi.java @@ -1,6 +1,5 @@ package org.jenkins.tools.test.hook; -import hudson.model.UpdateSite; import java.util.Map; import org.jenkins.tools.test.model.PomData; 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 070a9e737..d3c02116f 100644 --- a/src/main/java/org/jenkins/tools/test/hook/MultiParentCompileHook.java +++ b/src/main/java/org/jenkins/tools/test/hook/MultiParentCompileHook.java @@ -1,10 +1,6 @@ package org.jenkins.tools.test.hook; -import static org.jenkins.tools.test.PluginCompatTester.getMavenModule; -import static org.jenkins.tools.test.model.hook.PluginCompatTesterHooks.getHooksFromStage; - import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; - import java.io.File; import java.io.IOException; import java.nio.charset.Charset; @@ -16,15 +12,16 @@ import java.util.logging.Level; import java.util.logging.Logger; import java.util.stream.Stream; - import org.apache.commons.io.FileUtils; import org.apache.commons.lang.StringUtils; +import org.jenkins.tools.test.PluginCompatTester; import org.jenkins.tools.test.exception.PomExecutionException; import org.jenkins.tools.test.maven.ExternalMavenRunner; import org.jenkins.tools.test.maven.MavenRunner; import org.jenkins.tools.test.model.PluginCompatTesterConfig; import org.jenkins.tools.test.model.hook.PluginCompatTesterHook; import org.jenkins.tools.test.model.hook.PluginCompatTesterHookBeforeCompile; +import org.jenkins.tools.test.model.hook.PluginCompatTesterHooks; public class MultiParentCompileHook extends PluginCompatTesterHookBeforeCompile { @@ -39,7 +36,6 @@ public MultiParentCompileHook() { LOGGER.log(Level.INFO, "Loaded multi-parent compile hook"); } - @Override @SuppressFBWarnings(value = "REC_CATCH_EXCEPTION", justification = "silly rule") public Map action(Map moreInfo) throws Exception { @@ -93,7 +89,7 @@ public void validate(Map toCheck) { @Override public boolean check(Map info) { - for (PluginCompatTesterHook hook : getHooksFromStage("checkout", info)) { + for (PluginCompatTesterHook hook : PluginCompatTesterHooks.getHooksFromStage("checkout", info)) { if (hook instanceof AbstractMultiParentHook && hook.check(info)) { return true; } @@ -124,7 +120,7 @@ private void compile(MavenRunner.Config mavenConfig, File path, File localChecko if (isSnapshotMultiParentPlugin(parentFolder, path, localCheckoutDir)) { // "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); + String mavenModule = PluginCompatTester.getMavenModule(pluginName, path, runner, mavenConfig); if (mavenModule == null || mavenModule.isBlank()) { throw new IOException(String.format("Unable to retrieve the Maven module for plugin %s on %s", pluginName, path)); } @@ -135,8 +131,8 @@ private void compile(MavenRunner.Config mavenConfig, File path, File localChecko } /** - * Checks if a plugin is a multiparent plugin with a SNAPSHOT project.version and - * without local checkout directory overriden. + * Checks if a plugin is a multiparent plugin with a SNAPSHOT project.version and + * without local checkout directory overriden. */ private boolean isSnapshotMultiParentPlugin(String parentFolder, File path, File localCheckoutDir) throws PomExecutionException, IOException { if (localCheckoutDir != null) { @@ -154,14 +150,13 @@ private boolean isSnapshotMultiParentPlugin(String parentFolder, File path, File LOGGER.log(Level.WARNING, "{0} is not the parent folder of {1}", new Object[]{parentFolder, path.getAbsolutePath()}); return false; } - + File log = new File(parentFile.getAbsolutePath() + File.separatorChar + "version.log"); runner.run(mavenConfig, parentFile, log, "-Dexpression=project.version", "-q", "-DforceStdout", "help:evaluate"); List output = Files.readAllLines(log.toPath(), Charset.defaultCharset()); return output.get(output.size() - 1).endsWith("-SNAPSHOT"); } - private File setupCompileResources(File path) throws IOException { LOGGER.log(Level.INFO, "Cleaning up node modules if necessary"); removeNodeFolders(path); 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 7cc270400..1908a720c 100644 --- a/src/main/java/org/jenkins/tools/test/hook/NodeCleanupBeforeCompileHook.java +++ b/src/main/java/org/jenkins/tools/test/hook/NodeCleanupBeforeCompileHook.java @@ -1,14 +1,13 @@ package org.jenkins.tools.test.hook; -import org.apache.commons.io.FileUtils; -import org.jenkins.tools.test.model.PluginCompatTesterConfig; -import org.jenkins.tools.test.model.hook.PluginCompatTesterHookBeforeCompile; - import java.io.File; import java.io.IOException; import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; +import org.apache.commons.io.FileUtils; +import org.jenkins.tools.test.model.PluginCompatTesterConfig; +import org.jenkins.tools.test.model.hook.PluginCompatTesterHookBeforeCompile; public class NodeCleanupBeforeCompileHook extends PluginCompatTesterHookBeforeCompile { 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 f5361838e..2a36b022d 100644 --- a/src/main/java/org/jenkins/tools/test/hook/PipelineStageViewHook.java +++ b/src/main/java/org/jenkins/tools/test/hook/PipelineStageViewHook.java @@ -3,7 +3,6 @@ import hudson.model.UpdateSite; import java.util.Map; import java.util.Set; - import org.jenkins.tools.test.model.PomData; public class PipelineStageViewHook extends AbstractMultiParentHook { @@ -17,7 +16,6 @@ protected String getParentFolder() { return "pipeline-stage-view-plugin"; } - @Override protected String getParentProjectName() { return "pipeline-stage-view"; 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 133ddc930..e4e8def91 100644 --- a/src/main/java/org/jenkins/tools/test/hook/PluginWithFailsafeIntegrationTestsHook.java +++ b/src/main/java/org/jenkins/tools/test/hook/PluginWithFailsafeIntegrationTestsHook.java @@ -17,5 +17,5 @@ public Collection getGoals() { public Collection getTestTypes() { 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 d812afc29..b04e474cf 100644 --- a/src/main/java/org/jenkins/tools/test/hook/PluginWithIntegrationTestsHook.java +++ b/src/main/java/org/jenkins/tools/test/hook/PluginWithIntegrationTestsHook.java @@ -1,26 +1,24 @@ package org.jenkins.tools.test.hook; +import edu.umd.cs.findbugs.annotations.NonNull; import java.util.Collection; import java.util.List; import java.util.Map; - import org.jenkins.tools.test.model.hook.PluginCompatTesterHookBeforeExecution; -import edu.umd.cs.findbugs.annotations.NonNull; - /** - * Hook for plugins with integration tests that need to be executed + * Hook for plugins with integration tests that need to be executed */ public abstract class PluginWithIntegrationTestsHook extends PluginCompatTesterHookBeforeExecution { /** Inform about goals to execute integration tests */ @NonNull abstract public Collection getGoals(); - + /** Inform about test type suite to execute integration test */ @NonNull abstract public Collection getTestTypes(); - + @SuppressWarnings("unchecked") @Override public Map action(Map info) { @@ -29,7 +27,7 @@ public Map action(Map info) { if (args != null) { args.addAll(getGoals()); } - + List types = (List) info.get("types"); if (types != null) { types.addAll(getTestTypes()); 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 204cd8002..dd0b77994 100644 --- a/src/main/java/org/jenkins/tools/test/hook/SkipUIHelperPlugins.java +++ b/src/main/java/org/jenkins/tools/test/hook/SkipUIHelperPlugins.java @@ -33,9 +33,9 @@ public List transformedPlugins() { */ @Override public Map action(Map moreInfo) { - moreInfo.put("executionResult", + moreInfo.put("executionResult", new TestExecutionResult(List.of("Plugin unsupported at this time, skipping"))); moreInfo.put("runCheckout", false); return moreInfo; } -} \ No newline at end of file +} diff --git a/src/main/java/org/jenkins/tools/test/hook/SwarmHook.java b/src/main/java/org/jenkins/tools/test/hook/SwarmHook.java index a52b6ba96..b78143296 100644 --- a/src/main/java/org/jenkins/tools/test/hook/SwarmHook.java +++ b/src/main/java/org/jenkins/tools/test/hook/SwarmHook.java @@ -11,7 +11,6 @@ protected String getParentFolder() { return "swarm-plugin"; } - @Override protected String getParentProjectName() { return "swarm-plugin"; diff --git a/src/main/java/org/jenkins/tools/test/hook/WarningsNGCheckoutHook.java b/src/main/java/org/jenkins/tools/test/hook/WarningsNGCheckoutHook.java index 950ffb777..30190ca84 100644 --- a/src/main/java/org/jenkins/tools/test/hook/WarningsNGCheckoutHook.java +++ b/src/main/java/org/jenkins/tools/test/hook/WarningsNGCheckoutHook.java @@ -1,12 +1,11 @@ package org.jenkins.tools.test.hook; import hudson.model.UpdateSite; -import org.jenkins.tools.test.model.PomData; - import java.io.File; import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; +import org.jenkins.tools.test.model.PomData; public class WarningsNGCheckoutHook extends AbstractMultiParentHook { @@ -17,7 +16,6 @@ protected String getParentFolder() { return "warnings-ng-plugin"; } - @Override protected String getParentProjectName() { return "warnings-ng"; diff --git a/src/main/java/org/jenkins/tools/test/hook/WarningsNGExecutionHook.java b/src/main/java/org/jenkins/tools/test/hook/WarningsNGExecutionHook.java index 6be65c65d..fd8d3a750 100644 --- a/src/main/java/org/jenkins/tools/test/hook/WarningsNGExecutionHook.java +++ b/src/main/java/org/jenkins/tools/test/hook/WarningsNGExecutionHook.java @@ -1,8 +1,7 @@ package org.jenkins.tools.test.hook; -import org.jenkins.tools.test.model.PomData; - import java.util.Map; +import org.jenkins.tools.test.model.PomData; /** * Workaround for Warnings NG plugin since it needs execute integration tests. 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 ae9a6ed23..8d9764bc5 100644 --- a/src/main/java/org/jenkins/tools/test/maven/ExternalMavenRunner.java +++ b/src/main/java/org/jenkins/tools/test/maven/ExternalMavenRunner.java @@ -19,7 +19,6 @@ import java.util.logging.Logger; import java.util.regex.Matcher; import java.util.regex.Pattern; - import org.apache.commons.lang.SystemUtils; import org.jenkins.tools.test.exception.PomExecutionException; import org.jenkins.tools.test.util.ExecutedTestNamesSolver; @@ -40,7 +39,7 @@ public class ExternalMavenRunner implements MavenRunner { /** * Constructor. - * + * * @param mvn Path to Maven. If {@code null}, a default Maven executable from * {@code PATH} will be used */ 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 4517c8aad..9c87293cd 100644 --- a/src/main/java/org/jenkins/tools/test/model/MavenCoordinates.java +++ b/src/main/java/org/jenkins/tools/test/model/MavenCoordinates.java @@ -23,6 +23,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ + package org.jenkins.tools.test.model; import edu.umd.cs.findbugs.annotations.NonNull; 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 e90d5a320..b040b7efa 100644 --- a/src/main/java/org/jenkins/tools/test/model/MavenPom.java +++ b/src/main/java/org/jenkins/tools/test/model/MavenPom.java @@ -23,6 +23,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ + package org.jenkins.tools.test.model; import edu.umd.cs.findbugs.annotations.NonNull; @@ -148,10 +149,10 @@ public void removeDependency(@NonNull String groupId, @NonNull String artifactId writeDocument(pom, doc); } - + /** - * Create/Update a plugin management section with a set of plugins - * @param includeGroupId - specify if we want to add the groupId or not + * Create/Update a plugin management section with a set of plugins + * @param includeGroupId - specify if we want to add the groupId or not */ public void addPluginManagement(List pluginsToAdd, boolean includeGroupId) throws IOException { File pom = new File(rootDir.getAbsolutePath() + "/" + pomFileName); @@ -161,19 +162,19 @@ public void addPluginManagement(List pluginsToAdd, boolean inc } catch (DocumentException x) { throw new IOException(x); } - + Element build = doc.getRootElement().element("build"); if (build == null) { build = doc.getRootElement().addElement("build"); } - + Element pluginManagement = build.element("pluginManagement"); if (pluginManagement == null) { pluginManagement = build.addElement("pluginManagement"); } - + Element plugins = pluginManagement.element("plugins"); - if (plugins == null) { + if (plugins == null) { plugins = pluginManagement.addElement("plugins"); } for (MavenCoordinates plugin : pluginsToAdd) { @@ -187,10 +188,10 @@ public void addPluginManagement(List pluginsToAdd, boolean inc Element versionIdElem = entry.addElement(VERSION_ELEMENT); versionIdElem.setText(plugin.version); } - + writeDocument(pom, doc); } - + /** * Create/Update the properties section adding/updating some of them */ @@ -202,12 +203,12 @@ public void addProperties(Properties propertiesToAdd) throws IOException { } catch (DocumentException x) { throw new IOException(x); } - + Element properties = doc.getRootElement().element("properties"); if (properties == null) { properties = doc.getRootElement().addElement("properties"); } - + for (Entry property : propertiesToAdd.entrySet()) { String key = (String)property.getKey(); Element entry = properties.element(key); @@ -325,14 +326,14 @@ private void manageDependencies(Map toAdd, Map getTestedCoreCoordinates() { return new TreeSet<>(testedCoreCoordinates); } - public void setTestJavaVersion(String testJavaVersion) { this.testJavaVersion = testJavaVersion; } 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 a1d649ccd..152196348 100644 --- a/src/main/java/org/jenkins/tools/test/model/PluginCompatResult.java +++ b/src/main/java/org/jenkins/tools/test/model/PluginCompatResult.java @@ -23,6 +23,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ + package org.jenkins.tools.test.model; import java.util.Collections; @@ -55,6 +56,7 @@ public PluginCompatResult(MavenCoordinates coreCoordinates, TestStatus status, // Create new result with current date this(coreCoordinates, status, errorMessage, warningMessages, testDetails, buildLogPath, new Date()); } + private PluginCompatResult(MavenCoordinates coreCoordinates, TestStatus status, String errorMessage, List warningMessages, Set testDetails, String buildLogPath, Date compatTestExecutedOn){ @@ -104,4 +106,4 @@ public void setBuildLogPath(String buildLogPath) { public Set getTestsDetails() { return Collections.unmodifiableSet(testDetails); } -} \ No newline at end of file +} 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 e02ce75cd..fc375e05d 100644 --- a/src/main/java/org/jenkins/tools/test/model/PluginCompatTesterConfig.java +++ b/src/main/java/org/jenkins/tools/test/model/PluginCompatTesterConfig.java @@ -23,6 +23,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ + package org.jenkins.tools.test.model; import edu.umd.cs.findbugs.annotations.CheckForNull; @@ -113,10 +114,10 @@ public class PluginCompatTesterConfig { private String mavenPropertiesFile; private List mavenOptions = Collections.emptyList(); - + // Classpath prefixes of the extra hooks private List hookPrefixes = new ArrayList<>(List.of("org.jenkins")); - + // External hooks jar files path locations private List externalHooksJars = new ArrayList<>(); @@ -409,7 +410,7 @@ public void setExternalMaven(File externalMaven) { public List getHookPrefixes() { return hookPrefixes; } - + public List getExternalHooksJars() { return externalHooksJars; } @@ -418,7 +419,7 @@ public void setHookPrefixes(List hookPrefixes) { // Want to also process the default this.hookPrefixes.addAll(hookPrefixes); } - + public void setExternalHooksJars(List externalHooksJars) { this.externalHooksJars = externalHooksJars; } @@ -455,7 +456,7 @@ public void setFailOnError(boolean failOnError) { public void setStoreAll(boolean storeAll) { this.storeAll = storeAll; } - + public boolean isStoreAll() { return storeAll; } 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 440af5a74..90749af49 100644 --- a/src/main/java/org/jenkins/tools/test/model/PluginInfos.java +++ b/src/main/java/org/jenkins/tools/test/model/PluginInfos.java @@ -23,8 +23,8 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ -package org.jenkins.tools.test.model; +package org.jenkins.tools.test.model; import java.util.Objects; 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 8f171d6a2..bd2572bb7 100644 --- a/src/main/java/org/jenkins/tools/test/model/PluginRemoting.java +++ b/src/main/java/org/jenkins/tools/test/model/PluginRemoting.java @@ -23,6 +23,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ + package org.jenkins.tools.test.model; import edu.umd.cs.findbugs.annotations.CheckForNull; @@ -33,7 +34,6 @@ 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; @@ -73,7 +73,7 @@ public PluginRemoting(String hpiRemoteUrl){ public PluginRemoting(File pomFile){ this.pomFile = pomFile; } - + private String retrievePomContent() throws PluginSourcesUnavailableException{ if (hpiRemoteUrl != null) { return retrievePomContentFromHpi(); @@ -84,34 +84,34 @@ private String retrievePomContent() throws PluginSourcesUnavailableException{ private String retrievePomContentFromHpi() throws PluginSourcesUnavailableException { try { - return retrievePomContentFromHpiRemoteUrl(new URL(hpiRemoteUrl)); - } catch (MalformedURLException e) { - LOGGER.log(Level.WARNING, "HPI reference {0} is not a remote URL", hpiRemoteUrl); - return retrievePomContentFromHpiFileReference(); - } + return retrievePomContentFromHpiRemoteUrl(new URL(hpiRemoteUrl)); + } catch (MalformedURLException e) { + LOGGER.log(Level.WARNING, "HPI reference {0} is not a remote URL", hpiRemoteUrl); + return retrievePomContentFromHpiFileReference(); + } } private String retrievePomContentFromHpiRemoteUrl(URL url) throws PluginSourcesUnavailableException { - try { - return retrievePomContentFromInputStream(url.openStream()); - } catch (IOException e) { - LOGGER.log(Level.WARNING, "Failed to retrieve POM content from HPI remote URL", e); - throw new PluginSourcesUnavailableException("Failed to retrieve POM content from HPI remote URL", e); - } + try { + return retrievePomContentFromInputStream(url.openStream()); + } catch (IOException e) { + LOGGER.log(Level.WARNING, "Failed to retrieve POM content from HPI remote URL", e); + throw new PluginSourcesUnavailableException("Failed to retrieve POM content from HPI remote URL", e); + } } private String retrievePomContentFromHpiFileReference() throws PluginSourcesUnavailableException { - try { - String fileReference = hpiRemoteUrl.replaceAll("jar:", "").replaceAll("!/name.hpi", ""); - return retrievePomContentFromInputStream(FileUtils.openInputStream(new File(fileReference))); - } catch (IOException e) { - LOGGER.log(Level.WARNING, "Failed to retrieve POM content from HPI file reference", e); - throw new PluginSourcesUnavailableException("Failed to retrieve POM content from HPI file reference", e); - } + try { + String fileReference = hpiRemoteUrl.replaceAll("jar:", "").replaceAll("!/name.hpi", ""); + return retrievePomContentFromInputStream(FileUtils.openInputStream(new File(fileReference))); + } catch (IOException e) { + LOGGER.log(Level.WARNING, "Failed to retrieve POM content from HPI file reference", e); + throw new PluginSourcesUnavailableException("Failed to retrieve POM content from HPI file reference", e); + } } private String retrievePomContentFromInputStream(InputStream pluginUrlStream) throws PluginSourcesUnavailableException { - try (ZipInputStream zin = new ZipInputStream(pluginUrlStream)) { + try (ZipInputStream zin = new ZipInputStream(pluginUrlStream)) { ZipEntry zipEntry = zin.getNextEntry(); while(!zipEntry.getName().startsWith("META-INF/maven") || !zipEntry.getName().endsWith("pom.xml")){ zin.closeEntry(); @@ -133,31 +133,31 @@ private String retrievePomContentFromXmlFile() throws PluginSourcesUnavailableEx throw new PluginSourcesUnavailableException(String.format("Failed to retrieve POM content from XML file '%s'", pomFile), e); } } - - public PomData retrievePomData() throws PluginSourcesUnavailableException { - String scmConnection; + + public PomData retrievePomData() throws PluginSourcesUnavailableException { + String scmConnection; String scmTag; String artifactId; String groupId; String packaging; - String pomContent = this.retrievePomContent(); + String pomContent = this.retrievePomContent(); @CheckForNull MavenCoordinates parent = null; - - DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance(); - try { - DocumentBuilder builder = docBuilderFactory.newDocumentBuilder(); - Document doc = builder.parse(new InputSource(new StringReader(pomContent))); - - XPathFactory xpathFactory = XPathFactory.newInstance(); + + DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance(); + try { + DocumentBuilder builder = docBuilderFactory.newDocumentBuilder(); + Document doc = builder.parse(new InputSource(new StringReader(pomContent))); + + XPathFactory xpathFactory = XPathFactory.newInstance(); XPath xpath = xpathFactory.newXPath(); - XPathExpression scmConnectionXPath = xpath.compile("/project/scm/connection/text()"); + XPathExpression scmConnectionXPath = xpath.compile("/project/scm/connection/text()"); XPathExpression artifactIdXPath = xpath.compile("/project/artifactId/text()"); XPathExpression groupIdXPath = xpath.compile("/project/groupId/text()"); XPathExpression packagingXPath = xpath.compile("/project/packaging/text()"); XPathExpression scmTagXPath = xpath.compile("/project/scm/tag/text()"); - scmConnection = (String)scmConnectionXPath.evaluate(doc, XPathConstants.STRING); - scmTag = StringUtils.trimToNull((String) scmTagXPath.evaluate(doc, XPathConstants.STRING)); + scmConnection = (String)scmConnectionXPath.evaluate(doc, XPathConstants.STRING); + scmTag = StringUtils.trimToNull((String) scmTagXPath.evaluate(doc, XPathConstants.STRING)); artifactId = (String)artifactIdXPath.evaluate(doc, XPathConstants.STRING); groupId = (String)groupIdXPath.evaluate(doc, XPathConstants.STRING); packaging = StringUtils.trimToNull((String)packagingXPath.evaluate(doc, XPathConstants.STRING)); @@ -172,29 +172,29 @@ public PomData retrievePomData() throws PluginSourcesUnavailableException { } else { LOGGER.log(Level.FINE, "No parent POM for {0}", artifactId); } - } catch (ParserConfigurationException | SAXException | IOException e) { - LOGGER.log(Level.WARNING, "Failed to parse pom.xml", e); - throw new PluginSourcesUnavailableException("Failed to parse pom.xml", e); - } catch (XPathExpressionException e) { - LOGGER.log(Level.WARNING, "Failed to retrieve SCM connection", e); - throw new PluginSourcesUnavailableException("Failed to retrieve SCM connection", e); - } - - PomData pomData = new PomData(artifactId, packaging, scmConnection, scmTag, parent, groupId); + } catch (ParserConfigurationException | SAXException | IOException e) { + LOGGER.log(Level.WARNING, "Failed to parse pom.xml", e); + throw new PluginSourcesUnavailableException("Failed to parse pom.xml", e); + } catch (XPathExpressionException e) { + LOGGER.log(Level.WARNING, "Failed to retrieve SCM connection", e); + throw new PluginSourcesUnavailableException("Failed to retrieve SCM connection", e); + } + + PomData pomData = new PomData(artifactId, packaging, scmConnection, scmTag, parent, groupId); computeScmConnection(pomData); return pomData; - } + } /** * Retrieves a field value by XPath. The value must exist and be non-empty. * * @throws IOException parsing error */ - @NonNull - private static String getValueOrFail(Document doc, XPath xpath, String field) throws IOException { + @NonNull + private static String getValueOrFail(Document doc, XPath xpath, String field) throws IOException { String res; - try { - res = xpath.evaluate(field + "/text()", doc); + try { + res = xpath.evaluate(field + "/text()", doc); } catch (XPathExpressionException e) { throw new IOException("Expression failed for the field " + field, e); } @@ -261,11 +261,11 @@ public static void computeScmConnection(PomData pomData) { pomData.getWarningMessages().add("project.scm.connectionUrl should not reference hudson project anymore (no plugin repository there))"); } - // Just fixing some scm-sync-configuration issues... - // TODO: remove this when fixed ! + // Just fixing some scm-sync-configuration issues... + // TODO: remove this when fixed ! oldUrl = transformedConnectionUrl; - if("scm-sync-configuration".equals(pomData.artifactId)){ - transformedConnectionUrl = transformedConnectionUrl.substring(0, transformedConnectionUrl.length()-4)+"-plugin.git"; + if("scm-sync-configuration".equals(pomData.artifactId)){ + transformedConnectionUrl = transformedConnectionUrl.substring(0, transformedConnectionUrl.length()-4)+"-plugin.git"; } if(!oldUrl.equals(transformedConnectionUrl)){ pomData.getWarningMessages().add("project.scm.connectionUrl should be ending with '-plugin.git'"); 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 370a34e25..d6f3f7cff 100644 --- a/src/main/java/org/jenkins/tools/test/model/PomData.java +++ b/src/main/java/org/jenkins/tools/test/model/PomData.java @@ -23,6 +23,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ + package org.jenkins.tools.test.model; import edu.umd.cs.findbugs.annotations.CheckForNull; 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 869f05759..b94b1b727 100644 --- a/src/main/java/org/jenkins/tools/test/model/TestExecutionResult.java +++ b/src/main/java/org/jenkins/tools/test/model/TestExecutionResult.java @@ -23,11 +23,11 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ + package org.jenkins.tools.test.model; import java.util.Collections; import java.util.List; - import org.jenkins.tools.test.util.ExecutedTestNamesDetails; /** @@ -53,4 +53,4 @@ public TestExecutionResult(List pomWarningMessages, ExecutedTestNamesDet public ExecutedTestNamesDetails getTestDetails() { return testDetails; } -} \ No newline at end of file +} diff --git a/src/main/java/org/jenkins/tools/test/model/TestStatus.java b/src/main/java/org/jenkins/tools/test/model/TestStatus.java index 7202d6e9a..079af3854 100644 --- a/src/main/java/org/jenkins/tools/test/model/TestStatus.java +++ b/src/main/java/org/jenkins/tools/test/model/TestStatus.java @@ -23,6 +23,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ + package org.jenkins.tools.test.model; /** diff --git a/src/main/java/org/jenkins/tools/test/model/comparators/VersionComparator.java b/src/main/java/org/jenkins/tools/test/model/comparators/VersionComparator.java index e196dcc60..aac054445 100644 --- a/src/main/java/org/jenkins/tools/test/model/comparators/VersionComparator.java +++ b/src/main/java/org/jenkins/tools/test/model/comparators/VersionComparator.java @@ -23,6 +23,7 @@ * 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; diff --git a/src/main/java/org/jenkins/tools/test/model/hook/PluginCompatTesterHook.java b/src/main/java/org/jenkins/tools/test/model/hook/PluginCompatTesterHook.java index fce495138..3bfdce9f7 100644 --- a/src/main/java/org/jenkins/tools/test/model/hook/PluginCompatTesterHook.java +++ b/src/main/java/org/jenkins/tools/test/model/hook/PluginCompatTesterHook.java @@ -47,4 +47,4 @@ default List transformedPlugins() { * Check the object used for this hook. */ void validate(Map toCheck); - } \ No newline at end of file + } diff --git a/src/main/java/org/jenkins/tools/test/model/hook/PluginCompatTesterHookBeforeCheckout.java b/src/main/java/org/jenkins/tools/test/model/hook/PluginCompatTesterHookBeforeCheckout.java index e8de9488c..dc7173564 100644 --- a/src/main/java/org/jenkins/tools/test/model/hook/PluginCompatTesterHookBeforeCheckout.java +++ b/src/main/java/org/jenkins/tools/test/model/hook/PluginCompatTesterHookBeforeCheckout.java @@ -18,9 +18,9 @@ public abstract class PluginCompatTesterHookBeforeCheckout implements PluginComp public void validate(Map toCheck) { if((toCheck.get("runCheckout") != null && (toCheck.get("runCheckout").getClass().isPrimitive() || ClassUtils.wrapperToPrimitive(toCheck.get("runCheckout").getClass()) != null)) && - (toCheck.get("pluginDir") != null && + (toCheck.get("pluginDir") != null && toCheck.get("pluginDir") instanceof String) ) { throw new IllegalArgumentException("A hook modified a required parameter for plugin checkout."); } - } -} \ No newline at end of file + } +} diff --git a/src/main/java/org/jenkins/tools/test/model/hook/PluginCompatTesterHookBeforeCompile.java b/src/main/java/org/jenkins/tools/test/model/hook/PluginCompatTesterHookBeforeCompile.java index c2c99b76f..81e6b76f7 100644 --- a/src/main/java/org/jenkins/tools/test/model/hook/PluginCompatTesterHookBeforeCompile.java +++ b/src/main/java/org/jenkins/tools/test/model/hook/PluginCompatTesterHookBeforeCompile.java @@ -18,4 +18,4 @@ public abstract class PluginCompatTesterHookBeforeCompile implements PluginCompa public static final String OVERRIDE_DEFAULT_COMPILE = "ranCompile"; -} \ No newline at end of file +} diff --git a/src/main/java/org/jenkins/tools/test/model/hook/PluginCompatTesterHookBeforeExecution.java b/src/main/java/org/jenkins/tools/test/model/hook/PluginCompatTesterHookBeforeExecution.java index c1b844913..9ded56ba4 100644 --- a/src/main/java/org/jenkins/tools/test/model/hook/PluginCompatTesterHookBeforeExecution.java +++ b/src/main/java/org/jenkins/tools/test/model/hook/PluginCompatTesterHookBeforeExecution.java @@ -16,11 +16,11 @@ public abstract class PluginCompatTesterHookBeforeExecution implements PluginCom */ @Override public void validate(Map toCheck) { - if((toCheck.get("args") != null && + if((toCheck.get("args") != null && toCheck.get("args") instanceof String) && - (toCheck.get("pomData") != null && + (toCheck.get("pomData") != null && toCheck.get("pomData") instanceof PomData) ) { throw new IllegalArgumentException("A hook modified a required parameter for plugin test execution."); } - } -} \ No newline at end of file + } +} 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 6d7663c18..6cff58c65 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 @@ -43,6 +43,7 @@ public class PluginCompatTesterHooks { public PluginCompatTesterHooks() { this(new ArrayList<>()); } + public PluginCompatTesterHooks(List extraPrefixes) { setupPrefixes(extraPrefixes); setupHooksByType(); @@ -66,6 +67,7 @@ private void setupHooksByType() { hooksByType.put(stage, findHooks(stage)); } } + private void setupPrefixes(List extraPrefixes) { if(extraPrefixes != null) { hookPrefixes.addAll(extraPrefixes); @@ -80,6 +82,7 @@ private void setupExternalClassLoaders(List externalJars) throws Malformed classLoaders.add(new URLClassLoader(new URL[] { jar.toURI().toURL() }, PluginCompatTesterHooks.class.getClassLoader())); } } + public Map runBeforeCheckout(Map elements) { return runHooks("checkout", elements); } @@ -87,7 +90,7 @@ public Map runBeforeCheckout(Map elements) { public Map runBeforeCompilation(Map elements) { return runHooks("compilation", elements); } - + public Map runBeforeExecution(Map elements) { return runHooks("execution", elements); } @@ -101,7 +104,7 @@ public Map runBeforeExecution(Map elements) { */ private Map runHooks(String stage, Map elements) throws RuntimeException { Queue beforeHooks = getHooksFromStage(stage, elements); - + // Loop through hooks in a series run in no particular order // Modifications build on each other, pertinent checks should be handled in the hook for(PluginCompatTesterHook hook : beforeHooks) { @@ -122,7 +125,7 @@ private Map runHooks(String stage, Map elements) } return elements; } - + public static Queue getHooksFromStage(String stage, Map elements) { // List of hooks to execute for the given plugin Queue hooks = new LinkedList<>(); @@ -155,20 +158,20 @@ private Map> findHooks(String stage) { // Find all steps for a given stage. Long due to casting switch(stage) { - case "compilation" : - Set> compSteps = reflections.getSubTypesOf(PluginCompatTesterHookBeforeCompile.class); + case "compilation" : + Set> compSteps = reflections.getSubTypesOf(PluginCompatTesterHookBeforeCompile.class); subTypes = compSteps.stream() .map(this::casting) .collect(Collectors.toSet()); break; - case "execution" : - Set> exeSteps = reflections.getSubTypesOf(PluginCompatTesterHookBeforeExecution.class); + case "execution" : + Set> exeSteps = reflections.getSubTypesOf(PluginCompatTesterHookBeforeExecution.class); subTypes = exeSteps.stream() .map(this::casting) .collect(Collectors.toSet()); break; - case "checkout" : - Set> checkSteps = reflections.getSubTypesOf(PluginCompatTesterHookBeforeCheckout.class); + case "checkout" : + Set> checkSteps = reflections.getSubTypesOf(PluginCompatTesterHookBeforeCheckout.class); subTypes = checkSteps.stream() .map(this::casting) .collect(Collectors.toSet()); @@ -199,7 +202,7 @@ private Map> findHooks(String stage) { } } } - + return sortedHooks; } 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 8c1dd2628..2b8b50725 100644 --- a/src/main/java/org/jenkins/tools/test/util/ExecutedTestNamesDetails.java +++ b/src/main/java/org/jenkins/tools/test/util/ExecutedTestNamesDetails.java @@ -7,25 +7,25 @@ import java.util.TreeSet; public class ExecutedTestNamesDetails { - + private static final String FAILED = "FAILED"; - + private static final String EXECUTED = "EXECUTED"; - + private Map> tests; - + public ExecutedTestNamesDetails() { this.tests = new HashMap<>(); } - + public void addFailedTest(String test) { add(FAILED, test); } - + public void addExecutedTest(String test) { add(EXECUTED, test); } - + public Set getAll() { Set result = new TreeSet<>(); if (this.tests.containsKey(EXECUTED)) { @@ -36,19 +36,19 @@ public Set getAll() { } return Collections.unmodifiableSet(result); } - + public Set getFailed() { return get(FAILED); } - + public Set getExecuted() { return get(EXECUTED); } - + private Set get(String key) { return this.tests.containsKey(key) ? Collections.unmodifiableSet(new TreeSet<>(this.tests.get(key))) : null; } - + private void add(String key, String test) { this.tests.computeIfAbsent(key, unused -> new TreeSet<>()).add(test); } diff --git a/src/main/resources/org/jenkins/tools/test/logging/logging.properties b/src/main/resources/org/jenkins/tools/test/logging/logging.properties index 4c3a2d1b4..fa54cd933 100644 --- a/src/main/resources/org/jenkins/tools/test/logging/logging.properties +++ b/src/main/resources/org/jenkins/tools/test/logging/logging.properties @@ -1,5 +1,5 @@ ############################################################ -# Default Logging Configuration File +# Default Logging Configuration File # # You can use a different file by specifying a filename # with the java.util.logging.config.file system property. @@ -7,7 +7,7 @@ ############################################################ ############################################################ -# Global properties +# Global properties ############################################################ # "handlers" specifies a comma-separated list of log Handler diff --git a/src/test/java/org/jenkins/tools/test/PluginCompatTesterTest.java b/src/test/java/org/jenkins/tools/test/PluginCompatTesterTest.java index 068f9328b..24a716dfa 100644 --- a/src/test/java/org/jenkins/tools/test/PluginCompatTesterTest.java +++ b/src/test/java/org/jenkins/tools/test/PluginCompatTesterTest.java @@ -23,6 +23,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ + package org.jenkins.tools.test; import static org.hamcrest.MatcherAssert.assertThat; @@ -34,7 +35,6 @@ import java.nio.file.Paths; import java.util.regex.Matcher; import java.util.regex.Pattern; - import org.apache.commons.io.FileUtils; import org.junit.Before; import org.junit.Rule; diff --git a/src/test/java/org/jenkins/tools/test/ScmConnectionSpecialCasesTest.java b/src/test/java/org/jenkins/tools/test/ScmConnectionSpecialCasesTest.java index c0ba7df2f..de380488c 100644 --- a/src/test/java/org/jenkins/tools/test/ScmConnectionSpecialCasesTest.java +++ b/src/test/java/org/jenkins/tools/test/ScmConnectionSpecialCasesTest.java @@ -23,6 +23,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ + package org.jenkins.tools.test; import static org.hamcrest.CoreMatchers.equalTo; @@ -119,7 +120,6 @@ public void shouldGitHudsonRepoBeMigratedToJenkinsCI() { ); } - @Test public void shouldScmConnectionBeTrimmed() { runComputeScmConnectionAgainst( diff --git a/src/test/java/org/jenkins/tools/test/VersionComparatorTest.java b/src/test/java/org/jenkins/tools/test/VersionComparatorTest.java index 5dd92bd5b..7fc35dc49 100644 --- a/src/test/java/org/jenkins/tools/test/VersionComparatorTest.java +++ b/src/test/java/org/jenkins/tools/test/VersionComparatorTest.java @@ -23,6 +23,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ + package org.jenkins.tools.test; import static org.hamcrest.CoreMatchers.equalTo; 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 f18620b28..db6d5d35d 100644 --- a/src/test/java/org/jenkins/tools/test/hook/JacocoHookTest.java +++ b/src/test/java/org/jenkins/tools/test/hook/JacocoHookTest.java @@ -1,18 +1,17 @@ package org.jenkins.tools.test.hook; -import org.jenkins.tools.test.model.MavenCoordinates; -import org.jenkins.tools.test.model.PomData; -import org.junit.Test; +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; - -import static org.hamcrest.CoreMatchers.is; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; +import org.jenkins.tools.test.model.MavenCoordinates; +import org.jenkins.tools.test.model.PomData; +import org.junit.Test; public class JacocoHookTest { 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 cfd9be12c..3a3510bec 100644 --- a/src/test/java/org/jenkins/tools/test/hook/WarningsNGExecutionHookTest.java +++ b/src/test/java/org/jenkins/tools/test/hook/WarningsNGExecutionHookTest.java @@ -1,18 +1,17 @@ package org.jenkins.tools.test.hook; -import org.jenkins.tools.test.model.MavenCoordinates; -import org.jenkins.tools.test.model.PomData; -import org.junit.Test; +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; - -import static org.hamcrest.CoreMatchers.is; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; +import org.jenkins.tools.test.model.MavenCoordinates; +import org.jenkins.tools.test.model.PomData; +import org.junit.Test; public class WarningsNGExecutionHookTest { @@ -47,7 +46,7 @@ public void testAction() throws Exception { assertThat(args.size(), is(5)); assertTrue(args.contains("failsafe:integration-test")); } - + @Test public void testType() throws Exception { final WarningsNGExecutionHook hook = new WarningsNGExecutionHook(); @@ -59,6 +58,4 @@ public void testType() throws Exception { assertThat(types.size(), is(2)); assertTrue(types.contains("failsafe")); } - - -} \ No newline at end of file +} 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 3b2846f36..945ad78c1 100644 --- a/src/test/java/org/jenkins/tools/test/model/MavenPomTest.java +++ b/src/test/java/org/jenkins/tools/test/model/MavenPomTest.java @@ -1,5 +1,7 @@ package org.jenkins.tools.test.model; +import static org.junit.Assert.assertEquals; + import hudson.util.VersionNumber; import java.io.File; import java.io.IOException; @@ -12,7 +14,6 @@ import java.util.List; import java.util.Map; import org.apache.commons.io.FileUtils; -import static org.junit.Assert.assertEquals; import org.junit.Rule; import org.junit.Test; import org.junit.rules.TemporaryFolder;