This is an automated email from the ASF dual-hosted git repository. mattsicker pushed a commit to branch release-2.x in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git
commit 9e6cf16722871ba2d260efc11e5b4cc7538647a8 Author: Matt Sicker <[email protected]> AuthorDate: Mon Sep 7 11:30:04 2020 -0500 Migrate some parameterized tests to JUnit 5 As JUnit 5 uses method parameters instead of constructor parameters, this makes it a bit trickier to port JUnit 4 parameterized tests. Backported from 3.x. Signed-off-by: Matt Sicker <[email protected]> --- .../core/config/ConfigurationFactoryTest.java | 130 +++++++++++++++++ .../log4j/core/config/ConfigurationTest.java | 157 --------------------- .../logging/log4j/core/config/XIncludeTest.java | 139 ------------------ 3 files changed, 130 insertions(+), 296 deletions(-) diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/ConfigurationFactoryTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/ConfigurationFactoryTest.java new file mode 100644 index 0000000..b076721 --- /dev/null +++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/ConfigurationFactoryTest.java @@ -0,0 +1,130 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache license, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the license for the specific language governing permissions and + * limitations under the license. + */ + +package org.apache.logging.log4j.core.config; + +import org.apache.logging.log4j.Level; +import org.apache.logging.log4j.core.Appender; +import org.apache.logging.log4j.core.Filter; +import org.apache.logging.log4j.core.Logger; +import org.apache.logging.log4j.core.LoggerContext; +import org.apache.logging.log4j.core.appender.ConsoleAppender; +import org.apache.logging.log4j.core.filter.ThreadContextMapFilter; +import org.apache.logging.log4j.junit.LoggerContextSource; +import org.apache.logging.log4j.util.Strings; +import org.junit.jupiter.api.Tag; +import org.junit.jupiter.api.Test; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +import static org.apache.logging.log4j.util.Unbox.box; +import static org.junit.jupiter.api.Assertions.*; + +class ConfigurationFactoryTest { + + static final String LOGGER_NAME = "org.apache.logging.log4j.test1.Test"; + static final String FILE_LOGGER_NAME = "org.apache.logging.log4j.test2.Test"; + static final String APPENDER_NAME = "STDOUT"; + + /** + * Runs various configuration checks on a configured LoggerContext that should match the equivalent configuration in + * {@code log4j-test1.xml}. + */ + static void checkConfiguration(final LoggerContext context) { + final Configuration configuration = context.getConfiguration(); + final Map<String, Appender> appenders = configuration.getAppenders(); + // these used to be separate tests + assertAll(() -> assertNotNull(appenders), + () -> assertEquals(3, appenders.size()), + () -> assertNotNull(configuration.getLoggerContext()), + () -> assertEquals(configuration.getRootLogger(), configuration.getLoggerConfig(Strings.EMPTY)), + () -> assertThrows(NullPointerException.class, () -> configuration.getLoggerConfig(null))); + + final Logger logger = context.getLogger(LOGGER_NAME); + assertEquals(Level.DEBUG, logger.getLevel()); + + assertEquals(1, logger.filterCount()); + final Iterator<Filter> filterIterator = logger.getFilters(); + assertTrue(filterIterator.hasNext()); + assertTrue(filterIterator.next() instanceof ThreadContextMapFilter); + + final Appender appender = appenders.get(APPENDER_NAME); + assertTrue(appender instanceof ConsoleAppender); + assertEquals(APPENDER_NAME, appender.getName()); + } + + static void checkFileLogger(final LoggerContext context, final Path logFile) throws IOException { + final long currentThreadId = Thread.currentThread().getId(); + final Logger logger = context.getLogger(FILE_LOGGER_NAME); + logger.debug("Greetings from ConfigurationFactoryTest in thread#{}", box(currentThreadId)); + try { + final List<String> lines = Files.readAllLines(logFile); + assertEquals(1, lines.size()); + assertTrue(lines.get(0).endsWith(Long.toString(currentThreadId))); + } finally { + Files.delete(logFile); + } + } + + @Test + @LoggerContextSource("log4j-test1.xml") + void xml(final LoggerContext context) throws IOException { + checkConfiguration(context); + final Path logFile = Paths.get("target", "test-xml.log"); + checkFileLogger(context, logFile); + } + + @Test + @LoggerContextSource("log4j-xinclude.xml") + void xinclude(final LoggerContext context) throws IOException { + checkConfiguration(context); + final Path logFile = Paths.get("target", "test-xinclude.log"); + checkFileLogger(context, logFile); + } + + @Test + @Tag("json") + @LoggerContextSource("log4j-test1.json") + void json(final LoggerContext context) throws IOException { + checkConfiguration(context); + final Path logFile = Paths.get("target", "test-json.log"); + checkFileLogger(context, logFile); + } + + @Test + @Tag("yaml") + @LoggerContextSource("log4j-test1.yaml") + void yaml(final LoggerContext context) throws IOException { + checkConfiguration(context); + final Path logFile = Paths.get("target", "test-yaml.log"); + checkFileLogger(context, logFile); + } + + @Test + @LoggerContextSource("log4j-test1.properties") + void properties(final LoggerContext context) throws IOException { + checkConfiguration(context); + final Path logFile = Paths.get("target", "test-properties.log"); + checkFileLogger(context, logFile); + } +} diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/ConfigurationTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/ConfigurationTest.java deleted file mode 100644 index a7cfe17..0000000 --- a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/ConfigurationTest.java +++ /dev/null @@ -1,157 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache license, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the license for the specific language governing permissions and - * limitations under the license. - */ - -package org.apache.logging.log4j.core.config; - -import java.io.BufferedReader; -import java.io.FileReader; -import java.security.SecureRandom; -import java.util.Arrays; -import java.util.Collection; -import java.util.Iterator; -import java.util.Map; - -import org.apache.logging.log4j.Level; -import org.apache.logging.log4j.Logger; -import org.apache.logging.log4j.core.Appender; -import org.apache.logging.log4j.core.Filter; -import org.apache.logging.log4j.core.LoggerContext; -import org.apache.logging.log4j.core.filter.ThreadContextMapFilter; -import org.apache.logging.log4j.junit.CleanFiles; -import org.apache.logging.log4j.junit.LoggerContextRule; -import org.apache.logging.log4j.util.Strings; -import org.junit.Before; -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.RuleChain; -import org.junit.rules.TestRule; -import org.junit.runner.RunWith; -import org.junit.runners.Parameterized; -import org.junit.runners.Parameterized.Parameters; - -import static org.hamcrest.CoreMatchers.*; - -import static org.junit.Assert.*; - -/** - * Unit tests for testing various supported configuration file formats. Each configuration file format should provide a - * compatible configuration to get some sweet, sweet tests. - */ -@RunWith(Parameterized.class) -public class ConfigurationTest { - - private static final String LOGGER_NAME = "org.apache.logging.log4j.test1.Test"; - private static final String FILE_LOGGER_NAME = "org.apache.logging.log4j.test2.Test"; - private static final String APPENDER_NAME = "STDOUT"; - - private final String logFileName; - - @Rule - public TestRule rules; - - private final LoggerContextRule init; - - private LoggerContext ctx; - - private final SecureRandom random = new SecureRandom(); - - public ConfigurationTest(final String configFileName, final String logFileName) { - this.logFileName = logFileName; - this.init = new LoggerContextRule(configFileName); - rules = RuleChain.outerRule(new CleanFiles(logFileName)).around(this.init); - } - - @Parameters(name = "config={0}, log={1}") - public static Collection<Object[]> data() { - return Arrays.asList( - new Object[][]{ - {"classpath:log4j-test1.xml", "target/test-xml.log"}, - {"classpath:log4j-test1.json", "target/test-json.log"}, - {"classpath:log4j-test1.yaml", "target/test-yaml.log"}, - {"classpath:log4j-test1.properties", "target/test-properties.log"} - } - ); - } - - @Before - public void setUp() throws Exception { - this.ctx = this.init.getLoggerContext(); - } - - @Test - public void testConfiguredAppenders() throws Exception { - final Configuration configuration = this.ctx.getConfiguration(); - final Map<String, Appender> appenders = configuration.getAppenders(); - assertThat(appenders, is(notNullValue())); - assertThat(appenders.size(), is(equalTo(3))); - } - - @Test - public void testConfigurationLoggerContext() throws Exception { - final Configuration configuration = this.ctx.getConfiguration(); - assertThat(configuration.getLoggerContext(), is(notNullValue())); - } - - @Test - public void testGetLoggerConfigEmpty() throws Exception { - final Configuration config = this.ctx.getConfiguration(); - assertEquals(config.getRootLogger(), config.getLoggerConfig(Strings.EMPTY)); - } - - @Test(expected = NullPointerException.class) - public void testGetLoggerConfigNull() throws Exception { - final Configuration config = this.ctx.getConfiguration(); - assertEquals(config.getRootLogger(), config.getLoggerConfig(null)); - } - - @Test - public void testLogger() throws Exception { - final Logger logger = this.ctx.getLogger(LOGGER_NAME); - assertThat(logger, is(instanceOf(org.apache.logging.log4j.core.Logger.class))); - final org.apache.logging.log4j.core.Logger l = (org.apache.logging.log4j.core.Logger) logger; - assertThat(l.getLevel(), is(equalTo(Level.DEBUG))); - assertThat(l.filterCount(), is(equalTo(1))); - final Iterator<Filter> iterator = l.getFilters(); - assertThat(iterator.hasNext(), is(true)); - final Filter filter = iterator.next(); - assertThat(filter, is(instanceOf(ThreadContextMapFilter.class))); - final Map<String, Appender> appenders = l.getAppenders(); - assertThat(appenders, is(notNullValue())); - assertThat(appenders.size(), is(equalTo(1))); - final Appender appender = appenders.get(APPENDER_NAME); - assertThat(appender, is(notNullValue())); - assertThat(appender.getName(), is(equalTo("STDOUT"))); - } - - @Test - public void testLogToFile() throws Exception { - final Logger logger = this.ctx.getLogger(FILE_LOGGER_NAME); - final long random = this.random.nextLong(); - logger.debug("This is test message number {}", random); - int count = 0; - String line = Strings.EMPTY; - try (final BufferedReader in = new BufferedReader(new FileReader(this.logFileName))) { - while (in.ready()) { - ++count; - line = in.readLine(); - } - } - assertThat(count, is(equalTo(1))); - assertThat(line, endsWith(Long.toString(random))); - } - -} diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/XIncludeTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/XIncludeTest.java deleted file mode 100644 index 8847da1..0000000 --- a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/XIncludeTest.java +++ /dev/null @@ -1,139 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache license, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the license for the specific language governing permissions and - * limitations under the license. - */ - -package org.apache.logging.log4j.core.config; - -import java.io.BufferedReader; -import java.io.FileReader; -import java.security.SecureRandom; -import java.util.Arrays; -import java.util.Collection; -import java.util.Iterator; -import java.util.Map; - -import org.apache.logging.log4j.Level; -import org.apache.logging.log4j.Logger; -import org.apache.logging.log4j.core.Appender; -import org.apache.logging.log4j.core.Filter; -import org.apache.logging.log4j.core.LoggerContext; -import org.apache.logging.log4j.core.filter.ThreadContextMapFilter; -import org.apache.logging.log4j.junit.CleanFiles; -import org.apache.logging.log4j.junit.LoggerContextRule; -import org.apache.logging.log4j.util.Strings; -import org.junit.Before; -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.RuleChain; -import org.junit.rules.TestRule; -import org.junit.runner.RunWith; -import org.junit.runners.Parameterized; -import org.junit.runners.Parameterized.Parameters; - -import static org.apache.logging.log4j.hamcrest.MapMatchers.hasSize; -import static org.hamcrest.Matchers.endsWith; -import static org.hamcrest.Matchers.equalTo; -import static org.hamcrest.Matchers.instanceOf; -import static org.hamcrest.Matchers.is; -import static org.hamcrest.Matchers.notNullValue; -import static org.junit.Assert.*; - -/** - * Tests XInclude. - */ -@RunWith(Parameterized.class) -public class XIncludeTest { - - private static final String LOGGER_NAME = "org.apache.logging.log4j.test1.Test"; - private static final String FILE_LOGGER_NAME = "org.apache.logging.log4j.test2.Test"; - private static final String APPENDER_NAME = "STDOUT"; - - private final String logFileName; - - @Rule - public TestRule rules; - - private final LoggerContextRule init; - - private LoggerContext ctx; - - private final SecureRandom random = new SecureRandom(); - - public XIncludeTest(final String configFileName, final String logFileName) { - this.logFileName = logFileName; - this.init = new LoggerContextRule(configFileName); - this.rules = RuleChain.outerRule(new CleanFiles(logFileName)).around(this.init); - } - - @Parameters(name = "config={0}, log={1}") - public static Collection<Object[]> data() { - return Arrays.asList( - new Object[][]{ - {"classpath:log4j-xinclude.xml", "target/test-xinclude.log"}, - } - ); - } - - @Before - public void setUp() throws Exception { - this.ctx = this.init.getLoggerContext(); - } - - @Test - public void testConfiguredAppenders() throws Exception { - final Configuration configuration = this.ctx.getConfiguration(); - final Map<String, Appender> appenders = configuration.getAppenders(); - assertThat(appenders, is(notNullValue())); - assertThat(appenders.size(), is(equalTo(3))); - } - - @Test - public void testLogger() throws Exception { - final Logger logger = this.ctx.getLogger(LOGGER_NAME); - assertThat(logger, is(instanceOf(org.apache.logging.log4j.core.Logger.class))); - final org.apache.logging.log4j.core.Logger l = (org.apache.logging.log4j.core.Logger) logger; - assertThat(l.getLevel(), is(equalTo(Level.DEBUG))); - assertThat(l.filterCount(), is(equalTo(1))); - final Iterator<Filter> iterator = l.getFilters(); - assertThat(iterator.hasNext(), is(true)); - final Filter filter = iterator.next(); - assertThat(filter, is(instanceOf(ThreadContextMapFilter.class))); - final Map<String, Appender> appenders = l.getAppenders(); - assertThat(appenders, is(notNullValue())); - assertThat(appenders, hasSize(1)); - final Appender appender = appenders.get(APPENDER_NAME); - assertThat(appender, is(notNullValue())); - assertThat(appender.getName(), is(equalTo("STDOUT"))); - } - - @Test - public void testLogToFile() throws Exception { - final Logger logger = this.ctx.getLogger(FILE_LOGGER_NAME); - final long random = this.random.nextLong(); - logger.debug("This is test message number {}", random); - int count = 0; - String line = Strings.EMPTY; - try (BufferedReader in = new BufferedReader(new FileReader(this.logFileName))) { - while (in.ready()) { - ++count; - line = in.readLine(); - } - } - assertThat(count, is(equalTo(1))); - assertThat(line, endsWith(Long.toString(random))); - } - -}
