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);
+ }
}