This is an automated email from the ASF dual-hosted git repository. epugh pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/solr.git
commit e1eb09b22e594200d5628bdfdaf88e324eadbbea Author: Kevin Risden <[email protected]> AuthorDate: Tue Feb 8 16:13:12 2022 -0500 SOLR-15991: analysis-extras module tests shouldn't rely on log4j dependency --- solr/CHANGES.txt | 2 + solr/modules/analysis-extras/build.gradle | 2 - .../solr/schema/TestICUCollationFieldUDVAS.java | 76 +++++----------------- 3 files changed, 18 insertions(+), 62 deletions(-) diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt index 7cf58e6..92dfaf6 100644 --- a/solr/CHANGES.txt +++ b/solr/CHANGES.txt @@ -573,6 +573,8 @@ and each individual module's jar will be included in its directory's lib/ folder * SOLR-12901: Highlighting: hl.method=unified is the new default. (David Smiley) +* SOLR-15991: analysis-extras module tests shouldn't rely on log4j dependency (Kevin Risden) + Bug Fixes --------------------- * SOLR-15849: Fix the connection reset problem caused by the incorrect use of 4LW with \n when monitoring zooKeeper status (Fa Ming). diff --git a/solr/modules/analysis-extras/build.gradle b/solr/modules/analysis-extras/build.gradle index 5d62f9d..7da2d4b 100644 --- a/solr/modules/analysis-extras/build.gradle +++ b/solr/modules/analysis-extras/build.gradle @@ -42,6 +42,4 @@ dependencies { testImplementation('org.mockito:mockito-core', { exclude group: "net.bytebuddy", module: "byte-buddy-agent" }) - testImplementation 'org.apache.logging.log4j:log4j-api' - testImplementation 'org.apache.logging.log4j:log4j-core' } diff --git a/solr/modules/analysis-extras/src/test/org/apache/solr/schema/TestICUCollationFieldUDVAS.java b/solr/modules/analysis-extras/src/test/org/apache/solr/schema/TestICUCollationFieldUDVAS.java index 1bbcc76..83fc584 100644 --- a/solr/modules/analysis-extras/src/test/org/apache/solr/schema/TestICUCollationFieldUDVAS.java +++ b/solr/modules/analysis-extras/src/test/org/apache/solr/schema/TestICUCollationFieldUDVAS.java @@ -16,28 +16,17 @@ */ package org.apache.solr.schema; -import org.apache.logging.log4j.Level; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; -import org.apache.logging.log4j.core.LoggerContext; -import org.apache.logging.log4j.core.appender.WriterAppender; -import org.apache.logging.log4j.core.config.LoggerConfig; -import org.apache.logging.log4j.core.layout.PatternLayout; import org.apache.lucene.util.Version; import org.apache.solr.SolrTestCaseJ4; import org.apache.solr.common.SolrException; -import org.apache.solr.common.util.SuppressForbidden; import org.apache.solr.core.XmlConfigFile; +import org.apache.solr.util.LogListener; import org.junit.BeforeClass; -import java.io.StringWriter; -import java.util.function.BooleanSupplier; - /** * Tests warn/failure of {@link ICUCollationField} when schema explicitly sets * <code>useDocValuesAsStored="true"</code> */ -@SuppressForbidden(reason = "test is specific to log4j2") public class TestICUCollationFieldUDVAS extends SolrTestCaseJ4 { private static final String ICU_FIELD_UDVAS_PROPNAME = "tests.icu_collation_field.udvas"; @@ -56,41 +45,16 @@ public class TestICUCollationFieldUDVAS extends SolrTestCaseJ4 { @SuppressWarnings("fallthrough") public void testInitCore() throws Exception { final Mode mode = pickRandom(Mode.values()); - final BooleanSupplier messageLogged; - final Runnable cleanup; - Version useVersion = null; + Version useVersion; switch (mode) { case FAIL: useVersion = ICUCollationField.UDVAS_FORBIDDEN_AS_OF; - messageLogged = null; - cleanup = null; break; case WARN: useVersion = WARN_CEILING; - // fallthrough + break; case OK: - // `OK` leaves `useVersion == null` - final StringWriter writer = new StringWriter(); - final WriterAppender appender = WriterAppender.createAppender( - PatternLayout - .newBuilder() - .withPattern("%-5p [%t]: %m%n") - .build(), - null, writer, "ICUCollationUdvasTest", false, true); - appender.start(); - final Logger logger = LogManager.getLogger(XmlConfigFile.class); - final Level level = logger.getLevel(); - final LoggerContext ctx = (LoggerContext) LogManager.getContext(false); - final LoggerConfig config = ctx.getConfiguration().getLoggerConfig(logger.getName()); - config.setLevel(Level.WARN); - config.addAppender(appender, Level.WARN, null); - ctx.updateLoggers(); - messageLogged = () -> writer.toString().contains(ICUCollationField.UDVAS_MESSAGE); - cleanup = () -> { - config.setLevel(level); - config.removeAppender(appender.getName()); - ctx.updateLoggers(); - }; + useVersion = null; break; default: throw new IllegalStateException(); @@ -103,43 +67,35 @@ public class TestICUCollationFieldUDVAS extends SolrTestCaseJ4 { System.setProperty(random().nextBoolean() ? ICU_TYPE_UDVAS_PROPNAME : ICU_FIELD_UDVAS_PROPNAME, "true"); restoreLuceneMatchVersion = System.setProperty(TEST_LUCENE_MATCH_VERSION_PROPNAME, useVersion.toString()); } - try { + try (LogListener warnLog = LogListener.warn(XmlConfigFile.class).substring(ICUCollationField.UDVAS_MESSAGE)){ initCore("solrconfig.xml", "schema.xml", home); switch (mode) { case FAIL: fail("expected failure for version " + useVersion); break; case WARN: - assertTrue("expected warning message was not logged", messageLogged.getAsBoolean()); + assertEquals("expected warning message was not logged", 2, warnLog.getCount()); + // Clear out the warnLog + warnLog.pollMessage(); + warnLog.pollMessage(); break; case OK: - assertFalse("unexpected warning message was logged", messageLogged.getAsBoolean()); + assertEquals("unexpected warning message was logged", 0, warnLog.getCount()); break; } } catch (SolrException ex) { assertSame("unexpected hard failure for " + useVersion + ": " + ex, mode, Mode.FAIL); assertTrue("unexpected failure message", getRootCause(ex).getMessage().contains(ICUCollationField.UDVAS_MESSAGE)); } finally { - switch (mode) { - case WARN: - restoreSysProps(restoreLuceneMatchVersion); - cleanup.run(); - break; - case FAIL: - restoreSysProps(restoreLuceneMatchVersion); - break; - case OK: - // we didn't modify any sysprops, but did verify that the warning message wasn't logged, so have - // to cleanup appenders, etc. - cleanup.run(); - break; - } + restoreSysProps(restoreLuceneMatchVersion); } } private static void restoreSysProps(String restoreLuceneMatchVersion) { - System.clearProperty(ICU_FIELD_UDVAS_PROPNAME); - System.clearProperty(ICU_TYPE_UDVAS_PROPNAME); - System.setProperty(TEST_LUCENE_MATCH_VERSION_PROPNAME, restoreLuceneMatchVersion); + if (restoreLuceneMatchVersion != null) { + System.clearProperty(ICU_FIELD_UDVAS_PROPNAME); + System.clearProperty(ICU_TYPE_UDVAS_PROPNAME); + System.setProperty(TEST_LUCENE_MATCH_VERSION_PROPNAME, restoreLuceneMatchVersion); + } } }
