Clover Coverage Report
Coverage timestamp: Fri May 9 2008 10:54:27 EST
119   229   29   13.22
40   169   0.24   9
9     3.22  
1    
 
  TestIndexWriterMergePolicy       Line # 13 119 29 94.6% 0.9464286
 
  (6)
 
1    package org.apache.lucene.index;
2   
3    import java.io.IOException;
4   
5    import org.apache.lucene.analysis.WhitespaceAnalyzer;
6    import org.apache.lucene.document.Document;
7    import org.apache.lucene.document.Field;
8    import org.apache.lucene.store.Directory;
9    import org.apache.lucene.store.RAMDirectory;
10   
11    import junit.framework.TestCase;
12   
 
13    public class TestIndexWriterMergePolicy extends TestCase {
14   
15    // Test the normal case
 
16  1 toggle public void testNormalCase() throws IOException {
17  1 Directory dir = new RAMDirectory();
18   
19  1 IndexWriter writer = new IndexWriter(dir, new WhitespaceAnalyzer(), true);
20  1 writer.setMaxBufferedDocs(10);
21  1 writer.setMergeFactor(10);
22   
23  101 for (int i = 0; i < 100; i++) {
24  100 addDoc(writer);
25  100 checkInvariants(writer);
26    }
27   
28  1 writer.close();
29    }
30   
31    // Test to see if there is over merge
 
32  1 toggle public void testNoOverMerge() throws IOException {
33  1 Directory dir = new RAMDirectory();
34   
35  1 IndexWriter writer = new IndexWriter(dir, new WhitespaceAnalyzer(), true);
36  1 writer.setMaxBufferedDocs(10);
37  1 writer.setMergeFactor(10);
38   
39  1 boolean noOverMerge = false;
40  101 for (int i = 0; i < 100; i++) {
41  100 addDoc(writer);
42  100 checkInvariants(writer);
43  100 if (writer.getRAMSegmentCount() + writer.getSegmentCount() >= 18) {
44  1 noOverMerge = true;
45    }
46    }
47  1 assertTrue(noOverMerge);
48   
49  1 writer.close();
50    }
51   
52    // Test the case where flush is forced after every addDoc
 
53  1 toggle public void testForceFlush() throws IOException {
54  1 Directory dir = new RAMDirectory();
55   
56  1 IndexWriter writer = new IndexWriter(dir, new WhitespaceAnalyzer(), true);
57  1 writer.setMaxBufferedDocs(10);
58  1 writer.setMergeFactor(10);
59   
60  101 for (int i = 0; i < 100; i++) {
61  100 addDoc(writer);
62  100 writer.close();
63   
64  100 writer = new IndexWriter(dir, new WhitespaceAnalyzer(), false);
65  100 writer.setMaxBufferedDocs(10);
66  100 writer.setMergeFactor(10);
67  100 checkInvariants(writer);
68    }
69   
70  1 writer.close();
71    }
72   
73    // Test the case where mergeFactor changes
 
74  1 toggle public void testMergeFactorChange() throws IOException {
75  1 Directory dir = new RAMDirectory();
76   
77  1 IndexWriter writer = new IndexWriter(dir, new WhitespaceAnalyzer(), true);
78  1 writer.setMaxBufferedDocs(10);
79  1 writer.setMergeFactor(100);
80   
81  251 for (int i = 0; i < 250; i++) {
82  250 addDoc(writer);
83  250 checkInvariants(writer);
84    }
85   
86  1 writer.setMergeFactor(5);
87   
88    // merge policy only fixes segments on levels where merges
89    // have been triggered, so check invariants after all adds
90  11 for (int i = 0; i < 10; i++) {
91  10 addDoc(writer);
92    }
93  1 checkInvariants(writer);
94   
95  1 writer.close();
96    }
97   
98    // Test the case where both mergeFactor and maxBufferedDocs change
 
99  1 toggle public void testMaxBufferedDocsChange() throws IOException {
100  1 Directory dir = new RAMDirectory();
101   
102  1 IndexWriter writer = new IndexWriter(dir, new WhitespaceAnalyzer(), true);
103  1 writer.setMaxBufferedDocs(101);
104  1 writer.setMergeFactor(101);
105   
106    // leftmost* segment has 1 doc
107    // rightmost* segment has 100 docs
108  101 for (int i = 1; i <= 100; i++) {
109  5150 for (int j = 0; j < i; j++) {
110  5050 addDoc(writer);
111  5050 checkInvariants(writer);
112    }
113  100 writer.close();
114   
115  100 writer = new IndexWriter(dir, new WhitespaceAnalyzer(), false);
116  100 writer.setMaxBufferedDocs(101);
117  100 writer.setMergeFactor(101);
118    }
119   
120  1 writer.setMaxBufferedDocs(10);
121  1 writer.setMergeFactor(10);
122   
123    // merge policy only fixes segments on levels where merges
124    // have been triggered, so check invariants after all adds
125  101 for (int i = 0; i < 100; i++) {
126  100 addDoc(writer);
127    }
128  1 checkInvariants(writer);
129   
130  901 for (int i = 100; i < 1000; i++) {
131  900 addDoc(writer);
132    }
133  1 checkInvariants(writer);
134   
135  1 writer.close();
136    }
137   
138    // Test the case where a merge results in no doc at all
 
139  1 toggle public void testMergeDocCount0() throws IOException {
140  1 Directory dir = new RAMDirectory();
141   
142  1 IndexWriter writer = new IndexWriter(dir, new WhitespaceAnalyzer(), true);
143  1 writer.setMaxBufferedDocs(10);
144  1 writer.setMergeFactor(100);
145   
146  251 for (int i = 0; i < 250; i++) {
147  250 addDoc(writer);
148  250 checkInvariants(writer);
149    }
150  1 writer.close();
151   
152  1 IndexReader reader = IndexReader.open(dir);
153  1 reader.deleteDocuments(new Term("content", "aaa"));
154  1 reader.close();
155   
156  1