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 19:14:23 UTC

[logging-log4j2] 03/03: Migrate more 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 d0177664a386800ed45ac3bd35345a474d66e1ea
Author: Matt Sicker <bo...@gmail.com>
AuthorDate: Mon Sep 7 14:13:48 2020 -0500

    Migrate more tests to JUnit 5
    
    Signed-off-by: Matt Sicker <bo...@gmail.com>
---
 .../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 {