From 300451f1f80ed3ca5deb87448f40814348507382 Mon Sep 17 00:00:00 2001 From: Robert Muir Date: Mon, 11 Mar 2013 03:11:33 +0000 Subject: [PATCH] add 4.2 back compat index git-svn-id: https://svn.apache.org/repos/asf/lucene/dev/trunk@1454980 13f79535-47bb-0310-9956-ffa450edef68 --- .../index/TestBackwardsCompatibility.java | 24 +++++++++++++++++- .../org/apache/lucene/index/index.42.cfs.zip | Bin 0 -> 12516 bytes .../apache/lucene/index/index.42.nocfs.zip | Bin 0 -> 22064 bytes 3 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 lucene/core/src/test/org/apache/lucene/index/index.42.cfs.zip create mode 100644 lucene/core/src/test/org/apache/lucene/index/index.42.nocfs.zip diff --git a/lucene/core/src/test/org/apache/lucene/index/TestBackwardsCompatibility.java b/lucene/core/src/test/org/apache/lucene/index/TestBackwardsCompatibility.java index 0d3186cf0c2..c1a62289f0a 100644 --- a/lucene/core/src/test/org/apache/lucene/index/TestBackwardsCompatibility.java +++ b/lucene/core/src/test/org/apache/lucene/index/TestBackwardsCompatibility.java @@ -40,6 +40,7 @@ import org.apache.lucene.document.IntField; import org.apache.lucene.document.NumericDocValuesField; import org.apache.lucene.document.LongField; import org.apache.lucene.document.SortedDocValuesField; +import org.apache.lucene.document.SortedSetDocValuesField; import org.apache.lucene.document.StringField; import org.apache.lucene.document.TextField; import org.apache.lucene.index.FieldInfo.IndexOptions; @@ -73,7 +74,7 @@ import org.junit.Ignore; // we won't even be running the actual code, only the impostor // @SuppressCodecs("Lucene4x") // Sep codec cannot yet handle the offsets in our 4.x index! -@SuppressCodecs({"MockFixedIntBlock", "MockVariableIntBlock", "MockSep", "MockRandom"}) +@SuppressCodecs({"MockFixedIntBlock", "MockVariableIntBlock", "MockSep", "MockRandom", "Lucene40", "Lucene41"}) public class TestBackwardsCompatibility extends LuceneTestCase { // Uncomment these cases & run them on an older Lucene version, @@ -85,6 +86,10 @@ public class TestBackwardsCompatibility extends LuceneTestCase { // directory - to do this, comment out the "java.security.manager" // under the "test-macro" . // + // Be sure to create the indexes with the actual format: + // ant test -Dtestcase=TestBackwardsCompatibility -Dversion=x.y.z + // -Dtests.codec=LuceneXY -Dtests.postingsformat=LuceneXY -Dtests.docvaluesformat=LuceneXY + // // Zip up the generated indexes: // // cd /tmp/idx/index.cfs ; zip index..cfs.zip * @@ -154,6 +159,8 @@ public class TestBackwardsCompatibility extends LuceneTestCase { "40.nocfs", "41.cfs", "41.nocfs", + "42.cfs", + "42.nocfs" }; final String[] unsupportedNames = {"19.cfs", @@ -361,6 +368,9 @@ public class TestBackwardsCompatibility extends LuceneTestCase { // true if this is a 4.0+ index final boolean is40Index = MultiFields.getMergedFieldInfos(reader).fieldInfo("content5") != null; + // true if this is a 4.2+ index + final boolean is42Index = MultiFields.getMergedFieldInfos(reader).fieldInfo("dvSortedSet") != null; + assert is40Index; // NOTE: currently we can only do this on trunk! final Bits liveDocs = MultiFields.getLiveDocs(reader); @@ -414,6 +424,10 @@ public class TestBackwardsCompatibility extends LuceneTestCase { NumericDocValues dvLong = MultiDocValues.getNumericValues(reader, "dvLong"); NumericDocValues dvPacked = MultiDocValues.getNumericValues(reader, "dvPacked"); NumericDocValues dvShort = MultiDocValues.getNumericValues(reader, "dvShort"); + SortedSetDocValues dvSortedSet = null; + if (is42Index) { + dvSortedSet = MultiDocValues.getSortedSetValues(reader, "dvSortedSet"); + } for (int i=0;i<35;i++) { int id = Integer.parseInt(reader.document(i).get("id")); @@ -444,6 +458,13 @@ public class TestBackwardsCompatibility extends LuceneTestCase { assertEquals(id, dvLong.get(i)); assertEquals(id, dvPacked.get(i)); assertEquals(id, dvShort.get(i)); + if (is42Index) { + dvSortedSet.setDocument(i); + long ord = dvSortedSet.nextOrd(); + assertEquals(SortedSetDocValues.NO_MORE_ORDS, dvSortedSet.nextOrd()); + dvSortedSet.lookupOrd(ord, scratch); + assertEquals(expectedRef, scratch); + } } } @@ -707,6 +728,7 @@ public class TestBackwardsCompatibility extends LuceneTestCase { doc.add(new NumericDocValuesField("dvLong", id)); doc.add(new NumericDocValuesField("dvPacked", id)); doc.add(new NumericDocValuesField("dvShort", (short)id)); + doc.add(new SortedSetDocValuesField("dvSortedSet", ref)); // a field with both offsets and term vectors for a cross-check FieldType customType3 = new FieldType(TextField.TYPE_STORED); customType3.setStoreTermVectors(true); diff --git a/lucene/core/src/test/org/apache/lucene/index/index.42.cfs.zip b/lucene/core/src/test/org/apache/lucene/index/index.42.cfs.zip new file mode 100644 index 0000000000000000000000000000000000000000..5945fe5b17d01fb9b848ef2a6bf541e58492b441 GIT binary patch literal 12516 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