[MENFORCER-390] "requireFilesExist" no longer handles non-canonical paths#297
[MENFORCER-390] "requireFilesExist" no longer handles non-canonical paths#297roadSurfer wants to merge 16 commits intoapache:masterfrom
Conversation
…and did not adequately deal with mixed filesystems.
|
Ok, the simple I only think - if we don't break and special cases ... but agree more complicated check should be done optionally or by next rule By the way we can mention in documentation a way how file existence is checked to be clear. |
|
I have added some words to the affected documentation on case-sensitivity, as well as some explic testing of symbolic links. |
|
Are all the white space changes in the .md files intended? |
|
No, they are not intended. That will be my IDE doing its own thing, I'll
use a different editor and update.
…On Mon, 27 Nov 2023 at 15:20, Torbjorn-Svensson ***@***.***> wrote:
Are all the white space changes in the .md files intended?
As far as I know, some of the trailing white spaces are needed in order to
not join the lines.
—
Reply to this email directly, view it on GitHub
<#297 (comment)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/AJHMQU65AH2DOVYZVDQKTUTYGSVUVAVCNFSM6AAAAAA7ZJWO7OVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTQMRYGA2DCMRXGQ>
.
You are receiving this because you authored the thread.Message ID:
***@***.***>
|
|
That should be the whitepsace issues sorted. I also generated the site locally and it appeared OK to me. |
| 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 |
|
|
||
|
|
||
| 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 |
|
|
||
| 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. |
| 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 |
| 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 |
| 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.*; |
There was a problem hiding this comment.
project style does not use wildcard imports
There was a problem hiding this comment.
Updated, and in TestRequireFilesExist as well
| @@ -107,15 +106,58 @@ void testEmptyFileListAllowNull() { | |||
| @Test | |||
| void testFileDoesNotExist() throws EnforcerRuleException, IOException { | |||
There was a problem hiding this 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
There was a problem hiding this comment.
This seems to just be a minor variation on the original test code, but I can change the name.
What do you think "testDeletedFileDetected"?
I'll update the symbolic link test to follow a similar format.
There is also "testFileDoesNotExistSatisfyAny", which is original code.
There was a problem hiding this comment.
yes, renaming is a good idea
There was a problem hiding this comment.
Please give me a format of the new method name you'd prefer and I will ensure that all test...Exists and test...DoesNotExist methods are updated in all test classes.
Such a change will affect TestRequireFilesSize, TestRequireFileChecksum TestRequireFilesDontExist, and TestRequireFilesExist; this means touching classes that are unrelated to the bug fix in order to ensure naming consistency.
To be clear, I disagree with this but it is not my project and so I will follow your direction.
There was a problem hiding this comment.
Don't change other methods not related to this PR. keep the PR focused.
There was a problem hiding this comment.
But that means this TestRequireFilesDontExist class will be following a different naming convention to the other classes. I don't follow why that is a good idea, I merely followed the convention that was already in place.
There was a problem hiding this comment.
Better 9 wrong and 1 right than 10 wrong. That's the fundamental principle.
There was a problem hiding this comment.
What should the new names be?
testFileDoesNotExist->testDeletedFileDetectedtestSymbolicLinkDoesNotExist->testSymbolicLinDeletedDetectedtestSymbolicLinkTargetDoesNotExist->testSymbolicLinkTargetDeletedDetectedtestFileDoesNotExistSatisfyAny->testDeletedFileDetectedSatisfyAny
There was a problem hiding this comment.
testSymbolicLinkDeletedDetected (spelling) but otherwise sounds good
|
|
||
| linkFile.delete(); | ||
| rule.execute(); | ||
| } finally { |
There was a problem hiding this comment.
can we use try with resources for this?
There was a problem hiding this comment.
I don;'t think so, isn't that just for autoclosables?
There was a problem hiding this comment.
Looking at other tests, it does not seem to be project standard to ensure tests delete files they create; I could just remove the try block entirely in that case.
There was a problem hiding this comment.
I think the temporary folder rule should take care of that
| rule.setFilesList(Collections.singletonList(linkFile)); | ||
|
|
||
| try { | ||
| rule.execute(); |
There was a problem hiding this comment.
Correct. This whole class it basically the inverse of TestRequireFilesExist.
| boolean checkFile(File file) { | ||
| // if we get here and the handle is null, treat it as a success | ||
| return file == null ? true : file.exists() && osIndependentNameMatch(file, true); | ||
| return file == null ? true : file.exists(); |
There was a problem hiding this comment.
IMHO
return file == null || file.exists()
is clearer, but up to you
| 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 |
| 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 |
|
|
||
| linkFile.delete(); | ||
| rule.execute(); | ||
| } finally { |
There was a problem hiding this comment.
I think the temporary folder rule should take care of that
|
|
||
| f.delete(); | ||
|
|
||
| assertFalse(f.exists()); |
There was a problem hiding this comment.
I think my confusion is that this is the only assert. It should be changed to an assumeFalse or removed.
There was a problem hiding this comment.
This is a quick negative check to ensure the file is detected and the test does not pass by fluke. It is consistent with checks in the other tests (throws an exception with a message).
And I am sorry, but I do no understand how assumeFalse is helpful here. If the file is not detected as being present and an exception thrown with a message, then that should be a hard failure as the rule is not working according to spec.
I can see a mix of checkin/not-checking for an unexpected exception, I can add and explicit check for one and add a fail if you would like? I don't think it would be appropriate to update every test though, just one directly required by this fix.
There was a problem hiding this comment.
Test setup failure does not mean the test failed. It means the test wasn't run. That's the difference between assume and assert. JUnit reports these two cases differently.
There was a problem hiding this comment.
The wrong one was changed. Line 122 should be changed or better yet deleted. The point of the test is not whether f.delete() succeeds. You're not testing the delete method in java.io.File.
| @@ -107,15 +106,58 @@ void testEmptyFileListAllowNull() { | |||
| @Test | |||
| void testFileDoesNotExist() throws EnforcerRuleException, IOException { | |||
There was a problem hiding this comment.
yes, renaming is a good idea
| @@ -26,7 +26,10 @@ | |||
| Require Files Don't Exist | |||
|
|
|||
| This rule checks that the specified list of files do not exist. | |||
| This rule checks that the specified list of files do not exist. | ||
|
|
||
|
|
||
| The mounted filesystem(s) will dictate the case-sensitivity rules when checking files. If checks are required that |
There was a problem hiding this comment.
delete "mounted" and consider getting rid of the parentheses or just changing this to "The filesystem" as is every file is on a single filesystem.
| @@ -27,22 +27,25 @@ Require Files Exist | |||
|
|
|||
| This rule checks that the specified list of files exist. | |||
|
|
||
| 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-sensitivity rules when checking files. If you require checks that your |
|
|
||
| // Check the file is detected as being present | ||
| EnforcerRuleException e = assertThrows(EnforcerRuleException.class, rule::execute); | ||
| assumeFalse(e.getMessage() == null); |
There was a problem hiding this comment.
This should be an assertNotNull
There was a problem hiding this comment.
Akready sorted based on earlier comment
|
|
||
| f.delete(); | ||
|
|
||
| assertFalse(f.exists()); |
There was a problem hiding this comment.
The wrong one was changed. Line 122 should be changed or better yet deleted. The point of the test is not whether f.delete() succeeds. You're not testing the delete method in java.io.File.
| rule.setFilesList(Collections.singletonList(linkFile)); | ||
| // Check the link is detected as being present | ||
| EnforcerRuleException e = assertThrows(EnforcerRuleException.class, rule::execute); | ||
| assumeFalse(e.getMessage() == null); |
|
|
||
| // Check the target is detected as being present | ||
| EnforcerRuleException e = assertThrows(EnforcerRuleException.class, rule::execute); | ||
| assumeFalse(e.getMessage() == null); |
| try { | ||
| rule.execute(); | ||
| fail("Should have received an exception"); | ||
| } catch (Exception e) { |
There was a problem hiding this comment.
which exception should be thrown here? Be specific.
|
Resolve #501 |
1 similar comment
|
Resolve #501 |
|
This pull request is stale because it has been waiting for feedback for 60 days. Remove the stale label or comment on this PR, or it will be automatically closed in 30 days. |
|
This pull request has been closed because no response was received within 90 days. |
|
Please finish this patch-request. :) |
As far as I am aware, I made good all the required changes. I do not believe it is for me to mark things as "Resolved" but for the person who raised the issue or another team member. @slawekjaranowski - Who are you awaiting feedback from? I do not believe it to be me. |
This reverts the change from MENFORCER-364 as this led to a regressions with symbolic links.
The fundamental issue is that there is no clean way to deal with case-sensitivity as OSs can have multuple filesystems mounted that follow different rules. Thus the simple
file.exists()is, despite the limitations, probably best. Those requiring more stringent checks writing their own handling.Following this checklist to help us incorporate your
contribution quickly and easily:
for the change (usually before you start working on it). Trivial changes like typos do not
require a JIRA issue. Your pull request should address just this issue, without
pulling in other changes.
[MENFORCER-XXX] - Fixes bug in ApproximateQuantiles,where you replace
MENFORCER-XXXwith the appropriate JIRA issue. Best practiceis to use the JIRA issue title in the pull request title and in the first line of the
commit message.
mvn clean verifyto make sure basic checks pass. A more thorough check willbe performed on your pull request automatically.
mvn -Prun-its clean verify).If your pull request is about ~20 lines of code you don't need to sign an
Individual Contributor License Agreement if you are unsure
please ask on the developers list.
To make clear that you license your contribution under
the Apache License Version 2.0, January 2004
you have to acknowledge this by using the following check-box.
I hereby declare this contribution to be licenced under the Apache License Version 2.0, January 2004
In any other case, please file an Apache Individual Contributor License Agreement.