You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by mi...@apache.org on 2014/10/07 00:01:52 UTC

svn commit: r1629774 - in /lucene/dev/trunk/lucene: ./ backward-codecs/src/test/org/apache/lucene/codecs/lucene40/ backward-codecs/src/test/org/apache/lucene/codecs/lucene46/ codecs/src/java/org/apache/lucene/codecs/simpletext/ codecs/src/test/org/apac...

Author: mikemccand
Date: Mon Oct  6 22:01:51 2014
New Revision: 1629774

URL: http://svn.apache.org/r1629774
Log:
LUCENE-5992: add SI tests; remove FieldInfos from SegmentInfosWrite.write

Added:
    lucene/dev/trunk/lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene40/TestLucene40SegmentInfoFormat.java   (with props)
    lucene/dev/trunk/lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene46/TestLucene46SegmentInfoFormat.java   (with props)
    lucene/dev/trunk/lucene/codecs/src/test/org/apache/lucene/codecs/simpletext/TestSimpleTextSegmentInfoFormat.java   (with props)
    lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/codecs/lucene50/TestLucene50SegmentInfoFormat.java   (with props)
    lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/index/BaseSegmentInfoFormatTestCase.java   (with props)
Modified:
    lucene/dev/trunk/lucene/CHANGES.txt
    lucene/dev/trunk/lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene40/Lucene40SegmentInfoWriter.java
    lucene/dev/trunk/lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene46/Lucene46SegmentInfoWriter.java
    lucene/dev/trunk/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextSegmentInfoWriter.java
    lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/SegmentInfoWriter.java
    lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/lucene50/Lucene50SegmentInfoWriter.java
    lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/DocumentsWriterPerThread.java
    lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/IndexWriter.java
    lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/codecs/cranky/CrankySegmentInfoFormat.java

Modified: lucene/dev/trunk/lucene/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/CHANGES.txt?rev=1629774&r1=1629773&r2=1629774&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/CHANGES.txt (original)
+++ lucene/dev/trunk/lucene/CHANGES.txt Mon Oct  6 22:01:51 2014
@@ -151,6 +151,8 @@ API Changes
   to return an instance optimized for merging instead of searching.
   (Mike McCandless, Robert Muir)
 
+* LUCENE-5992: Remove FieldInfos from SegmentInfosWriter.write API. (Robert Muir, Mike McCandless)
+
 Bug Fixes
 
 * LUCENE-5650: Enforce read-only access to any path outside the temporary

Modified: lucene/dev/trunk/lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene40/Lucene40SegmentInfoWriter.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene40/Lucene40SegmentInfoWriter.java?rev=1629774&r1=1629773&r2=1629774&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene40/Lucene40SegmentInfoWriter.java (original)
+++ lucene/dev/trunk/lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene40/Lucene40SegmentInfoWriter.java Mon Oct  6 22:01:51 2014
@@ -22,7 +22,6 @@ import java.util.Collections;
 
 import org.apache.lucene.codecs.CodecUtil;
 import org.apache.lucene.codecs.SegmentInfoWriter;
-import org.apache.lucene.index.FieldInfos;
 import org.apache.lucene.index.IndexFileNames;
 import org.apache.lucene.index.SegmentInfo;
 import org.apache.lucene.store.Directory;
@@ -43,7 +42,7 @@ public final class Lucene40SegmentInfoWr
 
   /** Save a single segment's info. */
   @Override
-  public void write(Directory dir, SegmentInfo si, FieldInfos fis, IOContext ioContext) throws IOException {
+  public void write(Directory dir, SegmentInfo si, IOContext ioContext) throws IOException {
     final String fileName = IndexFileNames.segmentFileName(si.name, "", Lucene40SegmentInfoFormat.SI_EXTENSION);
     si.addFile(fileName);
 

Added: lucene/dev/trunk/lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene40/TestLucene40SegmentInfoFormat.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene40/TestLucene40SegmentInfoFormat.java?rev=1629774&view=auto
==============================================================================
--- lucene/dev/trunk/lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene40/TestLucene40SegmentInfoFormat.java (added)
+++ lucene/dev/trunk/lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene40/TestLucene40SegmentInfoFormat.java Mon Oct  6 22:01:51 2014
@@ -0,0 +1,58 @@
+package org.apache.lucene.codecs.lucene40;
+
+/*
+ * 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 org.apache.lucene.codecs.Codec;
+import org.apache.lucene.index.BaseSegmentInfoFormatTestCase;
+import org.apache.lucene.util.Version;
+
+/**
+ * Tests Lucene40InfoFormat
+ */
+public class TestLucene40SegmentInfoFormat extends BaseSegmentInfoFormatTestCase {
+
+  @Override
+  protected Version[] getVersions() {
+    // NOTE: some of these bugfix releases we never actually "wrote",
+    // but staying on the safe side...
+    return new Version[] { 
+        Version.LUCENE_4_0_0_ALPHA, 
+        Version.LUCENE_4_0_0_BETA,
+        Version.LUCENE_4_0_0,
+        Version.LUCENE_4_1_0,
+        Version.LUCENE_4_2_0,
+        Version.LUCENE_4_2_1,
+        Version.LUCENE_4_3_0,
+        Version.LUCENE_4_3_1,
+        Version.LUCENE_4_4_0,
+        Version.LUCENE_4_5_0,
+        Version.LUCENE_4_5_1,
+    };
+  }
+
+  @Override
+  @Deprecated
+  protected void assertIDEquals(byte[] expected, byte[] actual) {
+    assertNull(actual); // we don't support IDs
+  }
+
+  @Override
+  protected Codec getCodec() {
+    return new Lucene40RWCodec();
+  }
+}

Modified: lucene/dev/trunk/lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene46/Lucene46SegmentInfoWriter.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene46/Lucene46SegmentInfoWriter.java?rev=1629774&r1=1629773&r2=1629774&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene46/Lucene46SegmentInfoWriter.java (original)
+++ lucene/dev/trunk/lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene46/Lucene46SegmentInfoWriter.java Mon Oct  6 22:01:51 2014
@@ -21,7 +21,6 @@ import java.io.IOException;
 
 import org.apache.lucene.codecs.CodecUtil;
 import org.apache.lucene.codecs.SegmentInfoWriter;
-import org.apache.lucene.index.FieldInfos;
 import org.apache.lucene.index.IndexFileNames;
 import org.apache.lucene.index.SegmentInfo;
 import org.apache.lucene.store.Directory;
@@ -43,7 +42,7 @@ final class Lucene46SegmentInfoWriter ex
 
   /** Save a single segment's info. */
   @Override
-  public void write(Directory dir, SegmentInfo si, FieldInfos fis, IOContext ioContext) throws IOException {
+  public void write(Directory dir, SegmentInfo si, IOContext ioContext) throws IOException {
     final String fileName = IndexFileNames.segmentFileName(si.name, "", Lucene46SegmentInfoFormat.SI_EXTENSION);
     si.addFile(fileName);
 

Added: lucene/dev/trunk/lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene46/TestLucene46SegmentInfoFormat.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene46/TestLucene46SegmentInfoFormat.java?rev=1629774&view=auto
==============================================================================
--- lucene/dev/trunk/lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene46/TestLucene46SegmentInfoFormat.java (added)
+++ lucene/dev/trunk/lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene46/TestLucene46SegmentInfoFormat.java Mon Oct  6 22:01:51 2014
@@ -0,0 +1,57 @@
+package org.apache.lucene.codecs.lucene46;
+
+/*
+ * 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 org.apache.lucene.codecs.Codec;
+import org.apache.lucene.index.BaseSegmentInfoFormatTestCase;
+import org.apache.lucene.util.Version;
+
+/**
+ * Tests Lucene46InfoFormat
+ */
+public class TestLucene46SegmentInfoFormat extends BaseSegmentInfoFormatTestCase {
+
+  @Override
+  protected Version[] getVersions() {
+    // NOTE: some of these bugfix releases we never actually "wrote",
+    // but staying on the safe side...
+    return new Version[] { 
+        Version.LUCENE_4_6_0,
+        Version.LUCENE_4_6_1,
+        Version.LUCENE_4_7_0,
+        Version.LUCENE_4_7_1,
+        Version.LUCENE_4_7_2,
+        Version.LUCENE_4_8_0,
+        Version.LUCENE_4_8_1,
+        Version.LUCENE_4_9_0,
+        Version.LUCENE_4_10_0,
+        Version.LUCENE_4_10_1
+    };
+  }
+
+  @Override
+  @Deprecated
+  protected void assertIDEquals(byte[] expected, byte[] actual) {
+    assertNull(actual); // we don't support IDs
+  }
+
+  @Override
+  protected Codec getCodec() {
+    return new Lucene46RWCodec();
+  }
+}

Modified: lucene/dev/trunk/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextSegmentInfoWriter.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextSegmentInfoWriter.java?rev=1629774&r1=1629773&r2=1629774&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextSegmentInfoWriter.java (original)
+++ lucene/dev/trunk/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextSegmentInfoWriter.java Mon Oct  6 22:01:51 2014
@@ -22,7 +22,6 @@ import java.util.Map;
 import java.util.Set;
 
 import org.apache.lucene.codecs.SegmentInfoWriter;
-import org.apache.lucene.index.FieldInfos;
 import org.apache.lucene.index.IndexFileNames;
 import org.apache.lucene.index.SegmentInfo;
 import org.apache.lucene.store.Directory;
@@ -51,7 +50,7 @@ public class SimpleTextSegmentInfoWriter
   final static BytesRef SI_ID               = new BytesRef("    id ");
   
   @Override
-  public void write(Directory dir, SegmentInfo si, FieldInfos fis, IOContext ioContext) throws IOException {
+  public void write(Directory dir, SegmentInfo si, IOContext ioContext) throws IOException {
 
     String segFileName = IndexFileNames.segmentFileName(si.name, "", SimpleTextSegmentInfoFormat.SI_EXTENSION);
     si.addFile(segFileName);

Added: lucene/dev/trunk/lucene/codecs/src/test/org/apache/lucene/codecs/simpletext/TestSimpleTextSegmentInfoFormat.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/codecs/src/test/org/apache/lucene/codecs/simpletext/TestSimpleTextSegmentInfoFormat.java?rev=1629774&view=auto
==============================================================================
--- lucene/dev/trunk/lucene/codecs/src/test/org/apache/lucene/codecs/simpletext/TestSimpleTextSegmentInfoFormat.java (added)
+++ lucene/dev/trunk/lucene/codecs/src/test/org/apache/lucene/codecs/simpletext/TestSimpleTextSegmentInfoFormat.java Mon Oct  6 22:01:51 2014
@@ -0,0 +1,39 @@
+package org.apache.lucene.codecs.simpletext;
+
+/*
+ * 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 org.apache.lucene.codecs.Codec;
+import org.apache.lucene.index.BaseSegmentInfoFormatTestCase;
+import org.apache.lucene.util.Version;
+
+/**
+ * Tests SimpleTextSegmentInfoFormat
+ */
+public class TestSimpleTextSegmentInfoFormat extends BaseSegmentInfoFormatTestCase {
+  private final Codec codec = new SimpleTextCodec();
+  
+  @Override
+  protected Version[] getVersions() {
+    return new Version[] { Version.LATEST };
+  }
+
+  @Override
+  protected Codec getCodec() {
+    return codec;
+  }
+}

Modified: lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/SegmentInfoWriter.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/SegmentInfoWriter.java?rev=1629774&r1=1629773&r2=1629774&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/SegmentInfoWriter.java (original)
+++ lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/SegmentInfoWriter.java Mon Oct  6 22:01:51 2014
@@ -19,7 +19,6 @@ package org.apache.lucene.codecs;
 
 import java.io.IOException;
 
-import org.apache.lucene.index.FieldInfos;
 import org.apache.lucene.index.SegmentInfo;
 import org.apache.lucene.store.Directory;
 import org.apache.lucene.store.IOContext;
@@ -39,5 +38,5 @@ public abstract class SegmentInfoWriter 
    * Write {@link SegmentInfo} data. 
    * @throws IOException If an I/O error occurs
    */
-  public abstract void write(Directory dir, SegmentInfo info, FieldInfos fis, IOContext ioContext) throws IOException;
+  public abstract void write(Directory dir, SegmentInfo info, IOContext ioContext) throws IOException;
 }

Modified: lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/lucene50/Lucene50SegmentInfoWriter.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/lucene50/Lucene50SegmentInfoWriter.java?rev=1629774&r1=1629773&r2=1629774&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/lucene50/Lucene50SegmentInfoWriter.java (original)
+++ lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/lucene50/Lucene50SegmentInfoWriter.java Mon Oct  6 22:01:51 2014
@@ -22,7 +22,6 @@ import java.util.Set;
 
 import org.apache.lucene.codecs.CodecUtil;
 import org.apache.lucene.codecs.SegmentInfoWriter;
-import org.apache.lucene.index.FieldInfos;
 import org.apache.lucene.index.IndexFileNames;
 import org.apache.lucene.index.SegmentInfo;
 import org.apache.lucene.store.Directory;
@@ -46,7 +45,7 @@ public class Lucene50SegmentInfoWriter e
 
   /** Save a single segment's info. */
   @Override
-  public void write(Directory dir, SegmentInfo si, FieldInfos fis, IOContext ioContext) throws IOException {
+  public void write(Directory dir, SegmentInfo si, IOContext ioContext) throws IOException {
     final String fileName = IndexFileNames.segmentFileName(si.name, "", Lucene50SegmentInfoFormat.SI_EXTENSION);
     si.addFile(fileName);
 

Modified: lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/DocumentsWriterPerThread.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/DocumentsWriterPerThread.java?rev=1629774&r1=1629773&r2=1629774&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/DocumentsWriterPerThread.java (original)
+++ lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/DocumentsWriterPerThread.java Mon Oct  6 22:01:51 2014
@@ -517,7 +517,7 @@ class DocumentsWriterPerThread {
       // creating CFS so that 1) .si isn't slurped into CFS,
       // and 2) .si reflects useCompoundFile=true change
       // above:
-      codec.segmentInfoFormat().getSegmentInfoWriter().write(directory, newSegment.info, flushedSegment.fieldInfos, context);
+      codec.segmentInfoFormat().getSegmentInfoWriter().write(directory, newSegment.info, context);
 
       // TODO: ideally we would freeze newSegment here!!
       // because any changes after writing the .si will be

Modified: lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/IndexWriter.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/IndexWriter.java?rev=1629774&r1=1629773&r2=1629774&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/IndexWriter.java (original)
+++ lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/IndexWriter.java Mon Oct  6 22:01:51 2014
@@ -2594,7 +2594,7 @@ public class IndexWriter implements Clos
       // above:
       success = false;
       try {
-        codec.segmentInfoFormat().getSegmentInfoWriter().write(trackingDir, info, mergeState.mergeFieldInfos, context);
+        codec.segmentInfoFormat().getSegmentInfoWriter().write(trackingDir, info, context);
         success = true;
       } finally {
         if (!success) {
@@ -4060,7 +4060,7 @@ public class IndexWriter implements Clos
       // above:
       boolean success2 = false;
       try {
-        codec.segmentInfoFormat().getSegmentInfoWriter().write(directory, merge.info.info, mergeState.mergeFieldInfos, context);
+        codec.segmentInfoFormat().getSegmentInfoWriter().write(directory, merge.info.info, context);
         success2 = true;
       } finally {
         if (!success2) {

Added: lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/codecs/lucene50/TestLucene50SegmentInfoFormat.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/codecs/lucene50/TestLucene50SegmentInfoFormat.java?rev=1629774&view=auto
==============================================================================
--- lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/codecs/lucene50/TestLucene50SegmentInfoFormat.java (added)
+++ lucene/dev/trunk/lucene/core/src/test/org/apache/lucene/codecs/lucene50/TestLucene50SegmentInfoFormat.java Mon Oct  6 22:01:51 2014
@@ -0,0 +1,39 @@
+package org.apache.lucene.codecs.lucene50;
+
+/*
+ * 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 org.apache.lucene.codecs.Codec;
+import org.apache.lucene.index.BaseSegmentInfoFormatTestCase;
+import org.apache.lucene.util.TestUtil;
+import org.apache.lucene.util.Version;
+
+/**
+ * Tests Lucene50SegmentInfoFormat
+ */
+public class TestLucene50SegmentInfoFormat extends BaseSegmentInfoFormatTestCase {
+
+  @Override
+  protected Version[] getVersions() {
+    return new Version[] { Version.LATEST };
+  }
+
+  @Override
+  protected Codec getCodec() {
+    return TestUtil.getDefaultCodec();
+  }
+}

Modified: lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/codecs/cranky/CrankySegmentInfoFormat.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/codecs/cranky/CrankySegmentInfoFormat.java?rev=1629774&r1=1629773&r2=1629774&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/codecs/cranky/CrankySegmentInfoFormat.java (original)
+++ lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/codecs/cranky/CrankySegmentInfoFormat.java Mon Oct  6 22:01:51 2014
@@ -23,7 +23,6 @@ import java.util.Random;
 import org.apache.lucene.codecs.SegmentInfoFormat;
 import org.apache.lucene.codecs.SegmentInfoReader;
 import org.apache.lucene.codecs.SegmentInfoWriter;
-import org.apache.lucene.index.FieldInfos;
 import org.apache.lucene.index.SegmentInfo;
 import org.apache.lucene.store.Directory;
 import org.apache.lucene.store.IOContext;
@@ -57,11 +56,11 @@ class CrankySegmentInfoFormat extends Se
     }
     
     @Override
-    public void write(Directory dir, SegmentInfo info, FieldInfos fis, IOContext ioContext) throws IOException {
+    public void write(Directory dir, SegmentInfo info, IOContext ioContext) throws IOException {
       if (random.nextInt(100) == 0) {
         throw new IOException("Fake IOException from SegmentInfoWriter.write()");
       }
-      delegate.write(dir, info, fis, ioContext);
+      delegate.write(dir, info, ioContext);
     }
   }
 }

Added: lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/index/BaseSegmentInfoFormatTestCase.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/index/BaseSegmentInfoFormatTestCase.java?rev=1629774&view=auto
==============================================================================
--- lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/index/BaseSegmentInfoFormatTestCase.java (added)
+++ lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/index/BaseSegmentInfoFormatTestCase.java Mon Oct  6 22:01:51 2014
@@ -0,0 +1,196 @@
+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.io.IOException;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.lucene.codecs.Codec;
+import org.apache.lucene.document.Document;
+import org.apache.lucene.document.StoredField;
+import org.apache.lucene.store.Directory;
+import org.apache.lucene.store.IOContext;
+import org.apache.lucene.util.StringHelper;
+import org.apache.lucene.util.TestUtil;
+import org.apache.lucene.util.Version;
+
+/**
+ * Abstract class to do basic tests for si format.
+ * NOTE: This test focuses on the si impl, nothing else.
+ * The [stretch] goal is for this test to be
+ * so thorough in testing a new si format that if this
+ * test passes, then all Lucene/Solr tests should also pass.  Ie,
+ * if there is some bug in a given si Format that this
+ * test fails to catch then this test needs to be improved! */
+public abstract class BaseSegmentInfoFormatTestCase extends BaseIndexFileFormatTestCase {
+  
+  /** Test files map */
+  public void testFiles() throws Exception {
+    Directory dir = newDirectory();
+    Codec codec = getCodec();
+    SegmentInfo info = new SegmentInfo(dir, getVersions()[0], "_123", 1, false, codec, 
+                                       Collections.<String,String>emptyMap(), StringHelper.randomId());
+    info.setFiles(Collections.<String>emptySet());
+    codec.segmentInfoFormat().getSegmentInfoWriter().write(dir, info, IOContext.DEFAULT);
+    SegmentInfo info2 = codec.segmentInfoFormat().getSegmentInfoReader().read(dir, "_123", IOContext.DEFAULT);
+    assertEquals(info.files(), info2.files());
+    dir.close();
+  }
+  
+  /** Tests SI writer adds itself to files... */
+  public void testAddsSelfToFiles() throws Exception {
+    Directory dir = newDirectory();
+    Codec codec = getCodec();
+    SegmentInfo info = new SegmentInfo(dir, getVersions()[0], "_123", 1, false, codec, 
+                                       Collections.<String,String>emptyMap(), StringHelper.randomId());
+    Set<String> originalFiles = Collections.singleton("_123.a");
+    info.setFiles(originalFiles);
+    codec.segmentInfoFormat().getSegmentInfoWriter().write(dir, info, IOContext.DEFAULT);
+    
+    Set<String> modifiedFiles = info.files();
+    assertTrue(modifiedFiles.containsAll(originalFiles));
+    assertTrue("did you forget to add yourself to files()", modifiedFiles.size() > originalFiles.size());
+    
+    SegmentInfo info2 = codec.segmentInfoFormat().getSegmentInfoReader().read(dir, "_123", IOContext.DEFAULT);
+    assertEquals(info.files(), info2.files());
+    dir.close();
+  }
+  
+  /** Test diagnostics map */
+  public void testDiagnostics() throws Exception {
+    Directory dir = newDirectory();
+    Codec codec = getCodec();
+    Map<String,String> diagnostics = new HashMap<>();
+    diagnostics.put("key1", "value1");
+    diagnostics.put("key2", "value2");
+    SegmentInfo info = new SegmentInfo(dir, getVersions()[0], "_123", 1, false, codec, 
+                                       diagnostics, StringHelper.randomId());
+    info.setFiles(Collections.<String>emptySet());
+    codec.segmentInfoFormat().getSegmentInfoWriter().write(dir, info, IOContext.DEFAULT);
+    SegmentInfo info2 = codec.segmentInfoFormat().getSegmentInfoReader().read(dir, "_123", IOContext.DEFAULT);
+    assertEquals(diagnostics, info2.getDiagnostics());
+    dir.close();
+  }
+  
+  /** Test unique ID */
+  public void testUniqueID() throws Exception {
+    Codec codec = getCodec();
+    Directory dir = newDirectory();
+    byte id[] = StringHelper.randomId();
+    SegmentInfo info = new SegmentInfo(dir, getVersions()[0], "_123", 1, false, codec, 
+                                       Collections.<String,String>emptyMap(), id);
+    info.setFiles(Collections.<String>emptySet());
+    codec.segmentInfoFormat().getSegmentInfoWriter().write(dir, info, IOContext.DEFAULT);
+    SegmentInfo info2 = codec.segmentInfoFormat().getSegmentInfoReader().read(dir, "_123", IOContext.DEFAULT);
+    assertIDEquals(id, info2.getId());
+    dir.close();
+  }
+  
+  /** Test versions */
+  public void testVersions() throws Exception {
+    Codec codec = getCodec();
+    for (Version v : getVersions()) {
+      Directory dir = newDirectory();
+      SegmentInfo info = new SegmentInfo(dir, v, "_123", 1, false, codec, 
+                                         Collections.<String,String>emptyMap(), StringHelper.randomId());
+      info.setFiles(Collections.<String>emptySet());
+      codec.segmentInfoFormat().getSegmentInfoWriter().write(dir, info, IOContext.DEFAULT);
+      SegmentInfo info2 = codec.segmentInfoFormat().getSegmentInfoReader().read(dir, "_123", IOContext.DEFAULT);
+      assertEquals(info2.getVersion(), v);
+      dir.close();
+    }
+  }
+  
+  /** 
+   * Sets some otherwise hard-to-test properties: 
+   * random segment names, ID values, document count, etc and round-trips
+   */
+  public void testRandom() throws Exception {
+    Codec codec = getCodec();
+    Version[] versions = getVersions();
+    for (int i = 0; i < 10; i++) {
+      Directory dir = newDirectory();
+      Version version = versions[random().nextInt(versions.length)];
+      String name = "_" + Integer.toString(random().nextInt(Integer.MAX_VALUE), Character.MAX_RADIX);
+      int docCount = TestUtil.nextInt(random(), 1, IndexWriter.MAX_DOCS);
+      boolean isCompoundFile = random().nextBoolean();
+      Set<String> files = new HashSet<>();
+      int numFiles = random().nextInt(10);
+      for (int j = 0; j < numFiles; j++) {
+        String file = IndexFileNames.segmentFileName(name, "", Integer.toString(j));
+        files.add(file);
+        dir.createOutput(file, IOContext.DEFAULT).close();
+      }
+      Map<String,String> diagnostics = new HashMap<>();
+      int numDiags = random().nextInt(10);
+      for (int j = 0; j < numDiags; j++) {
+        diagnostics.put(TestUtil.randomUnicodeString(random()), 
+                        TestUtil.randomUnicodeString(random()));
+      }
+      byte id[] = new byte[StringHelper.ID_LENGTH];
+      random().nextBytes(id);
+      
+      SegmentInfo info = new SegmentInfo(dir, version, name, docCount, isCompoundFile, codec, diagnostics, id);
+      info.setFiles(files);
+      codec.segmentInfoFormat().getSegmentInfoWriter().write(dir, info, IOContext.DEFAULT);
+      SegmentInfo info2 = codec.segmentInfoFormat().getSegmentInfoReader().read(dir, name, IOContext.DEFAULT);
+      assertEquals(info, info2);
+ 
+      dir.close();
+    }
+  }
+  
+  protected final void assertEquals(SegmentInfo expected, SegmentInfo actual) {
+    assertSame(expected.dir, actual.dir);
+    assertEquals(expected.name, actual.name);
+    assertEquals(expected.files(), actual.files());
+    // we don't assert this, because SI format has nothing to do with it... set by SIS
+    // assertSame(expected.getCodec(), actual.getCodec());
+    assertEquals(expected.getDiagnostics(), actual.getDiagnostics());
+    assertEquals(expected.getDocCount(), actual.getDocCount());
+    assertIDEquals(expected.getId(), actual.getId());
+    assertEquals(expected.getUseCompoundFile(), actual.getUseCompoundFile());
+    assertEquals(expected.getVersion(), actual.getVersion());
+  }
+  
+  /** Returns the versions this SI should test */
+  protected abstract Version[] getVersions();
+  
+  /** 
+   * assert that unique id is equal. 
+   * @deprecated only exists to be overridden by old codecs that didnt support this
+   */
+  @Deprecated
+  protected void assertIDEquals(byte expected[], byte actual[]) {
+    assertArrayEquals(expected, actual);
+  }
+  
+  @Override
+  protected void addRandomFields(Document doc) {
+    doc.add(new StoredField("foobar", TestUtil.randomSimpleString(random())));
+  }
+
+  @Override
+  public void testRamBytesUsed() throws IOException {
+    assumeTrue("not applicable for this format", true);
+  }
+}