You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by rm...@apache.org on 2011/05/01 16:32:27 UTC
svn commit: r1098329 - in /lucene/dev/branches/branch_3x: ./ lucene/
lucene/backwards/
lucene/contrib/xml-query-parser/src/test/org/apache/lucene/xmlparser/
lucene/src/test-framework/org/apache/lucene/index/
lucene/src/test-framework/org/apache/lucene/...
Author: rmuir
Date: Sun May 1 14:32:26 2011
New Revision: 1098329
URL: http://svn.apache.org/viewvc?rev=1098329&view=rev
Log:
LUCENE-3053: improve test coverage for Multi*
Added:
lucene/dev/branches/branch_3x/lucene/src/test-framework/org/apache/lucene/index/SlowMultiReaderWrapper.java (with props)
Modified:
lucene/dev/branches/branch_3x/ (props changed)
lucene/dev/branches/branch_3x/lucene/ (props changed)
lucene/dev/branches/branch_3x/lucene/backwards/ (props changed)
lucene/dev/branches/branch_3x/lucene/contrib/xml-query-parser/src/test/org/apache/lucene/xmlparser/TestParser.java
lucene/dev/branches/branch_3x/lucene/src/test-framework/org/apache/lucene/util/LuceneTestCase.java
lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestCachingSpanFilter.java
lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestCachingWrapperFilter.java
lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestMatchAllDocsQuery.java
lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestNumericRangeQuery32.java
lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestNumericRangeQuery64.java
lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestTermScorer.java
lucene/dev/branches/branch_3x/solr/ (props changed)
Modified: lucene/dev/branches/branch_3x/lucene/contrib/xml-query-parser/src/test/org/apache/lucene/xmlparser/TestParser.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/contrib/xml-query-parser/src/test/org/apache/lucene/xmlparser/TestParser.java?rev=1098329&r1=1098328&r2=1098329&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/contrib/xml-query-parser/src/test/org/apache/lucene/xmlparser/TestParser.java (original)
+++ lucene/dev/branches/branch_3x/lucene/contrib/xml-query-parser/src/test/org/apache/lucene/xmlparser/TestParser.java Sun May 1 14:32:26 2011
@@ -19,6 +19,7 @@ import org.apache.lucene.store.Directory
import org.apache.lucene.util.Version;
import org.apache.lucene.util.LuceneTestCase;
import org.junit.AfterClass;
+import org.junit.Assume;
import org.junit.BeforeClass;
/**
* Licensed to the Apache Software Foundation (ASF) under one or more
@@ -184,6 +185,8 @@ public class TestParser extends LuceneTe
}
public void testDuplicateFilterQueryXML() throws ParserException, IOException
{
+ Assume.assumeTrue(searcher.getIndexReader().getSequentialSubReaders() == null ||
+ searcher.getIndexReader().getSequentialSubReaders().length == 1);
Query q=parse("DuplicateFilterQuery.xml");
int h = searcher.search(q, null, 1000).totalHits;
assertEquals("DuplicateFilterQuery should produce 1 result ", 1,h);
Added: lucene/dev/branches/branch_3x/lucene/src/test-framework/org/apache/lucene/index/SlowMultiReaderWrapper.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/src/test-framework/org/apache/lucene/index/SlowMultiReaderWrapper.java?rev=1098329&view=auto
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/src/test-framework/org/apache/lucene/index/SlowMultiReaderWrapper.java (added)
+++ lucene/dev/branches/branch_3x/lucene/src/test-framework/org/apache/lucene/index/SlowMultiReaderWrapper.java Sun May 1 14:32:26 2011
@@ -0,0 +1,44 @@
+package org.apache.lucene.index;
+
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import java.util.ArrayList;
+
+import org.apache.lucene.util.ReaderUtil;
+
+/**
+ * Acts like Lucene 4.x's SlowMultiReaderWrapper for testing
+ * of top-level MultiTermEnum, MultiTermDocs, ...
+ */
+public class SlowMultiReaderWrapper extends MultiReader {
+
+ public SlowMultiReaderWrapper(IndexReader reader) {
+ super(subReaders(reader));
+ }
+
+ private static IndexReader[] subReaders(IndexReader reader) {
+ ArrayList<IndexReader> list = new ArrayList<IndexReader>();
+ ReaderUtil.gatherSubReaders(list, reader);
+ return list.toArray(new IndexReader[list.size()]);
+ }
+
+ @Override
+ public IndexReader[] getSequentialSubReaders() {
+ return null;
+ }
+}
Modified: lucene/dev/branches/branch_3x/lucene/src/test-framework/org/apache/lucene/util/LuceneTestCase.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/src/test-framework/org/apache/lucene/util/LuceneTestCase.java?rev=1098329&r1=1098328&r2=1098329&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/src/test-framework/org/apache/lucene/util/LuceneTestCase.java (original)
+++ lucene/dev/branches/branch_3x/lucene/src/test-framework/org/apache/lucene/util/LuceneTestCase.java Sun May 1 14:32:26 2011
@@ -44,6 +44,7 @@ import org.apache.lucene.index.LogByteSi
import org.apache.lucene.index.LogDocMergePolicy;
import org.apache.lucene.index.LogMergePolicy;
import org.apache.lucene.index.SerialMergeScheduler;
+import org.apache.lucene.index.SlowMultiReaderWrapper;
import org.apache.lucene.search.BooleanQuery;
import org.apache.lucene.search.FieldCache.CacheEntry;
import org.apache.lucene.search.FieldCache;
@@ -942,8 +943,21 @@ public abstract class LuceneTestCase ext
/** create a new searcher over the reader.
* This searcher might randomly use threads. */
public static IndexSearcher newSearcher(IndexReader r) throws IOException {
+ return newSearcher(r, true);
+ }
+
+ /** create a new searcher over the reader.
+ * This searcher might randomly use threads.
+ * if <code>maybeWrap</code> is true, this searcher might wrap the reader
+ * with one that returns null for getSequentialSubReaders.
+ */
+ public static IndexSearcher newSearcher(IndexReader r, boolean maybeWrap) throws IOException {
if (random.nextBoolean()) {
- return new IndexSearcher(r);
+ if (maybeWrap && random.nextBoolean()) {
+ return new IndexSearcher(new SlowMultiReaderWrapper(r));
+ } else {
+ return new IndexSearcher(r);
+ }
} else {
int threads = 0;
final ExecutorService ex = (random.nextBoolean()) ? null
Modified: lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestCachingSpanFilter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestCachingSpanFilter.java?rev=1098329&r1=1098328&r2=1098329&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestCachingSpanFilter.java (original)
+++ lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestCachingSpanFilter.java Sun May 1 14:32:26 2011
@@ -50,7 +50,8 @@ public class TestCachingSpanFilter exten
// but we use .reopen on this reader below and expect to
// (must) get an NRT reader:
IndexReader reader = IndexReader.open(writer.w, true);
- IndexSearcher searcher = newSearcher(reader);
+ // same reason we don't wrap?
+ IndexSearcher searcher = newSearcher(reader, false);
// add a doc, refresh the reader, and check that its there
Document doc = new Document();
@@ -59,7 +60,7 @@ public class TestCachingSpanFilter exten
reader = refreshReader(reader);
searcher.close();
- searcher = newSearcher(reader);
+ searcher = newSearcher(reader, false);
TopDocs docs = searcher.search(new MatchAllDocsQuery(), 1);
assertEquals("Should find a hit...", 1, docs.totalHits);
@@ -80,7 +81,7 @@ public class TestCachingSpanFilter exten
reader = refreshReader(reader);
searcher.close();
- searcher = newSearcher(reader);
+ searcher = newSearcher(reader, false);
docs = searcher.search(new MatchAllDocsQuery(), filter, 1);
assertEquals("[query + filter] Should *not* find a hit...", 0, docs.totalHits);
@@ -95,7 +96,7 @@ public class TestCachingSpanFilter exten
writer.addDocument(doc);
reader = refreshReader(reader);
searcher.close();
- searcher = newSearcher(reader);
+ searcher = newSearcher(reader, false);
docs = searcher.search(new MatchAllDocsQuery(), filter, 1);
assertEquals("[query + filter] Should find a hit...", 1, docs.totalHits);
@@ -114,7 +115,7 @@ public class TestCachingSpanFilter exten
reader = refreshReader(reader);
assertTrue(reader != oldReader);
searcher.close();
- searcher = newSearcher(reader);
+ searcher = newSearcher(reader, false);
int missCount = filter.missCount;
docs = searcher.search(constantScore, 1);
assertEquals("[just filter] Should find a hit...", 1, docs.totalHits);
@@ -125,7 +126,7 @@ public class TestCachingSpanFilter exten
reader = refreshReader(reader);
searcher.close();
- searcher = newSearcher(reader);
+ searcher = newSearcher(reader, false);
docs = searcher.search(new MatchAllDocsQuery(), filter, 1);
assertEquals("[query + filter] Should *not* find a hit...", 0, docs.totalHits);
Modified: lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestCachingWrapperFilter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestCachingWrapperFilter.java?rev=1098329&r1=1098328&r2=1098329&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestCachingWrapperFilter.java (original)
+++ lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestCachingWrapperFilter.java Sun May 1 14:32:26 2011
@@ -166,7 +166,8 @@ public class TestCachingWrapperFilter ex
// but we use .reopen on this reader below and expect to
// (must) get an NRT reader:
IndexReader reader = IndexReader.open(writer.w, true);
- IndexSearcher searcher = newSearcher(reader);
+ // same reason we don't wrap?
+ IndexSearcher searcher = newSearcher(reader, false);
// add a doc, refresh the reader, and check that its there
Document doc = new Document();
@@ -175,7 +176,7 @@ public class TestCachingWrapperFilter ex
reader = refreshReader(reader);
searcher.close();
- searcher = newSearcher(reader);
+ searcher = newSearcher(reader, false);
TopDocs docs = searcher.search(new MatchAllDocsQuery(), 1);
assertEquals("Should find a hit...", 1, docs.totalHits);
@@ -196,7 +197,7 @@ public class TestCachingWrapperFilter ex
reader = refreshReader(reader);
searcher.close();
- searcher = newSearcher(reader);
+ searcher = newSearcher(reader, false);
docs = searcher.search(new MatchAllDocsQuery(), filter, 1);
assertEquals("[query + filter] Should *not* find a hit...", 0, docs.totalHits);
@@ -212,7 +213,7 @@ public class TestCachingWrapperFilter ex
reader = refreshReader(reader);
searcher.close();
- searcher = newSearcher(reader);
+ searcher = newSearcher(reader, false);
docs = searcher.search(new MatchAllDocsQuery(), filter, 1);
@@ -232,7 +233,7 @@ public class TestCachingWrapperFilter ex
reader = refreshReader(reader);
assertTrue(reader != oldReader);
searcher.close();
- searcher = newSearcher(reader);
+ searcher = newSearcher(reader, false);
int missCount = filter.missCount;
docs = searcher.search(constantScore, 1);
assertEquals("[just filter] Should find a hit...", 1, docs.totalHits);
@@ -243,7 +244,7 @@ public class TestCachingWrapperFilter ex
reader = refreshReader(reader);
searcher.close();
- searcher = newSearcher(reader);
+ searcher = newSearcher(reader, false);
missCount = filter.missCount;
docs = searcher.search(new MatchAllDocsQuery(), filter, 1);
@@ -259,7 +260,7 @@ public class TestCachingWrapperFilter ex
writer.addDocument(doc);
reader = refreshReader(reader);
searcher.close();
- searcher = newSearcher(reader);
+ searcher = newSearcher(reader, false);
docs = searcher.search(new MatchAllDocsQuery(), filter, 1);
assertEquals("[query + filter] Should find a hit...", 1, docs.totalHits);
@@ -272,7 +273,7 @@ public class TestCachingWrapperFilter ex
reader = refreshReader(reader);
searcher.close();
- searcher = newSearcher(reader);
+ searcher = newSearcher(reader, false);
docs = searcher.search(new MatchAllDocsQuery(), filter, 1);
assertEquals("[query + filter] Should *not* find a hit...", 0, docs.totalHits);
Modified: lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestMatchAllDocsQuery.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestMatchAllDocsQuery.java?rev=1098329&r1=1098328&r2=1098329&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestMatchAllDocsQuery.java (original)
+++ lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestMatchAllDocsQuery.java Sun May 1 14:32:26 2011
@@ -54,9 +54,9 @@ public class TestMatchAllDocsQuery exten
hits = is.search(new MatchAllDocsQuery(), null, 1000).scoreDocs;
assertEquals(3, hits.length);
- assertEquals("one", ir.document(hits[0].doc).get("key"));
- assertEquals("two", ir.document(hits[1].doc).get("key"));
- assertEquals("three four", ir.document(hits[2].doc).get("key"));
+ assertEquals("one", is.doc(hits[0].doc).get("key"));
+ assertEquals("two", is.doc(hits[1].doc).get("key"));
+ assertEquals("three four", is.doc(hits[2].doc).get("key"));
// assert with norms scoring turned on
@@ -64,19 +64,19 @@ public class TestMatchAllDocsQuery exten
hits = is.search(normsQuery, null, 1000).scoreDocs;
assertEquals(3, hits.length);
- assertEquals("three four", ir.document(hits[0].doc).get("key"));
- assertEquals("two", ir.document(hits[1].doc).get("key"));
- assertEquals("one", ir.document(hits[2].doc).get("key"));
+ assertEquals("three four", is.doc(hits[0].doc).get("key"));
+ assertEquals("two", is.doc(hits[1].doc).get("key"));
+ assertEquals("one", is.doc(hits[2].doc).get("key"));
// change norm & retest
- ir.setNorm(0, "key", 400f);
+ is.getIndexReader().setNorm(0, "key", is.getSimilarity().encodeNormValue(400f));
normsQuery = new MatchAllDocsQuery("key");
hits = is.search(normsQuery, null, 1000).scoreDocs;
assertEquals(3, hits.length);
- assertEquals("one", ir.document(hits[0].doc).get("key"));
- assertEquals("three four", ir.document(hits[1].doc).get("key"));
- assertEquals("two", ir.document(hits[2].doc).get("key"));
+ assertEquals("one", is.doc(hits[0].doc).get("key"));
+ assertEquals("three four", is.doc(hits[1].doc).get("key"));
+ assertEquals("two", is.doc(hits[2].doc).get("key"));
// some artificial queries to trigger the use of skipTo():
@@ -93,7 +93,7 @@ public class TestMatchAllDocsQuery exten
assertEquals(1, hits.length);
// delete a document:
- ir.deleteDocument(0);
+ is.getIndexReader().deleteDocument(0);
hits = is.search(new MatchAllDocsQuery(), null, 1000).scoreDocs;
assertEquals(2, hits.length);
Modified: lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestNumericRangeQuery32.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestNumericRangeQuery32.java?rev=1098329&r1=1098328&r2=1098329&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestNumericRangeQuery32.java (original)
+++ lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestNumericRangeQuery32.java Sun May 1 14:32:26 2011
@@ -150,7 +150,9 @@ public class TestNumericRangeQuery32 ext
assertEquals("First doc"+type, 2*distance+startOffset, Integer.parseInt(doc.get(field)) );
doc=searcher.doc(sd[sd.length-1].doc);
assertEquals("Last doc"+type, (1+count)*distance+startOffset, Integer.parseInt(doc.get(field)) );
- if (i>0 && searcher.getIndexReader().getSequentialSubReaders().length == 1) {
+ if (i>0 &&
+ (searcher.getIndexReader().getSequentialSubReaders() == null ||
+ searcher.getIndexReader().getSequentialSubReaders().length == 1)) {
assertEquals("Distinct term number is equal for all query types", lastTerms, terms);
}
lastTerms = terms;
@@ -369,7 +371,9 @@ public class TestNumericRangeQuery32 ext
termCountT += tq.getTotalNumberOfTerms();
termCountC += cq.getTotalNumberOfTerms();
}
- if (precisionStep == Integer.MAX_VALUE && searcher.getIndexReader().getSequentialSubReaders().length == 1) {
+ if (precisionStep == Integer.MAX_VALUE &&
+ (searcher.getIndexReader().getSequentialSubReaders() == null ||
+ searcher.getIndexReader().getSequentialSubReaders().length == 1)) {
assertEquals("Total number of terms should be equal for unlimited precStep", termCountT, termCountC);
} else if (VERBOSE) {
System.out.println("Average number of terms during random search on '" + field + "':");
Modified: lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestNumericRangeQuery64.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestNumericRangeQuery64.java?rev=1098329&r1=1098328&r2=1098329&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestNumericRangeQuery64.java (original)
+++ lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestNumericRangeQuery64.java Sun May 1 14:32:26 2011
@@ -153,7 +153,9 @@ public class TestNumericRangeQuery64 ext
assertEquals("First doc"+type, 2*distance+startOffset, Long.parseLong(doc.get(field)) );
doc=searcher.doc(sd[sd.length-1].doc);
assertEquals("Last doc"+type, (1+count)*distance+startOffset, Long.parseLong(doc.get(field)) );
- if (i>0 && searcher.getIndexReader().getSequentialSubReaders().length == 1) {
+ if (i>0 &&
+ (searcher.getIndexReader().getSequentialSubReaders() == null ||
+ searcher.getIndexReader().getSequentialSubReaders().length == 1)) {
assertEquals("Distinct term number is equal for all query types", lastTerms, terms);
}
lastTerms = terms;
@@ -388,7 +390,9 @@ public class TestNumericRangeQuery64 ext
termCountT += tq.getTotalNumberOfTerms();
termCountC += cq.getTotalNumberOfTerms();
}
- if (precisionStep == Integer.MAX_VALUE && searcher.getIndexReader().getSequentialSubReaders().length == 1) {
+ if (precisionStep == Integer.MAX_VALUE &&
+ (searcher.getIndexReader().getSequentialSubReaders() == null ||
+ searcher.getIndexReader().getSequentialSubReaders().length == 1)) {
assertEquals("Total number of terms should be equal for unlimited precStep", termCountT, termCountC);
} else if (VERBOSE) {
System.out.println("Average number of terms during random search on '" + field + "':");
Modified: lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestTermScorer.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestTermScorer.java?rev=1098329&r1=1098328&r2=1098329&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestTermScorer.java (original)
+++ lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestTermScorer.java Sun May 1 14:32:26 2011
@@ -151,7 +151,10 @@ public class TestTermScorer extends Luce
Weight weight = termQuery.weight(indexSearcher);
- Scorer ts = weight.scorer(indexSearcher.getIndexReader().getSequentialSubReaders()[0], true, true);
+ IndexReader sub = indexSearcher.getIndexReader().getSequentialSubReaders() == null ?
+ indexSearcher.getIndexReader() : indexSearcher.getIndexReader().getSequentialSubReaders()[0];
+
+ Scorer ts = weight.scorer(sub, true, true);
assertTrue("Didn't skip", ts.advance(3) != DocIdSetIterator.NO_MORE_DOCS);
// The next doc should be doc 5
assertTrue("doc should be number 5", ts.docID() == 5);