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 2015/01/25 00:38:34 UTC
svn commit: r1654596 - in /lucene/dev/branches/branch_5x/lucene:
core/src/test/org/apache/lucene/index/TestDuelingCodecs.java
test-framework/src/java/org/apache/lucene/util/LuceneTestCase.java
Author: mikemccand
Date: Sat Jan 24 23:38:34 2015
New Revision: 1654596
URL: http://svn.apache.org/r1654596
Log:
improve test case
Modified:
lucene/dev/branches/branch_5x/lucene/core/src/test/org/apache/lucene/index/TestDuelingCodecs.java
lucene/dev/branches/branch_5x/lucene/test-framework/src/java/org/apache/lucene/util/LuceneTestCase.java
Modified: lucene/dev/branches/branch_5x/lucene/core/src/test/org/apache/lucene/index/TestDuelingCodecs.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/lucene/core/src/test/org/apache/lucene/index/TestDuelingCodecs.java?rev=1654596&r1=1654595&r2=1654596&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/lucene/core/src/test/org/apache/lucene/index/TestDuelingCodecs.java (original)
+++ lucene/dev/branches/branch_5x/lucene/core/src/test/org/apache/lucene/index/TestDuelingCodecs.java Sat Jan 24 23:38:34 2015
@@ -28,6 +28,7 @@ import org.apache.lucene.document.Sorted
import org.apache.lucene.document.SortedSetDocValuesField;
import org.apache.lucene.store.Directory;
import org.apache.lucene.util.BytesRef;
+import org.apache.lucene.util.IOUtils;
import org.apache.lucene.util.LineFileDocs;
import org.apache.lucene.util.LuceneTestCase;
import org.apache.lucene.util.TestUtil;
@@ -43,7 +44,9 @@ public class TestDuelingCodecs extends L
private Directory rightDir;
private IndexReader rightReader;
private Codec rightCodec;
-
+ private RandomIndexWriter leftWriter;
+ private RandomIndexWriter rightWriter;
+ private long seed;
private String info; // for debugging
@Override
@@ -57,10 +60,10 @@ public class TestDuelingCodecs extends L
leftCodec = Codec.forName("SimpleText");
rightCodec = new RandomCodec(random());
- leftDir = newDirectory();
- rightDir = newDirectory();
+ leftDir = newFSDirectory(createTempDir("leftDir"));
+ rightDir = newFSDirectory(createTempDir("rightDir"));
- long seed = random().nextLong();
+ seed = random().nextLong();
// must use same seed because of random payloads, etc
int maxTermLength = TestUtil.nextInt(random(), 1, IndexWriter.MAX_TERM_LENGTH);
@@ -82,44 +85,23 @@ public class TestDuelingCodecs extends L
rightConfig.setMergePolicy(newLogMergePolicy());
// must use same seed because of random docvalues fields, etc
- RandomIndexWriter leftWriter = new RandomIndexWriter(new Random(seed), leftDir, leftConfig);
- RandomIndexWriter rightWriter = new RandomIndexWriter(new Random(seed), rightDir, rightConfig);
-
- int numdocs = atLeast(100);
- createRandomIndex(numdocs, leftWriter, seed);
- createRandomIndex(numdocs, rightWriter, seed);
+ leftWriter = new RandomIndexWriter(new Random(seed), leftDir, leftConfig);
+ rightWriter = new RandomIndexWriter(new Random(seed), rightDir, rightConfig);
- leftReader = maybeWrapReader(leftWriter.getReader());
- leftWriter.close();
- rightReader = maybeWrapReader(rightWriter.getReader());
- rightWriter.close();
-
- // check that our readers are valid
- TestUtil.checkReader(leftReader);
- TestUtil.checkReader(rightReader);
-
info = "left: " + leftCodec.toString() + " / right: " + rightCodec.toString();
}
@Override
public void tearDown() throws Exception {
- if (leftReader != null) {
- leftReader.close();
- }
- if (rightReader != null) {
- rightReader.close();
- }
-
- if (leftDir != null) {
- leftDir.close();
- }
- if (rightDir != null) {
- rightDir.close();
- }
-
+ IOUtils.close(leftWriter,
+ rightWriter,
+ leftReader,
+ rightReader,
+ leftDir,
+ rightDir);
super.tearDown();
}
-
+
/**
* populates a writer with random stuff. this must be fully reproducable with the seed!
*/
@@ -162,7 +144,28 @@ public class TestDuelingCodecs extends L
* checks the two indexes are equivalent
*/
public void testEquals() throws IOException {
+ int numdocs = TEST_NIGHTLY ? atLeast(2000) : atLeast(100);
+ createRandomIndex(numdocs, leftWriter, seed);
+ createRandomIndex(numdocs, rightWriter, seed);
+
+ leftReader = leftWriter.getReader();
+ rightReader = rightWriter.getReader();
+
assertReaderEquals(info, leftReader, rightReader);
}
+ public void testCrazyReaderEquals() throws IOException {
+ int numdocs = atLeast(100);
+ createRandomIndex(numdocs, leftWriter, seed);
+ createRandomIndex(numdocs, rightWriter, seed);
+
+ leftReader = wrapReader(leftWriter.getReader());
+ rightReader = wrapReader(rightWriter.getReader());
+
+ // check that our readers are valid
+ TestUtil.checkReader(leftReader);
+ TestUtil.checkReader(rightReader);
+
+ assertReaderEquals(info, leftReader, rightReader);
+ }
}
Modified: lucene/dev/branches/branch_5x/lucene/test-framework/src/java/org/apache/lucene/util/LuceneTestCase.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/lucene/test-framework/src/java/org/apache/lucene/util/LuceneTestCase.java?rev=1654596&r1=1654595&r2=1654596&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/lucene/test-framework/src/java/org/apache/lucene/util/LuceneTestCase.java (original)
+++ lucene/dev/branches/branch_5x/lucene/test-framework/src/java/org/apache/lucene/util/LuceneTestCase.java Sat Jan 24 23:38:34 2015
@@ -91,6 +91,7 @@ import org.apache.lucene.index.LogDocMer
import org.apache.lucene.index.LogMergePolicy;
import org.apache.lucene.index.MergePolicy;
import org.apache.lucene.index.MergeScheduler;
+import org.apache.lucene.index.MergeTrigger;
import org.apache.lucene.index.MismatchedDirectoryReader;
import org.apache.lucene.index.MismatchedLeafReader;
import org.apache.lucene.index.MockRandomMergePolicy;
@@ -1557,78 +1558,85 @@ public abstract class LuceneTestCase ext
throw null; // dummy to prevent compiler failure
}
}
+
+ public static IndexReader wrapReader(IndexReader r) throws IOException {
+ Random random = random();
+
+ // TODO: remove this, and fix those tests to wrap before putting slow around:
+ final boolean wasOriginallyAtomic = r instanceof LeafReader;
+ for (int i = 0, c = random.nextInt(6)+1; i < c; i++) {
+ switch(random.nextInt(6)) {
+ case 0:
+ r = SlowCompositeReaderWrapper.wrap(r);
+ break;
+ case 1:
+ // will create no FC insanity in atomic case, as ParallelLeafReader has own cache key:
+ r = (r instanceof LeafReader) ?
+ new ParallelLeafReader((LeafReader) r) :
+ new ParallelCompositeReader((CompositeReader) r);
+ break;
+ case 2:
+ // Häckidy-Hick-Hack: a standard MultiReader will cause FC insanity, so we use
+ // QueryUtils' reader with a fake cache key, so insanity checker cannot walk
+ // along our reader:
+ r = new FCInvisibleMultiReader(r);
+ break;
+ case 3:
+ final LeafReader ar = SlowCompositeReaderWrapper.wrap(r);
+ final List<String> allFields = new ArrayList<>();
+ for (FieldInfo fi : ar.getFieldInfos()) {
+ allFields.add(fi.name);
+ }
+ Collections.shuffle(allFields, random);
+ final int end = allFields.isEmpty() ? 0 : random.nextInt(allFields.size());
+ final Set<String> fields = new HashSet<>(allFields.subList(0, end));
+ // will create no FC insanity as ParallelLeafReader has own cache key:
+ r = new ParallelLeafReader(
+ new FieldFilterLeafReader(ar, fields, false),
+ new FieldFilterLeafReader(ar, fields, true)
+ );
+ break;
+ case 4:
+ // Häckidy-Hick-Hack: a standard Reader will cause FC insanity, so we use
+ // QueryUtils' reader with a fake cache key, so insanity checker cannot walk
+ // along our reader:
+ if (r instanceof LeafReader) {
+ r = new AssertingLeafReader((LeafReader)r);
+ } else if (r instanceof DirectoryReader) {
+ r = new AssertingDirectoryReader((DirectoryReader)r);
+ }
+ break;
+ case 5:
+ if (r instanceof LeafReader) {
+ r = new MismatchedLeafReader((LeafReader)r, random);
+ } else if (r instanceof DirectoryReader) {
+ r = new MismatchedDirectoryReader((DirectoryReader)r, random);
+ }
+ break;
+ default:
+ fail("should not get here");
+ }
+ }
+ if (wasOriginallyAtomic) {
+ r = SlowCompositeReaderWrapper.wrap(r);
+ } else if ((r instanceof CompositeReader) && !(r instanceof FCInvisibleMultiReader)) {
+ // prevent cache insanity caused by e.g. ParallelCompositeReader, to fix we wrap one more time:
+ r = new FCInvisibleMultiReader(r);
+ }
+ if (VERBOSE) {
+ System.out.println("wrapReader wrapped: " +r);
+ }
+
+ return r;
+ }
/**
* Sometimes wrap the IndexReader as slow, parallel or filter reader (or
* combinations of that)
*/
public static IndexReader maybeWrapReader(IndexReader r) throws IOException {
- Random random = random();
if (rarely()) {
- // TODO: remove this, and fix those tests to wrap before putting slow around:
- final boolean wasOriginallyAtomic = r instanceof LeafReader;
- for (int i = 0, c = random.nextInt(6)+1; i < c; i++) {
- switch(random.nextInt(6)) {
- case 0:
- r = SlowCompositeReaderWrapper.wrap(r);
- break;
- case 1:
- // will create no FC insanity in atomic case, as ParallelLeafReader has own cache key:
- r = (r instanceof LeafReader) ?
- new ParallelLeafReader((LeafReader) r) :
- new ParallelCompositeReader((CompositeReader) r);
- break;
- case 2:
- // Häckidy-Hick-Hack: a standard MultiReader will cause FC insanity, so we use
- // QueryUtils' reader with a fake cache key, so insanity checker cannot walk
- // along our reader:
- r = new FCInvisibleMultiReader(r);
- break;
- case 3:
- final LeafReader ar = SlowCompositeReaderWrapper.wrap(r);
- final List<String> allFields = new ArrayList<>();
- for (FieldInfo fi : ar.getFieldInfos()) {
- allFields.add(fi.name);
- }
- Collections.shuffle(allFields, random);
- final int end = allFields.isEmpty() ? 0 : random.nextInt(allFields.size());
- final Set<String> fields = new HashSet<>(allFields.subList(0, end));
- // will create no FC insanity as ParallelLeafReader has own cache key:
- r = new ParallelLeafReader(
- new FieldFilterLeafReader(ar, fields, false),
- new FieldFilterLeafReader(ar, fields, true)
- );
- break;
- case 4:
- // Häckidy-Hick-Hack: a standard Reader will cause FC insanity, so we use
- // QueryUtils' reader with a fake cache key, so insanity checker cannot walk
- // along our reader:
- if (r instanceof LeafReader) {
- r = new AssertingLeafReader((LeafReader)r);
- } else if (r instanceof DirectoryReader) {
- r = new AssertingDirectoryReader((DirectoryReader)r);
- }
- break;
- case 5:
- if (r instanceof LeafReader) {
- r = new MismatchedLeafReader((LeafReader)r, random);
- } else if (r instanceof DirectoryReader) {
- r = new MismatchedDirectoryReader((DirectoryReader)r, random);
- }
- break;
- default:
- fail("should not get here");
- }
- }
- if (wasOriginallyAtomic) {
- r = SlowCompositeReaderWrapper.wrap(r);
- } else if ((r instanceof CompositeReader) && !(r instanceof FCInvisibleMultiReader)) {
- // prevent cache insanity caused by e.g. ParallelCompositeReader, to fix we wrap one more time:
- r = new FCInvisibleMultiReader(r);
- }
- if (VERBOSE) {
- System.out.println("maybeWrapReader wrapped: " +r);
- }
+ r = wrapReader(r);
}
return r;
}