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

rombert pushed a commit to branch feature/SLING-7605
in repository https://gitbox.apache.org/repos/asf/sling-ide-tooling.git


The following commit(s) were added to refs/heads/feature/SLING-7605 by this 
push:
     new eaa2cde  SLING-8287 - DirWatcherTest consistently fails on Jenkins
eaa2cde is described below

commit eaa2cdee2c195c212838f700686dc98f3c3dab6b
Author: Robert Munteanu <[email protected]>
AuthorDate: Mon Feb 25 13:47:07 2019 +0100

    SLING-8287 - DirWatcherTest consistently fails on Jenkins
    
    Adjust test to possibility of having multiple events delivered and
    document it.
---
 .../org/apache/sling/ide/cli/impl/DirWatcher.java  |  4 ++
 .../apache/sling/ide/cli/impl/DirWatcherTest.java  | 45 ++++++++++++++++------
 2 files changed, 37 insertions(+), 12 deletions(-)

diff --git 
a/cli/cli/src/main/java/org/apache/sling/ide/cli/impl/DirWatcher.java 
b/cli/cli/src/main/java/org/apache/sling/ide/cli/impl/DirWatcher.java
index ac92ec2..e5537f7 100644
--- a/cli/cli/src/main/java/org/apache/sling/ide/cli/impl/DirWatcher.java
+++ b/cli/cli/src/main/java/org/apache/sling/ide/cli/impl/DirWatcher.java
@@ -42,6 +42,10 @@ import java.util.stream.Stream;
  * 
  * <p>This class works on top of the standard  {@link WatchService} API by 
generating
  * events for all changes below a given directory.</p>
+ * 
+ * <p>This implementation works within the same constraints as the {@link 
WatchService} so
+ * consumers are advised to read the documentation, particularly those related 
to platform limitations.
+ * It is recommended to allow for minimal 
  */
 public class DirWatcher implements AutoCloseable {
     
diff --git 
a/cli/cli/src/test/java/org/apache/sling/ide/cli/impl/DirWatcherTest.java 
b/cli/cli/src/test/java/org/apache/sling/ide/cli/impl/DirWatcherTest.java
index f1285fc..5548afa 100644
--- a/cli/cli/src/test/java/org/apache/sling/ide/cli/impl/DirWatcherTest.java
+++ b/cli/cli/src/test/java/org/apache/sling/ide/cli/impl/DirWatcherTest.java
@@ -21,6 +21,7 @@ import static 
java.nio.file.StandardWatchEventKinds.ENTRY_CREATE;
 import static java.nio.file.StandardWatchEventKinds.ENTRY_DELETE;
 import static java.nio.file.StandardWatchEventKinds.ENTRY_MODIFY;
 import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.greaterThanOrEqualTo;
 import static org.junit.Assert.assertThat;
 
 import java.io.File;
@@ -29,6 +30,7 @@ import java.nio.file.Files;
 import java.nio.file.Paths;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.function.Consumer;
 
 import org.junit.Rule;
 import org.junit.Test;
@@ -161,21 +163,23 @@ public class DirWatcherTest {
             
             Files.write(created.toPath(), "hello, world".getBytes(UTF_8));
             
-            DirWatcher.Event event = w.poll();
-            
-            System.out.println("Got event " + event);
-            
-            assertThat("event.kind", event.getKind(), equalTo(ENTRY_MODIFY));
-            assertThat("event.path", event.getPath(), 
equalTo(Paths.get(created.getName())));
+            drainAndCheck(w, (events) -> {
+                assertThat("events.size", events.size(), 
greaterThanOrEqualTo(1));
+                for ( DirWatcher.Event event : events ) {
+                    assertThat("event.kind", event.getKind(), 
equalTo(ENTRY_MODIFY));
+                    assertThat("event.path", event.getPath(), 
equalTo(Paths.get(created.getName())));
+                }
+            });
             
             Files.write(created.toPath(), "hello, again".getBytes(UTF_8));
             
-            event = w.poll();
-            
-            System.out.println("Got event " + event);
-            
-            assertThat("event.kind", event.getKind(), equalTo(ENTRY_MODIFY));
-            assertThat("event.path", event.getPath(), 
equalTo(Paths.get(created.getName())));
+            drainAndCheck(w, (events) -> {
+                assertThat("events.size", events.size(), 
greaterThanOrEqualTo(1));
+                for ( DirWatcher.Event event : events ) {
+                    assertThat("event.kind", event.getKind(), 
equalTo(ENTRY_MODIFY));
+                    assertThat("event.path", event.getPath(), 
equalTo(Paths.get(created.getName())));
+                }
+            });
             
             List<DirWatcher.Event> unexpected = new ArrayList<>();
             while( w.queueSize() != 0 )
@@ -185,4 +189,21 @@ public class DirWatcherTest {
             assertThat("unexpected events", unexpected, equalTo(new 
ArrayList<>()));
         }
     }
+    
+    private void drainAndCheck(DirWatcher w, Consumer<List<DirWatcher.Event>> 
check) throws InterruptedException {
+        
+        long start = System.currentTimeMillis();
+        long delay = 500l;
+        
+        List<DirWatcher.Event> events = new ArrayList<>();
+        while( System.currentTimeMillis() < start + delay) {
+            if ( w.queueSize() == 0 ) {
+                Thread.sleep(50);
+                continue;
+            }
+            events.add(w.poll());
+        }
+        
+        check.accept(events);
+    }
 }

Reply via email to