Make FileSystemWatcherTests.waitsForPollingInterval more robust

The intent of the test is to:

1. Make a change
2. Sleep for long enough for that change to be picked up
3. Make another change
4. Stop that watcher after 1 further scan has been performed
5. Assert that a further scan was performed by checking that two
   separate sets of changes (step 1 and step 3) have been picked up

Previously, step 2 relied on simply sleeping for a period of time
longer than the polling interval. In reality, the polling interval
is only a minimum time between scans and the actual time between them
depends on thread scheduling, GC pauses, etc. This lead to the
test failing intermittently if the scan didn't happen in a timely
manner.

This commit removes the sleep and replaces it with a while loop that
waits for first change to be picked up. This ensures that the second
change will be detected separately from the first and that two
separate change sets should always be available once the watcher has
stopped.

See gh-7782
This commit is contained in:
Andy Wilkinson 2017-01-17 10:30:47 +00:00
parent 7c2664f959
commit 69320180d9

View File

@ -1,5 +1,5 @@
/*
* Copyright 2012-2016 the original author or authors.
* Copyright 2012-2017 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -155,10 +155,12 @@ public class FileSystemWatcherTests {
@Test
public void waitsForPollingInterval() throws Exception {
setupWatcher(100, 1);
setupWatcher(10, 1);
File folder = startWithNewFolder();
touch(new File(folder, "test1.txt"));
Thread.sleep(200);
while (this.changes.size() != 1) {
Thread.sleep(10);
}
touch(new File(folder, "test2.txt"));
this.watcher.stopAfter(1);
assertThat(this.changes.size()).isEqualTo(2);