From 9b0ffc401ebf7914d62986eb0c2152ef293a045f Mon Sep 17 00:00:00 2001 From: Paul Masurel Date: Sat, 22 Aug 2020 22:49:56 +0900 Subject: [PATCH] Fixing unit tests. There was a unit test failing when notify was sending more than one event on atomicwrites. It was observed on MacOS CI. --- src/core/index.rs | 20 +++++++++++++++----- src/directory/tests.rs | 6 +++--- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/src/core/index.rs b/src/core/index.rs index b21dbc8f1..b08b0df6d 100644 --- a/src/core/index.rs +++ b/src/core/index.rs @@ -539,7 +539,6 @@ mod tests { test_index_on_commit_reload_policy_aux(field, &write_index, &reader); } } - fn test_index_on_commit_reload_policy_aux(field: Field, index: &Index, reader: &IndexReader) { let mut reader_index = reader.index(); let (sender, receiver) = crossbeam::channel::unbounded(); @@ -550,12 +549,23 @@ mod tests { assert_eq!(reader.searcher().num_docs(), 0); writer.add_document(doc!(field=>1u64)); writer.commit().unwrap(); - assert!(receiver.recv().is_ok()); - assert_eq!(reader.searcher().num_docs(), 1); + // We need a loop here because it is possible for notify to send more than + // one modify event. It was observed on CI on MacOS. + loop { + assert!(receiver.recv().is_ok()); + if reader.searcher().num_docs() == 1 { + break; + } + } writer.add_document(doc!(field=>2u64)); writer.commit().unwrap(); - assert!(receiver.recv().is_ok()); - assert_eq!(reader.searcher().num_docs(), 2); + // ... Same as above + loop { + assert!(receiver.recv().is_ok()); + if reader.searcher().num_docs() == 2 { + break; + } + } } // This test will not pass on windows, because windows diff --git a/src/directory/tests.rs b/src/directory/tests.rs index d257b870b..74f2f2840 100644 --- a/src/directory/tests.rs +++ b/src/directory/tests.rs @@ -211,19 +211,19 @@ fn test_watch(directory: &mut dyn Directory) { .unwrap(); for i in 0..10 { - assert_eq!(i, counter.load(SeqCst)); + assert!(i <= counter.load(SeqCst)); assert!(directory .atomic_write(Path::new("meta.json"), b"random_test_data_2") .is_ok()); assert_eq!(receiver.recv_timeout(Duration::from_millis(500)), Ok(i)); - assert_eq!(i + 1, counter.load(SeqCst)); + assert!(i + 1 <= counter.load(SeqCst)); // notify can trigger more than once. } mem::drop(watch_handle); assert!(directory .atomic_write(Path::new("meta.json"), b"random_test_data") .is_ok()); assert!(receiver.recv_timeout(Duration::from_millis(500)).is_ok()); - assert_eq!(10, counter.load(SeqCst)); + assert!(10 <= counter.load(SeqCst)); } fn test_lock_non_blocking(directory: &mut dyn Directory) {