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 d0177664a386800ed45ac3bd35345a474d66e1ea Author: Matt Sicker <[email protected]> AuthorDate: Mon Sep 7 14:13:48 2020 -0500 Migrate more tests to JUnit 5 Signed-off-by: Matt Sicker <[email protected]> --- .../core/appender/AsyncAppenderNoLocationTest.java | 85 ----------- .../appender/AsyncAppenderQueueFullPolicyTest.java | 44 +++--- .../appender/AsyncAppenderShutdownTimeoutTest.java | 42 ------ .../log4j/core/appender/AsyncAppenderTest.java | 167 ++++++++++++--------- .../core/appender/ConsoleAppenderBuilderTest.java | 13 +- .../log4j/core/appender/ConsoleAppenderTest.java | 40 +++-- .../log4j/core/appender/FailoverAppenderTest.java | 60 ++++---- .../core/appender/FileAppenderBuilderTest.java | 7 +- .../core/appender/FileAppenderPermissionsTest.java | 136 ++++++++--------- .../FileAppenderPermissionsXmlConfigTest.java | 66 -------- .../log4j/core/appender/FileAppenderTest.java | 13 +- 11 files changed, 233 insertions(+), 440 deletions(-) diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/AsyncAppenderNoLocationTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/AsyncAppenderNoLocationTest.java deleted file mode 100644 index fdc95e9..0000000 --- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/AsyncAppenderNoLocationTest.java +++ /dev/null @@ -1,85 +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.appender; - -import java.util.List; - -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; -import org.apache.logging.log4j.junit.LoggerContextRule; -import org.apache.logging.log4j.test.appender.ListAppender; -import org.junit.After; -import org.junit.Before; -import org.junit.ClassRule; -import org.junit.Test; - -import static org.junit.Assert.*; - -/** - * - */ -public class AsyncAppenderNoLocationTest { - private ListAppender app; - - @ClassRule - public static LoggerContextRule init = null; - - static { - try { - init = new LoggerContextRule("log4j-asynch-no-location.xml"); - } catch (final Exception ex) { - ex.printStackTrace(); - } - } - - @Before - public void setUp() throws Exception { - try { - this.app = (ListAppender) init.getAppender("List"); - assertNotNull("No List appender found", app); - } catch (final Exception ex) { - System.out.println("init = " + init == null ? "null" : init); - - } - - } - - @After - public void after() { - if (app != null) { - app.clear(); - } - } - - @Test - public void testNoLocation() throws Exception { - final Logger logger = LogManager.getLogger(AsyncAppender.class); - logger.error("This is a test"); - logger.warn("Hello world!"); - Thread.sleep(100); - System.out.println("app = " + app == null ? "null" : app); - final List<String> list = app.getMessages(); - assertNotNull("No events generated", list); - assertEquals("Incorrect number of events. Expected 2, got " + list.size(), list.size(), 2); - String msg = list.get(0); - String expected = "? This is a test"; - assertEquals("Expected " + expected + ", Actual " + msg, expected, msg); - msg = list.get(1); - expected = "? Hello world!"; - assertEquals("Expected " + expected + ", Actual " + msg, expected, msg); - } -} diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/AsyncAppenderQueueFullPolicyTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/AsyncAppenderQueueFullPolicyTest.java index bdd2aa6..ef7a35f 100644 --- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/AsyncAppenderQueueFullPolicyTest.java +++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/AsyncAppenderQueueFullPolicyTest.java @@ -16,22 +16,21 @@ */ package org.apache.logging.log4j.core.appender; -import java.lang.reflect.Field; -import java.util.concurrent.atomic.AtomicLong; - import org.apache.logging.log4j.Level; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.core.async.DefaultAsyncQueueFullPolicy; import org.apache.logging.log4j.core.async.EventRoute; -import org.apache.logging.log4j.junit.LoggerContextRule; +import org.apache.logging.log4j.junit.LoggerContextSource; +import org.apache.logging.log4j.junit.Named; import org.apache.logging.log4j.test.appender.BlockingAppender; -import org.junit.After; -import org.junit.Before; -import org.junit.ClassRule; -import org.junit.Test; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.Test; + +import java.lang.reflect.Field; +import java.util.concurrent.atomic.AtomicLong; -import static org.junit.Assert.*; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * Tests the AsyncAppender (LOG4J2-1080) event routing logic: @@ -43,21 +42,18 @@ import static org.junit.Assert.*; * else queue.add(event) // blocking call * </pre> */ +@LoggerContextSource("log4j-asynch-queue-full.xml") public class AsyncAppenderQueueFullPolicyTest { - private static final String CONFIG = "log4j-asynch-queue-full.xml"; - - @ClassRule - public static LoggerContextRule context = new LoggerContextRule(CONFIG); - - private BlockingAppender blockingAppender; - private AsyncAppender asyncAppender; - private CountingAsyncQueueFullPolicy policy; - @Before - public void before() throws Exception { - blockingAppender = context.getAppender("Block", BlockingAppender.class); - asyncAppender = context.getAppender("Async", AsyncAppender.class); + private final BlockingAppender blockingAppender; + private final AsyncAppender asyncAppender; + private final CountingAsyncQueueFullPolicy policy; + public AsyncAppenderQueueFullPolicyTest( + @Named("Block") final BlockingAppender blockingAppender, @Named("Async") final AsyncAppender asyncAppender) + throws Exception { + this.blockingAppender = blockingAppender; + this.asyncAppender = asyncAppender; final Field field = AsyncAppender.class.getDeclaredField("asyncQueueFullPolicy"); field.setAccessible(true); policy = new CountingAsyncQueueFullPolicy(); @@ -65,7 +61,7 @@ public class AsyncAppenderQueueFullPolicyTest { policy.queueFull.set(0L); } - @After + @AfterEach public void after() { blockingAppender.running = false; policy.queueFull.set(0L); @@ -84,8 +80,8 @@ public class AsyncAppenderQueueFullPolicyTest { Thread.yield(); // wait until background thread takes one element off the queue } logger.info("event 5 - now the queue is full"); - assertEquals("queue remaining capacity", 0, asyncAppender.getQueueRemainingCapacity()); - assertEquals("EventRouter invocations", 0, policy.queueFull.get()); + assertEquals(0, asyncAppender.getQueueRemainingCapacity(), "queue remaining capacity"); + assertEquals(0, policy.queueFull.get(), "EventRouter invocations"); final Thread release = new Thread("AsyncAppenderReleaser") { @Override diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/AsyncAppenderShutdownTimeoutTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/AsyncAppenderShutdownTimeoutTest.java deleted file mode 100644 index fb37f09..0000000 --- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/AsyncAppenderShutdownTimeoutTest.java +++ /dev/null @@ -1,42 +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.appender; - -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; -import org.apache.logging.log4j.core.LoggerContext; -import org.apache.logging.log4j.junit.LoggerContextRule; -import org.junit.ClassRule; -import org.junit.Test; - -/** - * - */ -public class AsyncAppenderShutdownTimeoutTest { - - @ClassRule - public static LoggerContextRule init = new LoggerContextRule("log4j-asynch-shutdownTimeout.xml"); - - @Test(timeout = 5000) - public void shutdownTest() throws Exception { - final LoggerContext ctx = (LoggerContext)LogManager.getContext(false); - final Logger logger = ctx.getLogger("Logger"); - logger.info("This is a test"); - ctx.stop(); - } - -} diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/AsyncAppenderTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/AsyncAppenderTest.java index b2de774..d0f3f0d 100644 --- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/AsyncAppenderTest.java +++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/AsyncAppenderTest.java @@ -14,100 +14,121 @@ * See the license for the specific language governing permissions and * limitations under the license. */ -package org.apache.logging.log4j.core.appender; -import java.util.List; -import java.util.concurrent.TimeUnit; +package org.apache.logging.log4j.core.appender; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.LoggingException; -import org.apache.logging.log4j.categories.Appenders; -import org.apache.logging.log4j.junit.LoggerContextRule; +import org.apache.logging.log4j.core.LoggerContext; +import org.apache.logging.log4j.junit.LoggerContextSource; +import org.apache.logging.log4j.junit.Named; +import org.apache.logging.log4j.spi.ExtendedLogger; import org.apache.logging.log4j.test.appender.ListAppender; -import org.junit.After; -import org.junit.Before; -import org.junit.Rule; -import org.junit.Test; -import org.junit.experimental.categories.Category; -import org.junit.runner.RunWith; -import org.junit.runners.Parameterized; +import org.junit.jupiter.api.Tag; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.Timeout; -import static org.junit.Assert.*; +import java.util.List; +import java.util.concurrent.TimeUnit; -/** - * - */ -@RunWith(Parameterized.class) -@Category({Appenders.AsyncConversant.class, Appenders.AsyncJcTools.class}) -public class AsyncAppenderTest { +import static org.junit.jupiter.api.Assertions.*; - private static final long TIMEOUT_MILLIS = 2000; +class AsyncAppenderTest { - @Parameterized.Parameters(name = "{0}") - public static Object[] data() { - return new String[]{ - // default async config uses array blocking queue - "log4j-asynch.xml", - // override default blocking queue implementations - "BlockingQueueFactory-ArrayBlockingQueue.xml", - "BlockingQueueFactory-DisruptorBlockingQueue.xml", - "BlockingQueueFactory-JCToolsBlockingQueue.xml", - "BlockingQueueFactory-LinkedTransferQueue.xml" - }; + static void rewriteTest(final LoggerContext context) throws InterruptedException { + final ExtendedLogger logger = context.getLogger(AsyncAppender.class); + logger.error("This is a test"); + logger.warn("Hello world!"); + final ListAppender appender = context.getConfiguration().getAppender("List"); + final List<String> messages; + try { + messages = appender.getMessages(2, 2, TimeUnit.SECONDS); + } finally { + appender.clear(); + } + assertNotNull(messages); + assertEquals(2, messages.size()); + final String messagePrefix = AsyncAppenderTest.class.getName() + " rewriteTest "; + assertEquals(messagePrefix + "This is a test", messages.get(0)); + assertEquals(messagePrefix + "Hello world!", messages.get(1)); } - public AsyncAppenderTest(final String configFileName) { - context = new LoggerContextRule(configFileName); + static void exceptionTest(final LoggerContext context) throws InterruptedException { + final ExtendedLogger logger = context.getLogger(AsyncAppender.class); + final Exception parent = new IllegalStateException("Test"); + final Throwable child = new LoggingException("This is a test", parent); + logger.error("This is a test", child); + final ListAppender appender = context.getConfiguration().getAppender("List"); + final List<String> messages; + try { + messages = appender.getMessages(1, 2, TimeUnit.SECONDS); + } finally { + appender.clear(); + } + assertNotNull(messages); + assertEquals(1, messages.size()); + assertTrue(messages.get(0).contains(parent.getClass().getName())); } - @Rule - public LoggerContextRule context; + @Test + @LoggerContextSource("log4j-asynch.xml") + void defaultAsyncAppenderConfig(final LoggerContext context) throws InterruptedException { + rewriteTest(context); + exceptionTest(context); + } - private ListAppender listAppender; + @Test + @LoggerContextSource("BlockingQueueFactory-ArrayBlockingQueue.xml") + void arrayBlockingQueue(final LoggerContext context) throws InterruptedException { + rewriteTest(context); + exceptionTest(context); + } - @Before - public void before() throws Exception { - listAppender = context.getListAppender("List"); + @Test + @Tag("disruptor") + @LoggerContextSource("BlockingQueueFactory-DisruptorBlockingQueue.xml") + void disruptorBlockingQueue(final LoggerContext context) throws InterruptedException { + rewriteTest(context); + exceptionTest(context); } - @After - public void after() { - listAppender.clear(); + @Test + @Tag("jctools") + @LoggerContextSource("BlockingQueueFactory-JCToolsBlockingQueue.xml") + void jcToolsBlockingQueue(final LoggerContext context) throws InterruptedException { + rewriteTest(context); + exceptionTest(context); } @Test - public void rewriteTest() throws Exception { - final Logger logger = LogManager.getLogger(AsyncAppender.class); - logger.error("This is a test"); - logger.warn("Hello world!"); - final long timeoutMillis = TIMEOUT_MILLIS; - final TimeUnit timeUnit = TimeUnit.MILLISECONDS; - final List<String> list = listAppender.getMessages(2, timeoutMillis, timeUnit); - assertNotNull("No events generated", list); - assertTrue("Incorrect number of events after " + timeoutMillis + " " + timeUnit + ". Expected 2, got " - + list.size(), list.size() == 2); - String msg = list.get(0); - String expected = AsyncAppenderTest.class.getName() + " rewriteTest This is a test"; - assertTrue("Expected " + expected + ", Actual " + msg, expected.equals(msg)); - msg = list.get(1); - expected = AsyncAppenderTest.class.getName() + " rewriteTest Hello world!"; - assertTrue("Expected " + expected + ", Actual " + msg, expected.equals(msg)); + @LoggerContextSource("BlockingQueueFactory-LinkedTransferQueue.xml") + void linkedTransferQueue(final LoggerContext context) throws InterruptedException { + rewriteTest(context); + exceptionTest(context); } @Test - public void testException() throws Exception { - final Logger logger = LogManager.getLogger(AsyncAppender.class); - final Exception parent = new IllegalStateException("Test"); - final Throwable child = new LoggingException("This is a test", parent); - logger.error("This is a test", child); - final long timeoutMillis = TIMEOUT_MILLIS; - final TimeUnit timeUnit = TimeUnit.MILLISECONDS; - final List<String> list = listAppender.getMessages(1, timeoutMillis, timeUnit); - assertNotNull("No events generated", list); - assertTrue("Incorrect number of events after " + timeoutMillis + " " + timeUnit + ". Expected 1, got " - + list.size(), list.size() == 1); - final String msg = list.get(0); - assertTrue("No parent exception", msg.contains("java.lang.IllegalStateException")); + @Timeout(5) + @LoggerContextSource("log4j-asynch-shutdownTimeout.xml") + void shutdownTimeout(final LoggerContext context) { + context.getLogger("Logger").info("This is a test"); + context.stop(); + } + + @Test + @LoggerContextSource("log4j-asynch-no-location.xml") + void noLocationInformation(final LoggerContext context, @Named("List") final ListAppender appender) throws InterruptedException { + final ExtendedLogger logger = context.getLogger(getClass()); + logger.error("This is a test"); + logger.warn("Hello world!"); + final List<String> messages; + try { + messages = appender.getMessages(2, 2, TimeUnit.SECONDS); + } finally { + appender.clear(); + } + assertNotNull(messages); + assertEquals(2, messages.size()); + assertEquals("? This is a test", messages.get(0)); + assertEquals("? Hello world!", messages.get(1)); } } diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/ConsoleAppenderBuilderTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/ConsoleAppenderBuilderTest.java index d0ff679..44dfb9d 100644 --- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/ConsoleAppenderBuilderTest.java +++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/ConsoleAppenderBuilderTest.java @@ -20,8 +20,9 @@ import java.nio.charset.Charset; import org.apache.logging.log4j.core.ErrorHandler; import org.apache.logging.log4j.core.layout.PatternLayout; -import org.junit.Assert; -import org.junit.Test; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; public class ConsoleAppenderBuilderTest { @@ -30,7 +31,7 @@ public class ConsoleAppenderBuilderTest { */ @Test public void testDefaultImmediateFlush() { - Assert.assertTrue(ConsoleAppender.newBuilder().isImmediateFlush()); + assertTrue(ConsoleAppender.newBuilder().isImmediateFlush()); } /** @@ -44,7 +45,7 @@ public class ConsoleAppenderBuilderTest { final PatternLayout layout = (PatternLayout) appender.getLayout(); final String charsetName = System.getProperty("sun.stdout.encoding"); final String expectedName = charsetName != null ? charsetName : Charset.defaultCharset().name(); - Assert.assertEquals(expectedName, layout.getCharset().name()); + assertEquals(expectedName, layout.getCharset().name()); } /** @@ -54,10 +55,10 @@ public class ConsoleAppenderBuilderTest { public void testSetNullErrorHandlerIsNotAllowed() { final ConsoleAppender appender = ConsoleAppender.newBuilder().setName("test").build(); ErrorHandler handler = appender.getHandler(); - Assert.assertNotNull(handler); + assertNotNull(handler); // This could likely be allowed to throw, but we're just testing that // setting null does not actually set a null handler. appender.setHandler(null); - Assert.assertSame(handler, appender.getHandler()); + assertSame(handler, appender.getHandler()); } } diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/ConsoleAppenderTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/ConsoleAppenderTest.java index f75f903..7582c28 100644 --- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/ConsoleAppenderTest.java +++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/ConsoleAppenderTest.java @@ -27,35 +27,31 @@ import org.apache.logging.log4j.core.impl.Log4jLogEvent; import org.apache.logging.log4j.core.layout.PatternLayout; import org.apache.logging.log4j.message.SimpleMessage; import org.apache.logging.log4j.util.Strings; -import org.junit.AfterClass; -import org.junit.Assert; -import org.junit.Before; -import org.junit.BeforeClass; -import org.junit.Test; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Mock; -import org.mockito.runners.MockitoJUnitRunner; +import org.mockito.junit.jupiter.MockitoExtension; -import static org.junit.Assert.*; +import static org.junit.jupiter.api.Assertions.*; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.BDDMockito.then; import static org.mockito.Mockito.atLeastOnce; -/** - * - */ -@RunWith(MockitoJUnitRunner.class) +@ExtendWith(MockitoExtension.class) public class ConsoleAppenderTest { private static final String LOG4J_SKIP_JANSI = "log4j.skipJansi"; - @AfterClass + @AfterAll public static void afterClass() { System.clearProperty(LOG4J_SKIP_JANSI); } - @BeforeClass + @BeforeAll public static void beforeClass() { System.setProperty(LOG4J_SKIP_JANSI, "true"); } @@ -65,7 +61,7 @@ public class ConsoleAppenderTest { @Mock PrintStream psMock; - @Before + @BeforeEach public void before() { System.setProperty(LOG4J_SKIP_JANSI, "true"); baos = new ByteArrayOutputStream(); @@ -95,7 +91,7 @@ public class ConsoleAppenderTest { final ConsoleAppender app = ConsoleAppender.newBuilder().setLayout(layout).setTarget(targetName) .setName("Console").setIgnoreExceptions(false).build(); app.start(); - assertTrue("Appender did not start", app.isStarted()); + assertTrue(app.isStarted(), "Appender did not start"); final LogEvent event = Log4jLogEvent.newBuilder() // .setLoggerName("TestLogger") // @@ -106,7 +102,7 @@ public class ConsoleAppenderTest { app.append(event); app.stop(); - assertFalse("Appender did not stop", app.isStarted()); + assertFalse(app.isStarted(), "Appender did not stop"); } finally { systemSetter.systemSet(ps); } @@ -127,7 +123,7 @@ public class ConsoleAppenderTest { private void testFollowSystemPrintStream(final PrintStream ps, final Target target, final SystemSetter systemSetter) { final ConsoleAppender app = ConsoleAppender.newBuilder().setTarget(target).setFollow(true) .setIgnoreExceptions(false).setName("test").build(); - Assert.assertEquals(target, app.getTarget()); + assertEquals(target, app.getTarget()); app.start(); try { final LogEvent event = Log4jLogEvent.newBuilder() // @@ -137,7 +133,7 @@ public class ConsoleAppenderTest { .setMessage(new SimpleMessage("Test")) // .build(); - assertTrue("Appender did not start", app.isStarted()); + assertTrue(app.isStarted(), "Appender did not start"); systemSetter.systemSet(new PrintStream(baos)); try { app.append(event); @@ -145,12 +141,12 @@ public class ConsoleAppenderTest { systemSetter.systemSet(ps); } final String msg = baos.toString(); - assertNotNull("No message", msg); - assertTrue("Incorrect message: \"" + msg + "\"", msg.endsWith("Test" + Strings.LINE_SEPARATOR)); + assertNotNull(msg, "No message"); + assertTrue(msg.endsWith("Test" + Strings.LINE_SEPARATOR), "Incorrect message: \"" + msg + "\""); } finally { app.stop(); } - assertFalse("Appender did not stop", app.isStarted()); + assertFalse(app.isStarted(), "Appender did not stop"); } @Test diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/FailoverAppenderTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/FailoverAppenderTest.java index 4a649e4..54f8dbf 100644 --- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/FailoverAppenderTest.java +++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/FailoverAppenderTest.java @@ -16,45 +16,39 @@ */ package org.apache.logging.log4j.core.appender; -import java.util.List; - import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.core.LogEvent; -import org.apache.logging.log4j.junit.LoggerContextRule; +import org.apache.logging.log4j.core.LoggerContext; +import org.apache.logging.log4j.junit.LoggerContextSource; +import org.apache.logging.log4j.junit.Named; import org.apache.logging.log4j.test.appender.FailOnceAppender; import org.apache.logging.log4j.test.appender.ListAppender; -import org.junit.After; -import org.junit.Before; -import org.junit.ClassRule; -import org.junit.Test; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.Test; -import static org.junit.Assert.*; +import java.util.List; -/** - * - */ -public class FailoverAppenderTest { - private ListAppender app; - private FailOnceAppender foApp; - private Logger logger; - private Logger onceLogger; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; - @ClassRule - public static LoggerContextRule init = new LoggerContextRule("log4j-failover.xml"); +@LoggerContextSource("log4j-failover.xml") +public class FailoverAppenderTest { + private final ListAppender app; + private final FailOnceAppender foApp; + private final Logger logger; + private final Logger onceLogger; - @Before - public void setUp() throws Exception { - app = init.getListAppender("List"); - foApp = (FailOnceAppender) init.getAppender("Once"); - logger = init.getLogger("LoggerTest"); - onceLogger = init.getLogger("Once"); + public FailoverAppenderTest( + final LoggerContext context, @Named("List") final ListAppender app, @Named("Once") final FailOnceAppender foApp) { + this.app = app; + this.foApp = foApp; + logger = context.getLogger("LoggerTest"); + onceLogger = context.getLogger("Once"); } - @After + @AfterEach public void tearDown() throws Exception { - if (app != null) { - app.clear(); - } + app.clear(); } @Test @@ -62,12 +56,12 @@ public class FailoverAppenderTest { logger.error("This is a test"); List<LogEvent> events = app.getEvents(); assertNotNull(events); - assertEquals("Incorrect number of events. Should be 1 is " + events.size(), events.size(), 1); + assertEquals(events.size(), 1, "Incorrect number of events. Should be 1 is " + events.size()); app.clear(); logger.error("This is a test"); events = app.getEvents(); assertNotNull(events); - assertEquals("Incorrect number of events. Should be 1 is " + events.size(), events.size(), 1); + assertEquals(events.size(), 1, "Incorrect number of events. Should be 1 is " + events.size()); } @Test @@ -76,14 +70,14 @@ public class FailoverAppenderTest { onceLogger.error("Fail again"); List<LogEvent> events = app.getEvents(); assertNotNull(events); - assertEquals("Incorrect number of events. Should be 2 is " + events.size(), events.size(), 2); + assertEquals(events.size(), 2, "Incorrect number of events. Should be 2 is " + events.size()); app.clear(); Thread.sleep(1100); onceLogger.error("Fail after recovery interval"); onceLogger.error("Second log message"); events = app.getEvents(); - assertEquals("Did not recover", events.size(), 0); + assertEquals(events.size(), 0, "Did not recover"); events = foApp.getEvents(); - assertEquals("Incorrect number of events in primary appender", events.size(), 2); + assertEquals(events.size(), 2, "Incorrect number of events in primary appender"); } } diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/FileAppenderBuilderTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/FileAppenderBuilderTest.java index 8305a07..f27fb8f 100644 --- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/FileAppenderBuilderTest.java +++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/FileAppenderBuilderTest.java @@ -16,8 +16,9 @@ */ package org.apache.logging.log4j.core.appender; -import org.junit.Assert; -import org.junit.Test; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertTrue; public class FileAppenderBuilderTest { @@ -26,6 +27,6 @@ public class FileAppenderBuilderTest { */ @Test public void testDefaultImmediateFlush() { - Assert.assertTrue(FileAppender.newBuilder().isImmediateFlush()); + assertTrue(FileAppender.newBuilder().isImmediateFlush()); } } diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/FileAppenderPermissionsTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/FileAppenderPermissionsTest.java index 396be82..c287e7e 100644 --- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/FileAppenderPermissionsTest.java +++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/FileAppenderPermissionsTest.java @@ -16,76 +16,54 @@ */ package org.apache.logging.log4j.core.appender; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; - -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.nio.charset.Charset; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.attribute.PosixFileAttributes; -import java.nio.file.attribute.PosixFilePermissions; -import java.util.Arrays; -import java.util.Collection; -import java.util.List; - import org.apache.commons.lang3.SystemUtils; import org.apache.logging.log4j.Level; import org.apache.logging.log4j.core.Layout; import org.apache.logging.log4j.core.LogEvent; +import org.apache.logging.log4j.core.LoggerContext; import org.apache.logging.log4j.core.impl.Log4jLogEvent; import org.apache.logging.log4j.core.layout.PatternLayout; import org.apache.logging.log4j.core.util.FileUtils; +import org.apache.logging.log4j.junit.CleanUpDirectories; +import org.apache.logging.log4j.junit.LoggerContextSource; import org.apache.logging.log4j.message.SimpleMessage; -import org.junit.Assert; -import org.junit.Assume; -import org.junit.BeforeClass; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.junit.runners.Parameterized; +import org.apache.logging.log4j.spi.ExtendedLogger; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.CsvSource; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.file.attribute.PosixFileAttributes; +import java.nio.file.attribute.PosixFilePermissions; +import java.util.stream.Stream; + +import static org.apache.logging.log4j.util.Unbox.box; +import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assumptions.assumeTrue; /** * Tests {@link FileAppender}. */ -@RunWith(Parameterized.class) +@CleanUpDirectories(FileAppenderPermissionsTest.DIR) public class FileAppenderPermissionsTest { - private static final String DIR = "target/permissions1"; - - @Parameterized.Parameters(name = "{0} {1} {2}") - public static Collection<Object[]> data() throws IOException { - return Arrays.asList(new Object[][] { // - // @formatter:off - {"rwxrwxrwx", true, 2}, - {"rw-r--r--", false, 3}, - {"rw-------", true, 4}, - {"rw-rw----", false, 5}, - }); - // @formatter:on - } - - private final boolean createOnDemand; - private final String filePermissions; - private final int fileIndex; + static final String DIR = "target/permissions1"; - public FileAppenderPermissionsTest(final String filePermissions, final boolean createOnDemand, final int fileIndex) { - this.filePermissions = filePermissions; - this.createOnDemand = createOnDemand; - this.fileIndex = fileIndex; - } - - @BeforeClass + @BeforeAll public static void beforeClass() { System.setProperty("log4j2.debug", "true"); - Assume.assumeTrue(FileUtils.isFilePosixAttributeViewSupported()); + assumeTrue(FileUtils.isFilePosixAttributeViewSupported()); } - @Test - public void testFilePermissionsAPI() throws Exception { + @ParameterizedTest + @CsvSource({ "rwxrwxrwx,true,2", "rw-r--r--,false,3", "rw-------,true,4", "rw-rw----,false,5" }) + public void testFilePermissionsAPI(final String filePermissions, final boolean createOnDemand, final int fileIndex) + throws Exception { final File file = new File(DIR, "AppenderTest-" + fileIndex + ".log"); final Path path = file.toPath(); final Layout<String> layout = PatternLayout.newBuilder().setPattern(PatternLayout.SIMPLE_CONVERSION_PATTERN) @@ -105,11 +83,11 @@ public class FileAppenderPermissionsTest { // @formatter:on try { appender.start(); - assertTrue("Appender did not start", appender.isStarted()); - Assert.assertNotEquals(createOnDemand, Files.exists(path)); + assertTrue(appender.isStarted(), "Appender did not start"); + assertNotEquals(createOnDemand, Files.exists(path)); long curLen = file.length(); long prevLen = curLen; - assertTrue("File length: " + curLen, curLen == 0); + assertEquals(curLen, 0, "File length: " + curLen); for (int i = 0; i < 100; ++i) { final LogEvent event = Log4jLogEvent.newBuilder().setLoggerName("TestLogger") // .setLoggerFqcn(FileAppenderPermissionsTest.class.getName()).setLevel(Level.INFO) // @@ -118,7 +96,7 @@ public class FileAppenderPermissionsTest { try { appender.append(event); curLen = file.length(); - assertTrue("File length: " + curLen, curLen > prevLen); + assertTrue(curLen > prevLen, "File length: " + curLen); // Give up control long enough for another thread/process to occasionally do something. Thread.sleep(25); } catch (final Exception ex) { @@ -129,13 +107,14 @@ public class FileAppenderPermissionsTest { assertEquals(filePermissions, PosixFilePermissions.toString(Files.getPosixFilePermissions(path))); } finally { appender.stop(); - Files.deleteIfExists(path); } - assertFalse("Appender did not stop", appender.isStarted()); + assertFalse(appender.isStarted(), "Appender did not stop"); } - - @Test - public void testFileUserGroupAPI() throws Exception { + + @ParameterizedTest + @CsvSource({ "rwxrwxrwx,2", "rw-r--r--,3", "rw-------,4", "rw-rw----,5" }) + public void testFileUserGroupAPI(final String filePermissions, final int fileIndex) + throws Exception { final File file = new File(DIR, "AppenderTest-" + (1000 + fileIndex) + ".log"); final Path path = file.toPath(); final String user = findAUser(); @@ -161,10 +140,10 @@ public class FileAppenderPermissionsTest { // @formatter:on try { appender.start(); - assertTrue("Appender did not start", appender.isStarted()); + assertTrue(appender.isStarted(), "Appender did not start"); long curLen = file.length(); long prevLen = curLen; - assertTrue(file + " File length: " + curLen, curLen == 0); + assertEquals(curLen, 0, file + " File length: " + curLen); for (int i = 0; i < 100; ++i) { final LogEvent event = Log4jLogEvent.newBuilder().setLoggerName("TestLogger") // .setLoggerFqcn(FileAppenderPermissionsTest.class.getName()).setLevel(Level.INFO) // @@ -173,7 +152,7 @@ public class FileAppenderPermissionsTest { try { appender.append(event); curLen = file.length(); - assertTrue("File length: " + curLen, curLen > prevLen); + assertTrue(curLen > prevLen, "File length: " + curLen); // Give up control long enough for another thread/process to occasionally do something. Thread.sleep(25); } catch (final Exception ex) { @@ -186,27 +165,32 @@ public class FileAppenderPermissionsTest { assertEquals(group, Files.readAttributes(path, PosixFileAttributes.class).group().getName()); } finally { appender.stop(); - Files.deleteIfExists(path); } - assertFalse("Appender did not stop", appender.isStarted()); + assertFalse(appender.isStarted(), "Appender did not stop"); + } + + @Test + @LoggerContextSource(value = "log4j-posix.xml", timeout = 10) + void testFilePermissions(final LoggerContext context) throws IOException { + final ExtendedLogger logger = context.getLogger(getClass()); + for (int i = 0; i < 1000; i++) { + logger.debug("This is test message number {}", box(i)); + } + final String permissions = PosixFilePermissions.toString( + Files.getPosixFilePermissions(Paths.get("target/permissions1/AppenderTest-1.log"))); + assertEquals("rw-------", permissions); } public static String findAGroup(final String user) throws IOException { if (SystemUtils.IS_OS_MAC_OSX) { return "staff"; } - String group = user; - try (FileInputStream fis = new FileInputStream("/etc/group")) { - final List<String> groups = org.apache.commons.io.IOUtils.readLines(fis, Charset.defaultCharset()); - for (int i = 0; i < groups.size(); i++) { - final String aGroup = groups.get(i); - if (!aGroup.startsWith(user) && aGroup.contains(user)) { - group = aGroup.split(":")[0]; - break; - } - } + try (final Stream<String> lines = Files.lines(Paths.get("/etc/group"))) { + return lines.filter(group -> !group.startsWith(user) && group.contains(user)) + .map(group -> group.substring(0, group.indexOf(':'))) + .findAny() + .orElse(user); } - return group; } private static String findAUser() throws IOException { diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/FileAppenderPermissionsXmlConfigTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/FileAppenderPermissionsXmlConfigTest.java deleted file mode 100644 index dd1dc81..0000000 --- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/FileAppenderPermissionsXmlConfigTest.java +++ /dev/null @@ -1,66 +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.appender; - -import static org.junit.Assert.assertEquals; - -import java.nio.file.Files; -import java.nio.file.Paths; -import java.nio.file.attribute.PosixFilePermissions; - -import org.apache.logging.log4j.Logger; -import org.apache.logging.log4j.core.util.FileUtils; -import org.apache.logging.log4j.junit.LoggerContextRule; -import org.junit.Assume; -import org.junit.BeforeClass; -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.RuleChain; - -/** - * Tests {@link FileAppender}. - */ -public class FileAppenderPermissionsXmlConfigTest { - - private static final String DIR = "target/permissions1"; - - private static final String CONFIG = "log4j-posix.xml"; - - public static LoggerContextRule loggerContextRule = LoggerContextRule.createShutdownTimeoutLoggerContextRule(CONFIG); - - @Rule - public RuleChain chain = loggerContextRule.withCleanFoldersRule(DIR); - - @BeforeClass - public static void beforeClass() { - Assume.assumeTrue(FileUtils.isFilePosixAttributeViewSupported()); - } - - @Test - public void testFilePermissions() throws Exception { - final Logger logger = loggerContextRule.getLogger(FileAppenderPermissionsTest.class); - for (int i = 0; i < 1000; ++i) { - final String message = "This is test message number " + i; - logger.debug(message); - } - assertEquals("rw-------", PosixFilePermissions.toString( - Files.getPosixFilePermissions(Paths.get("target/permissions1/AppenderTest-1.log")))); - } - - -} diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/FileAppenderTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/FileAppenderTest.java index ac7528d..223ce3e 100644 --- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/FileAppenderTest.java +++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/FileAppenderTest.java @@ -19,7 +19,6 @@ package org.apache.logging.log4j.core.appender; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; -import java.io.IOException; import java.io.InputStreamReader; import java.nio.file.Files; import java.nio.file.Path; @@ -36,10 +35,9 @@ import org.apache.logging.log4j.core.LogEvent; import org.apache.logging.log4j.core.impl.Log4jLogEvent; import org.apache.logging.log4j.core.layout.PatternLayout; import org.apache.logging.log4j.core.util.Throwables; +import org.apache.logging.log4j.junit.CleanUpFiles; import org.apache.logging.log4j.message.SimpleMessage; import org.junit.jupiter.api.AfterAll; -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; @@ -49,9 +47,10 @@ import static org.junit.jupiter.api.Assertions.*; /** * Tests {@link FileAppender}. */ +@CleanUpFiles(FileAppenderTest.FILE_NAME) public class FileAppenderTest { - private static final String FILE_NAME = "target/fileAppenderTest.log"; + static final String FILE_NAME = "target/fileAppenderTest.log"; private static final Path PATH = Paths.get(FILE_NAME); private static final int THREADS = 2; @@ -60,12 +59,6 @@ public class FileAppenderTest { assertFalse(AbstractManager.hasManager(FILE_NAME), "Manager for " + FILE_NAME + " not removed"); } - @BeforeEach - @AfterEach - void cleanFiles() throws IOException { - Files.deleteIfExists(PATH); - } - @ParameterizedTest @ValueSource(booleans = { false, true }) public void testAppender(final boolean createOnDemand) throws Exception {
