Clover Coverage Report
Coverage timestamp: Fri May 9 2008 10:54:27 EST
109   198   12   10.9
2   154   0.11   10
10     1.2  
1    
 
  TestParallelReader       Line # 39 109 12 99.2% 0.9917355
 
  (4)
 
1    package org.apache.lucene.index;
2   
3    /**
4    * Copyright 2005 The Apache Software Foundation
5    *
6    * Licensed under the Apache License, Version 2.0 (the "License");
7    * you may not use this file except in compliance with the License.
8    * You may obtain a copy of the License at
9    *
10    * http://www.apache.org/licenses/LICENSE-2.0
11    *
12    * Unless required by applicable law or agreed to in writing, software
13    * distributed under the License is distributed on an "AS IS" BASIS,
14    * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15    * See the License for the specific language governing permissions and
16    * limitations under the License.
17    */
18   
19    import java.io.IOException;
20    import java.util.Arrays;
21    import java.util.Collection;
22   
23    import junit.framework.TestCase;
24   
25    import org.apache.lucene.analysis.standard.StandardAnalyzer;
26    import org.apache.lucene.document.Document;
27    import org.apache.lucene.document.Field;
28    import org.apache.lucene.document.MapFieldSelector;
29    import org.apache.lucene.search.BooleanQuery;
30    import org.apache.lucene.search.Hits;
31    import org.apache.lucene.search.IndexSearcher;
32    import org.apache.lucene.search.Query;
33    import org.apache.lucene.search.Searcher;
34    import org.apache.lucene.search.TermQuery;
35    import org.apache.lucene.search.BooleanClause.Occur;
36    import org.apache.lucene.store.Directory;
37    import org.apache.lucene.store.RAMDirectory;
38   
 
39    public class TestParallelReader extends TestCase {
40   
41    private Searcher parallel;
42    private Searcher single;
43   
 
44  4 toggle protected void setUp() throws Exception {
45  4 single = single();
46  4 parallel = parallel();
47    }
48   
 
49  1 toggle public void testQueries() throws Exception {
50  1 queryTest(new TermQuery(new Term("f1", "v1")));
51  1 queryTest(new TermQuery(new Term("f1", "v2")));
52  1 queryTest(new TermQuery(new Term("f2", "v1")));
53  1 queryTest(new TermQuery(new Term("f2", "v2")));
54  1 queryTest(new TermQuery(new Term("f3", "v1")));
55  1 queryTest(new TermQuery(new Term("f3", "v2")));
56  1 queryTest(new TermQuery(new Term("f4", "v1")));
57  1 queryTest(new TermQuery(new Term("f4", "v2")));
58   
59  1 BooleanQuery bq1 = new BooleanQuery();
60  1 bq1.add(new TermQuery(new Term("f1", "v1")), Occur.MUST);
61  1 bq1.add(new TermQuery(new Term("f4", "v1")), Occur.MUST);
62  1 queryTest(bq1);
63    }
64   
 
65  1 toggle public void testFieldNames() throws Exception {
66  1 Directory dir1 = getDir1();
67  1 Directory dir2 = getDir2();
68  1 ParallelReader pr = new ParallelReader();
69  1 pr.add(IndexReader.open(dir1));
70  1 pr.add(IndexReader.open(dir2));
71  1 Collection fieldNames = pr.getFieldNames(IndexReader.FieldOption.ALL);
72  1 assertEquals(4, fieldNames.size());
73  1 assertTrue(fieldNames.contains("f1"));
74  1 assertTrue(fieldNames.contains("f2"));
75  1 assertTrue(fieldNames.contains("f3"));
76  1 assertTrue(fieldNames.contains("f4"));
77    }
78   
 
79  1 toggle public void testDocument() throws IOException {
80  1 Directory dir1 = getDir1();
81  1 Directory dir2 = getDir2();
82  1 ParallelReader pr = new ParallelReader();
83  1 pr.add(IndexReader.open(dir1));
84  1 pr.add(IndexReader.open(dir2));
85   
86  1 Document doc11 = pr.document(0, new MapFieldSelector(new String[] {"f1"}));
87  1 Document doc24 = pr.document(1, new MapFieldSelector(Arrays.asList(new String[] {"f4"})));
88  1 Document doc223 = pr.document(1, new MapFieldSelector(new String[] {"f2", "f3"}));
89   
90  1 assertEquals(1, doc11.getFields().size());
91  1 assertEquals(1, doc24.getFields().size());
92  1 assertEquals(2, doc223.getFields().size());
93   
94  1 assertEquals("v1", doc11.get("f1"));
95  1 assertEquals("v2", doc24.get("f4"));
96  1 assertEquals("v2", doc223.get("f2"));
97  1 assertEquals("v2", doc223.get("f3"));
98    }
99   
 
100  1 toggle public void testIncompatibleIndexes() throws IOException {
101    // two documents:
102  1 Directory dir1 = getDir1();
103   
104    // one document only:
105  1 Directory dir2 = new RAMDirectory();
106  1 IndexWriter w2 = new IndexWriter(dir2, new StandardAnalyzer(), true);
107  1 Document d3 = new Document();
108  1 d3.add(new Field("f3", "v1", Field.Store.YES, Field.Index.TOKENIZED));
109  1 w2.addDocument(d3);
110  1 w2.close();
111   
112  1 ParallelReader pr = new ParallelReader();
113  1 pr.add(IndexReader.open(dir1));
114  1 try {
115  1 pr.add(IndexReader.open(dir2));
116  0 fail("didn't get exptected exception: indexes don't have same number of documents");
117    } catch (IllegalArgumentException e) {
118    // expected exception
119    }
120    }
121   
 
122  9 toggle private void queryTest(Query query) throws IOException {
123  9 Hits parallelHits = parallel.search(query);
124  9 Hits singleHits = single.search(query);
125  9 assertEquals(parallelHits.length(), singleHits.length());
126  18 for(int i = 0; i < parallelHits.length(); i++) {
127  9 assertEquals(parallelHits.score(i), singleHits.score(i), 0.001f);
128  9 Document docParallel = parallelHits.doc(i);
129  9 Document docSingle = singleHits.doc(i);
130  9 assertEquals(docParallel.get("f1"), docSingle.get("f1"));
131  9 assertEquals(docParallel.get("f2"), docSingle.get("f2"));
132  9 assertEquals(docParallel.get("f3"), docSingle.get("f3"));
133  9 assertEquals(docParallel.get("f4"), docSingle.get("f4"));
134    }
135    }
136   
137    // Fiels 1-4 indexed together:
 
138  4 toggle private Searcher single() throws IOException {
139  4 Directory dir = new RAMDirectory();
140  4 IndexWriter w = new IndexWriter(dir, new StandardAnalyzer(), true);
141  4 Document d1 = new Document();
142  4 d1.add(new Field("f1", "v1", Field.Store.YES, Field.Index.TOKENIZED));
143  4 d1.add(new Field("f2", "v1", Field.Store.YES, Field.Index.TOKENIZED));
144  4 d1.add(new Field("f3", "v1", Field.Store.YES, Field.Index.TOKENIZED));
145  4