You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by ma...@apache.org on 2020/09/07 16:30:23 UTC
[logging-log4j2] 02/02: Migrate some parameterized tests to JUnit 5
This is an automated email from the ASF dual-hosted git repository.
mattsicker pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git
commit 4054886b5df3e2b0143d6624bf541706e32f1f77
Author: Matt Sicker <bo...@gmail.com>
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.
Signed-off-by: Matt Sicker <bo...@gmail.com>
---
.../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 a9b48e7..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)));
- }
-
-}