From 2e468abecc98ffc6137fc5de2aefe8cd19cd6c8d Mon Sep 17 00:00:00 2001 From: Adrien Grand Date: Tue, 18 Jun 2019 17:05:18 +0200 Subject: [PATCH] LUCENE-8853: Don't return a FileSwitchDirectory when asked for a FS directory. --- .../apache/lucene/util/LuceneTestCase.java | 24 +++++++++++++++---- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/lucene/test-framework/src/java/org/apache/lucene/util/LuceneTestCase.java b/lucene/test-framework/src/java/org/apache/lucene/util/LuceneTestCase.java index e5159a784e3..d6a875fcd9c 100644 --- a/lucene/test-framework/src/java/org/apache/lucene/util/LuceneTestCase.java +++ b/lucene/test-framework/src/java/org/apache/lucene/util/LuceneTestCase.java @@ -1416,11 +1416,7 @@ public abstract class LuceneTestCase extends Assert { Directory fsdir = newFSDirectoryImpl(clazz, f, lf); if (rarely()) { - List fileExtensions = - Arrays.asList("fdt", "fdx", "tim", "tip", "si", "fnm", "pos", "dii", "dim", "nvm", "nvd", "dvm", "dvd"); - Collections.shuffle(fileExtensions, random()); - fileExtensions = fileExtensions.subList(0, 1 + random().nextInt(fileExtensions.size())); - fsdir = new FileSwitchDirectory(new HashSet<>(fileExtensions), fsdir, newFSDirectoryImpl(clazz, f, lf), true); + } BaseDirectoryWrapper wrapped = wrapDirectory(random(), fsdir, bare); return wrapped; @@ -1430,6 +1426,14 @@ public abstract class LuceneTestCase extends Assert { } } + private static Directory newFileSwitchDirectory(Random random, Directory dir1, Directory dir2) { + List fileExtensions = + Arrays.asList("fdt", "fdx", "tim", "tip", "si", "fnm", "pos", "dii", "dim", "nvm", "nvd", "dvm", "dvd"); + Collections.shuffle(fileExtensions, random); + fileExtensions = fileExtensions.subList(0, 1 + random.nextInt(fileExtensions.size())); + return new FileSwitchDirectory(new HashSet<>(fileExtensions), dir1, dir2, true); + } + /** * Returns a new Directory instance, using the specified random * with contents copied from the provided directory. See @@ -1632,6 +1636,16 @@ public abstract class LuceneTestCase extends Assert { if (clazzName.equals("random")) { if (rarely(random)) { clazzName = RandomPicks.randomFrom(random, CORE_DIRECTORIES); + } else if (rarely(random)) { + String clazzName1 = rarely(random) + ? RandomPicks.randomFrom(random, CORE_DIRECTORIES) + : ByteBuffersDirectory.class.getName(); + String clazzName2 = rarely(random) + ? RandomPicks.randomFrom(random, CORE_DIRECTORIES) + : ByteBuffersDirectory.class.getName(); + return newFileSwitchDirectory(random, + newDirectoryImpl(random, clazzName1, lf), + newDirectoryImpl(random, clazzName2, lf)); } else { clazzName = ByteBuffersDirectory.class.getName(); }