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

pvillard pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/nifi.git


The following commit(s) were added to refs/heads/main by this push:
     new 871a63cea0 NIFI-15387 Re-enabled TestFetchFile, TestListFile and 
TestPutFile to run on Windows.
871a63cea0 is described below

commit 871a63cea045df89c49d61b71ae6298f7bf3b079
Author: dan-s1 <[email protected]>
AuthorDate: Wed Dec 24 14:39:46 2025 +0000

    NIFI-15387 Re-enabled TestFetchFile, TestListFile and TestPutFile to run on 
Windows.
    
    Signed-off-by: Pierre Villard <[email protected]>
    
    This closes #10690.
---
 .../nifi/processors/standard/TestFetchFile.java    | 33 +++++++++++++---------
 .../nifi/processors/standard/TestListFile.java     | 27 ++++++++++--------
 .../nifi/processors/standard/TestPutFile.java      |  2 +-
 .../service/StandardFileResourceServiceTest.java   |  2 +-
 4 files changed, 38 insertions(+), 26 deletions(-)

diff --git 
a/nifi-extension-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestFetchFile.java
 
b/nifi-extension-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestFetchFile.java
index 05a0b5508e..925e3f0474 100644
--- 
a/nifi-extension-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestFetchFile.java
+++ 
b/nifi-extension-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestFetchFile.java
@@ -32,9 +32,9 @@ import java.nio.file.StandardOpenOption;
 import static org.junit.jupiter.api.Assertions.assertArrayEquals;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
-@DisabledOnOs(value = OS.WINDOWS, disabledReason = "Test only runs on *nix")
 public class TestFetchFile {
 
     @BeforeEach
@@ -47,13 +47,16 @@ public class TestFetchFile {
 
         targetDir.setReadable(true);
 
-        for (final File file : targetDir.listFiles()) {
-            Files.delete(file.toPath());
+        final File[] filesToDelete = targetDir.listFiles();
+        if (filesToDelete != null) {
+            for (final File file : filesToDelete) {
+                Files.delete(file.toPath());
+            }
         }
     }
 
     @Test
-    public void notFound() throws IOException {
+    public void notFound() {
         final File sourceFile = new File("notFound");
 
         final TestRunner runner = TestRunners.newTestRunner(new FetchFile());
@@ -78,7 +81,7 @@ public class TestFetchFile {
         runner.enqueue(new byte[0]);
         runner.run();
         runner.assertAllFlowFilesTransferred(FetchFile.REL_SUCCESS, 1);
-        
runner.getFlowFilesForRelationship(FetchFile.REL_SUCCESS).get(0).assertContentEquals(content);
+        
runner.getFlowFilesForRelationship(FetchFile.REL_SUCCESS).getFirst().assertContentEquals(content);
 
         assertTrue(sourceFile.exists());
     }
@@ -96,7 +99,7 @@ public class TestFetchFile {
         runner.enqueue(new byte[0]);
         runner.run();
         runner.assertAllFlowFilesTransferred(FetchFile.REL_SUCCESS, 1);
-        
runner.getFlowFilesForRelationship(FetchFile.REL_SUCCESS).get(0).assertContentEquals(content);
+        
runner.getFlowFilesForRelationship(FetchFile.REL_SUCCESS).getFirst().assertContentEquals(content);
 
         assertFalse(sourceFile.exists());
     }
@@ -123,7 +126,7 @@ public class TestFetchFile {
         runner.enqueue(new byte[0]);
         runner.run();
         runner.assertAllFlowFilesTransferred(FetchFile.REL_SUCCESS, 1);
-        
runner.getFlowFilesForRelationship(FetchFile.REL_SUCCESS).get(0).assertContentEquals(content);
+        
runner.getFlowFilesForRelationship(FetchFile.REL_SUCCESS).getFirst().assertContentEquals(content);
 
         assertFalse(sourceFile.exists());
         assertTrue(destFile.exists());
@@ -153,12 +156,13 @@ public class TestFetchFile {
         runner.enqueue(new byte[0]);
         runner.run();
         runner.assertAllFlowFilesTransferred(FetchFile.REL_SUCCESS, 1);
-        
runner.getFlowFilesForRelationship(FetchFile.REL_SUCCESS).get(0).assertContentEquals(content);
+        
runner.getFlowFilesForRelationship(FetchFile.REL_SUCCESS).getFirst().assertContentEquals(content);
 
         assertFalse(sourceFile.exists());
         assertTrue(destFile.exists());
     }
 
+    @DisabledOnOs(value = OS.WINDOWS, disabledReason = "The method 
setWritable(false) in java.io.File does not make a directory read only on 
Windows.")
     @Test
     public void testMoveOnCompleteWithTargetExistsButNotWritable() throws 
IOException {
         final File sourceFile = new File("target/1.txt");
@@ -186,12 +190,13 @@ public class TestFetchFile {
         runner.enqueue(new byte[0]);
         runner.run();
         runner.assertAllFlowFilesTransferred(FetchFile.REL_FAILURE, 1);
-        
runner.getFlowFilesForRelationship(FetchFile.REL_FAILURE).get(0).assertContentEquals("");
+        
runner.getFlowFilesForRelationship(FetchFile.REL_FAILURE).getFirst().assertContentEquals("");
 
         assertTrue(sourceFile.exists());
         assertFalse(destFile.exists());
     }
 
+    @DisabledOnOs(value = OS.WINDOWS, disabledReason = "The method 
setWritable(false) in java.io.File does not make a directory read only on 
Windows.")
     @Test
     public void testMoveOnCompleteWithParentOfTargetDirNotAccessible() throws 
IOException {
         final File sourceFile = new File("target/1.txt");
@@ -217,7 +222,7 @@ public class TestFetchFile {
             runner.enqueue(new byte[0]);
             runner.run();
             runner.assertAllFlowFilesTransferred(FetchFile.REL_FAILURE, 1);
-            
runner.getFlowFilesForRelationship(FetchFile.REL_FAILURE).get(0).assertContentEquals("");
+            
runner.getFlowFilesForRelationship(FetchFile.REL_FAILURE).getFirst().assertContentEquals("");
 
             assertTrue(sourceFile.exists());
         } finally {
@@ -247,7 +252,7 @@ public class TestFetchFile {
         runner.enqueue(new byte[0]);
         runner.run();
         runner.assertAllFlowFilesTransferred(FetchFile.REL_SUCCESS, 1);
-        
runner.getFlowFilesForRelationship(FetchFile.REL_SUCCESS).get(0).assertContentEquals(content);
+        
runner.getFlowFilesForRelationship(FetchFile.REL_SUCCESS).getFirst().assertContentEquals(content);
 
         final byte[] replacedContent = Files.readAllBytes(destFile.toPath());
         assertArrayEquals(content, replacedContent);
@@ -278,7 +283,7 @@ public class TestFetchFile {
         runner.enqueue(new byte[0]);
         runner.run();
         runner.assertAllFlowFilesTransferred(FetchFile.REL_SUCCESS, 1);
-        
runner.getFlowFilesForRelationship(FetchFile.REL_SUCCESS).get(0).assertContentEquals(content);
+        
runner.getFlowFilesForRelationship(FetchFile.REL_SUCCESS).getFirst().assertContentEquals(content);
 
         final byte[] replacedContent = Files.readAllBytes(destFile.toPath());
         assertArrayEquals(goodBye, replacedContent);
@@ -346,6 +351,8 @@ public class TestFetchFile {
         assertFalse(sourceFile.exists());
         assertTrue(destFile.exists());
 
-        assertEquals(2, destDir.list().length);
+        final String[] destDirContents = destDir.list();
+        assertNotNull(destDirContents);
+        assertEquals(2, destDirContents.length);
     }
 }
diff --git 
a/nifi-extension-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestListFile.java
 
b/nifi-extension-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestListFile.java
index 6e56b0a584..64392f01bf 100644
--- 
a/nifi-extension-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestListFile.java
+++ 
b/nifi-extension-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestListFile.java
@@ -66,7 +66,6 @@ import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
-@DisabledOnOs(value = OS.WINDOWS, disabledReason = "Test only runs on *nix")
 public class TestListFile {
 
     private static boolean isMillisecondSupported = false;
@@ -345,7 +344,7 @@ public class TestListFile {
         runner.assertAllFlowFilesTransferred(ListFile.REL_SUCCESS);
         final List<MockFlowFile> successFiles4 = 
runner.getFlowFilesForRelationship(ListFile.REL_SUCCESS);
         assertEquals(1, successFiles4.size());
-        assertEquals(file2.getName(), 
successFiles4.get(0).getAttribute("filename"));
+        assertEquals(file2.getName(), 
successFiles4.getFirst().getAttribute("filename"));
     }
 
     @Test
@@ -468,6 +467,7 @@ public class TestListFile {
         assertEquals(1, successFiles2.size());
     }
 
+    @DisabledOnOs(value = OS.WINDOWS, disabledReason = "java.io.File 
setReadable(false) does not work on Windows. See javadocs.")
     @Test
     public void testListWithUnreadableFiles() throws Exception {
         final File file1 = new File(TESTDIR + "/unreadable.txt");
@@ -490,6 +490,7 @@ public class TestListFile {
         assertEquals(1, successFiles.size());
     }
 
+    @DisabledOnOs(value = OS.WINDOWS, disabledReason = "java.io.File 
setReadable(false) does not work on Windows. See javadocs.")
     @Test
     public void testListWithinUnreadableDirectory() throws Exception {
         final File subdir = new File(TESTDIR + "/subdir");
@@ -519,12 +520,13 @@ public class TestListFile {
 
             final List<MockFlowFile> successFiles = 
runner.getFlowFilesForRelationship(ListFile.REL_SUCCESS);
             assertEquals(1, successFiles.size());
-            assertEquals("secondReadable.txt", 
successFiles.get(0).getAttribute("filename"));
+            assertEquals("secondReadable.txt", 
successFiles.getFirst().getAttribute("filename"));
         } finally {
             subdir.setReadable(true);
         }
     }
 
+    @DisabledOnOs(value = OS.WINDOWS, disabledReason = "java.io.File 
setReadable(false) does not work on Windows. See javadocs.")
     @Test
     public void testListingNeedsSufficientPrivilegesAndFittingFilter() throws 
Exception {
         final File file = new File(TESTDIR + "/file.txt");
@@ -776,6 +778,7 @@ public class TestListFile {
         runner.assertTransferCount(ListFile.REL_SUCCESS, 3);
     }
 
+    @DisabledOnOs(value = OS.WINDOWS, disabledReason = "username is not 
contained in file owner attribute")
     @Test
     public void testAttributesSet() throws Exception {
         // create temp file and time constant
@@ -808,7 +811,7 @@ public class TestListFile {
         final String time3Formatted = 
formatter.format(Instant.ofEpochMilli(time3rounded).atZone(ZoneId.systemDefault()));
 
         // check standard attributes
-        MockFlowFile mock1 = successFiles1.get(0);
+        MockFlowFile mock1 = successFiles1.getFirst();
         assertEquals(relativePathString, 
mock1.getAttribute(CoreAttributes.PATH.key()));
         assertEquals("file1.txt", 
mock1.getAttribute(CoreAttributes.FILENAME.key()));
         assertEquals(absolutePathString, 
mock1.getAttribute(CoreAttributes.ABSOLUTE_PATH.key()));
@@ -823,7 +826,9 @@ public class TestListFile {
         if (store.supportsFileAttributeView("owner")) {
             // look for username containment to handle Windows domains as well 
as Unix user names
             // org.junit.ComparisonFailure: expected:<[]username> but 
was:<[DOMAIN\]username>
-            
assertTrue(mock1.getAttribute(ListFile.FILE_OWNER_ATTRIBUTE).contains(userName));
+            final String fileOwnerAttribute = 
mock1.getAttribute(ListFile.FILE_OWNER_ATTRIBUTE);
+            assertTrue(fileOwnerAttribute.contains(userName),
+                    "Expected %s to contain %s but it 
didn't.".formatted(fileOwnerAttribute, userName));
         }
         if (store.supportsFileAttributeView("posix")) {
             assertNotNull(mock1.getAttribute(ListFile.FILE_GROUP_ATTRIBUTE), 
"Group name should be set");
@@ -832,7 +837,7 @@ public class TestListFile {
     }
 
     @Test
-    public void testIsListingResetNecessary() throws Exception {
+    public void testIsListingResetNecessary() {
         assertTrue(processor.isListingResetNecessary(ListFile.DIRECTORY));
         assertTrue(processor.isListingResetNecessary(ListFile.RECURSE));
         assertTrue(processor.isListingResetNecessary(ListFile.FILE_FILTER));
@@ -914,10 +919,10 @@ public class TestListFile {
         time4millis = syncTime - age4millis;
         time5millis = syncTime - age5millis;
 
-        age0 = Long.toString(age0millis) + " millis";
-        age2 = Long.toString(age2millis) + " millis";
-        age4 = Long.toString(age4millis) + " millis";
-        age5 = Long.toString(age5millis) + " millis";
+        age0 = age0millis + " millis";
+        age2 = age2millis + " millis";
+        age4 = age4millis + " millis";
+        age5 = age5millis + " millis";
     }
 
     private void deleteDirectory(final File directory) {
@@ -938,7 +943,7 @@ public class TestListFile {
         final List<ConfigVerificationResult> results = 
processor.verify(runner.getProcessContext(), runner.getLogger(), 
Collections.emptyMap());
 
         assertEquals(1, results.size());
-        final ConfigVerificationResult result = results.get(0);
+        final ConfigVerificationResult result = results.getFirst();
         assertEquals(expectedOutcome, result.getOutcome());
         assertTrue(result.getExplanation().matches(expectedExplanationRegex),
                 String.format("Expected verification result to match pattern 
[%s].  Actual explanation was: %s", expectedExplanationRegex, 
result.getExplanation()));
diff --git 
a/nifi-extension-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestPutFile.java
 
b/nifi-extension-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestPutFile.java
index a58c900d51..6eb097be00 100644
--- 
a/nifi-extension-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestPutFile.java
+++ 
b/nifi-extension-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestPutFile.java
@@ -43,7 +43,6 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
-@DisabledOnOs(value = OS.WINDOWS, disabledReason = "Test only runs on *nix")
 public class TestPutFile {
 
     public static final String TARGET_DIRECTORY = "target/put-file";
@@ -266,6 +265,7 @@ public class TestPutFile {
         emptyTestDirectory();
     }
 
+    @DisabledOnOs(value = OS.WINDOWS, disabledReason = "Windows isn't natively 
POSIX compliant")
     @Test
     public void testPutFile() throws IOException {
         emptyTestDirectory();
diff --git 
a/nifi-extension-bundles/nifi-standard-services/nifi-file-resource-service-bundle/nifi-file-resource-service/src/test/java/org/apache/nifi/fileresource/service/StandardFileResourceServiceTest.java
 
b/nifi-extension-bundles/nifi-standard-services/nifi-file-resource-service-bundle/nifi-file-resource-service/src/test/java/org/apache/nifi/fileresource/service/StandardFileResourceServiceTest.java
index 34af572237..571d5e42e0 100644
--- 
a/nifi-extension-bundles/nifi-standard-services/nifi-file-resource-service-bundle/nifi-file-resource-service/src/test/java/org/apache/nifi/fileresource/service/StandardFileResourceServiceTest.java
+++ 
b/nifi-extension-bundles/nifi-standard-services/nifi-file-resource-service-bundle/nifi-file-resource-service/src/test/java/org/apache/nifi/fileresource/service/StandardFileResourceServiceTest.java
@@ -124,7 +124,7 @@ class StandardFileResourceServiceTest {
         assertThrows(ProcessException.class, () -> 
service.getFileResource(attributes));
     }
 
-    @DisabledOnOs(OS.WINDOWS)
+    @DisabledOnOs(value = OS.WINDOWS, disabledReason = "Windows isn't natively 
POSIX compliant")
     @Test
     void testNonReadableFile() throws IOException {
         final Path filePath = createTestFile("nonReadableFile");

Reply via email to