This is an automated email from the ASF dual-hosted git repository.
exceptionfactory pushed a commit to branch support/nifi-1.x
in repository https://gitbox.apache.org/repos/asf/nifi.git
The following commit(s) were added to refs/heads/support/nifi-1.x by this push:
new dead747486 NIFI-13686 Make TestListFile.testFilterAge() more resilient
to time delays (#9207)
dead747486 is described below
commit dead747486d6cb8b93f21fb56f94627c9397b36f
Author: jrsteinebrey <[email protected]>
AuthorDate: Thu Aug 29 09:45:44 2024 -0500
NIFI-13686 Make TestListFile.testFilterAge() more resilient to time delays
(#9207)
Signed-off-by: David Handermann <[email protected]>
---
.../nifi/processors/standard/TestListFile.java | 75 ++++++++++------------
1 file changed, 33 insertions(+), 42 deletions(-)
diff --git
a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestListFile.java
b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestListFile.java
index 014e6880c6..41e698136a 100644
---
a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestListFile.java
+++
b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestListFile.java
@@ -44,8 +44,9 @@ import java.nio.file.FileStore;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
-import java.text.DateFormat;
-import java.text.SimpleDateFormat;
+import java.time.Instant;
+import java.time.ZoneId;
+import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
@@ -80,8 +81,7 @@ public class TestListFile {
// age#filter are filter label strings for the filter properties
private Long syncTime = getTestModifiedTime();
private Long time0millis, time1millis, time2millis, time3millis,
time4millis, time5millis;
- private Long age0millis, age1millis, age2millis, age3millis, age4millis,
age5millis;
- private String age0, age1, age2, age3, age4, age5;
+ private String age0, age2, age4, age5;
@RegisterExtension
private final ListProcessorTestWatcher dumpState = new
ListProcessorTestWatcher(
@@ -258,27 +258,26 @@ public class TestListFile {
@Test
public void testFilterAge() throws Exception {
-
- final File file1 = new File(TESTDIR + "/age1.txt");
- assertTrue(file1.createNewFile());
+ final File file0 = new File(TESTDIR + "/age0.txt");
+ assertTrue(file0.createNewFile());
final File file2 = new File(TESTDIR + "/age2.txt");
assertTrue(file2.createNewFile());
- final File file3 = new File(TESTDIR + "/age3.txt");
- assertTrue(file3.createNewFile());
+ final File file4 = new File(TESTDIR + "/age4.txt");
+ assertTrue(file4.createNewFile());
final Function<Boolean, Object> runNext = resetAges -> {
if (resetAges) {
resetAges();
- assertTrue(file1.setLastModified(time0millis));
+ assertTrue(file0.setLastModified(time0millis));
assertTrue(file2.setLastModified(time2millis));
- assertTrue(file3.setLastModified(time4millis));
+ assertTrue(file4.setLastModified(time4millis));
}
- assertTrue(file1.lastModified() > time3millis &&
file1.lastModified() <= time0millis);
+ assertTrue(file0.lastModified() > time3millis &&
file0.lastModified() <= time0millis);
assertTrue(file2.lastModified() > time3millis &&
file2.lastModified() < time1millis);
- assertTrue(file3.lastModified() < time3millis);
+ assertTrue(file4.lastModified() < time3millis);
try {
runNext();
@@ -292,6 +291,11 @@ public class TestListFile {
runner.setProperty(ListFile.DIRECTORY, testDir.getAbsolutePath());
runNext.apply(true);
runner.assertTransferCount(ListFile.REL_SUCCESS, 3);
+ final List<MockFlowFile> successFiles1 =
runner.getFlowFilesForRelationship(ListFile.REL_SUCCESS);
+ assertEquals(3, successFiles1.size());
+ assertEquals(file4.getName(),
successFiles1.get(0).getAttribute("filename"));
+ assertEquals(file2.getName(),
successFiles1.get(1).getAttribute("filename"));
+ assertEquals(file0.getName(),
successFiles1.get(2).getAttribute("filename"));
assertVerificationOutcome(Outcome.SUCCESSFUL, "Successfully listed .*
Found 3 objects. Of those, 3 match the filter.");
// processor updates internal state, it shouldn't pick the same ones.
@@ -300,36 +304,33 @@ public class TestListFile {
// exclude oldest
runner.setProperty(ListFile.MIN_AGE, age0);
- runner.setProperty(ListFile.MAX_AGE, age3);
+ runner.setProperty(ListFile.MAX_AGE, age4);
runNext.apply(true);
runner.assertAllFlowFilesTransferred(ListFile.REL_SUCCESS);
final List<MockFlowFile> successFiles2 =
runner.getFlowFilesForRelationship(ListFile.REL_SUCCESS);
assertEquals(2, successFiles2.size());
assertEquals(file2.getName(),
successFiles2.get(0).getAttribute("filename"));
- assertEquals(file1.getName(),
successFiles2.get(1).getAttribute("filename"));
+ assertEquals(file0.getName(),
successFiles2.get(1).getAttribute("filename"));
assertVerificationOutcome(Outcome.SUCCESSFUL, "Successfully listed .*
Found 3 objects. Of those, 2 match the filter.");
// exclude newest
- runner.setProperty(ListFile.MIN_AGE, age1);
+ runner.setProperty(ListFile.MIN_AGE, age2);
runner.setProperty(ListFile.MAX_AGE, age5);
runNext.apply(true);
runner.assertAllFlowFilesTransferred(ListFile.REL_SUCCESS);
final List<MockFlowFile> successFiles3 =
runner.getFlowFilesForRelationship(ListFile.REL_SUCCESS);
assertEquals(2, successFiles3.size());
- assertEquals(file3.getName(),
successFiles3.get(0).getAttribute("filename"));
+ assertEquals(file4.getName(),
successFiles3.get(0).getAttribute("filename"));
assertEquals(file2.getName(),
successFiles3.get(1).getAttribute("filename"));
- assertVerificationOutcome(Outcome.SUCCESSFUL, "Successfully listed .*
Found 3 objects. Of those, 2 match the filter.");
// exclude oldest and newest
- runner.setProperty(ListFile.MIN_AGE, age1);
- runner.setProperty(ListFile.MAX_AGE, age3);
+ runner.setProperty(ListFile.MIN_AGE, age2);
+ runner.setProperty(ListFile.MAX_AGE, age4);
runNext.apply(true);
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"));
- assertVerificationOutcome(Outcome.SUCCESSFUL, "Successfully listed .*
Found 3 objects. Of those, 1 matches the filter.");
-
}
@Test
@@ -787,8 +788,8 @@ public class TestListFile {
final Path absolutePath = file1.toPath().toAbsolutePath();
final String absolutePathString = absolutePath.getParent().toString()
+ File.separator;
final FileStore store = Files.getFileStore(file1Path);
- final DateFormat formatter = new
SimpleDateFormat(ListFile.FILE_MODIFY_DATE_ATTR_FORMAT, Locale.US);
- final String time3Formatted = formatter.format(time3rounded);
+ final DateTimeFormatter formatter =
DateTimeFormatter.ofPattern(ListFile.FILE_MODIFY_DATE_ATTR_FORMAT, Locale.US);
+ final String time3Formatted =
formatter.format(Instant.ofEpochMilli(time3rounded).atZone(ZoneId.systemDefault()));
// check standard attributes
MockFlowFile mock1 = successFiles1.get(0);
@@ -872,7 +873,7 @@ public class TestListFile {
* HFS+, default for OS X, only has granularity to one second,
accordingly, we go back in time to establish consistent test cases
*
* Provides "now" minus 1 second in millis
- */
+ */
private static long getTestModifiedTime() {
final long nowMillis = System.currentTimeMillis();
// Subtract a second to avoid possible rounding issues
@@ -883,20 +884,12 @@ public class TestListFile {
private void resetAges() {
syncTime = getTestModifiedTime();
- age0millis = 0L;
- age1millis = 5000L;
- age2millis = 10000L;
- age3millis = 15000L;
- age4millis = 20000L;
- age5millis = 100000L;
-
- // Allow for bigger gaps since the lag is 2s w/o milliseconds.
- if (!isMillisecondSupported) {
- age1millis *= 2;
- age2millis *= 2;
- age3millis *= 2;
- age4millis *= 2;
- }
+ final long age0millis = 0L;
+ final long age1millis = 20000L;
+ final long age2millis = 40000L;
+ final long age3millis = 60000L;
+ final long age4millis = 80000L;
+ final long age5millis = 200000L;
time0millis = syncTime - age0millis;
time1millis = syncTime - age1millis;
@@ -906,14 +899,12 @@ public class TestListFile {
time5millis = syncTime - age5millis;
age0 = Long.toString(age0millis) + " millis";
- age1 = Long.toString(age1millis) + " millis";
age2 = Long.toString(age2millis) + " millis";
- age3 = Long.toString(age3millis) + " millis";
age4 = Long.toString(age4millis) + " millis";
age5 = Long.toString(age5millis) + " millis";
}
- private void deleteDirectory(final File directory) throws IOException {
+ private void deleteDirectory(final File directory) {
if (directory.exists()) {
File[] files = directory.listFiles();
if (files != null) {