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/10/29 21:32:36 UTC

svn commit: r1194987 - in /lucene/dev/branches/lucene2621/lucene/src/test/org/apache/lucene/index: TestPerFieldCodecSupport.java codecs/perfield/ codecs/perfield/TestPerFieldPostingsFormat.java

Author: rmuir
Date: Sat Oct 29 19:32:36 2011
New Revision: 1194987

URL: http://svn.apache.org/viewvc?rev=1194987&view=rev
Log:
LUCENE-3490: fix test

Added:
    lucene/dev/branches/lucene2621/lucene/src/test/org/apache/lucene/index/codecs/perfield/
    lucene/dev/branches/lucene2621/lucene/src/test/org/apache/lucene/index/codecs/perfield/TestPerFieldPostingsFormat.java
      - copied, changed from r1190532, lucene/dev/branches/lucene2621/lucene/src/test/org/apache/lucene/index/TestPerFieldCodecSupport.java
Removed:
    lucene/dev/branches/lucene2621/lucene/src/test/org/apache/lucene/index/TestPerFieldCodecSupport.java

Copied: lucene/dev/branches/lucene2621/lucene/src/test/org/apache/lucene/index/codecs/perfield/TestPerFieldPostingsFormat.java (from r1190532, lucene/dev/branches/lucene2621/lucene/src/test/org/apache/lucene/index/TestPerFieldCodecSupport.java)
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2621/lucene/src/test/org/apache/lucene/index/codecs/perfield/TestPerFieldPostingsFormat.java?p2=lucene/dev/branches/lucene2621/lucene/src/test/org/apache/lucene/index/codecs/perfield/TestPerFieldPostingsFormat.java&p1=lucene/dev/branches/lucene2621/lucene/src/test/org/apache/lucene/index/TestPerFieldCodecSupport.java&r1=1190532&r2=1194987&rev=1194987&view=diff
==============================================================================
--- lucene/dev/branches/lucene2621/lucene/src/test/org/apache/lucene/index/TestPerFieldCodecSupport.java (original)
+++ lucene/dev/branches/lucene2621/lucene/src/test/org/apache/lucene/index/codecs/perfield/TestPerFieldPostingsFormat.java Sat Oct 29 19:32:36 2011
@@ -1,4 +1,4 @@
-package org.apache.lucene.index;
+package org.apache.lucene.index.codecs.perfield;
 
 /**
  * Licensed to the Apache Software Foundation (ASF) under one or more
@@ -25,17 +25,21 @@ import org.apache.lucene.document.Field;
 import org.apache.lucene.document.FieldType;
 import org.apache.lucene.document.StringField;
 import org.apache.lucene.document.TextField;
+import org.apache.lucene.index.CorruptIndexException;
+import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.index.IndexWriter;
+import org.apache.lucene.index.IndexWriterConfig;
+import org.apache.lucene.index.LogDocMergePolicy;
+import org.apache.lucene.index.Term;
 import org.apache.lucene.index.CheckIndex.Status.SegmentInfoStatus;
 import org.apache.lucene.index.CheckIndex.Status;
 import org.apache.lucene.index.IndexWriterConfig.OpenMode;
+import org.apache.lucene.index.codecs.Codec;
 import org.apache.lucene.index.codecs.PostingsFormat;
 import org.apache.lucene.index.codecs.CodecProvider;
+import org.apache.lucene.index.codecs.lucene40.Lucene40Codec;
 import org.apache.lucene.index.codecs.lucene40.Lucene40PostingsFormat;
-import org.apache.lucene.index.codecs.mockintblock.MockFixedIntBlockPostingsFormat;
-import org.apache.lucene.index.codecs.mockintblock.MockVariableIntBlockPostingsFormat;
 import org.apache.lucene.index.codecs.mocksep.MockSepPostingsFormat;
-import org.apache.lucene.index.codecs.perfield.SegmentFormats;
-import org.apache.lucene.index.codecs.pulsing.PulsingPostingsFormat;
 import org.apache.lucene.index.codecs.simpletext.SimpleTextPostingsFormat;
 import org.apache.lucene.search.IndexSearcher;
 import org.apache.lucene.search.TermQuery;
@@ -49,7 +53,7 @@ import org.junit.Test;
  * 
  *
  */
-public class TestPerFieldCodecSupport extends LuceneTestCase {
+public class TestPerFieldPostingsFormat extends LuceneTestCase {
 
   private IndexWriter newWriter(Directory dir, IndexWriterConfig conf)
       throws IOException {
@@ -89,7 +93,7 @@ public class TestPerFieldCodecSupport ex
   }
 
   /*
-   * Test is hetrogenous index segements are merge sucessfully
+   * Test that heterogeneous index segments are merge successfully
    */
   @Test
   public void testMergeUnusedPerFieldCodec() throws IOException {
@@ -116,6 +120,7 @@ public class TestPerFieldCodecSupport ex
   /*
    * Test that heterogeneous index segments are merged sucessfully
    */
+  // TODO: not sure this test is that great, we should probably peek inside PerFieldPostingsFormat or something?!
   @Test
   public void testChangeCodecAndMerge() throws IOException {
     Directory dir = newDirectory();
@@ -141,8 +146,9 @@ public class TestPerFieldCodecSupport ex
 
     assertQuery(new Term("content", "ccc"), dir, 10, provider);
     assertQuery(new Term("content", "aaa"), dir, 10, provider);
+    Lucene40Codec codec = (Lucene40Codec)provider.getDefaultCodec();
     assertCodecPerField(_TestUtil.checkIndex(dir, provider), "content",
-        provider.lookup("MockSep"));
+        codec.getPostingsFormat("MockSep"));
 
     iwconf = newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random))
         .setOpenMode(OpenMode.APPEND).setCodecProvider(provider);
@@ -159,8 +165,9 @@ public class TestPerFieldCodecSupport ex
     }
     addDocs2(writer, 10);
     writer.commit();
-    PostingsFormat origContentCodec = provider.lookup("MockSep");
-    PostingsFormat newContentCodec = provider.lookup("Standard");
+    codec = (Lucene40Codec)provider.getDefaultCodec();
+    PostingsFormat origContentCodec = codec.getPostingsFormat("MockSep");
+    PostingsFormat newContentCodec = codec.getPostingsFormat("Lucene40");
     assertHybridCodecPerField(_TestUtil.checkIndex(dir, provider), "content",
         origContentCodec, origContentCodec, newContentCodec);
     assertEquals(30, writer.maxDoc());
@@ -196,15 +203,15 @@ public class TestPerFieldCodecSupport ex
   public void assertCodecPerFieldOptimized(Status checkIndex, String field,
       PostingsFormat codec) {
     assertEquals(1, checkIndex.segmentInfos.size());
-    final CodecProvider provider = checkIndex.segmentInfos.get(0).codec.provider;
-    assertEquals(codec, provider.lookup(provider.getFieldCodec(field)));
+    final Lucene40Codec codecInfo = (Lucene40Codec) checkIndex.segmentInfos.get(0).codec;
+    assertEquals(codec.name, codecInfo.getPostingsFormatForField(field));
 
   }
 
   public void assertCodecPerField(Status checkIndex, String field, PostingsFormat codec) {
     for (SegmentInfoStatus info : checkIndex.segmentInfos) {
-      final CodecProvider provider = info.codec.provider;
-      assertEquals(codec, provider.lookup(provider.getFieldCodec(field)));
+      final Lucene40Codec codecInfo = (Lucene40Codec) info.codec;
+      assertEquals(codec.name, codecInfo.getPostingsFormatForField(field));
     }
   }
 
@@ -213,13 +220,9 @@ public class TestPerFieldCodecSupport ex
     List<SegmentInfoStatus> segmentInfos = checkIndex.segmentInfos;
     assertEquals(segmentInfos.size(), codec.length);
     for (int i = 0; i < codec.length; i++) {
-      SegmentFormats codecInfo = segmentInfos.get(i).codec;
-      FieldInfos fieldInfos = new FieldInfos(checkIndex.dir, IndexFileNames
-          .segmentFileName(segmentInfos.get(i).name, "",
-              IndexFileNames.FIELD_INFOS_EXTENSION));
-      FieldInfo fieldInfo = fieldInfos.fieldInfo(field);
-      assertEquals("faild for segment index: " + i, codec[i],
-          codecInfo.codecs[fieldInfo.getCodecId()]);
+      Lucene40Codec codecInfo = (Lucene40Codec) segmentInfos.get(i).codec;
+      assertEquals("failed for segment index: " + i, codec[i].name,
+          codecInfo.getPostingsFormatForField(field));
     }
   }
 
@@ -228,8 +231,7 @@ public class TestPerFieldCodecSupport ex
     if (VERBOSE) {
       System.out.println("\nTEST: assertQuery " + t);
     }
-    IndexReader reader = IndexReader.open(dir, null, true,
-        IndexReader.DEFAULT_TERMS_INDEX_DIVISOR, codecs);
+    IndexReader reader = IndexReader.open(dir, null, true, 1, codecs);
     IndexSearcher searcher = newSearcher(reader);
     TopDocs search = searcher.search(new TermQuery(t), num + 10);
     assertEquals(num, search.totalHits);
@@ -239,32 +241,81 @@ public class TestPerFieldCodecSupport ex
   }
 
   public static class MockCodecProvider extends CodecProvider {
+    final PostingsFormat lucene40 = new Lucene40PostingsFormat();
+    final PostingsFormat simpleText = new SimpleTextPostingsFormat();
+    final PostingsFormat mockSep = new MockSepPostingsFormat();
+    
+    final Codec codec = new Lucene40Codec() {
+      @Override
+      public PostingsFormat getPostingsFormat(String formatName) {
+        if (formatName.equals(lucene40.name)) {
+          return lucene40;
+        } else if (formatName.equals(simpleText.name)) {
+          return simpleText;
+        } else if (formatName.equals(mockSep.name)) {
+          return mockSep;
+        } else {
+          throw new IllegalArgumentException("unknown postings format: " + formatName);
+        }
+      }
+
+      @Override
+      public String getPostingsFormatForField(String field) {
+        if (field.equals("id")) {
+          return simpleText.name;
+        } else if (field.equals("content")) {
+          return mockSep.name;
+        } else {
+          return lucene40.name;
+        }
+      }   
+    };
+    
+    @Override
+    public Codec lookup(String name) {
+      return codec;
+    }
 
-    public MockCodecProvider() {
-      Lucene40PostingsFormat standardCodec = new Lucene40PostingsFormat();
-      setDefaultFieldCodec(standardCodec.name);
-      SimpleTextPostingsFormat simpleTextCodec = new SimpleTextPostingsFormat();
-      MockSepPostingsFormat mockSepCodec = new MockSepPostingsFormat();
-      register(standardCodec);
-      register(mockSepCodec);
-      register(simpleTextCodec);
-      setFieldCodec("id", simpleTextCodec.name);
-      setFieldCodec("content", mockSepCodec.name);
+    @Override
+    public Codec getDefaultCodec() {
+      return codec;
     }
   }
 
   public static class MockCodecProvider2 extends CodecProvider {
+    final PostingsFormat lucene40 = new Lucene40PostingsFormat();
+    final PostingsFormat simpleText = new SimpleTextPostingsFormat();
+    
+    final Codec codec = new Lucene40Codec() {
+      @Override
+      public PostingsFormat getPostingsFormat(String formatName) {
+        if (formatName.equals(lucene40.name)) {
+          return lucene40;
+        } else if (formatName.equals(simpleText.name)) {
+          return simpleText;
+        } else {
+          throw new IllegalArgumentException("unknown postings format: " + formatName);
+        }
+      }
+
+      @Override
+      public String getPostingsFormatForField(String field) {
+        if (field.equals("id")) {
+          return simpleText.name;
+        } else {
+          return lucene40.name;
+        }
+      }   
+    };
+    
+    @Override
+    public Codec lookup(String name) {
+      return codec;
+    }
 
-    public MockCodecProvider2() {
-      Lucene40PostingsFormat standardCodec = new Lucene40PostingsFormat();
-      setDefaultFieldCodec(standardCodec.name);
-      SimpleTextPostingsFormat simpleTextCodec = new SimpleTextPostingsFormat();
-      MockSepPostingsFormat mockSepCodec = new MockSepPostingsFormat();
-      register(standardCodec);
-      register(mockSepCodec);
-      register(simpleTextCodec);
-      setFieldCodec("id", simpleTextCodec.name);
-      setFieldCodec("content", standardCodec.name);
+    @Override
+    public Codec getDefaultCodec() {
+      return codec;
     }
   }
 
@@ -277,23 +328,10 @@ public class TestPerFieldCodecSupport ex
     final int docsPerRound = 97;
     int numRounds = atLeast(1);
     for (int i = 0; i < numRounds; i++) {
-      CodecProvider provider = new CodecProvider();
-      PostingsFormat[] codecs = new PostingsFormat[] { new Lucene40PostingsFormat(),
-          new SimpleTextPostingsFormat(), new MockSepPostingsFormat(),
-          new PulsingPostingsFormat(1 + random.nextInt(20)),
-          new MockVariableIntBlockPostingsFormat(1 + random.nextInt(10)),
-          new MockFixedIntBlockPostingsFormat(1 + random.nextInt(10)) };
-      for (PostingsFormat codec : codecs) {
-        provider.register(codec);
-      }
       int num = _TestUtil.nextInt(random, 30, 60);
-      for (int j = 0; j < num; j++) {
-        provider.setFieldCodec("" + j, codecs[random.nextInt(codecs.length)].name);
-      }
       IndexWriterConfig config = newIndexWriterConfig(random,
           TEST_VERSION_CURRENT, new MockAnalyzer(random));
       config.setOpenMode(OpenMode.CREATE_OR_APPEND);
-      config.setCodecProvider(provider);
       IndexWriter writer = newWriter(dir, config);
       for (int j = 0; j < docsPerRound; j++) {
         final Document doc = new Document();