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");