You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by kw...@apache.org on 2022/01/17 17:59:38 UTC

[jackrabbit-filevault-package-maven-plugin] branch master updated: JCRVLT-595 prevent NPE when validate-package is executed outside project (#67)

This is an automated email from the ASF dual-hosted git repository.

kwin pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/jackrabbit-filevault-package-maven-plugin.git


The following commit(s) were added to refs/heads/master by this push:
     new 491fb90  JCRVLT-595 prevent NPE when validate-package is executed outside project (#67)
491fb90 is described below

commit 491fb901477126b5851a9e9fdc816422130a227f
Author: Konrad Windszus <kw...@apache.org>
AuthorDate: Mon Jan 17 18:59:33 2022 +0100

    JCRVLT-595 prevent NPE when validate-package is executed outside project (#67)
---
 .../maven/packaging/AbstractValidateMojo.java      | 18 ++++++++++-----
 .../maven/packaging/AbstractValidateMojoTest.java  | 27 ++++++++++++++++++++--
 .../maven/packaging/it/ProjectBuilder.java         |  2 +-
 .../maven/packaging/it/ValidatePackageIT.java      | 14 ++++++++++-
 4 files changed, 51 insertions(+), 10 deletions(-)

diff --git a/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/AbstractValidateMojo.java b/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/AbstractValidateMojo.java
index e56d239..9c5e4c7 100644
--- a/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/AbstractValidateMojo.java
+++ b/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/AbstractValidateMojo.java
@@ -113,8 +113,8 @@ public abstract class AbstractValidateMojo extends AbstractMojo {
     @Deprecated
     private boolean failOnDependencyErrors;
 
-    /** The Maven project (might be {@code null}) */
-    @Parameter(property = "project", readonly = true, required = false)
+    /** The Maven project (never {@code null}, but might be dummy project returning {@code null} for all methods if running outside a {@code pom.xml} context) */
+    @Parameter(defaultValue = "${project}", readonly = true, required = false)
     protected MavenProject project;
 
     @Parameter(defaultValue = "${mojoExecution}", readonly = true, required = true)
@@ -201,10 +201,16 @@ public abstract class AbstractValidateMojo extends AbstractMojo {
     public static final Artifact IGNORE_ARTIFACT = new DefaultArtifact("ignore", "ignore", "1.0", "", "", "", null);
     
     private static Version fileVaultValidationBundleVersion = null;
-    private final static Version VERSION_3_5_4 = Version.parseVersion("3.5.4");
-
-    protected String getProjectRelativeFilePath(Path file) {
-        return "'" + project.getBasedir().toPath().relativize(file).toString() + "'";
+    private static final Version VERSION_3_5_4 = Version.parseVersion("3.5.4");
+
+    protected String getProjectRelativeFilePath(Path path) {
+        final Path shortenedPath;
+        if (project != null && project.getBasedir() != null) {
+            shortenedPath = project.getBasedir().toPath().relativize(path);
+        } else {
+            shortenedPath = path;
+        }
+        return "'" + shortenedPath.toString() + "'";
     }
 
     public AbstractValidateMojo() {
diff --git a/src/test/java/org/apache/jackrabbit/filevault/maven/packaging/AbstractValidateMojoTest.java b/src/test/java/org/apache/jackrabbit/filevault/maven/packaging/AbstractValidateMojoTest.java
index f2be2eb..9f66c6e 100644
--- a/src/test/java/org/apache/jackrabbit/filevault/maven/packaging/AbstractValidateMojoTest.java
+++ b/src/test/java/org/apache/jackrabbit/filevault/maven/packaging/AbstractValidateMojoTest.java
@@ -16,7 +16,12 @@
  */
 package org.apache.jackrabbit.filevault.maven.packaging;
 
+import static org.junit.Assert.assertEquals;
+
 import java.io.IOException;
+import java.nio.channels.UnsupportedAddressTypeException;
+import java.nio.file.Path;
+import java.nio.file.Paths;
 import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
@@ -26,13 +31,18 @@ import org.apache.jackrabbit.vault.packaging.Dependency;
 import org.apache.jackrabbit.vault.packaging.PackageId;
 import org.apache.maven.artifact.DefaultArtifact;
 import org.apache.maven.artifact.InvalidArtifactRTException;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
 import org.apache.maven.plugin.logging.SystemStreamLog;
+import org.apache.maven.project.MavenProject;
 import org.hamcrest.MatcherAssert;
 import org.hamcrest.Matchers;
 import org.junit.Assert;
 import org.junit.Test;
 import org.osgi.framework.Version;
 
+import aQute.lib.mavenpasswordobfuscator.MavenPasswordObfuscator;
+
 
 public class AbstractValidateMojoTest {
 
@@ -96,9 +106,22 @@ public class AbstractValidateMojoTest {
         list.sort(new AbstractValidateMojo.DotContentXmlFirstComparator());
         MatcherAssert.assertThat(list, Matchers.contains(".content.xml", ".content.xml", "someEntryA", "someEntryB"));
     }
-    
+
     @Test
     public void testGetFileVaultValidatorVersion() throws IOException {
-        Assert.assertTrue(AbstractValidateMojo.getFileVaultValidationBundleVersion().compareTo(Version.parseVersion("3.5.4")) >= 0);
+        Assert.assertTrue("FileVault version being detected is " + AbstractValidateMojo.getFileVaultValidationBundleVersion(), AbstractValidateMojo.getFileVaultValidationBundleVersion().compareTo(Version.parseVersion("3.5.4")) >= 0);
+    }
+
+    @Test
+    public void testGetProjectRelativeFilePathWithoutRealProject() {
+        AbstractValidateMojo mojo = new AbstractValidateMojo() {
+            @Override
+            public void doExecute(ValidationHelper validationHelper) throws MojoExecutionException, MojoFailureException {
+                throw new UnsupportedOperationException();
+            }
+        };
+        mojo.project = new MavenProject();
+        Path path = Paths.get("").toAbsolutePath();
+        assertEquals("'" + path + "'", mojo.getProjectRelativeFilePath(path));
     }
 }
diff --git a/src/test/java/org/apache/jackrabbit/filevault/maven/packaging/it/ProjectBuilder.java b/src/test/java/org/apache/jackrabbit/filevault/maven/packaging/it/ProjectBuilder.java
index 111bf8e..19cf332 100644
--- a/src/test/java/org/apache/jackrabbit/filevault/maven/packaging/it/ProjectBuilder.java
+++ b/src/test/java/org/apache/jackrabbit/filevault/maven/packaging/it/ProjectBuilder.java
@@ -133,7 +133,7 @@ public class ProjectBuilder {
      * @return the version of the current {@code filevault-package-maven-plugin}
      * @throws IllegalArgumentException if the version cannot be determined.
      */
-    private String getPluginVersion() {
+    static String getPluginVersion() {
         String pluginVersion  = System.getProperty("plugin.version");
         if (pluginVersion == null) {
             try (FileReader fileReader = new FileReader("pom.xml")) {
diff --git a/src/test/java/org/apache/jackrabbit/filevault/maven/packaging/it/ValidatePackageIT.java b/src/test/java/org/apache/jackrabbit/filevault/maven/packaging/it/ValidatePackageIT.java
index 7650bbe..90daa93 100644
--- a/src/test/java/org/apache/jackrabbit/filevault/maven/packaging/it/ValidatePackageIT.java
+++ b/src/test/java/org/apache/jackrabbit/filevault/maven/packaging/it/ValidatePackageIT.java
@@ -62,7 +62,7 @@ public class ValidatePackageIT {
             MatcherAssert.assertThat(actualRecords, Matchers.contains(expectedRecords.stream().map(r -> new CSVRecordMatcher(r, 3)).toArray(CSVRecordMatcher[]::new)));
         }
     }
- 
+
     @Test
     public void testValidProjectWithZip() throws Exception {
         verify("project-with-zip", false, null);
@@ -73,6 +73,18 @@ public class ValidatePackageIT {
         verify("classifier-project", false, "test");
     }
 
+    @Test
+    public void testValidPackageWithoutProject() throws Exception {
+        //File testPackage = new File(ProjectBuilder.TEST_PROJECTS_ROOT + "/../test-content/");
+        new ProjectBuilder()
+        // some new dir
+        .setTestProjectDir("../test-content")
+        .setTestGoals(String.format("org.apache.jackrabbit:filevault-package-maven-plugin:%s:validate-package", ProjectBuilder.getPluginVersion()))
+        .setProperty("vault.packageToValidate", "test-package.zip")
+        .setVerifyPackageContents(false)
+        .build();
+    }
+
     private static final class CSVRecordMatcher extends TypeSafeMatcher<CSVRecord> {
         private final CSVRecord expectedCsvRecord;
         private final Collection<Integer> ignoredValueIndices;