From 2f34d8c2049d7e595e40f35b765b075062095b4c Mon Sep 17 00:00:00 2001 From: Basil Crow Date: Wed, 1 Mar 2023 09:21:18 -0800 Subject: [PATCH] Use Maven model directly --- .../tools/test/PluginCompatTester.java | 62 +++++----- .../test/hook/AbstractMultiParentHook.java | 8 +- .../test/hook/AnalysisPomExecutionHook.java | 10 +- .../tools/test/hook/AwsJavaSdkHook.java | 16 +-- .../tools/test/hook/BlueOceanHook.java | 12 +- .../test/hook/ConfigurationAsCodeHook.java | 10 +- .../test/hook/DeclarativePipelineHook.java | 10 +- .../DeclarativePipelineMigrationHook.java | 10 +- .../jenkins/tools/test/hook/JacocoHook.java | 6 +- .../jenkins/tools/test/hook/MinaSshdApi.java | 10 +- .../test/hook/MultiParentCompileHook.java | 2 +- .../test/hook/PipelineStageViewHook.java | 10 +- .../jenkins/tools/test/hook/SwarmHook.java | 10 +- .../test/hook/WarningsNGCheckoutHook.java | 8 +- .../test/hook/WarningsNGExecutionHook.java | 8 +- .../tools/test/hook/WorkflowCpsHook.java | 10 +- .../tools/test/model/MavenCoordinates.java | 114 ------------------ .../jenkins/tools/test/model/MavenPom.java | 19 +-- .../tools/test/model/PluginRemoting.java | 26 ++-- .../org/jenkins/tools/test/model/PomData.java | 79 ------------ .../model/comparators/VersionComparator.java | 84 ------------- .../model/hook/BeforeCheckoutContext.java | 10 +- .../model/hook/BeforeCompilationContext.java | 10 +- .../model/hook/BeforeExecutionContext.java | 10 +- .../tools/test/model/hook/StageContext.java | 20 +-- .../tools/test/VersionComparatorTest.java | 87 ------------- .../tools/test/hook/JacocoHookTest.java | 28 +---- .../hook/WarningsNGExecutionHookTest.java | 32 ++--- .../tools/test/model/MavenPomTest.java | 7 +- .../tools/test/model/PluginRemotingTest.java | 35 +++--- 30 files changed, 183 insertions(+), 580 deletions(-) delete mode 100644 src/main/java/org/jenkins/tools/test/model/MavenCoordinates.java delete mode 100644 src/main/java/org/jenkins/tools/test/model/PomData.java delete mode 100644 src/main/java/org/jenkins/tools/test/model/comparators/VersionComparator.java delete mode 100644 src/test/java/org/jenkins/tools/test/VersionComparatorTest.java diff --git a/src/main/java/org/jenkins/tools/test/PluginCompatTester.java b/src/main/java/org/jenkins/tools/test/PluginCompatTester.java index 086208b4a..85d495234 100644 --- a/src/main/java/org/jenkins/tools/test/PluginCompatTester.java +++ b/src/main/java/org/jenkins/tools/test/PluginCompatTester.java @@ -51,16 +51,16 @@ import java.util.regex.Pattern; import org.apache.commons.io.FileUtils; import org.apache.commons.lang.StringUtils; +import org.apache.maven.model.Dependency; +import org.apache.maven.model.Model; import org.jenkins.tools.test.exception.PluginCompatibilityTesterException; import org.jenkins.tools.test.exception.PluginSourcesUnavailableException; 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.MavenCoordinates; import org.jenkins.tools.test.model.MavenPom; import org.jenkins.tools.test.model.PluginCompatTesterConfig; import org.jenkins.tools.test.model.PluginRemoting; -import org.jenkins.tools.test.model.PomData; import org.jenkins.tools.test.model.hook.BeforeCheckoutContext; import org.jenkins.tools.test.model.hook.BeforeCompilationContext; import org.jenkins.tools.test.model.hook.BeforeExecutionContext; @@ -137,8 +137,11 @@ && localCheckoutProvided() data.plugins.put(artifactId, extracted); } - MavenCoordinates coreCoordinates = - new MavenCoordinates("org.jenkins-ci.main", "jenkins-war", data.core.version); + Dependency coreCoordinates = new Dependency(); + coreCoordinates.setGroupId("org.jenkins-ci.main"); + coreCoordinates.setArtifactId("jenkins-war"); + coreCoordinates.setVersion(data.core.version); + coreCoordinates.setType("executable-war"); PluginCompatibilityTesterException lastException = null; LOGGER.log(Level.INFO, "Starting plugin tests on core coordinates {0}", coreCoordinates); @@ -177,8 +180,8 @@ && localCheckoutProvided() } try { - PomData pomData = remote.retrievePomData(); - testPluginAgainst(coreCoordinates, plugin, pomData, pcth); + Model model = remote.retrieveModel(); + testPluginAgainst(coreCoordinates, plugin, model, pcth); } catch (PluginCompatibilityTesterException e) { if (lastException != null) { e.addSuppressed(lastException); @@ -191,7 +194,7 @@ && localCheckoutProvided() Level.SEVERE, String.format( "Internal error while executing a test for core %s and plugin %s at version %s.", - coreCoordinates.version, + coreCoordinates.getVersion(), plugin.getDisplayName(), plugin.version), e); @@ -205,18 +208,18 @@ && localCheckoutProvided() } private UpdateSite.Plugin extractFromLocalCheckout() throws PluginSourcesUnavailableException { - PomData data = + Model model = new PluginRemoting(new File(config.getLocalCheckoutDir(), "pom.xml")) - .retrievePomData(); + .retrieveModel(); return new UpdateSite.Plugin( - data.artifactId, "" /* version is not required */, data.getConnectionUrl(), null); + model.getArtifactId(), + "" /* version is not required */, + model.getScm().getConnection(), + null); } private static File createBuildLogFile( - File workDirectory, - String pluginName, - String pluginVersion, - MavenCoordinates coreCoords) { + File workDirectory, String pluginName, String pluginVersion, Dependency coreCoords) { return new File( workDirectory.getAbsolutePath() + File.separator @@ -224,20 +227,20 @@ private static File createBuildLogFile( } private static String createBuildLogFilePathFor( - String pluginName, String pluginVersion, MavenCoordinates coreCoords) { + String pluginName, String pluginVersion, Dependency coreCoords) { return String.format( "logs/%s/v%s_against_%s_%s_%s.log", pluginName, pluginVersion, - coreCoords.groupId, - coreCoords.artifactId, - coreCoords.version); + coreCoords.getGroupId(), + coreCoords.getArtifactId(), + coreCoords.getVersion()); } private void testPluginAgainst( - MavenCoordinates coreCoordinates, + Dependency coreCoordinates, UpdateSite.Plugin plugin, - PomData pomData, + Model model, PluginCompatTesterHooks pcth) throws PluginCompatibilityTesterException { LOGGER.log( @@ -262,7 +265,7 @@ private void testPluginAgainst( // Run any precheckout hooks BeforeCheckoutContext beforeCheckout = - new BeforeCheckoutContext(plugin, pomData, coreCoordinates, config); + new BeforeCheckoutContext(plugin, model, coreCoordinates, config); pcth.runBeforeCheckout(beforeCheckout); if (!beforeCheckout.ranCheckout()) { @@ -306,9 +309,9 @@ private void testPluginAgainst( } } else { cloneFromScm( - pomData.getConnectionUrl(), + model.getScm().getConnection(), config.getFallbackGitHubOrganization(), - pomData.getScmTag(), + model.getScm().getTag(), pluginCheckoutDir); } } else { @@ -337,9 +340,9 @@ private void testPluginAgainst( // These hooks could redirect the SCM, skip checkout (if multiple plugins use // the same preloaded repo) cloneFromScm( - pomData.getConnectionUrl(), + model.getScm().getConnection(), config.getFallbackGitHubOrganization(), - pomData.getScmTag(), + model.getScm().getTag(), pluginCheckoutDir); } } else { @@ -369,7 +372,7 @@ private void testPluginAgainst( // Ran the BeforeCompileHooks BeforeCompilationContext beforeCompile = new BeforeCompilationContext( - plugin, pomData, coreCoordinates, config, pluginCheckoutDir, parentFolder); + plugin, model, coreCoordinates, config, pluginCheckoutDir, parentFolder); pcth.runBeforeCompilation(beforeCompile); // First build against the original POM. This defends against source incompatibilities @@ -394,7 +397,7 @@ private void testPluginAgainst( BeforeExecutionContext forExecutionHooks = new BeforeExecutionContext( plugin, - pomData, + model, coreCoordinates, config, pluginCheckoutDir, @@ -405,9 +408,10 @@ private void testPluginAgainst( Map properties = new LinkedHashMap<>(config.getMavenProperties()); properties.put("overrideWar", config.getWar().toString()); - properties.put("jenkins.version", coreCoordinates.version); + properties.put("jenkins.version", coreCoordinates.getVersion()); properties.put("useUpperBounds", "true"); - if (new VersionNumber(coreCoordinates.version).isOlderThan(new VersionNumber("2.382"))) { + if (new VersionNumber(coreCoordinates.getVersion()) + .isOlderThan(new VersionNumber("2.382"))) { /* * Versions of Jenkins prior to 2.382 are susceptible to JENKINS-68696, in which * javax.servlet:servlet-api comes from core at version 0. This is an intentional trick 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 e39f78ce3..c0e301233 100644 --- a/src/main/java/org/jenkins/tools/test/hook/AbstractMultiParentHook.java +++ b/src/main/java/org/jenkins/tools/test/hook/AbstractMultiParentHook.java @@ -5,9 +5,9 @@ import java.io.File; import java.util.logging.Level; import java.util.logging.Logger; +import org.apache.maven.model.Model; import org.jenkins.tools.test.PluginCompatTester; import org.jenkins.tools.test.exception.PluginSourcesUnavailableException; -import org.jenkins.tools.test.model.PomData; import org.jenkins.tools.test.model.hook.BeforeCheckoutContext; import org.jenkins.tools.test.model.hook.PluginCompatTesterHookBeforeCheckout; @@ -42,12 +42,12 @@ public void action(@NonNull BeforeCheckoutContext context) + "/" + getParentFolder()); - PomData pomData = context.getPomData(); + Model model = context.getModel(); // Like the call in PluginCompatTester#runHooks but with subdirectories trimmed: PluginCompatTester.cloneFromScm( - pomData.getConnectionUrl(), + model.getScm().getConnection(), context.getConfig().getFallbackGitHubOrganization(), - pomData.getScmTag(), + model.getScm().getTag(), parentPath); } diff --git a/src/main/java/org/jenkins/tools/test/hook/AnalysisPomExecutionHook.java b/src/main/java/org/jenkins/tools/test/hook/AnalysisPomExecutionHook.java index 357691fa5..142a10f05 100644 --- a/src/main/java/org/jenkins/tools/test/hook/AnalysisPomExecutionHook.java +++ b/src/main/java/org/jenkins/tools/test/hook/AnalysisPomExecutionHook.java @@ -2,7 +2,7 @@ import edu.umd.cs.findbugs.annotations.NonNull; import java.util.Set; -import org.jenkins.tools.test.model.PomData; +import org.apache.maven.model.Model; import org.jenkins.tools.test.model.hook.BeforeExecutionContext; /** @@ -25,9 +25,9 @@ public class AnalysisPomExecutionHook extends PluginWithFailsafeIntegrationTests @Override public boolean check(@NonNull BeforeExecutionContext context) { - PomData data = context.getPomData(); - return "io.jenkins.plugins".equals(data.groupId) - && ARTIFACT_IDS.contains(data.artifactId) - && "hpi".equals(data.getPackaging()); + Model model = context.getModel(); + return "io.jenkins.plugins".equals(model.getGroupId()) + && ARTIFACT_IDS.contains(model.getArtifactId()) + && "hpi".equals(model.getPackaging()); } } diff --git a/src/main/java/org/jenkins/tools/test/hook/AwsJavaSdkHook.java b/src/main/java/org/jenkins/tools/test/hook/AwsJavaSdkHook.java index 5cf3ca0db..e049d1717 100644 --- a/src/main/java/org/jenkins/tools/test/hook/AwsJavaSdkHook.java +++ b/src/main/java/org/jenkins/tools/test/hook/AwsJavaSdkHook.java @@ -1,7 +1,7 @@ package org.jenkins.tools.test.hook; import edu.umd.cs.findbugs.annotations.NonNull; -import org.jenkins.tools.test.model.PomData; +import org.apache.maven.model.Model; import org.jenkins.tools.test.model.hook.BeforeCheckoutContext; public class AwsJavaSdkHook extends AbstractMultiParentHook { @@ -13,12 +13,12 @@ protected String getParentFolder() { @Override public boolean check(@NonNull BeforeCheckoutContext context) { - PomData data = context.getPomData(); - return ("org.jenkins-ci.plugins".equals(data.groupId) - && "aws-java-sdk".equals(data.artifactId) - && "hpi".equals(data.getPackaging())) - || ("org.jenkins-ci.plugins.aws-java-sdk".equals(data.groupId) - && data.artifactId.startsWith("aws-java-sdk") - && "hpi".equals(data.getPackaging())); + Model model = context.getModel(); + return ("org.jenkins-ci.plugins".equals(model.getGroupId()) + && "aws-java-sdk".equals(model.getArtifactId()) + && "hpi".equals(model.getPackaging())) + || ("org.jenkins-ci.plugins.aws-java-sdk".equals(model.getGroupId()) + && model.getArtifactId().startsWith("aws-java-sdk") + && "hpi".equals(model.getPackaging())); } } 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 b62df5d8e..6ad6c83fc 100644 --- a/src/main/java/org/jenkins/tools/test/hook/BlueOceanHook.java +++ b/src/main/java/org/jenkins/tools/test/hook/BlueOceanHook.java @@ -1,7 +1,7 @@ package org.jenkins.tools.test.hook; import edu.umd.cs.findbugs.annotations.NonNull; -import org.jenkins.tools.test.model.PomData; +import org.apache.maven.model.Model; import org.jenkins.tools.test.model.hook.BeforeCheckoutContext; /** Workaround for the Blue Ocean plugins since they are stored in a central repository. */ @@ -14,10 +14,10 @@ protected String getParentFolder() { @Override public boolean check(@NonNull BeforeCheckoutContext context) { - PomData data = context.getPomData(); - return "io.jenkins.blueocean".equals(data.groupId) - && (data.artifactId.startsWith("blueocean") - || "jenkins-design-language".equals(data.artifactId)) - && "hpi".equals(data.getPackaging()); + Model model = context.getModel(); + return "io.jenkins.blueocean".equals(model.getGroupId()) + && (model.getArtifactId().startsWith("blueocean") + || "jenkins-design-language".equals(model.getArtifactId())) + && "hpi".equals(model.getPackaging()); } } 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 e49193bac..1845f580e 100644 --- a/src/main/java/org/jenkins/tools/test/hook/ConfigurationAsCodeHook.java +++ b/src/main/java/org/jenkins/tools/test/hook/ConfigurationAsCodeHook.java @@ -1,7 +1,7 @@ package org.jenkins.tools.test.hook; import edu.umd.cs.findbugs.annotations.NonNull; -import org.jenkins.tools.test.model.PomData; +import org.apache.maven.model.Model; import org.jenkins.tools.test.model.hook.BeforeCheckoutContext; public class ConfigurationAsCodeHook extends AbstractMultiParentHook { @@ -13,10 +13,10 @@ protected String getParentFolder() { @Override public boolean check(@NonNull BeforeCheckoutContext context) { - PomData data = context.getPomData(); - return "io.jenkins".equals(data.groupId) - && "configuration-as-code".equals(data.artifactId) - && "hpi".equals(data.getPackaging()); + Model model = context.getModel(); + return "io.jenkins".equals(model.getGroupId()) + && "configuration-as-code".equals(model.getArtifactId()) + && "hpi".equals(model.getPackaging()); } @Override 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 591f88463..0c3eaf389 100644 --- a/src/main/java/org/jenkins/tools/test/hook/DeclarativePipelineHook.java +++ b/src/main/java/org/jenkins/tools/test/hook/DeclarativePipelineHook.java @@ -2,7 +2,7 @@ import edu.umd.cs.findbugs.annotations.NonNull; import java.util.Set; -import org.jenkins.tools.test.model.PomData; +import org.apache.maven.model.Model; import org.jenkins.tools.test.model.hook.BeforeCheckoutContext; /** @@ -24,9 +24,9 @@ protected String getParentFolder() { @Override public boolean check(@NonNull BeforeCheckoutContext context) { - PomData data = context.getPomData(); - return "org.jenkinsci.plugins".equals(data.groupId) - && ARTIFACT_IDS.contains(data.artifactId) - && "hpi".equals(data.getPackaging()); + Model model = context.getModel(); + return "org.jenkinsci.plugins".equals(model.getGroupId()) + && ARTIFACT_IDS.contains(model.getArtifactId()) + && "hpi".equals(model.getPackaging()); } } 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 4c961808a..52017e56d 100644 --- a/src/main/java/org/jenkins/tools/test/hook/DeclarativePipelineMigrationHook.java +++ b/src/main/java/org/jenkins/tools/test/hook/DeclarativePipelineMigrationHook.java @@ -2,7 +2,7 @@ import edu.umd.cs.findbugs.annotations.NonNull; import java.util.Set; -import org.jenkins.tools.test.model.PomData; +import org.apache.maven.model.Model; import org.jenkins.tools.test.model.hook.BeforeCheckoutContext; /** @@ -23,9 +23,9 @@ protected String getParentFolder() { @Override public boolean check(@NonNull BeforeCheckoutContext context) { - PomData data = context.getPomData(); - return "org.jenkins-ci.plugins.to-declarative".equals(data.groupId) - && ARTIFACT_IDS.contains(data.artifactId) - && "hpi".equals(data.getPackaging()); + Model model = context.getModel(); + return "org.jenkins-ci.plugins.to-declarative".equals(model.getGroupId()) + && ARTIFACT_IDS.contains(model.getArtifactId()) + && "hpi".equals(model.getPackaging()); } } 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 f9eaadaeb..b096fd0e0 100644 --- a/src/main/java/org/jenkins/tools/test/hook/JacocoHook.java +++ b/src/main/java/org/jenkins/tools/test/hook/JacocoHook.java @@ -3,7 +3,7 @@ import edu.umd.cs.findbugs.annotations.NonNull; import java.util.List; import java.util.stream.IntStream; -import org.jenkins.tools.test.model.PomData; +import org.apache.maven.model.Model; import org.jenkins.tools.test.model.hook.BeforeExecutionContext; import org.jenkins.tools.test.model.hook.PluginCompatTesterHookBeforeExecution; @@ -15,8 +15,8 @@ public class JacocoHook extends PluginCompatTesterHookBeforeExecution { @Override public boolean check(@NonNull BeforeExecutionContext context) { - PomData data = context.getPomData(); - return "jacoco".equals(data.artifactId); + Model model = context.getModel(); + return "jacoco".equals(model.getArtifactId()); } @Override 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 ebe2755d4..34671c6e0 100644 --- a/src/main/java/org/jenkins/tools/test/hook/MinaSshdApi.java +++ b/src/main/java/org/jenkins/tools/test/hook/MinaSshdApi.java @@ -1,7 +1,7 @@ package org.jenkins.tools.test.hook; import edu.umd.cs.findbugs.annotations.NonNull; -import org.jenkins.tools.test.model.PomData; +import org.apache.maven.model.Model; import org.jenkins.tools.test.model.hook.BeforeCheckoutContext; public class MinaSshdApi extends AbstractMultiParentHook { @@ -13,9 +13,9 @@ protected String getParentFolder() { @Override public boolean check(@NonNull BeforeCheckoutContext context) { - PomData data = context.getPomData(); - return "io.jenkins.plugins.mina-sshd-api".equals(data.groupId) - && data.artifactId.startsWith("mina-sshd-api") - && "hpi".equals(data.getPackaging()); + Model model = context.getModel(); + return "io.jenkins.plugins.mina-sshd-api".equals(model.getGroupId()) + && model.getArtifactId().startsWith("mina-sshd-api") + && "hpi".equals(model.getPackaging()); } } 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 ff1f259ce..9cc969385 100644 --- a/src/main/java/org/jenkins/tools/test/hook/MultiParentCompileHook.java +++ b/src/main/java/org/jenkins/tools/test/hook/MultiParentCompileHook.java @@ -97,7 +97,7 @@ public boolean check(@NonNull BeforeCompilationContext context) { && checkoutHook.check( new BeforeCheckoutContext( context.getPlugin(), - context.getPomData(), + context.getModel(), context.getCoreCoordinates(), context.getConfig()))) { return true; 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 ac8cbed7a..cbcb816d5 100644 --- a/src/main/java/org/jenkins/tools/test/hook/PipelineStageViewHook.java +++ b/src/main/java/org/jenkins/tools/test/hook/PipelineStageViewHook.java @@ -2,7 +2,7 @@ import edu.umd.cs.findbugs.annotations.NonNull; import java.util.Set; -import org.jenkins.tools.test.model.PomData; +import org.apache.maven.model.Model; import org.jenkins.tools.test.model.hook.BeforeCheckoutContext; public class PipelineStageViewHook extends AbstractMultiParentHook { @@ -22,9 +22,9 @@ protected String getPluginFolderName(@NonNull BeforeCheckoutContext context) { @Override public boolean check(@NonNull BeforeCheckoutContext context) { - PomData data = context.getPomData(); - return "org.jenkins-ci.plugins.pipeline-stage-view".equals(data.groupId) - && ARTIFACT_IDS.contains(data.artifactId) - && "hpi".equals(data.getPackaging()); + Model model = context.getModel(); + return "org.jenkins-ci.plugins.pipeline-stage-view".equals(model.getGroupId()) + && ARTIFACT_IDS.contains(model.getArtifactId()) + && "hpi".equals(model.getPackaging()); } } 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 6a742611c..3e3d7b646 100644 --- a/src/main/java/org/jenkins/tools/test/hook/SwarmHook.java +++ b/src/main/java/org/jenkins/tools/test/hook/SwarmHook.java @@ -1,7 +1,7 @@ package org.jenkins.tools.test.hook; import edu.umd.cs.findbugs.annotations.NonNull; -import org.jenkins.tools.test.model.PomData; +import org.apache.maven.model.Model; import org.jenkins.tools.test.model.hook.BeforeCheckoutContext; public class SwarmHook extends AbstractMultiParentHook { @@ -18,9 +18,9 @@ protected String getPluginFolderName(@NonNull BeforeCheckoutContext context) { @Override public boolean check(@NonNull BeforeCheckoutContext context) { - PomData data = context.getPomData(); - return "org.jenkins-ci.plugins".equals(data.groupId) - && "swarm".equals(data.artifactId) - && "hpi".equals(data.getPackaging()); + Model model = context.getModel(); + return "org.jenkins-ci.plugins".equals(model.getGroupId()) + && "swarm".equals(model.getArtifactId()) + && "hpi".equals(model.getPackaging()); } } 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 cecd6c0a8..5d626f0b3 100644 --- a/src/main/java/org/jenkins/tools/test/hook/WarningsNGCheckoutHook.java +++ b/src/main/java/org/jenkins/tools/test/hook/WarningsNGCheckoutHook.java @@ -4,7 +4,7 @@ import java.io.File; import java.util.logging.Level; import java.util.logging.Logger; -import org.jenkins.tools.test.model.PomData; +import org.apache.maven.model.Model; import org.jenkins.tools.test.model.hook.BeforeCheckoutContext; public class WarningsNGCheckoutHook extends AbstractMultiParentHook { @@ -18,9 +18,9 @@ protected String getParentFolder() { @Override public boolean check(@NonNull BeforeCheckoutContext context) { - PomData data = context.getPomData(); - return "warnings-ng-parent".equals(data.artifactId) // localCheckoutDir - || "warnings-ng".equals(data.artifactId); // checkout + Model model = context.getModel(); + return "warnings-ng-parent".equals(model.getArtifactId()) // localCheckoutDir + || "warnings-ng".equals(model.getArtifactId()); // checkout } @Override 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 388d61bf3..9b7c6cab8 100644 --- a/src/main/java/org/jenkins/tools/test/hook/WarningsNGExecutionHook.java +++ b/src/main/java/org/jenkins/tools/test/hook/WarningsNGExecutionHook.java @@ -1,7 +1,7 @@ package org.jenkins.tools.test.hook; import edu.umd.cs.findbugs.annotations.NonNull; -import org.jenkins.tools.test.model.PomData; +import org.apache.maven.model.Model; import org.jenkins.tools.test.model.hook.BeforeExecutionContext; /** Workaround for Warnings NG plugin since it needs execute integration tests. */ @@ -9,8 +9,8 @@ public class WarningsNGExecutionHook extends PluginWithFailsafeIntegrationTestsH @Override public boolean check(@NonNull BeforeExecutionContext context) { - PomData data = context.getPomData(); - return "warnings-ng-parent".equals(data.artifactId) // localCheckoutDir - || "warnings-ng".equals(data.artifactId); // checkout + Model model = context.getModel(); + return "warnings-ng-parent".equals(model.getArtifactId()) // localCheckoutDir + || "warnings-ng".equals(model.getArtifactId()); // checkout } } diff --git a/src/main/java/org/jenkins/tools/test/hook/WorkflowCpsHook.java b/src/main/java/org/jenkins/tools/test/hook/WorkflowCpsHook.java index 5808e4d6e..ebaa8b0a7 100644 --- a/src/main/java/org/jenkins/tools/test/hook/WorkflowCpsHook.java +++ b/src/main/java/org/jenkins/tools/test/hook/WorkflowCpsHook.java @@ -2,7 +2,7 @@ import edu.umd.cs.findbugs.annotations.NonNull; import hudson.util.VersionNumber; -import org.jenkins.tools.test.model.PomData; +import org.apache.maven.model.Model; import org.jenkins.tools.test.model.hook.BeforeCheckoutContext; public class WorkflowCpsHook extends AbstractMultiParentHook { @@ -19,17 +19,17 @@ protected String getPluginFolderName(@NonNull BeforeCheckoutContext context) { @Override public boolean check(@NonNull BeforeCheckoutContext context) { - PomData data = context.getPomData(); + Model model = context.getModel(); if (context.getPlugin() != null && context.getPlugin().version != null) { VersionNumber pluginVersion = new VersionNumber(context.getPlugin().version); // 2803 was the final release before it became a multi-module project. // The history of groovy-cps history was merged into the repo, so the first multi-module // release will be a little over 3500. VersionNumber multiModuleSince = new VersionNumber("3500"); - return "org.jenkins-ci.plugins.workflow".equals(data.groupId) - && "workflow-cps".equals(data.artifactId) + return "org.jenkins-ci.plugins.workflow".equals(model.getGroupId()) + && "workflow-cps".equals(model.getArtifactId()) && pluginVersion.isNewerThan(multiModuleSince) - && "hpi".equals(data.getPackaging()); + && "hpi".equals(model.getPackaging()); } return false; } diff --git a/src/main/java/org/jenkins/tools/test/model/MavenCoordinates.java b/src/main/java/org/jenkins/tools/test/model/MavenCoordinates.java deleted file mode 100644 index 63461a228..000000000 --- a/src/main/java/org/jenkins/tools/test/model/MavenCoordinates.java +++ /dev/null @@ -1,114 +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; - -import edu.umd.cs.findbugs.annotations.NonNull; -import java.util.Objects; -import org.jenkins.tools.test.model.comparators.VersionComparator; - -/** - * Class representing Maven GAV - * - * @author Frederic Camblor - */ -public class MavenCoordinates implements Comparable { - public final String groupId; - public final String artifactId; - public final String version; - // No classifier/type for the moment... - - /** - * Constructor. - * - * @throws IllegalArgumentException one of the parameters is invalid. - */ - 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); - } - - private static String verifyInput( - String groupId, String artifactId, String version, String fieldName, String value) - throws IllegalArgumentException { - 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)); - } - return value.trim(); - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - MavenCoordinates c2 = (MavenCoordinates) o; - return Objects.equals(groupId, c2.groupId) - && Objects.equals(artifactId, c2.artifactId) - && Objects.equals(version, c2.version); - } - - @Override - public int hashCode() { - return Objects.hash(groupId, artifactId, version); - } - - @Override - public String toString() { - return "MavenCoordinates[groupId=" - + groupId - + ", artifactId=" - + artifactId - + ", version=" - + version - + "]"; - } - - @Override - public int compareTo(MavenCoordinates o) { - if ((groupId + ":" + artifactId).equals(o.groupId + ":" + o.artifactId)) { - return compareVersionTo(o.version); - } else { - return (groupId + ":" + artifactId).compareTo(o.groupId + ":" + o.artifactId); - } - } - - public boolean matches(String groupId, String artifactId) { - return this.groupId.equals(groupId) && this.artifactId.equals(artifactId); - } - - public int compareVersionTo(String version) { - return new VersionComparator().compare(this.version, version); - } -} 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 5cedee30b..6eda48219 100644 --- a/src/main/java/org/jenkins/tools/test/model/MavenPom.java +++ b/src/main/java/org/jenkins/tools/test/model/MavenPom.java @@ -49,6 +49,7 @@ import java.util.logging.Level; import java.util.logging.Logger; import org.apache.commons.lang.StringUtils; +import org.apache.maven.model.Dependency; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; @@ -84,7 +85,7 @@ private MavenPom(File rootDir, String pomFileName) { this.pomFileName = pomFileName; } - public void transformPom(MavenCoordinates coreCoordinates) throws PomTransformationException { + public void transformPom(Dependency coreCoordinates) throws PomTransformationException { File pom = new File(rootDir.getAbsolutePath() + "/" + pomFileName); File backupPom = new File(rootDir.getAbsolutePath() + "/" + pomFileName + ".backup"); try { @@ -104,17 +105,17 @@ public void transformPom(MavenCoordinates coreCoordinates) throws PomTransformat if (parent != null) { Element groupIdElem = parent.element(GROUP_ID_ELEMENT); if (groupIdElem != null) { - groupIdElem.setText(coreCoordinates.groupId); + groupIdElem.setText(coreCoordinates.getGroupId()); } Element artifactIdElem = parent.element(ARTIFACT_ID_ELEMENT); if (artifactIdElem != null) { - artifactIdElem.setText(coreCoordinates.artifactId); + artifactIdElem.setText(coreCoordinates.getArtifactId()); } Element versionIdElem = parent.element(VERSION_ELEMENT); if (versionIdElem != null) { - versionIdElem.setText(coreCoordinates.version); + versionIdElem.setText(coreCoordinates.getVersion()); } } @@ -160,7 +161,7 @@ public void removeDependency(@NonNull String groupId, @NonNull String artifactId * * @param includeGroupId - specify if we want to add the groupId or not */ - public void addPluginManagement(List pluginsToAdd, boolean includeGroupId) + public void addPluginManagement(List pluginsToAdd, boolean includeGroupId) throws PomTransformationException { File pom = new File(rootDir.getAbsolutePath() + "/" + pomFileName); Document doc; @@ -184,16 +185,16 @@ public void addPluginManagement(List pluginsToAdd, boolean inc if (plugins == null) { plugins = pluginManagement.addElement("plugins"); } - for (MavenCoordinates plugin : pluginsToAdd) { + for (Dependency plugin : pluginsToAdd) { Element entry = plugins.addElement("plugin"); if (includeGroupId) { Element groupIdElem = entry.addElement(GROUP_ID_ELEMENT); - groupIdElem.setText(plugin.groupId); + groupIdElem.setText(plugin.getGroupId()); } Element artifactIdElem = entry.addElement(ARTIFACT_ID_ELEMENT); - artifactIdElem.setText(plugin.artifactId); + artifactIdElem.setText(plugin.getArtifactId()); Element versionIdElem = entry.addElement(VERSION_ELEMENT); - versionIdElem.setText(plugin.version); + versionIdElem.setText(plugin.getVersion()); } writeDocument(pom, doc); 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 1e97437ed..0d273e2e5 100644 --- a/src/main/java/org/jenkins/tools/test/model/PluginRemoting.java +++ b/src/main/java/org/jenkins/tools/test/model/PluginRemoting.java @@ -41,6 +41,7 @@ import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; import org.apache.maven.model.Model; +import org.apache.maven.model.Scm; import org.apache.maven.model.io.xpp3.MavenXpp3Reader; import org.codehaus.plexus.util.xml.pull.XmlPullParserException; import org.jenkins.tools.test.exception.PluginSourcesUnavailableException; @@ -100,7 +101,7 @@ private String retrievePomContentFromXmlFile() throws IOException { return Files.readString(pomFile.toPath(), StandardCharsets.UTF_8); } - public PomData retrievePomData() throws PluginSourcesUnavailableException { + public Model retrieveModel() throws PluginSourcesUnavailableException { String pomContent = this.retrievePomContent(); Model model; @@ -113,24 +114,13 @@ public PomData retrievePomData() throws PluginSourcesUnavailableException { throw new UncheckedIOException(e); } - MavenCoordinates parent; - if (model.getParent() != null) { - parent = - new MavenCoordinates( - model.getParent().getGroupId(), - model.getParent().getArtifactId(), - model.getParent().getVersion()); - } else { - parent = null; + Scm scm = model.getScm(); + if (scm != null) { + // scm may contain properties so it needs to be resolved. + scm.setConnection(interpolateString(scm.getConnection(), model.getArtifactId())); } - return new PomData( - model.getArtifactId(), - model.getPackaging(), - // scm may contain properties so it needs to be resolved. - interpolateString(model.getScm().getConnection(), model.getArtifactId()), - model.getScm().getTag(), - parent, - model.getGroupId()); + + return model; } /** diff --git a/src/main/java/org/jenkins/tools/test/model/PomData.java b/src/main/java/org/jenkins/tools/test/model/PomData.java deleted file mode 100644 index 537a43dd9..000000000 --- a/src/main/java/org/jenkins/tools/test/model/PomData.java +++ /dev/null @@ -1,79 +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; - -import edu.umd.cs.findbugs.annotations.CheckForNull; -import edu.umd.cs.findbugs.annotations.NonNull; - -/** - * POJO containing important data residing in plugin's POM - * - * @author Frederic Camblor - */ -public class PomData { - @NonNull public final String artifactId; - - @CheckForNull public final String groupId; - - @NonNull private final String packaging; - - @CheckForNull public final MavenCoordinates parent; - - @NonNull private String connectionUrl; - - @NonNull private String scmTag; - - public PomData( - @NonNull String artifactId, - @CheckForNull String packaging, - @NonNull String connectionUrl, - @NonNull String scmTag, - @CheckForNull MavenCoordinates parent, - @CheckForNull String groupId) { - this.artifactId = artifactId; - this.groupId = groupId; - this.packaging = packaging != null ? packaging : "jar"; - this.connectionUrl = connectionUrl; - this.scmTag = scmTag; - this.parent = parent; - } - - @NonNull - public String getConnectionUrl() { - return connectionUrl; - } - - @NonNull - public String getPackaging() { - return packaging; - } - - @NonNull - public String getScmTag() { - return scmTag; - } -} 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 deleted file mode 100644 index b5c56563b..000000000 --- a/src/main/java/org/jenkins/tools/test/model/comparators/VersionComparator.java +++ /dev/null @@ -1,84 +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; - -/** - * Class used to compare 2 plugin versions - * - * @author Frederic Camblor - */ -public class VersionComparator implements Comparator, Serializable { - @Override - public int compare(String o1, String o2) { - - String[] splitO1Version = o1.split("\\.|-"); - String[] splitO2Version = o2.split("\\.|-"); - - for (int i = 0; i < splitO1Version.length; i++) { - if (i >= splitO2Version.length) { - return 1; - } - - Comparable chunk1; - try { - chunk1 = Integer.valueOf(splitO1Version[i]); - } catch (NumberFormatException e) { - chunk1 = splitO1Version[i]; - } - - Comparable chunk2; - try { - chunk2 = Integer.valueOf(splitO2Version[i]); - } catch (NumberFormatException e) { - chunk2 = splitO2Version[i]; - } - - if (chunk1.getClass() != chunk2.getClass()) { - throw new IllegalArgumentException( - "Comparing different types in chunk " - + i - + ". Version 1 = " - + o1 - + ", version 2 = " - + o2); - } - - if (!splitO1Version[i].equals(splitO2Version[i])) { - return chunk1.compareTo(chunk2); - } - } - - if (splitO1Version.length == splitO2Version.length) { - return 0; - } else { - return -1; - } - } -} diff --git a/src/main/java/org/jenkins/tools/test/model/hook/BeforeCheckoutContext.java b/src/main/java/org/jenkins/tools/test/model/hook/BeforeCheckoutContext.java index f5dcd18b1..9e9f9b8a4 100644 --- a/src/main/java/org/jenkins/tools/test/model/hook/BeforeCheckoutContext.java +++ b/src/main/java/org/jenkins/tools/test/model/hook/BeforeCheckoutContext.java @@ -4,9 +4,9 @@ import edu.umd.cs.findbugs.annotations.NonNull; import hudson.model.UpdateSite; import java.io.File; -import org.jenkins.tools.test.model.MavenCoordinates; +import org.apache.maven.model.Dependency; +import org.apache.maven.model.Model; import org.jenkins.tools.test.model.PluginCompatTesterConfig; -import org.jenkins.tools.test.model.PomData; public final class BeforeCheckoutContext extends StageContext { @@ -20,10 +20,10 @@ public final class BeforeCheckoutContext extends StageContext { public BeforeCheckoutContext( @NonNull UpdateSite.Plugin plugin, - @NonNull PomData pomData, - @NonNull MavenCoordinates coreCoordinates, + @NonNull Model model, + @NonNull Dependency coreCoordinates, @NonNull PluginCompatTesterConfig config) { - super(Stage.CHECKOUT, plugin, pomData, coreCoordinates, config); + super(Stage.CHECKOUT, plugin, model, coreCoordinates, config); } public boolean ranCheckout() { diff --git a/src/main/java/org/jenkins/tools/test/model/hook/BeforeCompilationContext.java b/src/main/java/org/jenkins/tools/test/model/hook/BeforeCompilationContext.java index 8d3f70fa9..2579c85f8 100644 --- a/src/main/java/org/jenkins/tools/test/model/hook/BeforeCompilationContext.java +++ b/src/main/java/org/jenkins/tools/test/model/hook/BeforeCompilationContext.java @@ -4,9 +4,9 @@ import edu.umd.cs.findbugs.annotations.NonNull; import hudson.model.UpdateSite; import java.io.File; -import org.jenkins.tools.test.model.MavenCoordinates; +import org.apache.maven.model.Dependency; +import org.apache.maven.model.Model; import org.jenkins.tools.test.model.PluginCompatTesterConfig; -import org.jenkins.tools.test.model.PomData; public final class BeforeCompilationContext extends StageContext { @@ -18,12 +18,12 @@ public final class BeforeCompilationContext extends StageContext { public BeforeCompilationContext( @NonNull UpdateSite.Plugin plugin, - @NonNull PomData pomData, - @NonNull MavenCoordinates coreCoordinates, + @NonNull Model model, + @NonNull Dependency coreCoordinates, @NonNull PluginCompatTesterConfig config, @CheckForNull File pluginDir, @CheckForNull String parentFolder) { - super(Stage.COMPILATION, plugin, pomData, coreCoordinates, config); + super(Stage.COMPILATION, plugin, model, coreCoordinates, config); this.pluginDir = pluginDir; this.parentFolder = parentFolder; } diff --git a/src/main/java/org/jenkins/tools/test/model/hook/BeforeExecutionContext.java b/src/main/java/org/jenkins/tools/test/model/hook/BeforeExecutionContext.java index 1f270d953..750300852 100644 --- a/src/main/java/org/jenkins/tools/test/model/hook/BeforeExecutionContext.java +++ b/src/main/java/org/jenkins/tools/test/model/hook/BeforeExecutionContext.java @@ -5,10 +5,10 @@ import hudson.model.UpdateSite; import java.io.File; import java.util.List; -import org.jenkins.tools.test.model.MavenCoordinates; +import org.apache.maven.model.Dependency; +import org.apache.maven.model.Model; import org.jenkins.tools.test.model.MavenPom; import org.jenkins.tools.test.model.PluginCompatTesterConfig; -import org.jenkins.tools.test.model.PomData; public final class BeforeExecutionContext extends StageContext { @@ -22,14 +22,14 @@ public final class BeforeExecutionContext extends StageContext { public BeforeExecutionContext( @NonNull UpdateSite.Plugin plugin, - @NonNull PomData pomData, - @NonNull MavenCoordinates coreCoordinates, + @NonNull Model model, + @NonNull Dependency coreCoordinates, @NonNull PluginCompatTesterConfig config, @CheckForNull File pluginDir, @CheckForNull String parentFolder, @NonNull List args, @NonNull MavenPom pom) { - super(Stage.EXECUTION, plugin, pomData, coreCoordinates, config); + super(Stage.EXECUTION, plugin, model, coreCoordinates, config); this.pluginDir = pluginDir; this.parentFolder = parentFolder; this.args = args; diff --git a/src/main/java/org/jenkins/tools/test/model/hook/StageContext.java b/src/main/java/org/jenkins/tools/test/model/hook/StageContext.java index 18e6d9b76..283ba444e 100644 --- a/src/main/java/org/jenkins/tools/test/model/hook/StageContext.java +++ b/src/main/java/org/jenkins/tools/test/model/hook/StageContext.java @@ -2,27 +2,27 @@ import edu.umd.cs.findbugs.annotations.NonNull; import hudson.model.UpdateSite; -import org.jenkins.tools.test.model.MavenCoordinates; +import org.apache.maven.model.Dependency; +import org.apache.maven.model.Model; import org.jenkins.tools.test.model.PluginCompatTesterConfig; -import org.jenkins.tools.test.model.PomData; public abstract class StageContext { @NonNull private final Stage stage; @NonNull private final UpdateSite.Plugin plugin; - @NonNull private final PomData pomData; - @NonNull private final MavenCoordinates coreCoordinates; + @NonNull private final Model model; + @NonNull private final Dependency coreCoordinates; @NonNull private final PluginCompatTesterConfig config; public StageContext( @NonNull Stage stage, @NonNull UpdateSite.Plugin plugin, - @NonNull PomData pomData, - @NonNull MavenCoordinates coreCoordinates, + @NonNull Model model, + @NonNull Dependency coreCoordinates, @NonNull PluginCompatTesterConfig config) { this.stage = stage; this.plugin = plugin; - this.pomData = pomData; + this.model = model; this.coreCoordinates = coreCoordinates; this.config = config; } @@ -38,12 +38,12 @@ public UpdateSite.Plugin getPlugin() { } @NonNull - public PomData getPomData() { - return pomData; + public Model getModel() { + return model; } @NonNull - public MavenCoordinates getCoreCoordinates() { + public Dependency getCoreCoordinates() { return coreCoordinates; } diff --git a/src/test/java/org/jenkins/tools/test/VersionComparatorTest.java b/src/test/java/org/jenkins/tools/test/VersionComparatorTest.java deleted file mode 100644 index 11fdfec35..000000000 --- a/src/test/java/org/jenkins/tools/test/VersionComparatorTest.java +++ /dev/null @@ -1,87 +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; - -import static org.hamcrest.CoreMatchers.equalTo; -import static org.hamcrest.CoreMatchers.is; -import static org.hamcrest.MatcherAssert.assertThat; - -import java.util.Map; -import org.jenkins.tools.test.model.comparators.VersionComparator; -import org.junit.jupiter.api.Test; - -/** - * Tests for plugin version comparisons - * - * @author Frederic Camblor - */ -class VersionComparatorTest { - - private static final Map OPERAND_CONVERSION = - Map.of( - "<", -1, - "=", 0, - ">", 1); - - private void test(String v1, String operator, String v2) { - test(v1, OPERAND_CONVERSION.get(operator), v2); - } - - private void test(String v1, int compResult, String v2) { - assertThat(new VersionComparator().compare(v1, v2), is(equalTo(compResult))); - } - - private void testAndCommutate(String v1, String operand, String v2) { - test(v1, OPERAND_CONVERSION.get(operand), v2); - test(v2, OPERAND_CONVERSION.get(operand) * -1, v1); - } - - @Test - void shouldBasicEqualComparisonTestBeOk() { - test("1.2.3", "=", "1.2.3"); - test("1", "=", "1"); - } - - @Test - void shouldBasicNonEqualComparisonTestBeOk() { - testAndCommutate("1", "<", "2"); - testAndCommutate("10", ">", "2"); - testAndCommutate("1.2", "<", "2.1"); - testAndCommutate("1.1", "<", "1.2"); - testAndCommutate("1.1.2", "<", "1.2.1"); - testAndCommutate("1.10.2", ">", "1.2.1"); - } - - @Test - void shouldSpecialCasesBeHandledCorrectly() { - test("1", "<", "1.2.1"); - test("1.2", "<", "1.2.1"); - test("1.1-beta", ">", "1.1-alpha"); - test("1.1-beta", "<", "1.2"); - test("1.1-beta1", "<", "1.1-beta2"); - } -} 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 8788baac1..2b82137d5 100644 --- a/src/test/java/org/jenkins/tools/test/hook/JacocoHookTest.java +++ b/src/test/java/org/jenkins/tools/test/hook/JacocoHookTest.java @@ -7,8 +7,7 @@ import java.util.ArrayList; import java.util.List; -import org.jenkins.tools.test.model.MavenCoordinates; -import org.jenkins.tools.test.model.PomData; +import org.apache.maven.model.Model; import org.jenkins.tools.test.model.hook.BeforeExecutionContext; import org.junit.jupiter.api.Test; @@ -17,30 +16,15 @@ class JacocoHookTest { @Test void testCheckMethod() { final JacocoHook hook = new JacocoHook(); - final MavenCoordinates parent = - new MavenCoordinates("org.jenkins-ci.plugins", "plugin", "3.57"); - PomData pomData = - new PomData( - "jacoco", - "hpi", - "it-does-not-matter", - "whatever", - parent, - "org.jenkins-ci.plugins"); + Model model = new Model(); + model.setArtifactId("jacoco"); BeforeExecutionContext context = - new BeforeExecutionContext(null, pomData, null, null, null, null, null, null); + new BeforeExecutionContext(null, model, null, null, null, null, null, null); assertTrue(hook.check(context)); - pomData = - new PomData( - "other-plugin", - "hpi", - "it-does-not-matter", - "whatever", - parent, - "org.jenkins-ci.plugins"); - context = new BeforeExecutionContext(null, pomData, null, null, null, null, null, null); + model.setArtifactId("other-plugin"); + context = new BeforeExecutionContext(null, model, null, null, null, null, null, null); assertFalse(hook.check(context)); } 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 b592e75cf..41c447983 100644 --- a/src/test/java/org/jenkins/tools/test/hook/WarningsNGExecutionHookTest.java +++ b/src/test/java/org/jenkins/tools/test/hook/WarningsNGExecutionHookTest.java @@ -7,8 +7,7 @@ import java.util.ArrayList; import java.util.List; -import org.jenkins.tools.test.model.MavenCoordinates; -import org.jenkins.tools.test.model.PomData; +import org.apache.maven.model.Model; import org.jenkins.tools.test.model.hook.BeforeExecutionContext; import org.junit.jupiter.api.Test; @@ -17,31 +16,16 @@ class WarningsNGExecutionHookTest { @Test void testCheckMethod() { final WarningsNGExecutionHook hook = new WarningsNGExecutionHook(); - final MavenCoordinates parent = - new MavenCoordinates("org.jenkins-ci.plugins", "plugin", "3.57"); - - PomData pomData = - new PomData( - "warnings-ng", - "hpi", - "it-does-not-matter", - "whatever", - parent, - "org.jenkins-ci.plugins"); + + Model model = new Model(); + model.setArtifactId("warnings-ng"); + BeforeExecutionContext context = - new BeforeExecutionContext(null, pomData, null, null, null, null, List.of(), null); + new BeforeExecutionContext(null, model, null, null, null, null, List.of(), null); assertTrue(hook.check(context)); - pomData = - new PomData( - "other-plugin", - "hpi", - "it-does-not-matter", - "whatever", - parent, - "org.jenkins-ci.plugins"); - context = - new BeforeExecutionContext(null, pomData, null, null, null, null, List.of(), null); + model.setArtifactId("other-plugin"); + context = new BeforeExecutionContext(null, model, null, null, null, null, List.of(), null); assertFalse(hook.check(context)); } 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 eb33ede84..ea2e45a4f 100644 --- a/src/test/java/org/jenkins/tools/test/model/MavenPomTest.java +++ b/src/test/java/org/jenkins/tools/test/model/MavenPomTest.java @@ -14,6 +14,7 @@ import java.util.List; import java.util.Map; import org.apache.commons.io.FileUtils; +import org.apache.maven.model.Dependency; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; import org.jvnet.hudson.test.Issue; @@ -186,8 +187,10 @@ void addDependenciesWithTestsClassifier(@TempDir File prj) throws Exception { void transformPOMwithSpecialCharacters(@TempDir File folder) throws Exception { File pomFile = createPomFileFromResource(folder, "demo-plugin-pom-before.xml"); - MavenCoordinates coreCoordinates = - new MavenCoordinates("org.jenkins-ci.plugins", "plugin", "2.235.1"); + Dependency coreCoordinates = new Dependency(); + coreCoordinates.setGroupId("org.jenkins-ci.plugins"); + coreCoordinates.setArtifactId("plugin"); + coreCoordinates.setVersion("2.235.1"); MavenPom mavenPom = new MavenPom(pomFile.getParentFile()); mavenPom.transformPom(coreCoordinates); diff --git a/src/test/java/org/jenkins/tools/test/model/PluginRemotingTest.java b/src/test/java/org/jenkins/tools/test/model/PluginRemotingTest.java index 1034f622b..849be2d6c 100644 --- a/src/test/java/org/jenkins/tools/test/model/PluginRemotingTest.java +++ b/src/test/java/org/jenkins/tools/test/model/PluginRemotingTest.java @@ -6,6 +6,7 @@ import static org.junit.jupiter.api.Assertions.assertThrows; import java.io.File; +import org.apache.maven.model.Model; import org.jenkins.tools.test.exception.PluginSourcesUnavailableException; import org.junit.jupiter.api.Test; @@ -35,32 +36,32 @@ void testStringInterpolation() { void smokes() throws Exception { File pomFile = new File(getClass().getResource("smokes/pom.xml").toURI()); PluginRemoting pluginRemoting = new PluginRemoting(pomFile); - PomData pomData = pluginRemoting.retrievePomData(); - assertThat(pomData.parent, nullValue()); - assertThat(pomData.groupId, is("com.example.jenkins")); - assertThat(pomData.artifactId, is("example")); - assertThat(pomData.getPackaging(), is("hpi")); + Model model = pluginRemoting.retrieveModel(); + assertThat(model.getParent(), nullValue()); + assertThat(model.getGroupId(), is("com.example.jenkins")); + assertThat(model.getArtifactId(), is("example")); + assertThat(model.getPackaging(), is("hpi")); assertThat( - pomData.getConnectionUrl(), + model.getScm().getConnection(), is("scm:git:https://jenkins.example.com/example-plugin.git")); - assertThat(pomData.getScmTag(), is("example-4.1")); + assertThat(model.getScm().getTag(), is("example-4.1")); } @Test void parent() throws Exception { File pomFile = new File(getClass().getResource("parent/pom.xml").toURI()); PluginRemoting pluginRemoting = new PluginRemoting(pomFile); - PomData pomData = pluginRemoting.retrievePomData(); + Model model = pluginRemoting.retrieveModel(); + assertThat(model.getParent().getGroupId(), is("com.example.jenkins")); + assertThat(model.getParent().getArtifactId(), is("example-parent")); + assertThat(model.getParent().getVersion(), is("4.1")); + assertThat(model.getGroupId(), nullValue()); + assertThat(model.getArtifactId(), is("example")); + assertThat(model.getPackaging(), is("hpi")); assertThat( - pomData.parent, - is(new MavenCoordinates("com.example.jenkins", "example-parent", "4.1"))); - assertThat(pomData.groupId, nullValue()); - assertThat(pomData.artifactId, is("example")); - assertThat(pomData.getPackaging(), is("hpi")); - assertThat( - pomData.getConnectionUrl(), + model.getScm().getConnection(), is("scm:git:https://jenkins.example.com/example-plugin.git")); - assertThat(pomData.getScmTag(), is("example-4.1")); + assertThat(model.getScm().getTag(), is("example-4.1")); } @Test @@ -69,7 +70,7 @@ void negative() throws Exception { PluginRemoting pluginRemoting = new PluginRemoting(pomFile); PluginSourcesUnavailableException e = assertThrows( - PluginSourcesUnavailableException.class, pluginRemoting::retrievePomData); + PluginSourcesUnavailableException.class, pluginRemoting::retrieveModel); assertThat(e.getMessage(), is("Failed to parse pom.xml")); } }