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);