This is an automated email from the ASF dual-hosted git repository. ggregory pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/commons-vfs.git
The following commit(s) were added to refs/heads/master by this push: new ec80f23 Rework waiting for events to fix random failures. ec80f23 is described below commit ec80f23ac8d94411b2ced2e9d2062505690fa42f Author: Gary Gregory <garydgreg...@gmail.com> AuthorDate: Fri Jul 16 22:06:41 2021 -0400 Rework waiting for events to fix random failures. --- .../commons/vfs2/impl/DefaultFileMonitorTest.java | 54 +++++++++++----------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/commons-vfs2/src/test/java/org/apache/commons/vfs2/impl/DefaultFileMonitorTest.java b/commons-vfs2/src/test/java/org/apache/commons/vfs2/impl/DefaultFileMonitorTest.java index cfb67c2..e31774c 100644 --- a/commons-vfs2/src/test/java/org/apache/commons/vfs2/impl/DefaultFileMonitorTest.java +++ b/commons-vfs2/src/test/java/org/apache/commons/vfs2/impl/DefaultFileMonitorTest.java @@ -193,7 +193,7 @@ public class DefaultFileMonitorTest { @After public void tearDown() { - //fileSystemManager.close(); + // fileSystemManager.close(); deleteTestFileIfPresent(); } @@ -231,15 +231,11 @@ public class DefaultFileMonitorTest { status = null; Thread.sleep(DELAY_MILLIS * 5); testFile.delete(); - Thread.sleep(DELAY_MILLIS * 30); - assertTrue("No event occurred", status != null); - assertEquals("Incorrect event " + status, Status.DELETED, status); + waitFor(Status.DELETED, DELAY_MILLIS * 30); status = null; Thread.sleep(DELAY_MILLIS * 5); writeToFile(testFile); - Thread.sleep(DELAY_MILLIS * 30); - assertTrue("No event occurred", status != null); - assertEquals("Incorrect event " + status, Status.CREATED, status); + waitFor(Status.CREATED, DELAY_MILLIS * 30); } finally { monitor.stop(); } @@ -257,8 +253,7 @@ public class DefaultFileMonitorTest { try { writeToFile(testFile); Thread.sleep(DELAY_MILLIS * 5); - assertTrue("No event occurred", status != null); - assertEquals("Incorrect event", Status.CREATED, status); + waitFor(Status.CREATED, DELAY_MILLIS * 5); } finally { monitor.stop(); } @@ -276,9 +271,7 @@ public class DefaultFileMonitorTest { monitor.start(); try { testFile.delete(); - Thread.sleep(500); - assertTrue("No event occurred", status != null); - assertEquals("Incorrect event", Status.DELETED, status); + waitFor(Status.DELETED, DELAY_MILLIS * 5); } finally { monitor.stop(); } @@ -301,9 +294,7 @@ public class DefaultFileMonitorTest { final long valueMillis = System.currentTimeMillis(); final boolean rcMillis = testFile.setLastModified(valueMillis); assertTrue("setLastModified succeeded", rcMillis); - Thread.sleep(DELAY_MILLIS * 5); - assertTrue("No event occurred", status != null); - assertEquals("Incorrect event", Status.CHANGED, status); + waitFor(Status.CHANGED, DELAY_MILLIS * 5); } finally { monitor.stop(); } @@ -329,9 +320,7 @@ public class DefaultFileMonitorTest { monitor.start(); try { testFile.delete(); - Thread.sleep(DELAY_MILLIS * 5); - assertTrue("No event occurred", status != null); - assertEquals("Incorrect event", Status.DELETED, status); + waitFor(Status.DELETED, DELAY_MILLIS * 5); } finally { monitor.stop(); } @@ -348,27 +337,38 @@ public class DefaultFileMonitorTest { monitor.start(); try { writeToFile(testFile); - Thread.sleep(DELAY_MILLIS * 5); - assertTrue("No event occurred", status != null); - assertEquals("Incorrect event " + status, Status.CREATED, status); + waitFor(Status.CREATED, DELAY_MILLIS * 10); status = null; testFile.delete(); - Thread.sleep(DELAY_MILLIS * 5); - assertTrue("No event occurred", status != null); - assertEquals("Incorrect event " + status, Status.DELETED, status); + waitFor(Status.DELETED, DELAY_MILLIS * 10); status = null; Thread.sleep(DELAY_MILLIS * 5); monitor.addFile(fileObject); writeToFile(testFile); - Thread.sleep(DELAY_MILLIS * 10); - assertTrue("No event occurred", status != null); - assertEquals("Incorrect event " + status, Status.CREATED, status); + waitFor(Status.CREATED, DELAY_MILLIS * 10); } finally { monitor.stop(); } } } + private void waitFor(final Status expected, final long timeoutMillis) throws InterruptedException { + if (expected == status) { + return; + } + long remaining = timeoutMillis; + final long interval = timeoutMillis / 10; + while (remaining > 0) { + Thread.sleep(interval); + remaining -= interval; + if (expected == status) { + return; + } + } + assertTrue("No event occurred", status != null); + assertEquals("Incorrect event " + status, expected, status); + } + private void writeToFile(final File file) throws IOException { // assertTrue(file.delete()); try (final BufferedWriter out = Files.newBufferedWriter(file.toPath())) {