[ 
https://issues.apache.org/jira/browse/MENFORCER-390?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17911098#comment-17911098
 ] 

ASF GitHub Bot commented on MENFORCER-390:
------------------------------------------

elharo commented on code in PR #297:
URL: https://github.com/apache/maven-enforcer/pull/297#discussion_r1907238846


##########
enforcer-rules/src/test/java/org/apache/maven/enforcer/rules/files/TestRequireFilesDontExist.java:
##########
@@ -107,15 +106,58 @@ void testEmptyFileListAllowNull() {
     @Test
     void testFileDoesNotExist() throws EnforcerRuleException, IOException {
         File f = File.createTempFile("junit", null, temporaryFolder);
+        rule.setFilesList(Collections.singletonList(f));
+
+        EnforcerRuleException e = assertThrows(EnforcerRuleException.class, 
rule::execute);
+        assertNotNull(e.getMessage());
+
         f.delete();
 
         assertFalse(f.exists());
 
-        rule.setFilesList(Collections.singletonList(f));
-
         rule.execute();
     }
 
+    @Test
+    void testSymbolicLinkDoesNotExist() throws Exception {
+        File canonicalFile = File.createTempFile("canonical_", null, 
temporaryFolder);
+        File linkFile = Files.createSymbolicLink(
+                        Paths.get(temporaryFolder.getAbsolutePath(), 
"symbolic.link"),
+                        Paths.get(canonicalFile.getAbsolutePath()))
+                .toFile();
+
+        try {
+            rule.setFilesList(Collections.singletonList(linkFile));
+            EnforcerRuleException e = 
assertThrows(EnforcerRuleException.class, rule::execute);
+            assertNotNull(e.getMessage());
+
+            linkFile.delete();
+            rule.execute();
+        } finally {

Review Comment:
   can we use try with resources for this?



##########
enforcer-rules/src/test/java/org/apache/maven/enforcer/rules/files/TestRequireFilesDontExist.java:
##########
@@ -107,15 +106,58 @@ void testEmptyFileListAllowNull() {
     @Test
     void testFileDoesNotExist() throws EnforcerRuleException, IOException {
         File f = File.createTempFile("junit", null, temporaryFolder);
+        rule.setFilesList(Collections.singletonList(f));
+
+        EnforcerRuleException e = assertThrows(EnforcerRuleException.class, 
rule::execute);
+        assertNotNull(e.getMessage());
+
         f.delete();
 
         assertFalse(f.exists());
 
-        rule.setFilesList(Collections.singletonList(f));
-
         rule.execute();
     }
 
+    @Test
+    void testSymbolicLinkDoesNotExist() throws Exception {
+        File canonicalFile = File.createTempFile("canonical_", null, 
temporaryFolder);
+        File linkFile = Files.createSymbolicLink(
+                        Paths.get(temporaryFolder.getAbsolutePath(), 
"symbolic.link"),
+                        Paths.get(canonicalFile.getAbsolutePath()))
+                .toFile();
+
+        try {
+            rule.setFilesList(Collections.singletonList(linkFile));
+            EnforcerRuleException e = 
assertThrows(EnforcerRuleException.class, rule::execute);
+            assertNotNull(e.getMessage());
+
+            linkFile.delete();
+            rule.execute();
+        } finally {
+            if (linkFile.exists()) {
+                linkFile.delete();
+            }
+            canonicalFile.delete();
+        }
+    }
+
+    @Test
+    void testSymbolicLinkTargetDoesNotExist() throws Exception {
+        File canonicalFile = File.createTempFile("canonical_", null, 
temporaryFolder);
+        File linkFile = Files.createSymbolicLink(
+                        Paths.get(temporaryFolder.getAbsolutePath(), 
"symbolic.link"),
+                        Paths.get(canonicalFile.getAbsolutePath()))
+                .toFile();
+        canonicalFile.delete();
+        rule.setFilesList(Collections.singletonList(linkFile));
+
+        try {
+            rule.execute();

Review Comment:
   no exception is a pass?



##########
enforcer-rules/src/site/apt/requireFilesDontExist.apt.vm:
##########
@@ -26,7 +26,10 @@
 Require Files Don't Exist
 
   This rule checks that the specified list of files do not exist.
-
+  
+  The mounted filesystem(s) will dictate the case-sensitive rules when 
checking files. If you require checks that your

Review Comment:
   case-sensitivity



##########
enforcer-rules/src/site/apt/requireFilesDontExist.apt.vm:
##########
@@ -26,7 +26,10 @@
 Require Files Don't Exist
 
   This rule checks that the specified list of files do not exist.
-
+  
+  The mounted filesystem(s) will dictate the case-sensitive rules when 
checking files. If you require checks that your
+  filesystem(s) do not support (e.g. a case-sensitive check on a 
case-insensitive filesystem) then you should consider

Review Comment:
   delete "then you should"



##########
enforcer-rules/src/site/apt/requireFilesDontExist.apt.vm:
##########
@@ -26,7 +26,10 @@
 Require Files Don't Exist
 
   This rule checks that the specified list of files do not exist.
-
+  
+  The mounted filesystem(s) will dictate the case-sensitive rules when 
checking files. If you require checks that your
+  filesystem(s) do not support (e.g. a case-sensitive check on a 
case-insensitive filesystem) then you should consider
+  adding your own custom plugin that meets your specific needs.

Review Comment:
   your own --> a



##########
enforcer-rules/src/site/apt/requireFilesExist.apt.vm:
##########
@@ -26,7 +26,10 @@
 Require Files Exist
 
   This rule checks that the specified list of files exist.
-
+  
+  The mounted filesystem(s) will dictate the case-sensitive rules when 
checking files. If you require checks that your

Review Comment:
   as above



##########
enforcer-rules/src/site/apt/requireFilesSize.apt.vm:
##########
@@ -26,7 +26,10 @@
 Require File Size
 
   This rule checks that the specified list of files exist and are within the 
specified size range.
-
+  
+  The mounted filesystem(s) will dictate the case-sensitive rules when 
checking files. If you require checks that your

Review Comment:
   ditto



##########
enforcer-rules/src/test/java/org/apache/maven/enforcer/rules/files/TestRequireFilesDontExist.java:
##########
@@ -107,15 +106,58 @@ void testEmptyFileListAllowNull() {
     @Test
     void testFileDoesNotExist() throws EnforcerRuleException, IOException {

Review Comment:
   I don't understand this test. It checks that we create a file, delete it, 
and then that the file doesn't exist? Consider renamingi



##########
enforcer-rules/src/test/java/org/apache/maven/enforcer/rules/files/TestRequireFilesDontExist.java:
##########
@@ -20,17 +20,16 @@
 
 import java.io.File;
 import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Paths;
 import java.util.Arrays;
 import java.util.Collections;
 
 import org.apache.maven.enforcer.rule.api.EnforcerRuleException;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.io.TempDir;
 
-import static org.junit.jupiter.api.Assertions.assertFalse;
-import static org.junit.jupiter.api.Assertions.assertNotNull;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-import static org.junit.jupiter.api.Assertions.fail;
+import static org.junit.jupiter.api.Assertions.*;

Review Comment:
   project style does not use wildcard imports





> "requireFilesExist" no longer handles non-canonical paths
> ---------------------------------------------------------
>
>                 Key: MENFORCER-390
>                 URL: https://issues.apache.org/jira/browse/MENFORCER-390
>             Project: Maven Enforcer Plugin
>          Issue Type: Bug
>          Components: requireFilesExist, Standard Rules
>    Affects Versions: 3.0.0
>            Reporter: Gene Smith
>            Priority: Major
>
> With the commit to resolve MENFORCER-364, the rule "requireFileExists" checks 
> that the canonical path of a file is the same as the absolute path.
> But not all absolute paths are canonical.
>  * absolute paths can involve symbolic links
>  * and they are allowed to have parts which are relative
>  ** {{/../}}
>  ** {{/./}}
> And when it fails to handle a path, it can report that a file does not exist, 
> even though the local system will resolve the path.
> A blunt solution might be three separate rules:
>  * requireFileExists
>  ** the provided path must resolve to a file (which may be a directory or 
> link)
>  * requireCanonicalFileExists
>  ** the provided path must exist as a canonical file
>  * requireCasesenstiveFileExists
>  ** the provided path must file a file
>  ** the file name must have the same case (upper//lower) as the
>  ** the parts of the path from the file up must have the same case until they 
> go through a symbolic link
> I have used  the "nio" package to handle some of stuff before.  I will add a 
> comment with some java code I would start with.  Since the outcome here is 
> very dependent on the use case you pick, the java will be "meta code" with 
> ??? where you have to know the use case to know the outcome.
> but basically, with "nio" you can march up a path checking for symbolic links 
> and such.
>  



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to