mirror of https://github.com/apache/lucene.git
LUCENE-6989: Fix some tests that hardcode MMapDirectory (and also the FSDirectory randomizer), to only use MMapDirectory on Windows, if it supports unmapping. Otherwise tests will fail.
This commit is contained in:
parent
6565a5cb2c
commit
d5e87898b1
|
@ -41,6 +41,8 @@ public class Test4GBStoredFields extends LuceneTestCase {
|
|||
|
||||
@Nightly
|
||||
public void test() throws Exception {
|
||||
assumeWorkingMMapOnWindows();
|
||||
|
||||
MockDirectoryWrapper dir = new MockDirectoryWrapper(random(), new MMapDirectory(createTempDir("4GBStoredFields")));
|
||||
dir.setThrottling(MockDirectoryWrapper.Throttling.NEVER);
|
||||
|
||||
|
|
|
@ -1251,8 +1251,9 @@ public class TestIndexWriter extends LuceneTestCase {
|
|||
|
||||
|
||||
public void testDeleteUnusedFiles() throws Exception {
|
||||
|
||||
assumeFalse("test relies on exact filenames", Codec.getDefault() instanceof SimpleTextCodec);
|
||||
assumeWorkingMMapOnWindows();
|
||||
|
||||
for(int iter=0;iter<2;iter++) {
|
||||
// relies on windows semantics
|
||||
Path path = createTempDir();
|
||||
|
|
|
@ -20,6 +20,7 @@ package org.apache.lucene.store;
|
|||
import java.io.IOException;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
|
@ -37,11 +38,13 @@ public class TestDirectory extends LuceneTestCase {
|
|||
largeBuffer[i] = (byte) i; // automatically loops with modulo
|
||||
}
|
||||
|
||||
final FSDirectory[] dirs = new FSDirectory[] {
|
||||
new SimpleFSDirectory(path),
|
||||
new NIOFSDirectory(path),
|
||||
new MMapDirectory(path)
|
||||
};
|
||||
final List<FSDirectory> dirs0 = new ArrayList<>();
|
||||
dirs0.add(new SimpleFSDirectory(path));
|
||||
dirs0.add(new NIOFSDirectory(path));
|
||||
if (hasWorkingMMapOnWindows()) {
|
||||
dirs0.add(new MMapDirectory(path));
|
||||
}
|
||||
final FSDirectory[] dirs = dirs0.stream().toArray(FSDirectory[]::new);
|
||||
|
||||
for (int i=0; i<dirs.length; i++) {
|
||||
FSDirectory dir = dirs[i];
|
||||
|
|
|
@ -39,8 +39,7 @@ public class TestMmapDirectory extends BaseDirectoryTestCase {
|
|||
@Override
|
||||
public void setUp() throws Exception {
|
||||
super.setUp();
|
||||
assumeTrue("test requires a jre that supports unmapping: " + MMapDirectory.UNMAP_NOT_SUPPORTED_REASON,
|
||||
MMapDirectory.UNMAP_SUPPORTED);
|
||||
assumeTrue(MMapDirectory.UNMAP_NOT_SUPPORTED_REASON, MMapDirectory.UNMAP_SUPPORTED);
|
||||
}
|
||||
|
||||
@Ignore("This test is for JVM testing purposes. There are no guarantees that it may not fail with SIGSEGV!")
|
||||
|
|
|
@ -46,8 +46,7 @@ public class TestMultiMMap extends BaseDirectoryTestCase {
|
|||
@Override
|
||||
public void setUp() throws Exception {
|
||||
super.setUp();
|
||||
assumeTrue("test requires a jre that supports unmapping: " + MMapDirectory.UNMAP_NOT_SUPPORTED_REASON,
|
||||
MMapDirectory.UNMAP_SUPPORTED);
|
||||
assumeTrue(MMapDirectory.UNMAP_NOT_SUPPORTED_REASON, MMapDirectory.UNMAP_SUPPORTED);
|
||||
}
|
||||
|
||||
public void testCloneSafety() throws Exception {
|
||||
|
|
|
@ -40,6 +40,8 @@ public class Test2BFST extends LuceneTestCase {
|
|||
private static long LIMIT = 3L*1024*1024*1024;
|
||||
|
||||
public void test() throws Exception {
|
||||
assumeWorkingMMapOnWindows();
|
||||
|
||||
int[] ints = new int[7];
|
||||
IntsRef input = new IntsRef(ints, 0, ints.length);
|
||||
long seed = random().nextLong();
|
||||
|
|
|
@ -663,6 +663,8 @@ public abstract class BaseStoredFieldsFormatTestCase extends BaseIndexFileFormat
|
|||
|
||||
@Nightly
|
||||
public void testBigDocuments() throws IOException {
|
||||
assumeWorkingMMapOnWindows();
|
||||
|
||||
// "big" as "much bigger than the chunk size"
|
||||
// for this test we force a FS dir
|
||||
// we can't just use newFSDirectory, because this test doesn't really index anything.
|
||||
|
|
|
@ -94,6 +94,7 @@ import org.apache.lucene.store.FSLockFactory;
|
|||
import org.apache.lucene.store.FlushInfo;
|
||||
import org.apache.lucene.store.IOContext;
|
||||
import org.apache.lucene.store.LockFactory;
|
||||
import org.apache.lucene.store.MMapDirectory;
|
||||
import org.apache.lucene.store.MergeInfo;
|
||||
import org.apache.lucene.store.MockDirectoryWrapper.Throttling;
|
||||
import org.apache.lucene.store.MockDirectoryWrapper;
|
||||
|
@ -456,11 +457,24 @@ public abstract class LuceneTestCase extends Assert {
|
|||
LEAVE_TEMPORARY = defaultValue;
|
||||
}
|
||||
|
||||
/** Returns true, if MMapDirectory supports unmapping on this platform (required for Windows), or if we are not on Windows. */
|
||||
public static boolean hasWorkingMMapOnWindows() {
|
||||
return !Constants.WINDOWS || MMapDirectory.UNMAP_SUPPORTED;
|
||||
}
|
||||
|
||||
/** Assumes that the current MMapDirectory implementation supports unmapping, so the test will not fail on Windows.
|
||||
* @see #hasWorkingMMapOnWindows()
|
||||
* */
|
||||
public static void assumeWorkingMMapOnWindows() {
|
||||
assumeTrue(MMapDirectory.UNMAP_NOT_SUPPORTED_REASON, hasWorkingMMapOnWindows());
|
||||
}
|
||||
|
||||
/** Filesystem-based {@link Directory} implementations. */
|
||||
private static final List<String> FS_DIRECTORIES = Arrays.asList(
|
||||
"SimpleFSDirectory",
|
||||
"NIOFSDirectory",
|
||||
"MMapDirectory"
|
||||
// SimpleFSDirectory as replacement for MMapDirectory if unmapping is not supported on Windows (to make randomization stable):
|
||||
hasWorkingMMapOnWindows() ? "MMapDirectory" : "SimpleFSDirectory"
|
||||
);
|
||||
|
||||
/** All {@link Directory} implementations. */
|
||||
|
@ -469,7 +483,7 @@ public abstract class LuceneTestCase extends Assert {
|
|||
CORE_DIRECTORIES = new ArrayList<>(FS_DIRECTORIES);
|
||||
CORE_DIRECTORIES.add("RAMDirectory");
|
||||
}
|
||||
|
||||
|
||||
/** A {@link org.apache.lucene.search.QueryCachingPolicy} that randomly caches. */
|
||||
public static final QueryCachingPolicy MAYBE_CACHE_POLICY = new QueryCachingPolicy() {
|
||||
|
||||
|
@ -853,7 +867,7 @@ public abstract class LuceneTestCase extends Assert {
|
|||
public static void assumeNoException(String msg, Exception e) {
|
||||
RandomizedTest.assumeNoException(msg, e);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Return <code>args</code> as a {@link Set} instance. The order of elements is not
|
||||
* preserved in iterators.
|
||||
|
|
Loading…
Reference in New Issue