diff --git a/lucene/common-build.xml b/lucene/common-build.xml index f8db3369b21..c6bdb1627aa 100644 --- a/lucene/common-build.xml +++ b/lucene/common-build.xml @@ -73,6 +73,7 @@ + @@ -499,6 +500,8 @@ + + diff --git a/lucene/src/java/org/apache/lucene/index/codecs/CodecProvider.java b/lucene/src/java/org/apache/lucene/index/codecs/CodecProvider.java index 921a8e6db62..04f8c591f7a 100644 --- a/lucene/src/java/org/apache/lucene/index/codecs/CodecProvider.java +++ b/lucene/src/java/org/apache/lucene/index/codecs/CodecProvider.java @@ -71,6 +71,11 @@ public class CodecProvider { } } } + + /** @lucene.internal */ + public synchronized Set listAll() { + return codecs.keySet(); + } public Collection getAllExtensions() { return knownExtensions; diff --git a/lucene/src/test-framework/org/apache/lucene/util/LuceneTestCase.java b/lucene/src/test-framework/org/apache/lucene/util/LuceneTestCase.java index 5888a1c008c..7e95cffacd9 100644 --- a/lucene/src/test-framework/org/apache/lucene/util/LuceneTestCase.java +++ b/lucene/src/test-framework/org/apache/lucene/util/LuceneTestCase.java @@ -137,6 +137,8 @@ public abstract class LuceneTestCase extends Assert { // tests) /** Gets the codec to run tests with. */ public static final String TEST_CODEC = System.getProperty("tests.codec", "randomPerField"); + /** Gets the codecprovider to run tests with */ + public static final String TEST_CODECPROVIDER = System.getProperty("tests.codecprovider", "random"); /** Gets the locale to run tests with */ public static final String TEST_LOCALE = System.getProperty("tests.locale", "random"); /** Gets the timezone to run tests with */ @@ -329,15 +331,38 @@ public abstract class LuceneTestCase extends Assert { tempDirs.clear(); stores = Collections.synchronizedMap(new IdentityHashMap()); savedCodecProvider = CodecProvider.getDefault(); - if ("randomPerField".equals(TEST_CODEC)) { - if (random.nextInt(4) == 0) { // preflex-only setup - codec = installTestCodecs("PreFlex", CodecProvider.getDefault()); - } else { // per-field setup - CodecProvider.setDefault(new RandomCodecProvider(random)); + if ("random".equals(TEST_CODECPROVIDER)) { + if ("randomPerField".equals(TEST_CODEC)) { + if (random.nextInt(4) == 0) { // preflex-only setup + codec = installTestCodecs("PreFlex", CodecProvider.getDefault()); + } else { // per-field setup + CodecProvider.setDefault(new RandomCodecProvider(random)); + codec = installTestCodecs(TEST_CODEC, CodecProvider.getDefault()); + } + } else { // ordinary setup codec = installTestCodecs(TEST_CODEC, CodecProvider.getDefault()); } - } else { // ordinary setup - codec = installTestCodecs(TEST_CODEC, CodecProvider.getDefault()); + } else { + // someone specified their own codecprovider by class + try { + Class cpClazz = Class.forName(TEST_CODECPROVIDER).asSubclass(CodecProvider.class); + CodecProvider cp = cpClazz.newInstance(); + String codecName; + if (TEST_CODEC.startsWith("random")) { // TODO: somehow do random per-field?! + Set codecSet = cp.listAll(); + String availableCodecs[] = codecSet.toArray(new String[codecSet.size()]); + codecName = availableCodecs[random.nextInt(availableCodecs.length)]; + } else { + codecName = TEST_CODEC; + } + + codec = cp.lookup(codecName); + cp.setDefaultFieldCodec(codecName); + CodecProvider.setDefault(cp); + } catch (Exception e) { + System.err.println("Could not instantiate CodecProvider: " + TEST_CODECPROVIDER); + throw new RuntimeException(e); + } } savedLocale = Locale.getDefault(); locale = TEST_LOCALE.equals("random") ? randomLocale(random) : localeForName(TEST_LOCALE); @@ -360,16 +385,13 @@ public abstract class LuceneTestCase extends Assert { String codecDescription; CodecProvider cp = CodecProvider.getDefault(); - if ("randomPerField".equals(TEST_CODEC)) { - if (cp instanceof RandomCodecProvider) - codecDescription = cp.toString(); - else - codecDescription = "PreFlex"; + if ("randomPerField".equals(TEST_CODEC) && cp instanceof RandomCodecProvider) { + codecDescription = cp.toString(); } else { codecDescription = codec.toString(); } - if (CodecProvider.getDefault() == savedCodecProvider) + if ("random".equals(TEST_CODECPROVIDER) && CodecProvider.getDefault() == savedCodecProvider) removeTestCodecs(codec, CodecProvider.getDefault()); CodecProvider.setDefault(savedCodecProvider); Locale.setDefault(savedLocale); diff --git a/solr/build.xml b/solr/build.xml index 80e66fd984a..de7ef217bee 100644 --- a/solr/build.xml +++ b/solr/build.xml @@ -450,6 +450,7 @@ > + diff --git a/solr/common-build.xml b/solr/common-build.xml index 861ff237062..a57b4074e25 100644 --- a/solr/common-build.xml +++ b/solr/common-build.xml @@ -61,6 +61,7 @@ + diff --git a/solr/contrib/analysis-extras/build.xml b/solr/contrib/analysis-extras/build.xml index 9cc5aa217bc..6ec8ecdbaa8 100644 --- a/solr/contrib/analysis-extras/build.xml +++ b/solr/contrib/analysis-extras/build.xml @@ -146,6 +146,7 @@ > + diff --git a/solr/contrib/clustering/build.xml b/solr/contrib/clustering/build.xml index aee297e3b8f..9a0c67eaa2f 100644 --- a/solr/contrib/clustering/build.xml +++ b/solr/contrib/clustering/build.xml @@ -118,6 +118,7 @@ > + diff --git a/solr/contrib/dataimporthandler/build.xml b/solr/contrib/dataimporthandler/build.xml index bd6ea50a2e2..79a0524fcc7 100644 --- a/solr/contrib/dataimporthandler/build.xml +++ b/solr/contrib/dataimporthandler/build.xml @@ -171,6 +171,7 @@ + @@ -231,6 +232,7 @@ > + diff --git a/solr/contrib/extraction/build.xml b/solr/contrib/extraction/build.xml index 01aa60e7485..50dcb4983d5 100644 --- a/solr/contrib/extraction/build.xml +++ b/solr/contrib/extraction/build.xml @@ -115,6 +115,7 @@ > + diff --git a/solr/contrib/uima/build.xml b/solr/contrib/uima/build.xml index 631f8a8c413..16c7de67844 100644 --- a/solr/contrib/uima/build.xml +++ b/solr/contrib/uima/build.xml @@ -114,6 +114,7 @@ > +