From cc2f78184bf3e298e2efd70175e67bff66f7b7c7 Mon Sep 17 00:00:00 2001 From: Paul Masurel Date: Tue, 28 Feb 2017 20:43:16 +0900 Subject: [PATCH] Added unit test for #96 --- src/indexer/merge_policy.rs | 25 +++++++++++++ src/indexer/segment_updater.rs | 65 ++++++++++++++++++++++++++++++++++ 2 files changed, 90 insertions(+) diff --git a/src/indexer/merge_policy.rs b/src/indexer/merge_policy.rs index ae1064355..5e3adcfb8 100644 --- a/src/indexer/merge_policy.rs +++ b/src/indexer/merge_policy.rs @@ -43,3 +43,28 @@ impl MergePolicy for NoMergePolicy { } } + +#[cfg(test)] +pub mod tests { + + use super::*; + use core::SegmentId; + use core::SegmentMeta; + + #[derive(Debug)] + pub struct MergeWheneverPossible; + + impl MergePolicy for MergeWheneverPossible { + fn compute_merge_candidates(&self, segment_metas: &[SegmentMeta]) -> Vec { + let segment_ids = segment_metas + .iter() + .map(|segment_meta| segment_meta.id()) + .collect::>(); + vec!(MergeCandidate(segment_ids)) + } + + fn box_clone(&self) -> Box { + box MergeWheneverPossible + } + } +} \ No newline at end of file diff --git a/src/indexer/segment_updater.rs b/src/indexer/segment_updater.rs index 663e36609..1c300ef5c 100644 --- a/src/indexer/segment_updater.rs +++ b/src/indexer/segment_updater.rs @@ -323,3 +323,68 @@ impl SegmentUpdater { } } + + + + +#[cfg(test)] +mod tests { + + use Index; + use schema::*; + use indexer::merge_policy::tests::MergeWheneverPossible; + + #[test] + fn test_delete_during_merge() { + let mut schema_builder = SchemaBuilder::default(); + let text_field = schema_builder.add_text_field("text", TEXT); + let schema = schema_builder.build(); + + let index = Index::create_in_ram(schema); + + // writing the segment + let mut index_writer = index.writer_with_num_threads(1, 40_000_000).unwrap(); + index_writer.set_merge_policy(box MergeWheneverPossible); + + { + for i in 0..100 { + index_writer.add_document(doc!(text_field=>"a")); + index_writer.add_document(doc!(text_field=>"b")); + } + assert!(index_writer.commit().is_ok()); + } + + { + for i in 0..100 { + index_writer.add_document(doc!(text_field=>"c")); + index_writer.add_document(doc!(text_field=>"d")); + } + assert!(index_writer.commit().is_ok()); + } + + { + index_writer.add_document(doc!(text_field=>"e")); + index_writer.add_document(doc!(text_field=>"f")); + assert!(index_writer.commit().is_ok()); + } + + { + let term = Term::from_field_text(text_field, "a"); + index_writer.delete_term(term); + assert!(index_writer.commit().is_ok()); + } + + index.load_searchers(); + assert_eq!(index.searcher().segment_readers().len(), 3); + assert_eq!(index.searcher().num_docs(), 302); + + { + index_writer.wait_merging_threads() + .expect("waiting for merging threads"); + } + + index.load_searchers(); + assert_eq!(index.searcher().segment_readers().len(), 2); + assert_eq!(index.searcher().num_docs(), 302); + } +} \ No newline at end of file