@@ -172,8 +172,8 @@ void indexingRescanOnOverflow() throws IOException, InterruptedException {
172172 // inside a watch. I've added some comments below to make it make sense.
173173
174174 var directory = testDir .getTestDirectory ();
175-
176175 var semaphore = new Semaphore (0 );
176+
177177 var nCreated = new AtomicInteger ();
178178 var nModified = new AtomicInteger ();
179179 var nDeleted = new AtomicInteger ();
@@ -225,7 +225,7 @@ void indexingRescanOnOverflow() throws IOException, InterruptedException {
225225
226226 var overflow = new WatchEvent (WatchEvent .Kind .OVERFLOW , directory );
227227 ((EventHandlingWatch ) watch ).handleEvent (overflow );
228- Thread .sleep (TestHelper .LONG_WAIT .toMillis ());
228+ Thread .sleep (TestHelper .NORMAL_WAIT .toMillis ());
229229 // At this point, the current thread has presumably slept long
230230 // enough for the `OVERFLOW` event to have been handled by the
231231 // rescanner. This means that synthetic events must have been issued
@@ -237,11 +237,16 @@ void indexingRescanOnOverflow() throws IOException, InterruptedException {
237237 semaphore .release ();
238238
239239 await ("Overflow should trigger created events" )
240- .until (nCreated ::get , Predicate . isEqual ( 2 )) ; // 1 synthetic event + 1 regular event
240+ .until (nCreated ::get , n -> n >= 2 ) ; // 1 synthetic event + >= 1 regular event
241241 await ("Overflow should trigger modified events" )
242- .until (nModified ::get , Predicate . isEqual ( 4 )) ; // 2 synthetic events + 2 regular events
242+ .until (nModified ::get , n -> n >= 4 ) ; // 2 synthetic events + >= 2 regular events
243243 await ("Overflow should trigger deleted events" )
244- .until (nDeleted ::get , Predicate .isEqual (2 )); // 1 synthetic event + 1 regular event
244+ .until (nDeleted ::get , n -> n >= 2 ); // 1 synthetic event + >=1 regular event
245+
246+ // Reset counters for next phase of the test
247+ nCreated .set (0 );
248+ nModified .set (0 );
249+ nDeleted .set (0 );
245250
246251 // Let's do some more file operations, trigger another `OVERFLOW`
247252 // event, and observe that synthetic events *aren't* issued this
@@ -252,21 +257,25 @@ void indexingRescanOnOverflow() throws IOException, InterruptedException {
252257 Files .delete (directory .resolve ("d.txt" ));
253258
254259 await ("File create should trigger regular created event" )
255- .until (nCreated ::get , Predicate . isEqual ( 3 ) );
260+ .until (nCreated ::get , n -> n >= 1 );
256261 await ("File write should trigger regular modified event" )
257- .until (nModified ::get , Predicate . isEqual ( 5 ) );
262+ .until (nModified ::get , n -> n >= 1 );
258263 await ("File delete should trigger regular deleted event" )
259- .until (nDeleted ::get , Predicate .isEqual (3 ));
264+ .until (nDeleted ::get , n -> n >= 1 );
265+
266+ var nCreatedBeforeOverflow = nCreated .get ();
267+ var nModifiedBeforeOverflow = nModified .get ();
268+ var nDeletedBeforeOverflow = nDeleted .get ();
260269
261270 ((EventHandlingWatch ) watch ).handleEvent (overflow );
262271 Thread .sleep (TestHelper .NORMAL_WAIT .toMillis ());
263272
264273 await ("Overflow shouldn't trigger synthetic created event after file create (and index updated)" )
265- .until (nCreated ::get , Predicate .isEqual (3 ));
274+ .until (nCreated ::get , Predicate .isEqual (nCreatedBeforeOverflow ));
266275 await ("Overflow shouldn't trigger synthetic modified event after file write (and index updated)" )
267- .until (nModified ::get , Predicate .isEqual (5 ));
276+ .until (nModified ::get , Predicate .isEqual (nModifiedBeforeOverflow ));
268277 await ("Overflow shouldn't trigger synthetic deleted event after file delete (and index updated)" )
269- .until (nDeleted ::get , Predicate .isEqual (3 ));
278+ .until (nDeleted ::get , Predicate .isEqual (nDeletedBeforeOverflow ));
270279 }
271280 }
272281}
0 commit comments