Merge pull request #420 from Marcono1234/marcono1234/site-typo-fixes

(doc) Fix typos in manual
diff --git a/log4j-api/pom.xml b/log4j-api/pom.xml
index e0624f8..dcf060d 100644
--- a/log4j-api/pom.xml
+++ b/log4j-api/pom.xml
@@ -165,6 +165,23 @@
       </plugin>
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-surefire-plugin</artifactId>
+        <configuration>
+          <properties>
+            <configurationParameters>
+              <!-- LOG4J2-2921: use parallel test execution by default -->
+              junit.jupiter.execution.parallel.enabled = true
+              junit.jupiter.execution.parallel.mode.default = concurrent
+            </configurationParameters>
+          </properties>
+          <forkCount>1C</forkCount>
+          <reuseForks>true</reuseForks>
+          <redirectTestOutputToFile>true</redirectTestOutputToFile>
+          <excludedGroups>performance,smoke</excludedGroups>
+        </configuration>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-jar-plugin</artifactId>
         <executions>
           <execution>
diff --git a/log4j-api/src/test/java/org/apache/logging/log4j/AbstractLoggerTest.java b/log4j-api/src/test/java/org/apache/logging/log4j/AbstractLoggerTest.java
index 914e0d0..817f082 100644
--- a/log4j-api/src/test/java/org/apache/logging/log4j/AbstractLoggerTest.java
+++ b/log4j-api/src/test/java/org/apache/logging/log4j/AbstractLoggerTest.java
@@ -16,11 +16,7 @@
  */
 package org.apache.logging.log4j;
 
-import static org.hamcrest.CoreMatchers.containsString;
-import static org.hamcrest.MatcherAssert.*;
-import static org.junit.jupiter.api.Assertions.*;
-
-import org.apache.logging.log4j.junit.StatusLoggerLevelExtension;
+import org.apache.logging.log4j.junit.StatusLoggerLevel;
 import org.apache.logging.log4j.message.Message;
 import org.apache.logging.log4j.message.ObjectMessage;
 import org.apache.logging.log4j.message.ParameterizedMessage;
@@ -32,10 +28,16 @@
 import org.apache.logging.log4j.util.MessageSupplier;
 import org.apache.logging.log4j.util.Supplier;
 import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.RegisterExtension;
+import org.junit.jupiter.api.parallel.ResourceLock;
 
 import java.util.List;
 
+import static org.hamcrest.CoreMatchers.containsString;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.*;
+
+@StatusLoggerLevel("WARN")
+@ResourceLock("log4j2.MarkerManager")
 public class AbstractLoggerTest {
 
     private static final StringBuilder CHAR_SEQ = new StringBuilder("CharSeq");
@@ -59,9 +61,6 @@
     private static final Marker MARKER = MarkerManager.getMarker("TEST");
     private static final String MARKER_NAME = "TEST";
 
-    @RegisterExtension
-    public StatusLoggerLevelExtension status = new StatusLoggerLevelExtension(Level.WARN);
-
     private static final LogEvent[] EVENTS = new LogEvent[] {
         new LogEvent(null, simple, null),
         new LogEvent(MARKER_NAME, simple, null),
@@ -886,6 +885,7 @@
     }
 
     @Test
+    @ResourceLock("log4j2.StatusLogger")
     public void testMessageThrows() {
         final ThrowableExpectingLogger logger = new ThrowableExpectingLogger(false);
         logger.error(new TestMessage(() -> {
@@ -900,6 +900,7 @@
     }
 
     @Test
+    @ResourceLock("log4j2.StatusLogger")
     public void testMessageThrowsAndNullFormat() {
         final ThrowableExpectingLogger logger = new ThrowableExpectingLogger(false);
         logger.error(new TestMessage(() -> {
diff --git a/log4j-api/src/test/java/org/apache/logging/log4j/CloseableThreadContextTest.java b/log4j-api/src/test/java/org/apache/logging/log4j/CloseableThreadContextTest.java
index 54ea122..9acafad 100644
--- a/log4j-api/src/test/java/org/apache/logging/log4j/CloseableThreadContextTest.java
+++ b/log4j-api/src/test/java/org/apache/logging/log4j/CloseableThreadContextTest.java
@@ -16,8 +16,12 @@
  */
 package org.apache.logging.log4j;
 
-import org.apache.logging.log4j.junit.UsingAnyThreadContext;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.ResourceAccessMode;
+import org.junit.jupiter.api.parallel.ResourceLock;
+import org.junit.jupiter.api.parallel.Resources;
 
 import java.util.HashMap;
 import java.util.List;
@@ -30,12 +34,18 @@
  *
  * @since 2.6
  */
-@UsingAnyThreadContext
+@ResourceLock(value = Resources.SYSTEM_PROPERTIES, mode = ResourceAccessMode.READ)
 public class CloseableThreadContextTest {
 
     private final String key = "key";
     private final String value = "value";
 
+    @BeforeEach
+    @AfterEach
+    void clearThreadContext() {
+        ThreadContext.clearAll();
+    }
+
     @Test
     public void shouldAddAnEntryToTheMap() {
         try (final CloseableThreadContext.Instance ignored = CloseableThreadContext.put(key, value)) {
diff --git a/log4j-api/src/test/java/org/apache/logging/log4j/EventLoggerTest.java b/log4j-api/src/test/java/org/apache/logging/log4j/EventLoggerTest.java
index a778a45..fe66f2e 100644
--- a/log4j-api/src/test/java/org/apache/logging/log4j/EventLoggerTest.java
+++ b/log4j-api/src/test/java/org/apache/logging/log4j/EventLoggerTest.java
@@ -19,12 +19,14 @@
 import org.apache.logging.log4j.message.StructuredDataMessage;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.ResourceLock;
 
 import java.util.List;
 import java.util.Locale;
 
 import static org.assertj.core.api.Assertions.assertThat;
 
+@ResourceLock("log4j2.TestLogger")
 public class EventLoggerTest {
 
     TestLogger logger = (TestLogger) LogManager.getLogger("EventLogger");
diff --git a/log4j-api/src/test/java/org/apache/logging/log4j/LogManagerTest.java b/log4j-api/src/test/java/org/apache/logging/log4j/LogManagerTest.java
index 8aa150d..c768118 100644
--- a/log4j-api/src/test/java/org/apache/logging/log4j/LogManagerTest.java
+++ b/log4j-api/src/test/java/org/apache/logging/log4j/LogManagerTest.java
@@ -19,6 +19,9 @@
 import org.apache.logging.log4j.message.ParameterizedMessageFactory;
 import org.apache.logging.log4j.spi.LoggerContext;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.ResourceAccessMode;
+import org.junit.jupiter.api.parallel.ResourceLock;
+import org.junit.jupiter.api.parallel.Resources;
 
 import java.io.Closeable;
 import java.io.IOException;
@@ -26,6 +29,7 @@
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 
+@ResourceLock(value = Resources.SYSTEM_PROPERTIES, mode = ResourceAccessMode.READ)
 public class LogManagerTest {
 
     @SuppressWarnings("InnerClassMayBeStatic")
diff --git a/log4j-api/src/test/java/org/apache/logging/log4j/LoggerSupplierTest.java b/log4j-api/src/test/java/org/apache/logging/log4j/LoggerSupplierTest.java
index e8c7b39..5ca79ab 100644
--- a/log4j-api/src/test/java/org/apache/logging/log4j/LoggerSupplierTest.java
+++ b/log4j-api/src/test/java/org/apache/logging/log4j/LoggerSupplierTest.java
@@ -30,15 +30,21 @@
 import org.junit.jupiter.api.AfterEach;

 import org.junit.jupiter.api.BeforeEach;

 import org.junit.jupiter.api.Test;

+import org.junit.jupiter.api.parallel.ResourceAccessMode;

+import org.junit.jupiter.api.parallel.ResourceLock;

+import org.junit.jupiter.api.parallel.Resources;

 

 import java.util.List;

 import java.util.Locale;

+import java.util.Properties;

 

 import static org.assertj.core.api.Assertions.assertThat;

 

 /**

  * Tests Logger APIs with {@link Supplier}.

  */

+@ResourceLock(Resources.LOCALE)

+@ResourceLock("log4j2.TestLogger")

 public class LoggerSupplierTest {

 

     private final TestLogger logger = (TestLogger) LogManager.getLogger("LoggerTest");

@@ -59,11 +65,13 @@
 

     @Test

     public void flowTracing_SupplierOfJsonMessage() {

-        logger.traceEntry(() -> new JsonMessage(System.getProperties()));

+        Properties props = new Properties();

+        props.setProperty("foo", "bar");

+        logger.traceEntry(() -> new JsonMessage(props));

         assertThat(results).hasSize(1);

         String entry = results.get(0);

         assertThat(entry).startsWith("ENTER[ FLOW ] TRACE Enter")

-                .contains("\"java.runtime.name\":")

+                .contains("\"foo\":\"bar\"")

                 .doesNotContain("JsonMessage");

     }

 

diff --git a/log4j-api/src/test/java/org/apache/logging/log4j/LoggerTest.java b/log4j-api/src/test/java/org/apache/logging/log4j/LoggerTest.java
index 7a04fbf..1c25397 100644
--- a/log4j-api/src/test/java/org/apache/logging/log4j/LoggerTest.java
+++ b/log4j-api/src/test/java/org/apache/logging/log4j/LoggerTest.java
@@ -30,15 +30,21 @@
 import org.apache.logging.log4j.util.Supplier;

 import org.junit.jupiter.api.BeforeEach;

 import org.junit.jupiter.api.Test;

+import org.junit.jupiter.api.parallel.ResourceAccessMode;

+import org.junit.jupiter.api.parallel.ResourceLock;

+import org.junit.jupiter.api.parallel.Resources;

 

 import java.util.Date;

 import java.util.List;

 import java.util.Locale;

+import java.util.Properties;

 

 import static org.hamcrest.CoreMatchers.*;

 import static org.hamcrest.MatcherAssert.assertThat;

 import static org.junit.jupiter.api.Assertions.*;

 

+@ResourceLock("log4j2.MarkerManager")

+@ResourceLock("log4j2.TestLogger")

 public class LoggerTest {

 

     private static class TestParameterizedMessageFactory {

@@ -60,12 +66,12 @@
         logger.atWarn().withThrowable(new Throwable("This is a test")).log((Message) new SimpleMessage("Log4j rocks!"));

         assertEquals(3, results.size());

         assertThat("Incorrect message 1", results.get(0),

-                equalTo(" DEBUG org.apache.logging.log4j.LoggerTest.builder(LoggerTest.java:58) Hello"));

+                equalTo(" DEBUG org.apache.logging.log4j.LoggerTest.builder(LoggerTest.java:64) Hello"));

         assertThat("Incorrect message 2", results.get(1), equalTo("test ERROR Hello John"));

         assertThat("Incorrect message 3", results.get(2),

                 startsWith(" WARN Log4j rocks! java.lang.Throwable: This is a test"));

         assertThat("Throwable incorrect in message 3", results.get(2),

-                containsString("at org.apache.logging.log4j.LoggerTest.builder(LoggerTest.java:60)"));

+                containsString("at org.apache.logging.log4j.LoggerTest.builder(LoggerTest.java:66)"));

     }

 

     @Test

@@ -80,12 +86,14 @@
 

     @Test

     public void flowTracingMessage() {

-        logger.traceEntry(new JsonMessage(System.getProperties()));

+        Properties props = new Properties();

+        props.setProperty("foo", "bar");

+        logger.traceEntry(new JsonMessage(props));

         final Response response = new Response(-1, "Generic error");

         logger.traceExit(new JsonMessage(response),  response);

         assertEquals(2, results.size());

         assertThat("Incorrect Entry", results.get(0), startsWith("ENTER[ FLOW ] TRACE Enter"));

-        assertThat("Missing entry data", results.get(0), containsString("\"java.runtime.name\":"));

+        assertThat("Missing entry data", results.get(0), containsString("\"foo\":\"bar\""));

         assertThat("incorrect Exit", results.get(1), startsWith("EXIT[ FLOW ] TRACE Exit"));

         assertThat("Missing exit data", results.get(1), containsString("\"message\":\"Generic error\""));

     }

diff --git a/log4j-api/src/test/java/org/apache/logging/log4j/MarkerTest.java b/log4j-api/src/test/java/org/apache/logging/log4j/MarkerTest.java
index 1b6f251..1b72d1a 100644
--- a/log4j-api/src/test/java/org/apache/logging/log4j/MarkerTest.java
+++ b/log4j-api/src/test/java/org/apache/logging/log4j/MarkerTest.java
@@ -18,9 +18,11 @@
 
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.ResourceLock;
 
 import static org.junit.jupiter.api.Assertions.*;
 
+@ResourceLock("log4j2.MarkerManager")
 public class MarkerTest {
 
     @BeforeEach
diff --git a/log4j-api/src/test/java/org/apache/logging/log4j/NoopThreadContextTest.java b/log4j-api/src/test/java/org/apache/logging/log4j/NoopThreadContextTest.java
index 992b13c..5c79106 100644
--- a/log4j-api/src/test/java/org/apache/logging/log4j/NoopThreadContextTest.java
+++ b/log4j-api/src/test/java/org/apache/logging/log4j/NoopThreadContextTest.java
@@ -19,12 +19,15 @@
 import org.junit.jupiter.api.AfterAll;
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.ResourceLock;
+import org.junit.jupiter.api.parallel.Resources;
 
 import static org.junit.jupiter.api.Assertions.assertNull;
 
 /**
  * Tests {@link ThreadContext}.
  */
+@ResourceLock(Resources.SYSTEM_PROPERTIES)
 public class NoopThreadContextTest {
 
     private static final String TRUE = "true";
diff --git a/log4j-api/src/test/java/org/apache/logging/log4j/ThreadContextInheritanceTest.java b/log4j-api/src/test/java/org/apache/logging/log4j/ThreadContextInheritanceTest.java
index f1cc91e..76f8ccd 100644
--- a/log4j-api/src/test/java/org/apache/logging/log4j/ThreadContextInheritanceTest.java
+++ b/log4j-api/src/test/java/org/apache/logging/log4j/ThreadContextInheritanceTest.java
@@ -22,6 +22,8 @@
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Tag;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.ResourceLock;
+import org.junit.jupiter.api.parallel.Resources;
 
 import static org.junit.jupiter.api.Assertions.*;
 
@@ -29,6 +31,7 @@
  * Tests {@link ThreadContext}.
  */
 @UsingAnyThreadContext
+@ResourceLock(Resources.SYSTEM_PROPERTIES)
 public class ThreadContextInheritanceTest {
 
     @BeforeAll
diff --git a/log4j-api/src/test/java/org/apache/logging/log4j/junit/CleanUpDirectories.java b/log4j-api/src/test/java/org/apache/logging/log4j/junit/CleanUpDirectories.java
index 3cdceda..6c398e6 100644
--- a/log4j-api/src/test/java/org/apache/logging/log4j/junit/CleanUpDirectories.java
+++ b/log4j-api/src/test/java/org/apache/logging/log4j/junit/CleanUpDirectories.java
@@ -35,7 +35,7 @@
  * @since 2.14.0
  */
 @Retention(RetentionPolicy.RUNTIME)
-@Target(ElementType.TYPE)
+@Target({ElementType.TYPE, ElementType.METHOD})
 @Documented
 @Inherited
 @ExtendWith(DirectoryCleaner.class)
diff --git a/log4j-api/src/test/java/org/apache/logging/log4j/junit/CleanUpFiles.java b/log4j-api/src/test/java/org/apache/logging/log4j/junit/CleanUpFiles.java
index b58d8f8..a3b9ca6 100644
--- a/log4j-api/src/test/java/org/apache/logging/log4j/junit/CleanUpFiles.java
+++ b/log4j-api/src/test/java/org/apache/logging/log4j/junit/CleanUpFiles.java
@@ -35,7 +35,7 @@
  * @since 2.14.0
  */
 @Retention(RetentionPolicy.RUNTIME)
-@Target(ElementType.TYPE)
+@Target({ElementType.TYPE, ElementType.METHOD})
 @Documented
 @Inherited
 @ExtendWith(FileCleaner.class)
diff --git a/log4j-api/src/test/java/org/apache/logging/log4j/junit/DirectoryCleaner.java b/log4j-api/src/test/java/org/apache/logging/log4j/junit/DirectoryCleaner.java
index efa971b..26f5518 100644
--- a/log4j-api/src/test/java/org/apache/logging/log4j/junit/DirectoryCleaner.java
+++ b/log4j-api/src/test/java/org/apache/logging/log4j/junit/DirectoryCleaner.java
@@ -26,17 +26,26 @@
 import java.nio.file.Paths;
 import java.nio.file.SimpleFileVisitor;
 import java.nio.file.attribute.BasicFileAttributes;
-import java.util.Arrays;
 import java.util.Collection;
-import java.util.Collections;
-import java.util.stream.Collectors;
+import java.util.HashSet;
 
 class DirectoryCleaner extends AbstractFileCleaner {
     @Override
     Collection<Path> getPathsForTest(final ExtensionContext context) {
-        final CleanUpDirectories cleanUpDirectories = context.getRequiredTestClass().getAnnotation(CleanUpDirectories.class);
-        return cleanUpDirectories == null ? Collections.emptySet() :
-                Arrays.stream(cleanUpDirectories.value()).map(Paths::get).collect(Collectors.toSet());
+        final Collection<Path> paths = new HashSet<>();
+        final CleanUpDirectories testClassAnnotation = context.getRequiredTestClass().getAnnotation(CleanUpDirectories.class);
+        if (testClassAnnotation != null) {
+            for (final String path : testClassAnnotation.value()) {
+                paths.add(Paths.get(path));
+            }
+        }
+        final CleanUpDirectories testMethodAnnotation = context.getRequiredTestMethod().getAnnotation(CleanUpDirectories.class);
+        if (testMethodAnnotation != null) {
+            for (final String path : testMethodAnnotation.value()) {
+                paths.add(Paths.get(path));
+            }
+        }
+        return paths;
     }
 
     @Override
diff --git a/log4j-api/src/test/java/org/apache/logging/log4j/junit/FileCleaner.java b/log4j-api/src/test/java/org/apache/logging/log4j/junit/FileCleaner.java
index 64ae0df..1858666 100644
--- a/log4j-api/src/test/java/org/apache/logging/log4j/junit/FileCleaner.java
+++ b/log4j-api/src/test/java/org/apache/logging/log4j/junit/FileCleaner.java
@@ -23,17 +23,26 @@
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
-import java.util.Arrays;
 import java.util.Collection;
-import java.util.Collections;
-import java.util.stream.Collectors;
+import java.util.HashSet;
 
 class FileCleaner extends AbstractFileCleaner {
     @Override
     Collection<Path> getPathsForTest(final ExtensionContext context) {
-        final CleanUpFiles cleanUpFiles = context.getRequiredTestClass().getAnnotation(CleanUpFiles.class);
-        return cleanUpFiles == null ? Collections.emptySet() :
-                Arrays.stream(cleanUpFiles.value()).map(Paths::get).collect(Collectors.toSet());
+        final Collection<Path> paths = new HashSet<>();
+        final CleanUpFiles testClassAnnotation = context.getRequiredTestClass().getAnnotation(CleanUpFiles.class);
+        if (testClassAnnotation != null) {
+            for (final String path : testClassAnnotation.value()) {
+                paths.add(Paths.get(path));
+            }
+        }
+        final CleanUpFiles testMethodAnnotation = context.getRequiredTestMethod().getAnnotation(CleanUpFiles.class);
+        if (testMethodAnnotation != null) {
+            for (final String path : testMethodAnnotation.value()) {
+                paths.add(Paths.get(path));
+            }
+        }
+        return paths;
     }
 
     @Override
diff --git a/log4j-api/src/test/java/org/apache/logging/log4j/junit/StatusLoggerLevel.java b/log4j-api/src/test/java/org/apache/logging/log4j/junit/StatusLoggerLevel.java
new file mode 100644
index 0000000..ef36d97
--- /dev/null
+++ b/log4j-api/src/test/java/org/apache/logging/log4j/junit/StatusLoggerLevel.java
@@ -0,0 +1,44 @@
+/*
+ * 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.junit;
+
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.junit.jupiter.api.parallel.ResourceLock;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * JUnit 5 test extension that sets a specific StatusLogger logging level for each test.
+ *
+ * @since 2.14.0
+ */
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.TYPE)
+@Documented
+@Inherited
+@ExtendWith(StatusLoggerLevelExtension.class)
+@ResourceLock("log4j2.StatusLogger")
+public @interface StatusLoggerLevel {
+    /** Name of {@link org.apache.logging.log4j.Level} to use for status logger. */
+    String value();
+}
diff --git a/log4j-api/src/test/java/org/apache/logging/log4j/junit/StatusLoggerLevelExtension.java b/log4j-api/src/test/java/org/apache/logging/log4j/junit/StatusLoggerLevelExtension.java
index 5eb7de2..2b0a5cd 100644
--- a/log4j-api/src/test/java/org/apache/logging/log4j/junit/StatusLoggerLevelExtension.java
+++ b/log4j-api/src/test/java/org/apache/logging/log4j/junit/StatusLoggerLevelExtension.java
@@ -23,25 +23,19 @@
 import org.junit.jupiter.api.extension.BeforeEachCallback;
 import org.junit.jupiter.api.extension.ExtensionContext;
 
-/**
- * JUnit 5 test extension that sets a specific StatusLogger logging level for each test.
- *
- * @since 2.14.0
- */
-public class StatusLoggerLevelExtension implements BeforeEachCallback, AfterEachCallback {
+class StatusLoggerLevelExtension implements BeforeEachCallback, AfterEachCallback {
 
     private static final String KEY = "previousLevel";
-    private final Level level;
-
-    public StatusLoggerLevelExtension(Level level) {
-        this.level = level;
-    }
 
     @Override
     public void beforeEach(ExtensionContext context) throws Exception {
+        final StatusLoggerLevel annotation = context.getRequiredTestClass().getAnnotation(StatusLoggerLevel.class);
+        if (annotation == null) {
+            return;
+        }
         final StatusLogger logger = StatusLogger.getLogger();
         getStore(context).put(KEY, logger.getLevel());
-        logger.setLevel(level);
+        logger.setLevel(Level.valueOf(annotation.value()));
     }
 
     @Override
@@ -51,6 +45,6 @@
 
     private ExtensionContext.Store getStore(ExtensionContext context) {
         return context.getStore(ExtensionContext.Namespace
-                .create(getClass(), context.getRequiredTestInstance(), context.getRequiredTestMethod()));
+                .create(getClass(), context.getRequiredTestInstance()));
     }
 }
diff --git a/log4j-api/src/test/java/org/apache/logging/log4j/junit/StatusLoggerRule.java b/log4j-api/src/test/java/org/apache/logging/log4j/junit/StatusLoggerRule.java
index fc57623..987216c 100644
--- a/log4j-api/src/test/java/org/apache/logging/log4j/junit/StatusLoggerRule.java
+++ b/log4j-api/src/test/java/org/apache/logging/log4j/junit/StatusLoggerRule.java
@@ -25,7 +25,7 @@
  * Log4j configuration file.
  *
  * @since 2.8
- * @deprecated Use {@link StatusLoggerLevelExtension} with JUnit 5
+ * @deprecated Use {@link StatusLoggerLevel} with JUnit 5
  */
 @Deprecated
 public class StatusLoggerRule extends ExternalResource {
diff --git a/log4j-api/src/test/java/org/apache/logging/log4j/junit/UsingAnyThreadContext.java b/log4j-api/src/test/java/org/apache/logging/log4j/junit/UsingAnyThreadContext.java
index 935df61..cd45243 100644
--- a/log4j-api/src/test/java/org/apache/logging/log4j/junit/UsingAnyThreadContext.java
+++ b/log4j-api/src/test/java/org/apache/logging/log4j/junit/UsingAnyThreadContext.java
@@ -18,6 +18,9 @@
 package org.apache.logging.log4j.junit;
 
 import org.junit.jupiter.api.extension.ExtendWith;
+import org.junit.jupiter.api.parallel.ResourceAccessMode;
+import org.junit.jupiter.api.parallel.ResourceLock;
+import org.junit.jupiter.api.parallel.Resources;
 
 import java.lang.annotation.Documented;
 import java.lang.annotation.ElementType;
@@ -37,5 +40,6 @@
 @Documented
 @Inherited
 @ExtendWith(ThreadContextExtension.class)
+@ResourceLock(value = Resources.SYSTEM_PROPERTIES, mode = ResourceAccessMode.READ)
 public @interface UsingAnyThreadContext {
 }
diff --git a/log4j-api/src/test/java/org/apache/logging/log4j/junit/UsingThreadContextMap.java b/log4j-api/src/test/java/org/apache/logging/log4j/junit/UsingThreadContextMap.java
index df608f8..19cd705 100644
--- a/log4j-api/src/test/java/org/apache/logging/log4j/junit/UsingThreadContextMap.java
+++ b/log4j-api/src/test/java/org/apache/logging/log4j/junit/UsingThreadContextMap.java
@@ -18,6 +18,9 @@
 package org.apache.logging.log4j.junit;
 
 import org.junit.jupiter.api.extension.ExtendWith;
+import org.junit.jupiter.api.parallel.ResourceAccessMode;
+import org.junit.jupiter.api.parallel.ResourceLock;
+import org.junit.jupiter.api.parallel.Resources;
 
 import java.lang.annotation.Documented;
 import java.lang.annotation.ElementType;
@@ -37,5 +40,6 @@
 @Documented
 @Inherited
 @ExtendWith(ThreadContextExtension.class)
+@ResourceLock(value = Resources.SYSTEM_PROPERTIES, mode = ResourceAccessMode.READ)
 public @interface UsingThreadContextMap {
 }
diff --git a/log4j-api/src/test/java/org/apache/logging/log4j/junit/UsingThreadContextStack.java b/log4j-api/src/test/java/org/apache/logging/log4j/junit/UsingThreadContextStack.java
index 7d47e49..5e4fdac 100644
--- a/log4j-api/src/test/java/org/apache/logging/log4j/junit/UsingThreadContextStack.java
+++ b/log4j-api/src/test/java/org/apache/logging/log4j/junit/UsingThreadContextStack.java
@@ -18,6 +18,9 @@
 package org.apache.logging.log4j.junit;
 
 import org.junit.jupiter.api.extension.ExtendWith;
+import org.junit.jupiter.api.parallel.ResourceAccessMode;
+import org.junit.jupiter.api.parallel.ResourceLock;
+import org.junit.jupiter.api.parallel.Resources;
 
 import java.lang.annotation.Documented;
 import java.lang.annotation.ElementType;
@@ -37,5 +40,6 @@
 @Documented
 @Inherited
 @ExtendWith(ThreadContextExtension.class)
+@ResourceLock(value = Resources.SYSTEM_PROPERTIES, mode = ResourceAccessMode.READ)
 public @interface UsingThreadContextStack {
 }
diff --git a/log4j-api/src/test/java/org/apache/logging/log4j/message/FormattedMessageTest.java b/log4j-api/src/test/java/org/apache/logging/log4j/message/FormattedMessageTest.java
index 588a81d..ff5913c 100644
--- a/log4j-api/src/test/java/org/apache/logging/log4j/message/FormattedMessageTest.java
+++ b/log4j-api/src/test/java/org/apache/logging/log4j/message/FormattedMessageTest.java
@@ -26,13 +26,14 @@
 import org.apache.logging.log4j.junit.Mutable;
 import org.apache.logging.log4j.util.Constants;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.ResourceAccessMode;
+import org.junit.jupiter.api.parallel.ResourceLock;
+import org.junit.jupiter.api.parallel.Resources;
 
 import static org.junit.jupiter.api.Assertions.assertArrayEquals;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
-/**
- *
- */
+@ResourceLock(value = Resources.LOCALE, mode = ResourceAccessMode.READ)
 public class FormattedMessageTest {
 
     private static final String SPACE = Constants.JAVA_MAJOR_VERSION < 9 ? " " : "\u00a0";
diff --git a/log4j-api/src/test/java/org/apache/logging/log4j/message/LocalizedMessageTest.java b/log4j-api/src/test/java/org/apache/logging/log4j/message/LocalizedMessageTest.java
index 4689a17..019bd69 100644
--- a/log4j-api/src/test/java/org/apache/logging/log4j/message/LocalizedMessageTest.java
+++ b/log4j-api/src/test/java/org/apache/logging/log4j/message/LocalizedMessageTest.java
@@ -22,12 +22,16 @@
 import org.apache.commons.lang3.SerializationUtils;
 import org.apache.logging.log4j.junit.Mutable;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.ResourceAccessMode;
+import org.junit.jupiter.api.parallel.ResourceLock;
+import org.junit.jupiter.api.parallel.Resources;
 
 import static org.junit.jupiter.api.Assertions.*;
 
 /**
  * Tests LocalizedMessage.
  */
+@ResourceLock(value = Resources.LOCALE, mode = ResourceAccessMode.READ)
 public class LocalizedMessageTest {
 
     private <T extends Serializable> T roundtrip(final T msg) {
diff --git a/log4j-api/src/test/java/org/apache/logging/log4j/message/MessageFormatMessageSerializationTest.java b/log4j-api/src/test/java/org/apache/logging/log4j/message/MessageFormatMessageSerializationTest.java
index d158cd2..82480b0 100644
--- a/log4j-api/src/test/java/org/apache/logging/log4j/message/MessageFormatMessageSerializationTest.java
+++ b/log4j-api/src/test/java/org/apache/logging/log4j/message/MessageFormatMessageSerializationTest.java
@@ -21,8 +21,12 @@
 import java.util.Collection;
 
 import org.apache.logging.log4j.AbstractSerializationTest;
+import org.junit.jupiter.api.parallel.ResourceAccessMode;
+import org.junit.jupiter.api.parallel.ResourceLock;
+import org.junit.jupiter.api.parallel.Resources;
 import org.junit.runners.Parameterized;
 
+@ResourceLock(value = Resources.LOCALE, mode = ResourceAccessMode.READ)
 public class MessageFormatMessageSerializationTest extends AbstractSerializationTest {
 
     @Parameterized.Parameters
diff --git a/log4j-api/src/test/java/org/apache/logging/log4j/message/MessageFormatMessageTest.java b/log4j-api/src/test/java/org/apache/logging/log4j/message/MessageFormatMessageTest.java
index 42c54a2..2969467 100644
--- a/log4j-api/src/test/java/org/apache/logging/log4j/message/MessageFormatMessageTest.java
+++ b/log4j-api/src/test/java/org/apache/logging/log4j/message/MessageFormatMessageTest.java
@@ -20,14 +20,15 @@
 import org.apache.logging.log4j.junit.Mutable;
 import org.apache.logging.log4j.util.Constants;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.ResourceAccessMode;
+import org.junit.jupiter.api.parallel.ResourceLock;
+import org.junit.jupiter.api.parallel.Resources;
 
 import java.util.Locale;
 
 import static org.junit.jupiter.api.Assertions.*;
 
-/**
- *
- */
+@ResourceLock(value = Resources.LOCALE, mode = ResourceAccessMode.READ)
 public class MessageFormatMessageTest {
 
     private static final String SPACE = Constants.JAVA_MAJOR_VERSION < 9 ? " " : "\u00a0";
diff --git a/log4j-api/src/test/java/org/apache/logging/log4j/message/MessageFormatsPerfTest.java b/log4j-api/src/test/java/org/apache/logging/log4j/message/MessageFormatsPerfTest.java
index 6254b62..b5ff045 100644
--- a/log4j-api/src/test/java/org/apache/logging/log4j/message/MessageFormatsPerfTest.java
+++ b/log4j-api/src/test/java/org/apache/logging/log4j/message/MessageFormatsPerfTest.java
@@ -20,11 +20,15 @@
 import org.junit.jupiter.api.AfterAll;
 import org.junit.jupiter.api.Tag;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.ResourceAccessMode;
+import org.junit.jupiter.api.parallel.ResourceLock;
+import org.junit.jupiter.api.parallel.Resources;
 
 /**
  *
  */
 @Tag("performance")
+@ResourceLock(value = Resources.LOCALE, mode = ResourceAccessMode.READ)
 public class MessageFormatsPerfTest {
 
     private static final int LOOP_CNT = 500;
diff --git a/log4j-api/src/test/java/org/apache/logging/log4j/message/StringFormattedMessageTest.java b/log4j-api/src/test/java/org/apache/logging/log4j/message/StringFormattedMessageTest.java
index 5d85d96..0dd8041 100644
--- a/log4j-api/src/test/java/org/apache/logging/log4j/message/StringFormattedMessageTest.java
+++ b/log4j-api/src/test/java/org/apache/logging/log4j/message/StringFormattedMessageTest.java
@@ -25,12 +25,13 @@
 
 import org.apache.logging.log4j.junit.Mutable;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.ResourceAccessMode;
+import org.junit.jupiter.api.parallel.ResourceLock;
+import org.junit.jupiter.api.parallel.Resources;
 
 import static org.junit.jupiter.api.Assertions.*;
 
-/**
- *
- */
+@ResourceLock(value = Resources.LOCALE, mode = ResourceAccessMode.READ)
 public class StringFormattedMessageTest {
 
     private static final int LOOP_CNT = 500;
diff --git a/log4j-api/src/test/java/org/apache/logging/log4j/message/ThreadDumpMessageTest.java b/log4j-api/src/test/java/org/apache/logging/log4j/message/ThreadDumpMessageTest.java
index 61817c0..8b408e5 100644
--- a/log4j-api/src/test/java/org/apache/logging/log4j/message/ThreadDumpMessageTest.java
+++ b/log4j-api/src/test/java/org/apache/logging/log4j/message/ThreadDumpMessageTest.java
@@ -19,13 +19,10 @@
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.locks.ReentrantLock;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 import static org.junit.jupiter.api.Assertions.*;
 
-/**
- *
- */
 public class ThreadDumpMessageTest {
 
     @Test
@@ -90,7 +87,7 @@
         other.start();
         other.join();
 
-        assertTrue(!actual[0].contains("OtherThread"), "No mention of other thread in msg");
+        assertFalse(actual[0].contains("OtherThread"), "No mention of other thread in msg");
     }
 
     @Test
@@ -114,7 +111,7 @@
         keepAlive.countDown(); // allow thread to die
     }
 
-    private class Thread1 extends Thread {
+    private static class Thread1 extends Thread {
         private final ReentrantLock lock;
 
         public Thread1(final ReentrantLock lock) {
@@ -128,7 +125,7 @@
         }
     }
 
-    private class Thread2 extends Thread {
+    private static class Thread2 extends Thread {
         private final Object obj;
 
         public Thread2(final Object obj) {
@@ -142,7 +139,7 @@
         }
     }
 
-    private class ThreadWithCountDownLatch extends Thread {
+    private static class ThreadWithCountDownLatch extends Thread {
         private final CountDownLatch started;
         private final CountDownLatch keepAlive;
         volatile boolean finished;
diff --git a/log4j-api/src/test/java/org/apache/logging/log4j/simple/SimpleLoggerTest.java b/log4j-api/src/test/java/org/apache/logging/log4j/simple/SimpleLoggerTest.java
index ac42497..4f144ac 100644
--- a/log4j-api/src/test/java/org/apache/logging/log4j/simple/SimpleLoggerTest.java
+++ b/log4j-api/src/test/java/org/apache/logging/log4j/simple/SimpleLoggerTest.java
@@ -22,8 +22,11 @@
 import org.junit.jupiter.api.Tag;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.RegisterExtension;
+import org.junit.jupiter.api.parallel.ResourceLock;
+import org.junit.jupiter.api.parallel.Resources;
 
 @Tag("smoke")
+@ResourceLock(Resources.SYSTEM_PROPERTIES)
 public class SimpleLoggerTest {
 
     @RegisterExtension
diff --git a/log4j-api/src/test/java/org/apache/logging/log4j/spi/DefaultThreadContextMapTest.java b/log4j-api/src/test/java/org/apache/logging/log4j/spi/DefaultThreadContextMapTest.java
index a894293..70c54f9 100644
--- a/log4j-api/src/test/java/org/apache/logging/log4j/spi/DefaultThreadContextMapTest.java
+++ b/log4j-api/src/test/java/org/apache/logging/log4j/spi/DefaultThreadContextMapTest.java
@@ -16,7 +16,10 @@
  */
 package org.apache.logging.log4j.spi;
 
+import org.apache.logging.log4j.junit.UsingThreadContextMap;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.ResourceLock;
+import org.junit.jupiter.api.parallel.Resources;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -26,6 +29,7 @@
 /**
  * Tests the {@code DefaultThreadContextMap} class.
  */
+@UsingThreadContextMap
 public class DefaultThreadContextMapTest {
 
     @Test
@@ -211,6 +215,7 @@
     }
 
     @Test
+    @ResourceLock(Resources.SYSTEM_PROPERTIES)
     public void testThreadLocalNotInheritableByDefault() {
         System.clearProperty(DefaultThreadContextMap.INHERITABLE_MAP);
         final ThreadLocal<Map<String, String>> threadLocal = DefaultThreadContextMap.createThreadLocalMap(true);
@@ -218,6 +223,7 @@
     }
     
     @Test
+    @ResourceLock(Resources.SYSTEM_PROPERTIES)
     public void testThreadLocalInheritableIfConfigured() {
         System.setProperty(DefaultThreadContextMap.INHERITABLE_MAP, "true");
         ThreadContextMapFactory.init();
diff --git a/log4j-api/src/test/java/org/apache/logging/log4j/spi/DefaultThreadContextStackTest.java b/log4j-api/src/test/java/org/apache/logging/log4j/spi/DefaultThreadContextStackTest.java
index be6ebe3..68936a2 100644
--- a/log4j-api/src/test/java/org/apache/logging/log4j/spi/DefaultThreadContextStackTest.java
+++ b/log4j-api/src/test/java/org/apache/logging/log4j/spi/DefaultThreadContextStackTest.java
@@ -21,11 +21,13 @@
 import java.util.Iterator;
 
 import org.apache.logging.log4j.ThreadContext.ContextStack;
+import org.apache.logging.log4j.junit.UsingAnyThreadContext;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
 import static org.junit.jupiter.api.Assertions.*;
 
+@UsingAnyThreadContext
 public class DefaultThreadContextStackTest {
 
     @BeforeEach
@@ -85,7 +87,7 @@
         assertEquals(stack, actual);
     }
 
-    @Test //(expected = UnsupportedOperationException.class)
+    @Test
     public void testModifyingImmutableOrNullThrowsException() {
         final DefaultThreadContextStack stack = createStack();
         final int originalSize = stack.size();
diff --git a/log4j-api/src/test/java/org/apache/logging/log4j/util/EnvironmentPropertySourceSecurityManagerIT.java b/log4j-api/src/test/java/org/apache/logging/log4j/util/EnvironmentPropertySourceSecurityManagerIT.java
index 0020c05..1d3dac4 100644
--- a/log4j-api/src/test/java/org/apache/logging/log4j/util/EnvironmentPropertySourceSecurityManagerIT.java
+++ b/log4j-api/src/test/java/org/apache/logging/log4j/util/EnvironmentPropertySourceSecurityManagerIT.java
@@ -22,6 +22,7 @@
 import org.apache.logging.log4j.junit.SecurityManagerTestRule;
 import org.junit.Rule;
 import org.junit.Test;
+import org.junit.jupiter.api.parallel.ResourceLock;
 
 /**
  * Tests https://issues.apache.org/jira/browse/LOG4J2-2274.
@@ -35,6 +36,7 @@
  * @see SecurityManager
  * @see System#setSecurityManager(SecurityManager)
  */
+@ResourceLock("java.lang.SecurityManager")
 public class EnvironmentPropertySourceSecurityManagerIT {
 
 	@Rule
@@ -44,7 +46,7 @@
 	 * Always throws a SecurityException for any environment variables permission
 	 * check.
 	 */
-	private class TestSecurityManager extends SecurityManager {
+	private static class TestSecurityManager extends SecurityManager {
 		@Override
 		public void checkPermission(final Permission permission) {
 			if ("getenv.*".equals(permission.getName())) {
diff --git a/log4j-api/src/test/java/org/apache/logging/log4j/util/LoaderUtilTest.java b/log4j-api/src/test/java/org/apache/logging/log4j/util/LoaderUtilTest.java
index 342388c..b9a0363 100644
--- a/log4j-api/src/test/java/org/apache/logging/log4j/util/LoaderUtilTest.java
+++ b/log4j-api/src/test/java/org/apache/logging/log4j/util/LoaderUtilTest.java
@@ -19,6 +19,8 @@
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.ResourceLock;
+import org.junit.jupiter.api.parallel.Resources;
 
 import java.net.URL;
 import java.util.Collections;
@@ -26,6 +28,7 @@
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
+@ResourceLock(Resources.SYSTEM_PROPERTIES)
 public class LoaderUtilTest {
     @BeforeEach
     @AfterEach
diff --git a/log4j-api/src/test/java/org/apache/logging/log4j/util/PropertiesUtilTest.java b/log4j-api/src/test/java/org/apache/logging/log4j/util/PropertiesUtilTest.java
index 617487e..da9d18b 100644
--- a/log4j-api/src/test/java/org/apache/logging/log4j/util/PropertiesUtilTest.java
+++ b/log4j-api/src/test/java/org/apache/logging/log4j/util/PropertiesUtilTest.java
@@ -19,6 +19,9 @@
 
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.ResourceAccessMode;
+import org.junit.jupiter.api.parallel.ResourceLock;
+import org.junit.jupiter.api.parallel.Resources;
 
 import java.nio.charset.Charset;
 import java.nio.charset.StandardCharsets;
@@ -76,6 +79,7 @@
     }
     
     @Test
+    @ResourceLock(value = Resources.SYSTEM_PROPERTIES, mode = ResourceAccessMode.READ)
     public void testGetMappedProperty_sun_stdout_encoding() {
         final PropertiesUtil pu = new PropertiesUtil(System.getProperties());
         Charset expected = System.console() == null ? Charset.defaultCharset() : StandardCharsets.UTF_8;
@@ -83,6 +87,7 @@
     }
 
     @Test
+    @ResourceLock(value = Resources.SYSTEM_PROPERTIES, mode = ResourceAccessMode.READ)
     public void testGetMappedProperty_sun_stderr_encoding() {
         final PropertiesUtil pu = new PropertiesUtil(System.getProperties());
         Charset expected = System.console() == null ? Charset.defaultCharset() : StandardCharsets.UTF_8;
@@ -90,6 +95,7 @@
     }
 
     @Test
+    @ResourceLock(Resources.SYSTEM_PROPERTIES)
     public void testNonStringSystemProperties() {
         Object key1 = "1";
         Object key2 = new Object();
@@ -105,6 +111,7 @@
     }
 
     @Test
+    @ResourceLock(value = Resources.SYSTEM_PROPERTIES, mode = ResourceAccessMode.READ)
     public void testPublish() {
         final Properties props = new Properties();
         final PropertiesUtil util = new PropertiesUtil(props);
diff --git a/log4j-api/src/test/java/org/apache/logging/log4j/util/PropertyFilePropertySourceSecurityManagerIT.java b/log4j-api/src/test/java/org/apache/logging/log4j/util/PropertyFilePropertySourceSecurityManagerIT.java
index c0c5134..76d363e 100644
--- a/log4j-api/src/test/java/org/apache/logging/log4j/util/PropertyFilePropertySourceSecurityManagerIT.java
+++ b/log4j-api/src/test/java/org/apache/logging/log4j/util/PropertyFilePropertySourceSecurityManagerIT.java
@@ -28,6 +28,10 @@
 import org.junit.BeforeClass;
 import org.junit.Rule;
 import org.junit.Test;
+import org.junit.jupiter.api.parallel.ResourceLock;
+
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
 
 /**
  * Test related to https://issues.apache.org/jira/browse/LOG4J2-2274.
@@ -42,11 +46,12 @@
  * @see System#setSecurityManager(SecurityManager)
  * @see PropertyPermission
  */
+@ResourceLock("java.lang.SecurityManager")
 public class PropertyFilePropertySourceSecurityManagerIT {
 
     @BeforeClass
     public static void beforeClass() {
-        Assert.assertTrue(TEST_FIXTURE_PATH, Files.exists(Paths.get(TEST_FIXTURE_PATH)));
+        assertTrue(TEST_FIXTURE_PATH, Files.exists(Paths.get(TEST_FIXTURE_PATH)));
     }
     
     @Rule
@@ -58,7 +63,7 @@
      * Always throws a SecurityException for any environment variables permission
      * check.
      */
-    private class TestSecurityManager extends SecurityManager {
+    private static class TestSecurityManager extends SecurityManager {
 
         @Override
         public void checkPermission(final Permission permission) {
@@ -79,6 +84,6 @@
     @Test
     public void test() {
         final PropertiesUtil propertiesUtil = new PropertiesUtil(TEST_FIXTURE_PATH);
-        Assert.assertEquals(null, propertiesUtil.getStringProperty("a.1"));
+        assertNull(propertiesUtil.getStringProperty("a.1"));
     }
 }
diff --git a/log4j-api/src/test/java/org/apache/logging/log4j/util/SystemPropertiesPropertySourceSecurityManagerIT.java b/log4j-api/src/test/java/org/apache/logging/log4j/util/SystemPropertiesPropertySourceSecurityManagerIT.java
index ebab710..811222e 100644
--- a/log4j-api/src/test/java/org/apache/logging/log4j/util/SystemPropertiesPropertySourceSecurityManagerIT.java
+++ b/log4j-api/src/test/java/org/apache/logging/log4j/util/SystemPropertiesPropertySourceSecurityManagerIT.java
@@ -24,6 +24,9 @@
 import org.junit.Assert;
 import org.junit.Rule;
 import org.junit.Test;
+import org.junit.jupiter.api.parallel.ResourceLock;
+
+import static org.junit.Assert.assertNull;
 
 /**
  * Test related to https://issues.apache.org/jira/browse/LOG4J2-2274.
@@ -38,6 +41,7 @@
  * @see System#setSecurityManager(SecurityManager)
  * @see PropertyPermission
  */
+@ResourceLock("java.lang.SecurityManager")
 public class SystemPropertiesPropertySourceSecurityManagerIT {
 
 	@Rule
@@ -47,7 +51,7 @@
 	 * Always throws a SecurityException for any environment variables permission
 	 * check.
 	 */
-	private class TestSecurityManager extends SecurityManager {
+	private static class TestSecurityManager extends SecurityManager {
 		@Override
 		public void checkPermission(final Permission permission) {
 			if (permission instanceof PropertyPermission) {
@@ -81,6 +85,6 @@
 	@Test
 	public void test() {
 		final PropertiesUtil propertiesUtil = new PropertiesUtil("src/test/resources/PropertiesUtilTest.properties");
-		Assert.assertEquals(null, propertiesUtil.getStringProperty("a.1"));
+		assertNull(propertiesUtil.getStringProperty("a.1"));
 	}
 }
diff --git a/log4j-api/src/test/java/org/apache/logging/log4j/util/SystemPropertiesPropertySourceTest.java b/log4j-api/src/test/java/org/apache/logging/log4j/util/SystemPropertiesPropertySourceTest.java
index 2a3ede0..fb5d383 100644
--- a/log4j-api/src/test/java/org/apache/logging/log4j/util/SystemPropertiesPropertySourceTest.java
+++ b/log4j-api/src/test/java/org/apache/logging/log4j/util/SystemPropertiesPropertySourceTest.java
@@ -19,6 +19,8 @@
 
 import org.junit.jupiter.api.Tag;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.ResourceLock;
+import org.junit.jupiter.api.parallel.Resources;
 
 import java.util.Properties;
 import java.util.concurrent.ExecutionException;
@@ -30,6 +32,7 @@
  * Tests https://issues.apache.org/jira/browse/LOG4J2-2276.
  */
 @Tag("concurrency")
+@ResourceLock(Resources.SYSTEM_PROPERTIES)
 public class SystemPropertiesPropertySourceTest {
 
     private static final int ITERATIONS = 10000;
diff --git a/log4j-api/src/test/java/org/apache/logging/log4j/util/Unbox1Test.java b/log4j-api/src/test/java/org/apache/logging/log4j/util/Unbox1Test.java
index 4b41928..e217f72 100644
--- a/log4j-api/src/test/java/org/apache/logging/log4j/util/Unbox1Test.java
+++ b/log4j-api/src/test/java/org/apache/logging/log4j/util/Unbox1Test.java
@@ -19,12 +19,15 @@
 
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.ResourceLock;
+import org.junit.jupiter.api.parallel.Resources;
 
 import static org.junit.jupiter.api.Assertions.*;
 
 /**
  * Tests the Unbox class.
  */
+@ResourceLock(Resources.SYSTEM_PROPERTIES)
 public class Unbox1Test {
     @BeforeAll
     public static void beforeClass() {
diff --git a/log4j-api/src/test/java/org/apache/logging/log4j/util/Unbox2ConfigurableTest.java b/log4j-api/src/test/java/org/apache/logging/log4j/util/Unbox2ConfigurableTest.java
index 3ef3d6a..cf4376f 100644
--- a/log4j-api/src/test/java/org/apache/logging/log4j/util/Unbox2ConfigurableTest.java
+++ b/log4j-api/src/test/java/org/apache/logging/log4j/util/Unbox2ConfigurableTest.java
@@ -20,6 +20,9 @@
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.condition.EnabledIfSystemProperty;
+import org.junit.jupiter.api.parallel.Isolated;
+import org.junit.jupiter.api.parallel.ResourceLock;
+import org.junit.jupiter.api.parallel.Resources;
 
 import java.lang.reflect.Field;
 import java.lang.reflect.Modifier;
@@ -33,6 +36,7 @@
  * enable the test, too.
  */
 @EnabledIfSystemProperty(named = "test", matches = ".*Unbox2ConfigurableTest.*")
+@Isolated
 public class Unbox2ConfigurableTest {
     @BeforeAll
     public static void beforeClass() {
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/CollectionLoggingTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/CollectionLoggingTest.java
index 791a370..80ab899 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/CollectionLoggingTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/CollectionLoggingTest.java
@@ -23,6 +23,9 @@
 import org.apache.logging.log4j.test.appender.ListAppender;
 import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.ResourceAccessMode;
+import org.junit.jupiter.api.parallel.ResourceLock;
+import org.junit.jupiter.api.parallel.Resources;
 
 import java.net.NetworkInterface;
 import java.net.SocketException;
@@ -41,6 +44,7 @@
     }
 
     @Test
+    @ResourceLock(value = Resources.SYSTEM_PROPERTIES, mode = ResourceAccessMode.READ)
     public void testSystemProperties(final LoggerContext context) {
         final Logger logger = context.getLogger(CollectionLoggingTest.class.getName());
         logger.error(System.getProperties());
@@ -49,6 +53,7 @@
     }
 
     @Test
+    @ResourceLock(value = Resources.SYSTEM_PROPERTIES, mode = ResourceAccessMode.READ)
     public void testSimpleMap(final LoggerContext context) {
         final Logger logger = context.getLogger(CollectionLoggingTest.class.getName());
         logger.error(System.getProperties());
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/ConsoleAppenderJAnsiMessageMain.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/ConsoleAppenderJAnsiMessageMain.java
index f800806..3a150a0 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/ConsoleAppenderJAnsiMessageMain.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/ConsoleAppenderJAnsiMessageMain.java
@@ -29,6 +29,8 @@
 import org.apache.logging.log4j.core.config.Configurator;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
+import org.junit.jupiter.api.parallel.ResourceLock;
+import org.junit.jupiter.api.parallel.Resources;
 
 /**
  * Shows how to use ANSI escape codes to color messages. Each message is printed to the console in color, but the rest
@@ -59,6 +61,7 @@
      * This is a @Test method to make it easy to run from a command line with {@code mvn -Dtest=FQCN test}
      */
     @Test
+    @ResourceLock(Resources.SYSTEM_PROPERTIES)
     public void test() {
         test(null);
     }
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/InMemoryAppenderTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/InMemoryAppenderTest.java
index 21af139..a6004e1 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/InMemoryAppenderTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/InMemoryAppenderTest.java
@@ -24,13 +24,10 @@
 import org.apache.logging.log4j.message.SimpleMessage;
 import org.apache.logging.log4j.test.appender.InMemoryAppender;
 import org.apache.logging.log4j.util.Strings;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.*;
+import static org.junit.jupiter.api.Assertions.*;
 
-/**
- *
- */
 public class InMemoryAppenderTest {
 
     @Test
@@ -68,15 +65,15 @@
                 .setMessage(new SimpleMessage("Test")) //
                 .build();
         app.start();
-        assertTrue("Appender did not start", app.isStarted());
+        assertTrue(app.isStarted(), "Appender did not start");
         app.append(event);
         app.append(event);
         final String msg = app.toString();
-        assertNotNull("No message", msg);
+        assertNotNull(msg, "No message");
         final String expectedHeader = header == null ? "" : header;
         final String expected = expectedHeader + "Test" + Strings.LINE_SEPARATOR + "Test" + Strings.LINE_SEPARATOR;
-        assertTrue("Incorrect message: " + msg, msg.equals(expected));
+        assertEquals(expected, msg, "Incorrect message: " + msg);
         app.stop();
-        assertFalse("Appender did not stop", app.isStarted());
+        assertFalse(app.isStarted(), "Appender did not stop");
     }
 }
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/MemoryMappedFileAppenderLocationTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/MemoryMappedFileAppenderLocationTest.java
deleted file mode 100644
index 8f2c4b7..0000000
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/MemoryMappedFileAppenderLocationTest.java
+++ /dev/null
@@ -1,95 +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.io.BufferedReader;
-import java.io.File;
-import java.io.FileReader;
-
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-import org.apache.logging.log4j.core.CoreLoggerContexts;
-import org.apache.logging.log4j.core.config.ConfigurationFactory;
-import org.apache.logging.log4j.core.util.Integers;
-import org.junit.Before;
-import org.junit.Test;
-
-import static org.hamcrest.CoreMatchers.*;
-
-import static org.junit.Assert.*;
-
-/**
- * Tests that logged strings and their location appear in the file,
- * that the file size is the next power of two of the specified mapped region length
- * and that the file is shrunk to its actual usage when done.
- *
- * @since 2.1
- */
-public class MemoryMappedFileAppenderLocationTest {
-
-    final String LOGFILE = "target/MemoryMappedFileAppenderLocationTest.log";
-
-    @Before
-    public void before() {
-        System.setProperty(ConfigurationFactory.CONFIGURATION_FILE_PROPERTY,
-                "MemoryMappedFileAppenderLocationTest.xml");
-    }
-
-    @Test
-    public void testMemMapLocation() throws Exception {
-        final File f = new File(LOGFILE);
-        if (f.exists()) {
-            assertTrue("deleted ok", f.delete());
-        }
-        assertTrue(!f.exists());
-
-        final int expectedFileLength = Integers.ceilingNextPowerOfTwo(32000);
-        assertEquals(32768, expectedFileLength);
-
-        final Logger log = LogManager.getLogger();
-        try {
-            log.warn("Test log1");
-            assertTrue(f.exists());
-            assertEquals("initial length", expectedFileLength, f.length());
-
-            log.warn("Test log2");
-            assertEquals("not grown", expectedFileLength, f.length());
-        } finally {
-            CoreLoggerContexts.stopLoggerContext(false);
-        }
-        final int LINESEP = System.lineSeparator().length();
-        assertEquals("Shrunk to actual used size", 474 + 2 * LINESEP, f.length());
-
-        String line1, line2, line3;
-        try (final BufferedReader reader = new BufferedReader(new FileReader(LOGFILE))) {
-            line1 = reader.readLine();
-            line2 = reader.readLine();
-            line3 = reader.readLine();
-        }
-        assertNotNull(line1);
-        assertThat(line1, containsString("Test log1"));
-        final String location1 = "org.apache.logging.log4j.core.appender.MemoryMappedFileAppenderLocationTest.testMemMapLocation(MemoryMappedFileAppenderLocationTest.java:65)";
-        assertThat(line1, containsString(location1));
-
-        assertNotNull(line2);
-        assertThat(line2, containsString("Test log2"));
-        final String location2 = "org.apache.logging.log4j.core.appender.MemoryMappedFileAppenderLocationTest.testMemMapLocation(MemoryMappedFileAppenderLocationTest.java:69)";
-        assertThat(line2, containsString(location2));
-
-        assertNull("only two lines were logged", line3);
-    }
-}
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/MemoryMappedFileAppenderRemapTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/MemoryMappedFileAppenderRemapTest.java
deleted file mode 100644
index 3c6d301..0000000
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/MemoryMappedFileAppenderRemapTest.java
+++ /dev/null
@@ -1,95 +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.io.BufferedReader;
-import java.io.File;
-import java.io.FileReader;
-import java.util.Arrays;
-
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-import org.apache.logging.log4j.core.CoreLoggerContexts;
-import org.apache.logging.log4j.core.config.ConfigurationFactory;
-import org.junit.Before;
-import org.junit.Test;
-
-import static org.hamcrest.CoreMatchers.*;
-
-import static org.junit.Assert.*;
-
-/**
- * Tests that logged strings appear in the file, that the initial file size is the specified specified region length,
- * that the file is extended by region length when necessary, and that the file is shrunk to its actual usage when done.
- * 
- * @since 2.1
- */
-public class MemoryMappedFileAppenderRemapTest {
-
-    final String LOGFILE = "target/MemoryMappedFileAppenderRemapTest.log";
-
-    @Before
-    public void before() {
-        System.setProperty(ConfigurationFactory.CONFIGURATION_FILE_PROPERTY, "MemoryMappedFileAppenderRemapTest.xml");
-    }
-
-    @Test
-    public void testMemMapExtendsIfNeeded() throws Exception {
-        final File f = new File(LOGFILE);
-        if (f.exists()) {
-            assertTrue(f.delete());
-        }
-        assertTrue(!f.exists());
-
-        final Logger log = LogManager.getLogger();
-        final char[] text = new char[200];
-        Arrays.fill(text, 'A');
-        try {
-            log.warn("Test log1");
-            assertTrue(f.exists());
-            assertEquals("initial length", 256, f.length());
-
-            log.warn(new String(text));
-            assertEquals("grown", 256 * 2, f.length());
-            
-            log.warn(new String(text));
-            assertEquals("grown again", 256 * 3, f.length());
-        } finally {
-            CoreLoggerContexts.stopLoggerContext(false);
-        }
-        final int LINESEP = System.lineSeparator().length();
-        assertEquals("Shrunk to actual used size", 658 + 3 * LINESEP, f.length());
-
-        String line1, line2, line3, line4;
-        try (final BufferedReader reader = new BufferedReader(new FileReader(LOGFILE))) {
-            line1 = reader.readLine();
-            line2 = reader.readLine();
-            line3 = reader.readLine();
-            line4 = reader.readLine();
-        }
-        assertNotNull(line1);
-        assertThat(line1, containsString("Test log1"));
-
-        assertNotNull(line2);
-        assertThat(line2, containsString(new String(text)));
-
-        assertNotNull(line3);
-        assertThat(line3, containsString(new String(text)));
-
-        assertNull("only three lines were logged", line4);
-    }
-}
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/MemoryMappedFileAppenderSimpleTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/MemoryMappedFileAppenderSimpleTest.java
deleted file mode 100644
index 277e046..0000000
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/MemoryMappedFileAppenderSimpleTest.java
+++ /dev/null
@@ -1,86 +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.io.BufferedReader;
-import java.io.File;
-import java.io.FileReader;
-
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-import org.apache.logging.log4j.core.CoreLoggerContexts;
-import org.apache.logging.log4j.core.config.ConfigurationFactory;
-import org.junit.Before;
-import org.junit.Test;
-
-import static org.hamcrest.CoreMatchers.*;
-
-import static org.junit.Assert.*;
-
-/**
- * Tests that logged strings appear in the file,
- * that the default file size is used if not specified
- * and that the file is shrunk to its actual usage when done.
- * 
- * @since 2.1
- */
-public class MemoryMappedFileAppenderSimpleTest {
-
-    final String LOGFILE = "target/MemoryMappedFileAppenderTest.log";
-
-    @Before
-    public void before() {
-        System.setProperty(ConfigurationFactory.CONFIGURATION_FILE_PROPERTY, "MemoryMappedFileAppenderTest.xml");
-    }
-
-    @Test
-    public void testMemMapBasics() throws Exception {
-        final File f = new File(LOGFILE);
-        if (f.exists()) {
-            assertTrue(f.delete());
-        }
-        assertTrue(!f.exists());
-        
-        final Logger log = LogManager.getLogger();
-        try {
-            log.warn("Test log1");
-            assertTrue(f.exists());
-            assertEquals("initial length", MemoryMappedFileManager.DEFAULT_REGION_LENGTH, f.length());
-            
-            log.warn("Test log2");
-            assertEquals("not grown", MemoryMappedFileManager.DEFAULT_REGION_LENGTH, f.length());
-        } finally {
-            CoreLoggerContexts.stopLoggerContext(false);
-        }
-        final int LINESEP = System.lineSeparator().length();
-        assertEquals("Shrunk to actual used size", 186 + 2 * LINESEP, f.length());
-        
-        String line1, line2, line3;
-        try (final BufferedReader reader = new BufferedReader(new FileReader(LOGFILE))) {
-            line1 = reader.readLine();
-            line2 = reader.readLine();
-            line3 = reader.readLine();
-        }
-        assertNotNull(line1);
-        assertThat(line1, containsString("Test log1"));
-
-        assertNotNull(line2);
-        assertThat(line2, containsString("Test log2"));
-
-        assertNull("only two lines were logged", line3);
-    }
-}
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/MemoryMappedFileAppenderTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/MemoryMappedFileAppenderTest.java
new file mode 100644
index 0000000..9dcf88e
--- /dev/null
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/MemoryMappedFileAppenderTest.java
@@ -0,0 +1,120 @@
+/*
+ * 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.Logger;
+import org.apache.logging.log4j.core.LoggerContext;
+import org.apache.logging.log4j.core.util.Integers;
+import org.apache.logging.log4j.junit.CleanUpFiles;
+import org.apache.logging.log4j.junit.LoggerContextSource;
+import org.junit.jupiter.api.Test;
+
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.Arrays;
+import java.util.List;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.*;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+/**
+ * Tests that logged strings appear in the file, that the initial file size is the specified specified region length,
+ * that the file is extended by region length when necessary, and that the file is shrunk to its actual usage when done.
+ *
+ * @since 2.1
+ */
+@CleanUpFiles({
+        "target/MemoryMappedFileAppenderTest.log",
+        "target/MemoryMappedFileAppenderRemapTest.log",
+        "target/MemoryMappedFileAppenderLocationTest.log"
+})
+public class MemoryMappedFileAppenderTest {
+
+    @Test
+    @LoggerContextSource("MemoryMappedFileAppenderTest.xml")
+    public void testMemMapBasics(final LoggerContext context) throws Exception {
+        final Logger log = context.getLogger(getClass());
+        final Path logFile = Paths.get("target", "MemoryMappedFileAppenderTest.log");
+        try {
+            log.warn("Test log1");
+            assertTrue(Files.exists(logFile));
+            assertEquals(MemoryMappedFileManager.DEFAULT_REGION_LENGTH, Files.size(logFile));
+            log.warn("Test log2");
+            assertEquals(MemoryMappedFileManager.DEFAULT_REGION_LENGTH, Files.size(logFile));
+        } finally {
+            context.stop();
+        }
+        final int LINESEP = System.lineSeparator().length();
+        assertEquals(18 + 2 * LINESEP, Files.size(logFile));
+
+        final List<String> lines = Files.readAllLines(logFile);
+        assertThat(lines, both(hasSize(2)).and(contains("Test log1", "Test log2")));
+    }
+
+    @Test
+    @LoggerContextSource("MemoryMappedFileAppenderRemapTest.xml")
+    public void testMemMapExtendsIfNeeded(final LoggerContext context) throws Exception {
+        final Logger log = context.getLogger(getClass());
+        final Path logFile = Paths.get("target", "MemoryMappedFileAppenderRemapTest.log");
+        final char[] text = new char[256];
+        Arrays.fill(text, 'A');
+        final String str = new String(text);
+        try {
+            log.warn("Test log1");
+            assertTrue(Files.exists(logFile));
+            assertEquals(256, Files.size(logFile));
+            log.warn(str);
+            assertEquals(2 * 256, Files.size(logFile));
+            log.warn(str);
+            assertEquals(3 * 256, Files.size(logFile));
+        } finally {
+            context.stop();
+        }
+        assertEquals(521 + 3 * System.lineSeparator().length(), Files.size(logFile), "Expected file size to shrink");
+
+        final List<String> lines = Files.readAllLines(logFile);
+        assertThat(lines, both(hasSize(3)).and(contains("Test log1", str, str)));
+    }
+
+    @Test
+    @LoggerContextSource("MemoryMappedFileAppenderLocationTest.xml")
+    void testMemMapLocation(final LoggerContext context) throws Exception {
+        final Logger log = context.getLogger(getClass());
+        final Path logFile = Paths.get("target", "MemoryMappedFileAppenderLocationTest.log");
+        final int expectedFileLength = Integers.ceilingNextPowerOfTwo(32000);
+        assertEquals(32768, expectedFileLength);
+        try {
+            log.warn("Test log1");
+            assertTrue(Files.exists(logFile));
+            assertEquals(expectedFileLength, Files.size(logFile));
+            log.warn("Test log2");
+            assertEquals(expectedFileLength, Files.size(logFile));
+        } finally {
+            context.stop();
+        }
+        assertEquals(272 + 2 * System.lineSeparator().length(), Files.size(logFile), "Expected file size to shrink");
+
+        final List<String> lines = Files.readAllLines(logFile);
+        assertThat(lines, both(hasSize(2)).and(contains(
+                "org.apache.logging.log4j.core.appender.MemoryMappedFileAppenderTest.testMemMapLocation(MemoryMappedFileAppenderTest.java:104): Test log1",
+                "org.apache.logging.log4j.core.appender.MemoryMappedFileAppenderTest.testMemMapLocation(MemoryMappedFileAppenderTest.java:107): Test log2"
+        )));
+    }
+}
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/MemoryMappedFileManagerTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/MemoryMappedFileManagerTest.java
index 0e04699..8cf8ef0 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/MemoryMappedFileManagerTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/MemoryMappedFileManagerTest.java
@@ -16,17 +16,16 @@
  */
 package org.apache.logging.log4j.core.appender;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-
 import java.io.BufferedReader;
 import java.io.File;
 import java.io.FileOutputStream;
 import java.io.FileReader;
 import java.io.IOException;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.io.TempDir;
+
+import static org.junit.jupiter.api.Assertions.*;
 
 /**
  * Tests the MemoryMappedFileManager class.
@@ -35,12 +34,13 @@
  */
 public class MemoryMappedFileManagerTest {
 
+    @TempDir
+    File tempDir;
+
     @Test
     public void testRemapAfterInitialMapSizeExceeded() throws IOException {
         final int mapSize = 64; // very small, on purpose
-        final File file = File.createTempFile("log4j2", "test");
-        file.deleteOnExit();
-        assertEquals(0, file.length());
+        final File file = new File(tempDir, "memory-mapped-file.bin");
 
         final boolean append = false;
         final boolean immediateFlush = false;
@@ -57,8 +57,8 @@
         try (BufferedReader reader = new BufferedReader(new FileReader(file))) {
             String line = reader.readLine();
             for (int i = 0; i < 1000; i++) {
-                assertNotNull("line", line);
-                assertTrue("line incorrect", line.contains("Message " + i));
+                assertNotNull(line, "line");
+                assertTrue(line.contains("Message " + i), "line incorrect");
                 line = reader.readLine();
             }
         }
@@ -66,9 +66,7 @@
 
     @Test
     public void testAppendDoesNotOverwriteExistingFile() throws IOException {
-        final File file = File.createTempFile("log4j2", "test");
-        file.deleteOnExit();
-        assertEquals(0, file.length());
+        final File file = new File(tempDir, "memory-mapped-file.bin");
 
         final int initialLength = 4 * 1024;
 
@@ -77,7 +75,7 @@
             fos.write(new byte[initialLength], 0, initialLength);
             fos.flush();
         }
-        assertEquals("all flushed to disk", initialLength, file.length());
+        assertEquals(initialLength, file.length(), "all flushed to disk");
 
         final boolean isAppend = true;
         final boolean immediateFlush = false;
@@ -86,6 +84,6 @@
             manager.writeBytes(new byte[initialLength], 0, initialLength);
         }
         final int expected = initialLength * 2;
-        assertEquals("appended, not overwritten", expected, file.length());
+        assertEquals(expected, file.length(), "appended, not overwritten");
     }
 }
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/OutputStreamManagerTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/OutputStreamManagerTest.java
index e13e075..ef45d92 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/OutputStreamManagerTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/OutputStreamManagerTest.java
@@ -20,28 +20,24 @@
 import java.util.List;
 
 import org.apache.logging.log4j.Level;
-import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
-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.status.StatusData;
 import org.apache.logging.log4j.status.StatusLogger;
-import org.junit.ClassRule;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.*;
+import static org.junit.jupiter.api.Assertions.*;
 
 /**
  * OutputStreamManager Tests.
  */
 public class OutputStreamManagerTest {
-    private static final String CONFIG = "multipleIncompatibleAppendersTest.xml";
-
-    @ClassRule
-    public static LoggerContextRule context = new LoggerContextRule(CONFIG);
 
     @Test
-    public void narrow() throws Exception {
-        final Logger logger = LogManager.getLogger(OutputStreamManagerTest.class);
+    @LoggerContextSource("multipleIncompatibleAppendersTest.xml")
+    public void narrow(final LoggerContext context) {
+        final Logger logger = context.getLogger(OutputStreamManagerTest.class);
         logger.info("test");
         final List<StatusData> statusData = StatusLogger.getLogger().getStatusData();
         StatusData data = statusData.get(0);
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/RandomAccessFileManagerTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/RandomAccessFileManagerTest.java
index fac3171..62b2bec 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/RandomAccessFileManagerTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/RandomAccessFileManagerTest.java
@@ -23,19 +23,18 @@
 import java.io.RandomAccessFile;
 
 import org.apache.logging.log4j.core.util.NullOutputStream;
-import org.junit.ClassRule;
-import org.junit.Test;
-import org.junit.rules.TemporaryFolder;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.io.TempDir;
 
-import static org.junit.Assert.*;
+import static org.junit.jupiter.api.Assertions.*;
 
 /**
  * Tests the RandomAccessFileManager class.
  */
 public class RandomAccessFileManagerTest {
 
-    @ClassRule
-    public static TemporaryFolder folder = new TemporaryFolder();
+    @TempDir
+    File tempDir;
 
     /**
      * Test method for
@@ -44,7 +43,7 @@
      */
     @Test
     public void testWrite_multiplesOfBufferSize() throws IOException {
-        final File file = folder.newFile();
+        final File file = new File(tempDir, "random-access-file.bin");
         try (final RandomAccessFile raf = new RandomAccessFile(file, "rw")) {
             final OutputStream os = NullOutputStream.getInstance();
             final RandomAccessFileManager manager = new RandomAccessFileManager(null, raf, file.getName(),
@@ -56,7 +55,8 @@
 
             // all data is written if exceeds buffer size
             assertEquals(RandomAccessFileManager.DEFAULT_BUFFER_SIZE * 3, raf.length());
-        }}
+        }
+    }
 
     /**
      * Test method for
@@ -65,7 +65,7 @@
      */
     @Test
     public void testWrite_dataExceedingBufferSize() throws IOException {
-        final File file = folder.newFile();
+        final File file = new File(tempDir, "random-access-file.bin");
         try (final RandomAccessFile raf = new RandomAccessFile(file, "rw")) {
             final OutputStream os = NullOutputStream.getInstance();
             final RandomAccessFileManager manager = new RandomAccessFileManager(null, raf, file.getName(),
@@ -79,11 +79,12 @@
 
             manager.flush();
             assertEquals(size, raf.length()); // all data written to file now
-        }}
+        }
+    }
 
     @Test
     public void testConfigurableBufferSize() throws IOException {
-        final File file = folder.newFile();
+        final File file = new File(tempDir, "random-access-file.bin");
         try (final RandomAccessFile raf = new RandomAccessFile(file, "rw")) {
             final OutputStream os = NullOutputStream.getInstance();
             final int bufferSize = 4 * 1024;
@@ -94,11 +95,12 @@
 
             // check the resulting buffer size is what was requested
             assertEquals(bufferSize, manager.getBufferSize());
-        }}
+        }
+    }
 
     @Test
     public void testWrite_dataExceedingMinBufferSize() throws IOException {
-        final File file = folder.newFile();
+        final File file = new File(tempDir, "random-access-file.bin");
         try (final RandomAccessFile raf = new RandomAccessFile(file, "rw")) {
             final OutputStream os = NullOutputStream.getInstance();
             final int bufferSize = 1;
@@ -113,12 +115,13 @@
 
             manager.flush();
             assertEquals(size, raf.length()); // all data written to file now
-        }}
+        }
+    }
 
     @Test
     public void testAppendDoesNotOverwriteExistingFile() throws IOException {
         final boolean isAppend = true;
-        final File file = folder.newFile();
+        final File file = new File(tempDir, "random-access-file.bin");
         assertEquals(0, file.length());
 
         final byte[] bytes = new byte[4 * 1024];
@@ -128,12 +131,12 @@
             fos.write(bytes, 0, bytes.length);
             fos.flush();
         }
-        assertEquals("all flushed to disk", bytes.length, file.length());
+        assertEquals(bytes.length, file.length(), "all flushed to disk");
 
         final RandomAccessFileManager manager = RandomAccessFileManager.getFileManager(
                 file.getAbsolutePath(), isAppend, true, RandomAccessFileManager.DEFAULT_BUFFER_SIZE, null, null, null);
         manager.write(bytes, 0, bytes.length, true);
         final int expected = bytes.length * 2;
-        assertEquals("appended, not overwritten", expected, file.length());
+        assertEquals(expected, file.length(), "appended, not overwritten");
     }
 }
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/ReconfigureAppenderTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/ReconfigureAppenderTest.java
index 01c5869..b16934f 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/ReconfigureAppenderTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/ReconfigureAppenderTest.java
@@ -32,12 +32,8 @@
 import org.apache.logging.log4j.core.config.builder.impl.BuiltConfiguration;
 import org.apache.logging.log4j.core.layout.PatternLayout;
 import org.apache.logging.log4j.plugins.util.Builder;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-/**
- * Class Description goes here.
- * Created by rgoers on 2019-02-02
- */
 public class ReconfigureAppenderTest {
 	private RollingFileAppender appender;
 
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/ScriptAppenderSelectorTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/ScriptAppenderSelectorTest.java
index 62a29b6..6b3800f 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/ScriptAppenderSelectorTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/ScriptAppenderSelectorTest.java
@@ -16,79 +16,44 @@
  */
 package org.apache.logging.log4j.core.appender;
 
-import org.apache.logging.log4j.Marker;
 import org.apache.logging.log4j.MarkerManager;
-import org.apache.logging.log4j.categories.Scripts;
-import org.apache.logging.log4j.core.Logger;
-import org.apache.logging.log4j.junit.LoggerContextRule;
+import org.apache.logging.log4j.core.config.Configuration;
+import org.apache.logging.log4j.junit.LoggerContextSource;
+import org.apache.logging.log4j.spi.ExtendedLogger;
 import org.apache.logging.log4j.test.appender.ListAppender;
-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.Test;
 
-import static org.junit.Assert.*;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.hasSize;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
 
-@RunWith(Parameterized.class)
-@Category(Scripts.Groovy.class)
 public class ScriptAppenderSelectorTest {
 
-    @Parameterized.Parameters(name = "{0}")
-    public static Object[][] getParameters() {
-        // @formatter:off
-        return new Object[][] { 
-            { "log4j-appender-selector-groovy.xml" },
-            { "log4j-appender-selector-javascript.xml" },
-        };
-        // @formatter:on
+    @Test
+    @LoggerContextSource("log4j-appender-selector-javascript.xml")
+    void testJavaScriptSelector(final Configuration config) {
+        verify(config);
     }
 
-    @Rule
-    public final LoggerContextRule loggerContextRule;
-
-    public ScriptAppenderSelectorTest(final String configLocation) {
-        this.loggerContextRule = new LoggerContextRule(configLocation);
+    @Test
+    @LoggerContextSource("log4j-appender-selector-groovy.xml")
+    void testGroovySelector(final Configuration config) {
+        verify(config);
     }
 
-    private ListAppender getListAppender() {
-        return loggerContextRule.getListAppender("SelectIt");
-    }
-
-    private void logAndCheck() {
-        final Marker marker = MarkerManager.getMarker("HEXDUMP");
-        final Logger logger = loggerContextRule.getLogger(ScriptAppenderSelectorTest.class);
+    static void verify(final Configuration config) {
+        assertNull(config.getAppender("List1"), "List1 appender should not be initialized");
+        assertNull(config.getAppender("List2"), "List2 appender should not be initialized");
+        final ListAppender listAppender = config.getAppender("SelectIt");
+        assertNotNull(listAppender);
+        final ExtendedLogger logger = config.getLoggerContext().getLogger(ScriptAppenderSelectorTest.class);
         logger.error("Hello");
-        final ListAppender listAppender = getListAppender();
-        assertEquals("Incorrect number of events", 1, listAppender.getEvents().size());
+        assertThat(listAppender.getEvents(), hasSize(1));
         logger.error("World");
-        assertEquals("Incorrect number of events", 2, listAppender.getEvents().size());
-        logger.error(marker, "DEADBEEF");
-        assertEquals("Incorrect number of events", 3, listAppender.getEvents().size());
+        assertThat(listAppender.getEvents(), hasSize(2));
+        logger.error(MarkerManager.getMarker("HEXDUMP"), "DEADBEEF");
+        assertThat(listAppender.getEvents(), hasSize(3));
     }
 
-    @Test(expected = AssertionError.class)
-    public void testAppender1Absence() {
-        loggerContextRule.getListAppender("List1");
-    }
-
-    @Test(expected = AssertionError.class)
-    public void testAppender2Absence() {
-        loggerContextRule.getListAppender("List2");
-    }
-
-    @Test
-    public void testAppenderPresence() {
-        getListAppender();
-    }
-
-    @Test
-    public void testLogging1() {
-        logAndCheck();
-    }
-
-    @Test
-    public void testLogging2() {
-        logAndCheck();
-    }
 }
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/SocketAppenderBuilderTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/SocketAppenderBuilderTest.java
index bdfd35a..3636af3 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/SocketAppenderBuilderTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/SocketAppenderBuilderTest.java
@@ -16,9 +16,9 @@
  */
 package org.apache.logging.log4j.core.appender;
 
-import org.apache.logging.log4j.core.appender.SocketAppender;
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 public class SocketAppenderBuilderTest {
 
@@ -27,6 +27,7 @@
      */
     @Test
     public void testDefaultImmediateFlush() {
-        Assert.assertTrue(SocketAppender.newBuilder().isImmediateFlush());
+        assertTrue(SocketAppender.newBuilder().isImmediateFlush(),
+                "Regression of LOG4J2-1620: default value for immediateFlush should be true");
     }
 }
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/TlsSyslogFrameTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/TlsSyslogFrameTest.java
index 32ad5a9..03d23c1 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/TlsSyslogFrameTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/TlsSyslogFrameTest.java
@@ -19,8 +19,10 @@
 import java.nio.charset.StandardCharsets;
 
 import org.apache.logging.log4j.util.Chars;
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotEquals;
 
 public class TlsSyslogFrameTest {
     private static final String TEST_MESSAGE = "The quick brown fox jumps over the lazy dog";
@@ -29,16 +31,16 @@
     public void equals() {
         final TlsSyslogFrame first = new TlsSyslogFrame(TEST_MESSAGE);
         final TlsSyslogFrame second = new TlsSyslogFrame(TEST_MESSAGE);
-        Assert.assertEquals(first, second);
-        Assert.assertEquals(first.hashCode(), second.hashCode());
+        assertEquals(first, second);
+        assertEquals(first.hashCode(), second.hashCode());
     }
 
     @Test
     public void notEquals() {
         final TlsSyslogFrame first = new TlsSyslogFrame("A message");
         final TlsSyslogFrame second = new TlsSyslogFrame("B message");
-        Assert.assertNotEquals(first, second);
-        Assert.assertNotEquals(first.hashCode(), second.hashCode());
+        assertNotEquals(first, second);
+        assertNotEquals(first.hashCode(), second.hashCode());
     }
 
     @Test
@@ -46,6 +48,6 @@
         final TlsSyslogFrame frame = new TlsSyslogFrame(TEST_MESSAGE);
         final int length = TEST_MESSAGE.getBytes(StandardCharsets.UTF_8).length;
         final String expected = Integer.toString(length) + Chars.SPACE + TEST_MESSAGE;
-        Assert.assertEquals(expected, frame.toString());
+        assertEquals(expected, frame.toString());
     }
 }
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/WriterAppenderTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/WriterAppenderTest.java
index ac29fdf..392862e 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/WriterAppenderTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/WriterAppenderTest.java
@@ -22,6 +22,7 @@
 import java.io.PrintWriter;
 import java.io.StringWriter;
 import java.io.Writer;
+import java.lang.reflect.Method;
 
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
@@ -29,10 +30,12 @@
 import org.apache.logging.log4j.core.LoggerContext;
 import org.apache.logging.log4j.core.config.Configuration;
 import org.apache.logging.log4j.core.layout.PatternLayout;
-import org.junit.Assert;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.TestName;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestInfo;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.containsString;
 
 /**
  * Tests {@link WriterAppender}.
@@ -41,11 +44,15 @@
 
     private static final String TEST_MSG = "FOO ERROR";
 
-    @Rule
-    public TestName testName = new TestName();
+    private String testMethodName;
+
+    @BeforeEach
+    void setUp(final TestInfo testInfo) {
+        testMethodName = testInfo.getTestMethod().map(Method::getName).orElseGet(testInfo::getDisplayName);
+    }
 
     private String getName(final Writer writer) {
-        return writer.getClass().getSimpleName() + "." + testName.getMethodName();
+        return writer.getClass().getSimpleName() + "." + testMethodName;
     }
 
     private void test(final ByteArrayOutputStream out, final Writer writer) {
@@ -54,7 +61,7 @@
         final Logger logger = LogManager.getLogger(name);
         logger.error(TEST_MSG);
         final String actual = out.toString();
-        Assert.assertTrue(actual, actual.contains(TEST_MSG));
+        assertThat(actual, containsString(TEST_MSG));
     }
 
     private void test(final Writer writer) {
@@ -63,7 +70,7 @@
         final Logger logger = LogManager.getLogger(name);
         logger.error(TEST_MSG);
         final String actual = writer.toString();
-        Assert.assertTrue(actual, actual.contains(TEST_MSG));
+        assertThat(actual, containsString(TEST_MSG));
     }
 
     private void addAppender(final Writer writer, final String writerName) {
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rewrite/LoggerNameLevelRewritePolicyTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rewrite/LoggerNameLevelRewritePolicyTest.java
index a30a0e6..fedd544 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rewrite/LoggerNameLevelRewritePolicyTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rewrite/LoggerNameLevelRewritePolicyTest.java
@@ -21,8 +21,9 @@
 import org.apache.logging.log4j.core.impl.Log4jLogEvent;
 import org.apache.logging.log4j.core.util.KeyValuePair;
 import org.apache.logging.log4j.message.SimpleMessage;
-import org.junit.Assert;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * Tests {@link LoggerNameLevelRewritePolicy}.
@@ -44,26 +45,26 @@
         final LoggerNameLevelRewritePolicy updatePolicy = LoggerNameLevelRewritePolicy.createPolicy(loggerNameRewrite,
                 rewrite);
         LogEvent rewritten = updatePolicy.rewrite(logEvent);
-        Assert.assertEquals(Level.DEBUG, rewritten.getLevel());
+        assertEquals(Level.DEBUG, rewritten.getLevel());
         logEvent = Log4jLogEvent.newBuilder().setLoggerName(loggerNameRewrite)
                 .setLoggerFqcn("LoggerNameLevelRewritePolicyTest.testUpdate()").setLevel(Level.WARN)
                 .setMessage(new SimpleMessage("Test")).setThrown(new RuntimeException("test")).setThreadName("none")
                 .setTimeMillis(1).build();
         rewritten = updatePolicy.rewrite(logEvent);
-        Assert.assertEquals(Level.INFO, rewritten.getLevel());
+        assertEquals(Level.INFO, rewritten.getLevel());
         final String loggerNameReadOnly = "com.nochange";
         logEvent = Log4jLogEvent.newBuilder().setLoggerName(loggerNameReadOnly)
                 .setLoggerFqcn("LoggerNameLevelRewritePolicyTest.testUpdate()").setLevel(Level.INFO)
                 .setMessage(new SimpleMessage("Test")).setThrown(new RuntimeException("test")).setThreadName("none")
                 .setTimeMillis(1).build();
         rewritten = updatePolicy.rewrite(logEvent);
-        Assert.assertEquals(Level.INFO, rewritten.getLevel());
+        assertEquals(Level.INFO, rewritten.getLevel());
         logEvent = Log4jLogEvent.newBuilder().setLoggerName(loggerNameReadOnly)
                 .setLoggerFqcn("LoggerNameLevelRewritePolicyTest.testUpdate()").setLevel(Level.WARN)
                 .setMessage(new SimpleMessage("Test")).setThrown(new RuntimeException("test")).setThreadName("none")
                 .setTimeMillis(1).build();
         rewritten = updatePolicy.rewrite(logEvent);
-        Assert.assertEquals(Level.WARN, rewritten.getLevel());
+        assertEquals(Level.WARN, rewritten.getLevel());
     }
 
 }
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rewrite/MapRewritePolicyTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rewrite/MapRewritePolicyTest.java
index f311007..c9f0c51 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rewrite/MapRewritePolicyTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rewrite/MapRewritePolicyTest.java
@@ -16,16 +16,6 @@
 */
 package org.apache.logging.log4j.core.appender.rewrite;
 
-import static org.apache.logging.log4j.hamcrest.MapMatchers.hasSize;
-import static org.hamcrest.Matchers.hasEntry;
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertThat;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Map;
-
 import org.apache.logging.log4j.Level;
 import org.apache.logging.log4j.MarkerManager;
 import org.apache.logging.log4j.core.LogEvent;
@@ -38,8 +28,18 @@
 import org.apache.logging.log4j.spi.MutableThreadContextStack;
 import org.apache.logging.log4j.spi.ThreadContextStack;
 import org.apache.logging.log4j.util.StringMap;
-import org.junit.BeforeClass;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Map;
+
+import static org.apache.logging.log4j.hamcrest.MapMatchers.hasSize;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.hasEntry;
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 
 public class MapRewritePolicyTest {
@@ -48,7 +48,7 @@
     private static KeyValuePair[] rewrite;
     private static LogEvent logEvent0, logEvent1, logEvent2, logEvent3;
 
-    @BeforeClass
+    @BeforeAll
     public static void setupClass() {
         stringMap.putValue("test1", "one");
         stringMap.putValue("test2", "two");
@@ -93,7 +93,7 @@
         final MapRewritePolicy addPolicy = MapRewritePolicy.createPolicy("Add", rewrite);
         LogEvent rewritten = addPolicy.rewrite(logEvent0);
         compareLogEvents(logEvent0, rewritten);
-        assertEquals("Simple log message changed", logEvent0.getMessage(), rewritten.getMessage());
+        assertEquals(logEvent0.getMessage(), rewritten.getMessage(), "Simple log message changed");
 
         rewritten = addPolicy.rewrite(logEvent1);
         compareLogEvents(logEvent1, rewritten);
@@ -113,7 +113,7 @@
         final MapRewritePolicy updatePolicy = MapRewritePolicy.createPolicy("Update", rewrite);
         LogEvent rewritten = updatePolicy.rewrite(logEvent0);
         compareLogEvents(logEvent0, rewritten);
-        assertEquals("Simple log message changed", logEvent0.getMessage(), rewritten.getMessage());
+        assertEquals(logEvent0.getMessage(), rewritten.getMessage(), "Simple log message changed");
 
         rewritten = updatePolicy.rewrite(logEvent1);
         compareLogEvents(logEvent1, rewritten);
@@ -133,7 +133,7 @@
         final MapRewritePolicy addPolicy = MapRewritePolicy.createPolicy(null, rewrite);
         LogEvent rewritten = addPolicy.rewrite(logEvent0);
         compareLogEvents(logEvent0, rewritten);
-        assertEquals("Simple log message changed", logEvent0.getMessage(), rewritten.getMessage());
+        assertEquals(logEvent0.getMessage(), rewritten.getMessage(), "Simple log message changed");
 
         rewritten = addPolicy.rewrite(logEvent1);
         compareLogEvents(logEvent1, rewritten);
@@ -164,18 +164,18 @@
     @SuppressWarnings("deprecation")
     private void compareLogEvents(final LogEvent orig, final LogEvent changed) {
         // Ensure that everything but the Mapped Data is still the same
-        assertEquals("LoggerName changed", orig.getLoggerName(), changed.getLoggerName());
-        assertEquals("Marker changed", orig.getMarker(), changed.getMarker());
-        assertEquals("FQCN changed", orig.getLoggerFqcn(), changed.getLoggerFqcn());
-        assertEquals("Level changed", orig.getLevel(), changed.getLevel());
-        assertArrayEquals("Throwable changed",
-            orig.getThrown() == null ? null : orig.getThrownProxy().getExtendedStackTrace(),
-            changed.getThrown() == null ? null : changed.getThrownProxy().getExtendedStackTrace()
-        );
-        assertEquals("ContextData changed", orig.getContextData(), changed.getContextData());
-        assertEquals("ContextStack changed", orig.getContextStack(), changed.getContextStack());
-        assertEquals("ThreadName changed", orig.getThreadName(), changed.getThreadName());
-        assertEquals("Source changed", orig.getSource(), changed.getSource());
-        assertEquals("Millis changed", orig.getTimeMillis(), changed.getTimeMillis());
+        assertEquals(orig.getLoggerName(), changed.getLoggerName(), "LoggerName changed");
+        assertEquals(orig.getMarker(), changed.getMarker(), "Marker changed");
+        assertEquals(orig.getLoggerFqcn(), changed.getLoggerFqcn(), "FQCN changed");
+        assertEquals(orig.getLevel(), changed.getLevel(), "Level changed");
+        assertArrayEquals(
+                orig.getThrown() == null ? null : orig.getThrownProxy().getExtendedStackTrace(),
+            changed.getThrown() == null ? null : changed.getThrownProxy().getExtendedStackTrace(),
+                "Throwable changed");
+        assertEquals(orig.getContextData(), changed.getContextData(), "ContextData changed");
+        assertEquals(orig.getContextStack(), changed.getContextStack(), "ContextStack changed");
+        assertEquals(orig.getThreadName(), changed.getThreadName(), "ThreadName changed");
+        assertEquals(orig.getSource(), changed.getSource(), "Source changed");
+        assertEquals(orig.getTimeMillis(), changed.getTimeMillis(), "Millis changed");
     }
 }
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rewrite/RewriteAppenderTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rewrite/RewriteAppenderTest.java
index 73082e9..9a94289 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rewrite/RewriteAppenderTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rewrite/RewriteAppenderTest.java
@@ -16,51 +16,33 @@
  */
 package org.apache.logging.log4j.core.appender.rewrite;
 
-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 org.apache.logging.log4j.EventLogger;
+import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.core.LogEvent;
+import org.apache.logging.log4j.core.LoggerContext;
+import org.apache.logging.log4j.hamcrest.MapMatchers;
+import org.apache.logging.log4j.junit.LoggerContextSource;
+import org.apache.logging.log4j.junit.Named;
+import org.apache.logging.log4j.message.Message;
+import org.apache.logging.log4j.message.StructuredDataMessage;
+import org.apache.logging.log4j.test.appender.ListAppender;
+import org.junit.jupiter.api.Test;
 
 import java.util.List;
 import java.util.Map;
 
-import org.apache.logging.log4j.EventLogger;
-import org.apache.logging.log4j.LogManager;
-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.message.Message;
-import org.apache.logging.log4j.message.StructuredDataMessage;
-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.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.*;
+import static org.junit.jupiter.api.Assertions.*;
 
-/**
- *
- */
+@LoggerContextSource("log4j-rewrite.xml")
 public class RewriteAppenderTest {
-    private ListAppender app;
-    private ListAppender app2;
+    private final ListAppender app;
+    private final ListAppender app2;
 
-    @ClassRule
-    public static LoggerContextRule init = new LoggerContextRule("log4j-rewrite.xml");
-
-    @Before
-    public void setUp() throws Exception {
-        app = init.getListAppender("List");
-        app2 = init.getListAppender("List2");
-    }
-
-    @After
-    public void tearDown() throws Exception {
-        if (app != null) {
-            app.clear();
-        }
-        if (app2 != null) {
-            app2.clear();
-        }
+    public RewriteAppenderTest(@Named("List") final ListAppender app, @Named("List2") final ListAppender app2) {
+        this.app = app.clear();
+        this.app2 = app2.clear();
     }
 
     @Test
@@ -70,44 +52,44 @@
         msg.put("Key2", "Value2");
         EventLogger.logEvent(msg);
         final List<LogEvent> list = app.getEvents();
-        assertNotNull("No events generated", list);
-        assertTrue("Incorrect number of events. Expected 1, got " + list.size(), list.size() == 1);
+        assertThat(list, hasSize(1));
         final LogEvent event = list.get(0);
         final Message m = event.getMessage();
-        assertTrue("Message is not a StringMapMessage: " + m.getClass(), m instanceof StructuredDataMessage);
+        assertThat(m, instanceOf(StructuredDataMessage.class));
         final StructuredDataMessage message = (StructuredDataMessage) m;
         final Map<String, String> map = message.getData();
-        assertNotNull("No Map", map);
-        assertTrue("Incorrect number of map entries, expected 3 got " + map.size(), map.size() == 3);
+        assertNotNull(map, "No Map");
+        assertThat(map, MapMatchers.hasSize(3));
         final String value = map.get("Key1");
         assertEquals("Apache", value);
     }
 
 
     @Test
-    public void testProperties() {
-        final Logger logger = LogManager.getLogger(RewriteAppenderTest.class);
+    public void testProperties(final LoggerContext context) {
+        final Logger logger = context.getLogger(RewriteAppenderTest.class);
         logger.debug("Test properties rewrite");
         final List<String> list = app2.getMessages();
-        assertNotNull("No events generated", list);
-        assertTrue("Incorrect number of events. Expected 1, got " + list.size(), list.size() == 1);
-        assertFalse("Did not resolve user name", list.get(0).contains("{user.dir}"));
+        assertThat(list, hasSize(1));
+        assertThat(list.get(0), not(containsString("{user.dir}")));
+        assertNotNull(list, "No events generated");
+        assertEquals(list.size(), 1, "Incorrect number of events. Expected 1, got " + list.size());
+        assertFalse(list.get(0).contains("{user."), "Did not resolve user name");
     }
 
 
     @Test
-    public void testFilter() {
+    public void testFilter(final LoggerContext context) {
         StructuredDataMessage msg = new StructuredDataMessage("Test", "This is a test", "Service");
         msg.put("Key1", "Value2");
         msg.put("Key2", "Value1");
-        final Logger logger = LogManager.getLogger("org.apache.logging.log4j.core.Logging");
+        final Logger logger = context.getLogger("org.apache.logging.log4j.core.Logging");
         logger.debug(msg);
         msg = new StructuredDataMessage("Test", "This is a test", "Service");
         msg.put("Key1", "Value1");
         msg.put("Key2", "Value2");
         logger.trace(msg);
 
-        final List<LogEvent> list = app.getEvents();
-        assertTrue("Events were generated", list == null || list.isEmpty());
+        assertThat(app.getEvents(), empty());
     }
 }
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/CronTriggeringPolicyTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/CronTriggeringPolicyTest.java
index 04085ae..b8c36f3 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/CronTriggeringPolicyTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/CronTriggeringPolicyTest.java
@@ -22,9 +22,10 @@
 import org.apache.logging.log4j.core.config.Configurator;
 import org.apache.logging.log4j.core.config.NullConfiguration;
 import org.apache.logging.log4j.core.layout.PatternLayout;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertNotNull;
 
 public class CronTriggeringPolicyTest {
 
@@ -36,7 +37,7 @@
     // @Rule
     // public CleanFiles cleanFiles = new CleanFiles("testcmd1.log", "testcmd2.log", "testcmd3.log");
 
-    @Before
+    @BeforeEach
     public void before() {
         configuration = new NullConfiguration();
     }
@@ -61,7 +62,7 @@
             .setConfiguration(configuration)
             .build();
         // @formatter:on
-        Assert.assertNotNull(raf);
+        assertNotNull(raf);
     }
 
     /**
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/EligibleFilesTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/EligibleFilesTest.java
index 51fae36..4b99248 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/EligibleFilesTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/EligibleFilesTest.java
@@ -20,9 +20,9 @@
 import java.util.Map;
 
 import org.apache.logging.log4j.core.pattern.NotANumber;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.*;
+import static org.junit.jupiter.api.Assertions.*;
 
 /**
  * Test getEligibleFiles method.
@@ -34,11 +34,11 @@
         final String path = "target/test-classes/rolloverPath/log4j.txt.20170112_09-" + NotANumber.VALUE + ".gz";
         final TestRolloverStrategy strategy = new TestRolloverStrategy();
         final Map<Integer, Path> files = strategy.findFilesInPath(path);
-        assertTrue("No files found", files.size() > 0);
-        assertTrue("Incorrect number of files found. Should be 30, was " + files.size(), files.size() == 30);
+        assertTrue(files.size() > 0, "No files found");
+        assertEquals(30, files.size(), "Incorrect number of files found. Should be 30, was " + files.size());
     }
 
-    private class TestRolloverStrategy extends AbstractRolloverStrategy {
+    private static class TestRolloverStrategy extends AbstractRolloverStrategy {
 
         public TestRolloverStrategy() {
             super(null);
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/FileSizeTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/FileSizeTest.java
index 8121ce7..11f573b 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/FileSizeTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/FileSizeTest.java
@@ -16,8 +16,9 @@
  */
 package org.apache.logging.log4j.core.appender.rolling;
 
-import org.junit.Test;
-import static org.junit.Assert.*;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.*;
 
 /**
  * Tests {@link FileSize}.
@@ -27,10 +28,10 @@
     private final static long EXPECTED = 10 * 1024;
     
     @Test
-    public void testFileSize() throws Exception {
+    public void testFileSize() {
         long value = FileSize.parse("10KB", 0);
-        assertTrue("unexpected value " + value, value == EXPECTED);
+        assertEquals(EXPECTED, value, "unexpected value " + value);
         value = FileSize.parse("10 KB", 0);
-        assertTrue("unexpected value " + value, value == EXPECTED);
+        assertEquals(EXPECTED, value, "unexpected value " + value);
     }
 }
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/OnStartupTriggeringPolicyTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/OnStartupTriggeringPolicyTest.java
index 28353c3..f998c5d 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/OnStartupTriggeringPolicyTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/OnStartupTriggeringPolicyTest.java
@@ -16,58 +16,50 @@
  */
 package org.apache.logging.log4j.core.appender.rolling;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-
-import java.io.ByteArrayInputStream;
-import java.io.File;
-import java.io.InputStream;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.nio.file.StandardCopyOption;
-import java.nio.file.attribute.BasicFileAttributeView;
-import java.nio.file.attribute.FileTime;
-import java.util.Arrays;
-
 import org.apache.logging.log4j.core.config.Configuration;
 import org.apache.logging.log4j.core.config.DefaultConfiguration;
 import org.apache.logging.log4j.core.layout.PatternLayout;
 import org.apache.logging.log4j.core.time.internal.format.FastDateFormat;
-import org.apache.logging.log4j.junit.CleanFolders;
-import org.junit.Rule;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.io.TempDir;
+
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.StandardCopyOption;
+import java.nio.file.attribute.BasicFileAttributeView;
+import java.nio.file.attribute.FileTime;
+import java.time.Duration;
+import java.time.Instant;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * Tests {@link OnStartupTriggeringPolicy}.
  */
-// @Ignore
 public class OnStartupTriggeringPolicyTest {
 
-    private static final String TARGET_FOLDER = "target/rollOnStartup";
-    private static final String TARGET_FILE = TARGET_FOLDER + "/testfile";
-    private static final String TARGET_PATTERN = TARGET_FOLDER + "/test1-%d{MM-dd-yyyy}-%i.log";
-    private static final String ROLLED_FILE_PREFIX = TARGET_FOLDER + "/test1-";
-    private static final String ROLLED_FILE_SUFFIX = "-1.log";
+    private static final String TARGET_PATTERN = "/test1-%d{MM-dd-yyyy}-%i.log";
     private static final String TEST_DATA = "Hello world!";
     private static final FastDateFormat formatter = FastDateFormat.getInstance("MM-dd-yyyy");
 
-    @Rule
-    public CleanFolders rule = new CleanFolders(TARGET_FOLDER);
+    @TempDir
+    Path tempDir;
 
     @Test
     public void testPolicy() throws Exception {
-        //System.setProperty("log4j2.debug", "true");
-        //System.setProperty("log4j2.StatusLogger.level", "trace");
         final Configuration configuration = new DefaultConfiguration();
-        final Path target = Paths.get(TARGET_FILE);
-        target.toFile().getParentFile().mkdirs();
-        final long timeStamp = System.currentTimeMillis() - (1000 * 60 * 60 * 24);
+        final Path target = tempDir.resolve("testfile");
+        final long timeStamp = Instant.now().minus(Duration.ofDays(1)).toEpochMilli();
         final String expectedDate = formatter.format(timeStamp);
-        final String rolledFileName = ROLLED_FILE_PREFIX + expectedDate + ROLLED_FILE_SUFFIX;
-        final Path rolled = Paths.get(rolledFileName);
+        final Path rolled = tempDir.resolve("test1-" + expectedDate + "-1.log");
         final long copied;
-        try (final InputStream is = new ByteArrayInputStream(TEST_DATA.getBytes("UTF-8"))) {
+        try (final InputStream is = new ByteArrayInputStream(TEST_DATA.getBytes(StandardCharsets.UTF_8))) {
             copied = Files.copy(is, target, StandardCopyOption.REPLACE_EXISTING);
         }
         final long size = Files.size(target);
@@ -82,14 +74,18 @@
         final RolloverStrategy strategy = DefaultRolloverStrategy.newBuilder().setCompressionLevelStr("0")
                 .setStopCustomActionsOnError(true).setConfig(configuration).build();
         final OnStartupTriggeringPolicy policy = OnStartupTriggeringPolicy.createPolicy(1);
-        try (final RollingFileManager manager = RollingFileManager.getFileManager(TARGET_FILE, TARGET_PATTERN, true,
+
+        try (final RollingFileManager manager = RollingFileManager.getFileManager(target.toString(), tempDir.toString() + TARGET_PATTERN, true,
                 false, policy, strategy, null, layout, 8192, true, false, null, null, null, configuration)) {
             manager.initialize();
-            final String files = Arrays.toString(new File(TARGET_FOLDER).listFiles());
-            assertTrue(target.toString() + ", files = " + files, Files.exists(target));
-            assertEquals(target.toString(), 0, Files.size(target));
-            assertTrue("Missing: " + rolled.toString() + ", files on disk = " + files, Files.exists(rolled));
-            assertEquals(rolled.toString(), size, Files.size(rolled));
+            final String files;
+            try (Stream<Path> contents = Files.list(tempDir)) {
+                files = contents.map(Path::toString).collect(Collectors.joining(", ", "[", "]"));
+            }
+            assertTrue(Files.exists(target), target.toString() + ", files = " + files);
+            assertEquals(0, Files.size(target), target.toString());
+            assertTrue(Files.exists(rolled), "Missing: " + rolled.toString() + ", files on disk = " + files);
+            assertEquals(size, Files.size(rolled), rolled.toString());
         }
     }
 
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/PatternProcessorTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/PatternProcessorTest.java
index 556268d..4ba1bc1 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/PatternProcessorTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/PatternProcessorTest.java
@@ -22,9 +22,12 @@
 import java.util.Date;
 import java.util.Locale;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.ResourceAccessMode;
+import org.junit.jupiter.api.parallel.ResourceLock;
+import org.junit.jupiter.api.parallel.Resources;
 
-import static org.junit.Assert.*;
+import static org.junit.jupiter.api.Assertions.*;
 
 /**
  * Tests the PatternProcessor class.
@@ -36,11 +39,12 @@
     }
 
     @Test
+    @ResourceLock(value = Resources.LOCALE, mode = ResourceAccessMode.READ)
     public void testDontInterpretBackslashAsEscape() {
         final PatternProcessor pp = new PatternProcessor("c:\\test\\new/app-%d{HH-mm-ss}.log");
         final Calendar cal = Calendar.getInstance();
         cal.set(Calendar.HOUR_OF_DAY, 16);
-        cal.set(Calendar.MINUTE, 02);
+        cal.set(Calendar.MINUTE, 2);
         cal.set(Calendar.SECOND, 15);
 
         final StringBuilder buf = new StringBuilder();
@@ -49,6 +53,7 @@
     }
 
     @Test
+    @ResourceLock(value = Resources.LOCALE, mode = ResourceAccessMode.READ)
     public void testGetNextTimeHourlyReturnsFirstMinuteOfNextHour() {
         final PatternProcessor pp = new PatternProcessor("logs/app-%d{yyyy-MM-dd-HH}.log.gz");
         final Calendar initial = Calendar.getInstance();
@@ -57,12 +62,13 @@
 
         // expect Wed, March 4, 2014, 11:00
         final Calendar expected = Calendar.getInstance();
-        expected.set(2014, Calendar.MARCH, 4, 11, 00, 00);
+        expected.set(2014, Calendar.MARCH, 4, 11, 0, 0);
         expected.set(Calendar.MILLISECOND, 0);
         assertEquals(format(expected.getTimeInMillis()), format(actual));
     }
 
     @Test
+    @ResourceLock(value = Resources.LOCALE, mode = ResourceAccessMode.READ)
     public void testGetNextTimeHourlyReturnsFirstMinuteOfNextHour2() {
         final PatternProcessor pp = new PatternProcessor("logs/app-%d{yyyy-MM-dd-HH}.log.gz");
         final Calendar initial = Calendar.getInstance();
@@ -71,12 +77,13 @@
 
         // expect Wed, March 5, 2014, 00:00
         final Calendar expected = Calendar.getInstance();
-        expected.set(2014, Calendar.MARCH, 5, 00, 00, 00);
+        expected.set(2014, Calendar.MARCH, 5, 0, 0, 0);
         expected.set(Calendar.MILLISECOND, 0);
         assertEquals(format(expected.getTimeInMillis()), format(actual));
     }
 
     @Test
+    @ResourceLock(value = Resources.LOCALE, mode = ResourceAccessMode.READ)
     public void testGetNextTimeHourlyReturnsFirstMinuteOfNextYear() {
         final PatternProcessor pp = new PatternProcessor("logs/app-%d{yyyy-MM-dd-HH}.log.gz");
         final Calendar initial = Calendar.getInstance();
@@ -90,6 +97,7 @@
     }
 
     @Test
+    @ResourceLock(value = Resources.LOCALE, mode = ResourceAccessMode.READ)
     public void testGetNextTimeMillisecondlyReturnsNextMillisec() {
         final PatternProcessor pp = new PatternProcessor("logs/app-%d{yyyy-MM-dd-HH-mm-ss.SSS}.log.gz");
         final Calendar initial = Calendar.getInstance();
@@ -106,6 +114,7 @@
     }
 
     @Test
+    @ResourceLock(value = Resources.LOCALE, mode = ResourceAccessMode.READ)
     public void testGetNextTimeMinutelyReturnsFirstSecondOfNextMinute() {
         final PatternProcessor pp = new PatternProcessor("logs/app-%d{yyyy-MM-dd-HH-mm}.log.gz");
         final Calendar initial = Calendar.getInstance();
@@ -116,12 +125,13 @@
 
         // expect Tue, March 4, 2014, 10:32
         final Calendar expected = Calendar.getInstance();
-        expected.set(2014, Calendar.MARCH, 4, 10, 32, 00);
+        expected.set(2014, Calendar.MARCH, 4, 10, 32, 0);
         expected.set(Calendar.MILLISECOND, 0);
         assertEquals(format(expected.getTimeInMillis()), format(actual));
     }
 
     @Test
+    @ResourceLock(value = Resources.LOCALE, mode = ResourceAccessMode.READ)
     public void testGetNextTimeMonthlyReturnsFirstDayOfNextMonth() {
         final PatternProcessor pp = new PatternProcessor("logs/app-%d{yyyy-MM}.log.gz");
         final Calendar initial = Calendar.getInstance();
@@ -130,12 +140,13 @@
 
         // We expect 1st day of next month
         final Calendar expected = Calendar.getInstance();
-        expected.set(2014, Calendar.NOVEMBER, 1, 00, 00, 00);
+        expected.set(2014, Calendar.NOVEMBER, 1, 0, 0, 0);
         expected.set(Calendar.MILLISECOND, 0);
         assertEquals(format(expected.getTimeInMillis()), format(actual));
     }
 
     @Test
+    @ResourceLock(value = Resources.LOCALE, mode = ResourceAccessMode.READ)
     public void testGetNextTimeMonthlyReturnsFirstDayOfNextMonth2() {
         final PatternProcessor pp = new PatternProcessor("logs/app-%d{yyyy-MM}.log.gz");
         final Calendar initial = Calendar.getInstance();
@@ -144,12 +155,13 @@
 
         // Expect 1st of next month: 2014 Feb 1st
         final Calendar expected = Calendar.getInstance();
-        expected.set(2014, Calendar.FEBRUARY, 1, 00, 00, 00);
+        expected.set(2014, Calendar.FEBRUARY, 1, 0, 0, 0);
         expected.set(Calendar.MILLISECOND, 0);
         assertEquals(format(expected.getTimeInMillis()), format(actual));
     }
 
     @Test
+    @ResourceLock(value = Resources.LOCALE, mode = ResourceAccessMode.READ)
     public void testGetNextTimeMonthlyReturnsFirstDayOfNextMonth3() {
         final PatternProcessor pp = new PatternProcessor("logs/app-%d{yyyy-MM}.log.gz");
         final Calendar initial = Calendar.getInstance();
@@ -158,12 +170,13 @@
 
         // Expect 1st of next month: 2015 Jan 1st
         final Calendar expected = Calendar.getInstance();
-        expected.set(2015, Calendar.JANUARY, 1, 00, 00, 00);
+        expected.set(2015, Calendar.JANUARY, 1, 0, 0, 0);
         expected.set(Calendar.MILLISECOND, 0);
         assertEquals(format(expected.getTimeInMillis()), format(actual));
     }
 
     @Test
+    @ResourceLock(value = Resources.LOCALE, mode = ResourceAccessMode.READ)
     public void testGetNextTimeMonthlyReturnsFirstDayOfNextYear() {
         final PatternProcessor pp = new PatternProcessor("logs/app-%d{yyyy-MM}.log.gz");
         final Calendar initial = Calendar.getInstance();
@@ -172,12 +185,13 @@
 
         // We expect 1st day of next month
         final Calendar expected = Calendar.getInstance();
-        expected.set(2016, Calendar.JANUARY, 1, 00, 00, 00);
+        expected.set(2016, Calendar.JANUARY, 1, 0, 0, 0);
         expected.set(Calendar.MILLISECOND, 0);
         assertEquals(format(expected.getTimeInMillis()), format(actual));
     }
 
     @Test
+    @ResourceLock(value = Resources.LOCALE, mode = ResourceAccessMode.READ)
     public void testGetNextTimeSecondlyReturnsFirstMillisecOfNextSecond() {
         final PatternProcessor pp = new PatternProcessor("logs/app-%d{yyyy-MM-dd-HH-mm-ss}.log.gz");
         final Calendar initial = Calendar.getInstance();
@@ -194,6 +208,7 @@
     }
 
     @Test
+    @ResourceLock(Resources.LOCALE)
     public void testGetNextTimeWeeklyReturnsFirstDayOfNextWeek_FRANCE() {
         final Locale old = Locale.getDefault();
         Locale.setDefault(Locale.FRANCE); // force 1st day of the week to be Monday
@@ -206,7 +221,7 @@
 
             // expect Monday, March 10, 2014
             final Calendar expected = Calendar.getInstance();
-            expected.set(2014, Calendar.MARCH, 10, 00, 00, 00);
+            expected.set(2014, Calendar.MARCH, 10, 0, 0, 0);
             expected.set(Calendar.MILLISECOND, 0);
             assertEquals(format(expected.getTimeInMillis()), format(actual));
         } finally {
@@ -215,6 +230,7 @@
     }
 
     @Test
+    @ResourceLock(Resources.LOCALE)
     public void testGetNextTimeWeeklyReturnsFirstDayOfNextWeek_US() {
         final Locale old = Locale.getDefault();
         Locale.setDefault(Locale.US); // force 1st day of the week to be Sunday
@@ -227,7 +243,7 @@
 
             // expect Sunday, March 9, 2014
             final Calendar expected = Calendar.getInstance();
-            expected.set(2014, Calendar.MARCH, 9, 00, 00, 00);
+            expected.set(2014, Calendar.MARCH, 9, 0, 0, 0);
             expected.set(Calendar.MILLISECOND, 0);
             assertEquals(format(expected.getTimeInMillis()), format(actual));
         } finally {
@@ -239,18 +255,19 @@
      * Tests https://issues.apache.org/jira/browse/LOG4J2-1232
      */
     @Test
+    @ResourceLock(Resources.LOCALE)
     public void testGetNextTimeWeeklyReturnsFirstWeekInYear_US() {
         final Locale old = Locale.getDefault();
         Locale.setDefault(Locale.US); // force 1st day of the week to be Sunday
         try {
             final PatternProcessor pp = new PatternProcessor("logs/market_data_msg.log-%d{yyyy-MM-'W'W}");
             final Calendar initial = Calendar.getInstance();
-            initial.set(2015, Calendar.DECEMBER, 28, 00, 00, 00); // Monday, December 28, 2015
+            initial.set(2015, Calendar.DECEMBER, 28, 0, 0, 0); // Monday, December 28, 2015
             final long actual = pp.getNextTime(initial.getTimeInMillis(), 1, false);
 
             // expect Sunday January 3, 2016
             final Calendar expected = Calendar.getInstance();
-            expected.set(2016, Calendar.JANUARY, 3, 00, 00, 00);
+            expected.set(2016, Calendar.JANUARY, 3, 0, 0, 0);
             expected.set(Calendar.MILLISECOND, 0);
             assertEquals(format(expected.getTimeInMillis()), format(actual));
         } finally {
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/AbstractActionTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/AbstractActionTest.java
index d6038d6..09a518b 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/AbstractActionTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/AbstractActionTest.java
@@ -1,23 +1,22 @@
 package org.apache.logging.log4j.core.appender.rolling.action;
 
 import org.apache.logging.log4j.Level;
-import org.apache.logging.log4j.junit.StatusLoggerRule;
+import org.apache.logging.log4j.junit.StatusLoggerLevel;
 import org.apache.logging.log4j.status.StatusData;
 import org.apache.logging.log4j.status.StatusLogger;
-import org.junit.Rule;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 import java.io.IOException;
 import java.util.List;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.containsString;
+import static org.hamcrest.Matchers.hasSize;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
+@StatusLoggerLevel("WARN")
 public class AbstractActionTest {
 
-    @Rule
-    public StatusLoggerRule statusLogger = new StatusLoggerRule(Level.WARN);
-
     // Test for LOG4J2-2658
     @Test
     public void testExceptionsAreLoggedToStatusLogger() {
@@ -25,11 +24,11 @@
         statusLogger.clear();
         new TestAction().run();
         List<StatusData> statusDataList = statusLogger.getStatusData();
-        assertEquals(1, statusDataList.size());
+        assertThat(statusDataList, hasSize(1));
         StatusData statusData = statusDataList.get(0);
         assertEquals(Level.WARN, statusData.getLevel());
         String formattedMessage = statusData.getFormattedStatus();
-        assertTrue(formattedMessage, formattedMessage.contains("Exception reported by action 'class org.apache."
+        assertThat(formattedMessage, containsString("Exception reported by action 'class org.apache."
                 + "logging.log4j.core.appender.rolling.action.AbstractActionTest$TestAction' java.io.IOException: "
                 + "failed" + System.lineSeparator()
                 + "\tat org.apache.logging.log4j.core.appender.rolling.action.AbstractActionTest"
@@ -47,11 +46,11 @@
             }
         }.run();
         List<StatusData> statusDataList = statusLogger.getStatusData();
-        assertEquals(1, statusDataList.size());
+        assertThat(statusDataList, hasSize(1));
         StatusData statusData = statusDataList.get(0);
         assertEquals(Level.WARN, statusData.getLevel());
         String formattedMessage = statusData.getFormattedStatus();
-        assertTrue(formattedMessage.contains("Exception reported by action"));
+        assertThat(formattedMessage, containsString("Exception reported by action"));
     }
 
     @Test
@@ -65,11 +64,11 @@
             }
         }.run();
         List<StatusData> statusDataList = statusLogger.getStatusData();
-        assertEquals(1, statusDataList.size());
+        assertThat(statusDataList, hasSize(1));
         StatusData statusData = statusDataList.get(0);
         assertEquals(Level.WARN, statusData.getLevel());
         String formattedMessage = statusData.getFormattedStatus();
-        assertTrue(formattedMessage.contains("Exception reported by action"));
+        assertThat(formattedMessage, containsString("Exception reported by action"));
     }
 
     private static final class TestAction extends AbstractAction {
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/Bzip2CompressActionTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/Bzip2CompressActionTest.java
index 8178adc..bde1b75 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/Bzip2CompressActionTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/Bzip2CompressActionTest.java
@@ -17,30 +17,33 @@
 
 package org.apache.logging.log4j.core.appender.rolling.action;
 
+import org.apache.commons.compress.compressors.bzip2.BZip2CompressorInputStream;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.io.TempDir;
+
 import java.io.ByteArrayInputStream;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileWriter;
 import java.io.IOException;
 
-import org.apache.commons.compress.compressors.bzip2.BZip2CompressorInputStream;
-import org.junit.Test;
-
-import static org.junit.Assert.*;
+import static org.junit.jupiter.api.Assertions.*;
 
 /**
  * Tests Bzip2CompressAction.
  */
 public class Bzip2CompressActionTest {
 
-    @Test(expected = NullPointerException.class)
+    @Test
     public void testConstructorDisallowsNullSource() {
-        new CommonsCompressAction("bzip2", null, new File("any"), true);
+        assertThrows(NullPointerException.class,
+                () -> new CommonsCompressAction("bzip2", null, new File("any"), true));
     }
 
-    @Test(expected = NullPointerException.class)
+    @Test
     public void testConstructorDisallowsNullDestination() {
-        new CommonsCompressAction("bzip2", new File("any"), null, true);
+        assertThrows(NullPointerException.class,
+                () -> new CommonsCompressAction("bzip2", new File("any"), null, true));
     }
 
     @Test
@@ -50,29 +53,28 @@
             source = new File(source.getName() + Math.random());
         }
         final boolean actual = CommonsCompressAction.execute("bzip2", source, new File("any2"), true);
-        assertEquals("Cannot compress non-existing file", false, actual);
+        assertFalse(actual, "Cannot compress non-existing file");
     }
 
     @Test
-    public void testExecuteCompressesSourceFileToDestinationFile() throws IOException {
+    public void testExecuteCompressesSourceFileToDestinationFile(@TempDir final File tempDir) throws IOException {
         final String LINE1 = "Here is line 1. Random text: ABCDEFGHIJKLMNOPQRSTUVWXYZ\r\n";
         final String LINE2 = "Here is line 2. Random text: ABCDEFGHIJKLMNOPQRSTUVWXYZ\r\n";
         final String LINE3 = "Here is line 3. Random text: ABCDEFGHIJKLMNOPQRSTUVWXYZ\r\n";
-        final File source = new File("target/compressme");
+        final File source = new File(tempDir, "compressme");
         try (FileWriter fw = new FileWriter(source, false)) {
             fw.write(LINE1);
             fw.write(LINE2);
             fw.write(LINE3);
             fw.flush();
         }
-        final File destination = new File("target/compressme.bz2");
-        destination.delete(); // just in case
-        assertFalse("Destination should not exist yet", destination.exists());
+        final File destination = new File(tempDir, "compressme.bz2");
+        assertFalse(destination.exists(), "Destination should not exist yet");
 
         final boolean actual = CommonsCompressAction.execute("bzip2", source, destination, true);
-        assertEquals("Bzip2CompressAction should have succeeded", true, actual);
-        assertTrue("Destination should exist after Bzip2CompressAction", destination.exists());
-        assertFalse("Source should have been deleted", source.exists());
+        assertTrue(actual, "Bzip2CompressAction should have succeeded");
+        assertTrue(destination.exists(), "Destination should exist after Bzip2CompressAction");
+        assertFalse(source.exists(), "Source should have been deleted");
 
         final byte[] bz2 = new byte[] { (byte) 0x42, (byte) 0x5A, (byte) 0x68, (byte) 0x39, (byte) 0x31, (byte) 0x41,
                 (byte) 0x59, (byte) 0x26, (byte) 0x53, (byte) 0x59, (byte) 0x9C, (byte) 0xE1, (byte) 0xE8, (byte) 0x2D,
@@ -102,9 +104,8 @@
                 n = fis.read(actualBz2, offset, actualBz2.length - offset);
                 offset += n;
             } while (offset < actualBz2.length);
-            assertArrayEquals("Compressed data corrupt", bz2, actualBz2);
+            assertArrayEquals(bz2, actualBz2, "Compressed data corrupt");
         }
-        destination.delete();
 
         // uncompress
         try (BZip2CompressorInputStream bzin = new BZip2CompressorInputStream(new ByteArrayInputStream(bz2))) {
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/DeleteActionTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/DeleteActionTest.java
index dbd6c68..852f8d0 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/DeleteActionTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/DeleteActionTest.java
@@ -26,13 +26,12 @@
 import java.util.EnumSet;
 
 import org.apache.logging.log4j.core.BasicConfigurationFactory;
-import org.apache.logging.log4j.core.appender.rolling.action.DeleteAction;
-import org.apache.logging.log4j.core.appender.rolling.action.DeletingVisitor;
-import org.apache.logging.log4j.core.appender.rolling.action.PathCondition;
 import org.apache.logging.log4j.core.config.Configuration;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.*;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.instanceOf;
+import static org.junit.jupiter.api.Assertions.*;
 
 /**
  * Tests the {@code DeleteAction} class.
@@ -47,9 +46,8 @@
     private static DeleteAction create(final String path, final boolean followLinks, final int maxDepth, final boolean testMode,
             final PathCondition[] conditions) {
         final Configuration config = new BasicConfigurationFactory.BasicConfiguration();
-        final DeleteAction delete = DeleteAction.createDeleteAction(path, followLinks, maxDepth, testMode, null, conditions,
+        return DeleteAction.createDeleteAction(path, followLinks, maxDepth, testMode, null, conditions,
                 null, config);
-        return delete;
     }
 
     @Test
@@ -98,7 +96,7 @@
     public void testCreateFileVisitorReturnsDeletingVisitor() {
         final DeleteAction delete = createAnyFilter("any", true, 0, false);
         final FileVisitor<Path> visitor = delete.createFileVisitor(delete.getBasePath(), delete.getPathConditions());
-        assertTrue(visitor instanceof DeletingVisitor);
+        assertThat(visitor, instanceOf(DeletingVisitor.class));
     }
 
     @Test
@@ -106,14 +104,14 @@
         final DeleteAction delete = createAnyFilter("any", true, 0, false);
         assertFalse(delete.isTestMode());
         final FileVisitor<Path> visitor = delete.createFileVisitor(delete.getBasePath(), delete.getPathConditions());
-        assertTrue(visitor instanceof DeletingVisitor);
+        assertThat(visitor, instanceOf(DeletingVisitor.class));
         assertFalse(((DeletingVisitor) visitor).isTestMode());
 
         final DeleteAction deleteTestMode = createAnyFilter("any", true, 0, true);
         assertTrue(deleteTestMode.isTestMode());
         final FileVisitor<Path> testVisitor = deleteTestMode.createFileVisitor(delete.getBasePath(),
                 delete.getPathConditions());
-        assertTrue(testVisitor instanceof DeletingVisitor);
+        assertThat(testVisitor, instanceOf(DeletingVisitor.class));
         assertTrue(((DeletingVisitor) testVisitor).isTestMode());
     }
 }
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/DeletingVisitorTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/DeletingVisitorTest.java
index ed472ad..98cd8b8 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/DeletingVisitorTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/DeletingVisitorTest.java
@@ -28,9 +28,9 @@
 import java.util.Collections;
 import java.util.List;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.*;
+import static org.junit.jupiter.api.Assertions.*;
 
 /**
  * Tests the {@code DeletingVisitor} class.
@@ -58,7 +58,7 @@
     public void testAcceptedFilesAreDeleted() throws IOException {
         final Path base = Paths.get("/a/b/c");
         final FixedCondition ACCEPT_ALL = new FixedCondition(true);
-        final DeletingVisitorHelper visitor = new DeletingVisitorHelper(base, Arrays.asList(ACCEPT_ALL), false);
+        final DeletingVisitorHelper visitor = new DeletingVisitorHelper(base, Collections.singletonList(ACCEPT_ALL), false);
 
         final Path any = Paths.get("/a/b/c/any");
         visitor.visitFile(any, null);
@@ -69,7 +69,7 @@
     public void testRejectedFilesAreNotDeleted() throws IOException {
         final Path base = Paths.get("/a/b/c");
         final FixedCondition REJECT_ALL = new FixedCondition(false);
-        final DeletingVisitorHelper visitor = new DeletingVisitorHelper(base, Arrays.asList(REJECT_ALL), false);
+        final DeletingVisitorHelper visitor = new DeletingVisitorHelper(base, Collections.singletonList(REJECT_ALL), false);
 
         final Path any = Paths.get("/a/b/c/any");
         visitor.visitFile(any, null);
@@ -130,7 +130,7 @@
             }
         };
         final Path base = Paths.get("/a/b/c");
-        final DeletingVisitorHelper visitor = new DeletingVisitorHelper(base, Arrays.asList(filter), false);
+        final DeletingVisitorHelper visitor = new DeletingVisitorHelper(base, Collections.singletonList(filter), false);
 
         final Path child = Paths.get("/a/b/c/relative");
         visitor.visitFile(child, null);
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/DurationTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/DurationTest.java
index 456f95b..c156ded 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/DurationTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/DurationTest.java
@@ -17,34 +17,33 @@
 
 package org.apache.logging.log4j.core.appender.rolling.action;
 
-import org.apache.logging.log4j.core.appender.rolling.action.Duration;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.*;
+import static org.junit.jupiter.api.Assertions.*;
 
 /**
  * Tests the Duration class.
  */
 public class DurationTest {
 
-    @Test(expected = NullPointerException.class)
+    @Test
     public void testParseFailsIfNullText() {
-        Duration.parse(null);
+        assertThrows(NullPointerException.class, () -> Duration.parse(null));
     }
 
-    @Test(expected = IllegalArgumentException.class)
+    @Test
     public void testParseFailsIfInvalidPattern() {
-        Duration.parse("abc");
+        assertThrows(IllegalArgumentException.class, () -> Duration.parse("abc"));
     }
 
-    @Test(expected = IllegalArgumentException.class)
+    @Test
     public void testParseFailsIfSectionsOutOfOrder() {
-        Duration.parse("P4DT2M1S3H");
+        assertThrows(IllegalArgumentException.class, () -> Duration.parse("P4DT2M1S3H"));
     }
 
-    @Test(expected = IllegalArgumentException.class)
+    @Test
     public void testParseFailsIfTButMissingTime() {
-        Duration.parse("P1dT");
+        assertThrows(IllegalArgumentException.class, () -> Duration.parse("P1dT"));
     }
 
     @Test
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/FileRenameActionTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/FileRenameActionTest.java
index 8a4fc8e..3ab9ff8 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/FileRenameActionTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/FileRenameActionTest.java
@@ -16,67 +16,48 @@
  */
 package org.apache.logging.log4j.core.appender.rolling.action;
 
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.io.TempDir;
+
 import java.io.File;
 import java.io.PrintStream;
 
-import org.junit.After;
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
-import org.junit.Test;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
-import static org.junit.Assert.*;
-
-/**
- *
- */
 public class FileRenameActionTest {
 
-    private static final String DIR = "target/fileRename";
-
-    @BeforeClass
-    public static void beforeClass() throws Exception {
-        final File file = new File(DIR);
-        file.mkdirs();
-    }
-
-    @AfterClass
-    public static void afterClass() {
-        deleteDir();
-    }
-
-    @After
-    public void after() {
-        deleteFiles();
-    }
+    @TempDir
+    File tempDir;
 
     @Test
     public void testRename1() throws Exception {
-        final File file = new File("target/fileRename/fileRename.log");
+        final File file = new File(tempDir, "fileRename.log");
         try (final PrintStream pos = new PrintStream(file)) {
             for (int i = 0; i < 100; ++i) {
                 pos.println("This is line " + i);
             }
         }
 
-        final File dest = new File("target/fileRename/newFile.log");
+        final File dest = new File(tempDir, "newFile.log");
         final FileRenameAction action = new FileRenameAction(file, dest, false);
         action.execute();
-        assertTrue("Renamed file does not exist", dest.exists());
-        assertTrue("Old file exists", !file.exists());
+        assertTrue(dest.exists(), "Renamed file does not exist");
+        assertFalse(file.exists(), "Old file exists");
     }
 
     @Test
     public void testEmpty() throws Exception {
-        final File file = new File("target/fileRename/fileRename.log");
+        final File file = new File(tempDir, "fileRename.log");
         try (final PrintStream pos = new PrintStream(file)) {
             // do nothing
         }
 
-        final File dest = new File("target/fileRename/newFile.log");
+        final File dest = new File(tempDir, "newFile.log");
         final FileRenameAction action = new FileRenameAction(file, dest, false);
         action.execute();
-        assertTrue("Renamed file does not exist", !dest.exists());
-        assertTrue("Old file does not exist", !file.exists());
+        assertFalse(dest.exists(), "Renamed file does not exist");
+        assertFalse(file.exists(), "Old file does not exist");
     }
 
 
@@ -90,40 +71,10 @@
         }
 
         final File dest = new File("newFile.log");
-        try {
-            final FileRenameAction action = new FileRenameAction(file, dest, false);
-            action.execute();
-            assertTrue("Renamed file does not exist", dest.exists());
-            assertTrue("Old file exists", !file.exists());
-        } finally {
-            try {
-                dest.delete();
-                file.delete();
-            } catch (final Exception ex) {
-                System.out.println("Unable to cleanup files written to main directory");
-            }
-        }
+        final FileRenameAction action = new FileRenameAction(file, dest, false);
+        action.execute();
+        assertTrue(dest.exists(), "Renamed file does not exist");
+        assertFalse(file.exists(), "Old file exists");
     }
 
-
-    private static void deleteDir() {
-        final File dir = new File(DIR);
-        if (dir.exists()) {
-            final File[] files = dir.listFiles();
-            for (final File file : files) {
-                file.delete();
-            }
-            dir.delete();
-        }
-    }
-
-    private static void deleteFiles() {
-        final File dir = new File(DIR);
-        if (dir.exists()) {
-            final File[] files = dir.listFiles();
-            for (final File file : files) {
-                file.delete();
-            }
-        }
-    }
 }
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/FileSizeTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/FileSizeTest.java
index dfa7cec..6c1dc37 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/FileSizeTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/FileSizeTest.java
@@ -17,29 +17,29 @@
 package org.apache.logging.log4j.core.appender.rolling.action;
 
 import org.apache.logging.log4j.core.appender.rolling.FileSize;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.parallel.ResourceLock;
+import org.junit.jupiter.api.parallel.Resources;
 
-import java.text.NumberFormat;
 import java.util.Locale;
 
-import static org.hamcrest.Matchers.equalTo;
-import static org.hamcrest.Matchers.is;
-import static org.junit.Assert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 public class FileSizeTest {
 
     @Test
     public void testParse() {
-        assertThat(FileSize.parse("5k", 0), is(5L * 1024));
+        assertEquals(5 * 1024, FileSize.parse("5k", 0));
     }
 
     @Test
+    @ResourceLock(Resources.LOCALE)
     public void testParseInEurope() {
         // Caveat: Breaks the ability for this test to run in parallel with other tests :(
         Locale previousDefault = Locale.getDefault();
         try {
             Locale.setDefault(new Locale("de", "DE"));
-            assertThat(FileSize.parse("1,000", 0), is(1000L));
+            assertEquals(1000, FileSize.parse("1,000", 0));
         } finally {
             Locale.setDefault(previousDefault);
         }
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/IfAccumulatedFileCountTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/IfAccumulatedFileCountTest.java
index 0022b40..af5ab26 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/IfAccumulatedFileCountTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/IfAccumulatedFileCountTest.java
@@ -17,9 +17,9 @@
 
 package org.apache.logging.log4j.core.appender.rolling.action;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.*;
+import static org.junit.jupiter.api.Assertions.*;
 
 /**
  * Tests the IfAccumulatedFileCount class.
@@ -54,7 +54,7 @@
 
         for (int i = 1; i < 10; i++) {
             if (i <= 3) {
-                assertFalse("i=" + i, condition.accept(null, null, null));
+                assertFalse(condition.accept(null, null, null), "i=" + i);
                 assertEquals(0, counter.getAcceptCount());
             } else {
                 assertTrue(condition.accept(null, null, null));
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/IfAccumulatedFileSizeTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/IfAccumulatedFileSizeTest.java
index 740c998..76bb0fc 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/IfAccumulatedFileSizeTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/IfAccumulatedFileSizeTest.java
@@ -17,9 +17,9 @@
 
 package org.apache.logging.log4j.core.appender.rolling.action;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.*;
+import static org.junit.jupiter.api.Assertions.*;
 
 /**
  * Tests the IfAccumulatedFileSize class.
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/IfAllTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/IfAllTest.java
index 12d5a05..2e3f1fb 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/IfAllTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/IfAllTest.java
@@ -17,11 +17,9 @@
 

 package org.apache.logging.log4j.core.appender.rolling.action;

 

-import org.apache.logging.log4j.core.appender.rolling.action.IfAll;

-import org.apache.logging.log4j.core.appender.rolling.action.PathCondition;

-import org.junit.Test;

+import org.junit.jupiter.api.Test;

 

-import static org.junit.Assert.*;

+import static org.junit.jupiter.api.Assertions.*;

 

 /**

  * Tests the And composite condition.

diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/IfAnyTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/IfAnyTest.java
index 52a8b27..4eaaaa0 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/IfAnyTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/IfAnyTest.java
@@ -17,9 +17,9 @@
 

 package org.apache.logging.log4j.core.appender.rolling.action;

 

-import org.junit.Test;

+import org.junit.jupiter.api.Test;

 

-import static org.junit.Assert.*;

+import static org.junit.jupiter.api.Assertions.*;

 

 /**

  * Tests the Or composite condition.

diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/IfFileNameTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/IfFileNameTest.java
index 2e84aa9..bac7179 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/IfFileNameTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/IfFileNameTest.java
@@ -20,18 +20,18 @@
 import java.nio.file.Path;

 import java.nio.file.Paths;

 

-import org.junit.Test;

+import org.junit.jupiter.api.Test;

 

-import static org.junit.Assert.*;

+import static org.junit.jupiter.api.Assertions.*;

 

 public class IfFileNameTest {

 

-    @Test(expected = IllegalArgumentException.class)

+    @Test

     public void testCreateNameConditionFailsIfBothRegexAndPathAreNull() {

-        IfFileName.createNameCondition(null, null);

+        assertThrows(IllegalArgumentException.class, () -> IfFileName.createNameCondition(null, null));

     }

 

-    @Test()

+    @Test

     public void testCreateNameConditionAcceptsIfEitherRegexOrPathOrBothAreNonNull() {

         IfFileName.createNameCondition("bar", null);

         IfFileName.createNameCondition(null, "foo");

diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/IfLastModifiedTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/IfLastModifiedTest.java
index 48d2a10..d2072ef 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/IfLastModifiedTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/IfLastModifiedTest.java
@@ -19,9 +19,9 @@
 
 import java.nio.file.attribute.FileTime;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.*;
+import static org.junit.jupiter.api.Assertions.*;
 
 /**
  * Tests the FileAgeFilter class.
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/IfNotTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/IfNotTest.java
index c5abfb9..3563bb1 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/IfNotTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/IfNotTest.java
@@ -17,10 +17,9 @@
 

 package org.apache.logging.log4j.core.appender.rolling.action;

 

-import org.apache.logging.log4j.core.appender.rolling.action.IfNot;

-import org.junit.Test;

+import org.junit.jupiter.api.Test;

 

-import static org.junit.Assert.*;

+import static org.junit.jupiter.api.Assertions.*;

 

 /**

  * Tests the Not composite condition.

@@ -36,9 +35,10 @@
         assertTrue(IfNot.createNotCondition(new FixedCondition(false)).accept(null, null, null));

     }

 

-    @Test(expected = NullPointerException.class)

+    @Test

     public void testEmptyIsFalse() {

-        assertFalse(IfNot.createNotCondition(null).accept(null, null, null));

+        assertThrows(NullPointerException.class,

+                () -> IfNot.createNotCondition(null).accept(null, null, null));

     }

 

     @Test

diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/PathSortByModificationTimeTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/PathSortByModificationTimeTest.java
index 255fec4..60c43a3 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/PathSortByModificationTimeTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/PathSortByModificationTimeTest.java
@@ -21,9 +21,9 @@
 import java.nio.file.Paths;
 import java.nio.file.attribute.FileTime;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.*;
+import static org.junit.jupiter.api.Assertions.*;
 
 /**
  * Tests the {@code PathSortByModificationTime} class.
@@ -50,17 +50,17 @@
         a1.lastModified = FileTime.fromMillis(100);
         a2.lastModified = FileTime.fromMillis(222);
         
-        assertEquals("same path, 2nd more recent", 1, sorter.compare(path(p1, a1), path(p1, a2)));
-        assertEquals("path ignored, 2nd more recent", 1, sorter.compare(path(p1, a1), path(p2, a2)));
-        assertEquals("path ignored, 2nd more recent", 1, sorter.compare(path(p2, a1), path(p1, a2)));
+        assertEquals(1, sorter.compare(path(p1, a1), path(p1, a2)), "same path, 2nd more recent");
+        assertEquals(1, sorter.compare(path(p1, a1), path(p2, a2)), "path ignored, 2nd more recent");
+        assertEquals(1, sorter.compare(path(p2, a1), path(p1, a2)), "path ignored, 2nd more recent");
         
-        assertEquals("same path, 1st more recent", -1, sorter.compare(path(p1, a2), path(p1, a1)));
-        assertEquals("path ignored, 1st more recent", -1, sorter.compare(path(p1, a2), path(p2, a1)));
-        assertEquals("path ignored, 1st more recent", -1, sorter.compare(path(p2, a2), path(p1, a1)));
+        assertEquals(-1, sorter.compare(path(p1, a2), path(p1, a1)), "same path, 1st more recent");
+        assertEquals(-1, sorter.compare(path(p1, a2), path(p2, a1)), "path ignored, 1st more recent");
+        assertEquals(-1, sorter.compare(path(p2, a2), path(p1, a1)), "path ignored, 1st more recent");
         
-        assertEquals("same path, same time", 0, sorter.compare(path(p1, a1), path(p1, a1)));
-        assertEquals("p2 < p1, same time", 1, sorter.compare(path(p1, a1), path(p2, a1)));
-        assertEquals("p2 < p1, same time", -1, sorter.compare(path(p2, a1), path(p1, a1)));
+        assertEquals(0, sorter.compare(path(p1, a1), path(p1, a1)), "same path, same time");
+        assertEquals(1, sorter.compare(path(p1, a1), path(p2, a1)), "p2 < p1, same time");
+        assertEquals(-1, sorter.compare(path(p2, a1), path(p1, a1)), "p2 < p1, same time");
     }
 
     @Test
@@ -73,17 +73,17 @@
         a1.lastModified = FileTime.fromMillis(100);
         a2.lastModified = FileTime.fromMillis(222);
         
-        assertEquals("same path, 2nd more recent", -1, sorter.compare(path(p1, a1), path(p1, a2)));
-        assertEquals("path ignored, 2nd more recent", -1, sorter.compare(path(p1, a1), path(p2, a2)));
-        assertEquals("path ignored, 2nd more recent", -1, sorter.compare(path(p2, a1), path(p1, a2)));
+        assertEquals(-1, sorter.compare(path(p1, a1), path(p1, a2)), "same path, 2nd more recent");
+        assertEquals(-1, sorter.compare(path(p1, a1), path(p2, a2)), "path ignored, 2nd more recent");
+        assertEquals(-1, sorter.compare(path(p2, a1), path(p1, a2)), "path ignored, 2nd more recent");
         
-        assertEquals("same path, 1st more recent", 1, sorter.compare(path(p1, a2), path(p1, a1)));
-        assertEquals("path ignored, 1st more recent", 1, sorter.compare(path(p1, a2), path(p2, a1)));
-        assertEquals("path ignored, 1st more recent", 1, sorter.compare(path(p2, a2), path(p1, a1)));
+        assertEquals(1, sorter.compare(path(p1, a2), path(p1, a1)), "same path, 1st more recent");
+        assertEquals(1, sorter.compare(path(p1, a2), path(p2, a1)), "path ignored, 1st more recent");
+        assertEquals(1, sorter.compare(path(p2, a2), path(p1, a1)), "path ignored, 1st more recent");
         
-        assertEquals("same path, same time", 0, sorter.compare(path(p1, a1), path(p1, a1)));
-        assertEquals("p1 < p2, same time", -1, sorter.compare(path(p1, a1), path(p2, a1)));
-        assertEquals("p1 < p2, same time", 1, sorter.compare(path(p2, a1), path(p1, a1)));
+        assertEquals(0, sorter.compare(path(p1, a1), path(p1, a1)), "same path, same time");
+        assertEquals(-1, sorter.compare(path(p1, a1), path(p2, a1)), "p1 < p2, same time");
+        assertEquals(1, sorter.compare(path(p2, a1), path(p1, a1)), "p1 < p2, same time");
     }
 
     private PathWithAttributes path(final Path path, final DummyFileAttributes attributes) {
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/ScriptConditionTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/ScriptConditionTest.java
index 0379767..346e898 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/ScriptConditionTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/ScriptConditionTest.java
@@ -17,33 +17,33 @@
 
 package org.apache.logging.log4j.core.appender.rolling.action;
 
+import org.apache.logging.log4j.core.config.Configuration;
+import org.apache.logging.log4j.core.config.DefaultConfiguration;
+import org.apache.logging.log4j.core.script.Script;
+import org.junit.jupiter.api.Tag;
+import org.junit.jupiter.api.Test;
+
 import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.util.ArrayList;
 import java.util.List;
 
-import org.apache.logging.log4j.categories.Scripts;
-import org.apache.logging.log4j.core.config.Configuration;
-import org.apache.logging.log4j.core.config.DefaultConfiguration;
-import org.apache.logging.log4j.core.script.Script;
-import org.junit.Test;
-import org.junit.experimental.categories.Category;
-
-import static org.junit.Assert.*;
+import static org.junit.jupiter.api.Assertions.*;
 
 /**
  * Tests the ScriptCondition class.
  */
 public class ScriptConditionTest {
 
-    @Test(expected = NullPointerException.class)
+    @Test
     public void testConstructorDisallowsNullScript() {
-        new ScriptCondition(null, new DefaultConfiguration());
+        assertThrows(NullPointerException.class, () -> new ScriptCondition(null, new DefaultConfiguration()));
     }
 
-    @Test(expected = NullPointerException.class)
+    @Test
     public void testConstructorDisallowsNullConfig() {
-        new ScriptCondition(new Script("test", "js", "print('hi')"), null);
+        assertThrows(NullPointerException.class,
+                () -> new ScriptCondition(new Script("test", "js", "print('hi')"), null));
     }
 
     @Test
@@ -51,9 +51,10 @@
         assertNull(ScriptCondition.createCondition(null, new DefaultConfiguration()));
     }
 
-    @Test(expected = NullPointerException.class)
+    @Test
     public void testCreateConditionDisallowsNullConfig() {
-        ScriptCondition.createCondition(new Script("test", "js", "print('hi')"), null);
+        assertThrows(NullPointerException.class, () -> ScriptCondition.createCondition(
+                new Script("test", "js", "print('hi')"), null));
     }
 
     @Test
@@ -92,7 +93,7 @@
     }
 
     @Test
-    @Category(Scripts.Groovy.class)
+    @Tag("groovy")
     public void testSelectFilesToDelete3() {
         final Configuration config = new DefaultConfiguration();
         config.initialize(); // creates the ScriptManager
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/SortingVisitorTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/SortingVisitorTest.java
index 06ee1ce..9df7ab8 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/SortingVisitorTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/action/SortingVisitorTest.java
@@ -17,6 +17,10 @@
 
 package org.apache.logging.log4j.core.appender.rolling.action;
 
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.io.TempDir;
+
 import java.io.IOException;
 import java.nio.file.FileVisitOption;
 import java.nio.file.FileVisitResult;
@@ -24,49 +28,36 @@
 import java.nio.file.NoSuchFileException;
 import java.nio.file.Path;
 import java.nio.file.Paths;
-import java.nio.file.attribute.FileAttribute;
 import java.nio.file.attribute.FileTime;
 import java.util.Collections;
 import java.util.List;
 import java.util.Set;
 
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-
-import static org.junit.Assert.*;
+import static org.junit.jupiter.api.Assertions.*;
 
 /**
  * Tests the SortingVisitor class.
  */
 public class SortingVisitorTest {
-    
-    private Path base;
+
+    @TempDir
+    Path base;
     private Path aaa;
     private Path bbb;
     private Path ccc;
 
-    @Before
+    @BeforeEach
     public void setUp() throws Exception {
-        base = Files.createTempDirectory("tempDir", new FileAttribute<?>[0]);
-        aaa = Files.createTempFile(base, "aaa", null, new FileAttribute<?>[0]);
-        bbb = Files.createTempFile(base, "bbb", null, new FileAttribute<?>[0]);
-        ccc = Files.createTempFile(base, "ccc", null, new FileAttribute<?>[0]);
-        
+        aaa = Files.createFile(base.resolve("aaa"));
+        bbb = Files.createFile(base.resolve("bbb"));
+        ccc = Files.createFile(base.resolve("ccc"));
+
         // lastModified granularity is 1 sec(!) on some file systems...
         final long now = System.currentTimeMillis();
         Files.setLastModifiedTime(aaa, FileTime.fromMillis(now));
         Files.setLastModifiedTime(bbb, FileTime.fromMillis(now + 1000));
         Files.setLastModifiedTime(ccc, FileTime.fromMillis(now + 2000));
     }
-    
-    @After
-    public void tearDown() throws Exception {
-        Files.deleteIfExists(ccc);
-        Files.deleteIfExists(bbb);
-        Files.deleteIfExists(aaa);
-        Files.deleteIfExists(base);
-    }
 
     @Test
     public void testRecentFirst() throws Exception {
@@ -76,10 +67,10 @@
 
         final List<PathWithAttributes> found = visitor.getSortedPaths();
         assertNotNull(found);
-        assertEquals("file count", 3, found.size());
-        assertEquals("1st: most recent; sorted=" + found, ccc, found.get(0).getPath());
-        assertEquals("2nd; sorted=" + found, bbb, found.get(1).getPath());
-        assertEquals("3rd: oldest; sorted=" + found, aaa, found.get(2).getPath());
+        assertEquals(3, found.size(), "file count");
+        assertEquals(ccc, found.get(0).getPath(), "1st: most recent; sorted=" + found);
+        assertEquals(bbb, found.get(1).getPath(), "2nd; sorted=" + found);
+        assertEquals(aaa, found.get(2).getPath(), "3rd: oldest; sorted=" + found);
     }
 
     @Test
@@ -90,16 +81,16 @@
 
         final List<PathWithAttributes> found = visitor.getSortedPaths();
         assertNotNull(found);
-        assertEquals("file count", 3, found.size());
-        assertEquals("1st: oldest first; sorted=" + found, aaa, found.get(0).getPath());
-        assertEquals("2nd; sorted=" + found, bbb, found.get(1).getPath());
-        assertEquals("3rd: most recent sorted; list=" + found, ccc, found.get(2).getPath());
+        assertEquals(3, found.size(), "file count");
+        assertEquals(aaa, found.get(0).getPath(), "1st: oldest first; sorted=" + found);
+        assertEquals(bbb, found.get(1).getPath(), "2nd; sorted=" + found);
+        assertEquals(ccc, found.get(2).getPath(), "3rd: most recent sorted; list=" + found);
     }
 
     @Test
     public void testNoSuchFileFailure() throws IOException {
         SortingVisitor visitor = new SortingVisitor(new PathSortByModificationTime(false));
-        assertEquals(
+        assertSame(
                 FileVisitResult.CONTINUE,
                 visitor.visitFileFailed(Paths.get("doesNotExist"), new NoSuchFileException("doesNotExist")));
     }
@@ -108,11 +99,7 @@
     public void testIOException() {
         SortingVisitor visitor = new SortingVisitor(new PathSortByModificationTime(false));
         IOException exception = new IOException();
-        try {
-            visitor.visitFileFailed(Paths.get("doesNotExist"), exception);
-            fail();
-        } catch (IOException e) {
-            assertSame(exception, e);
-        }
+        assertSame(exception,
+                assertThrows(IOException.class, () -> visitor.visitFileFailed(Paths.get("doesNotExist"), exception)));
     }
 }
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/TestConfiguratorError.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/TestConfiguratorError.java
index 4c5021c..8649984 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/TestConfiguratorError.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/TestConfiguratorError.java
@@ -21,9 +21,11 @@
 import org.apache.logging.log4j.simple.SimpleLoggerContextFactory;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.RegisterExtension;
+import org.junit.jupiter.api.parallel.ResourceLock;
 
 import static org.junit.jupiter.api.Assertions.assertNull;
 
+@ResourceLock("log4j2.LoggerContextFactory")
 public class TestConfiguratorError {
 
     @RegisterExtension
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/plugins/validation/validators/ValidHostValidatorTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/plugins/validation/validators/ValidHostValidatorTest.java
index 4098b19..caf760f 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/config/plugins/validation/validators/ValidHostValidatorTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/config/plugins/validation/validators/ValidHostValidatorTest.java
@@ -16,25 +16,21 @@
  */
 package org.apache.logging.log4j.core.config.plugins.validation.validators;
 
-import org.apache.logging.log4j.Level;
-import org.apache.logging.log4j.junit.StatusLoggerLevelExtension;
-import org.apache.logging.log4j.plugins.Node;
 import org.apache.logging.log4j.core.config.NullConfiguration;
 import org.apache.logging.log4j.core.config.plugins.util.PluginBuilder;
+import org.apache.logging.log4j.junit.StatusLoggerLevel;
+import org.apache.logging.log4j.plugins.Node;
 import org.apache.logging.log4j.plugins.util.PluginManager;
 import org.apache.logging.log4j.plugins.util.PluginType;
 import org.apache.logging.log4j.plugins.validation.HostAndPort;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.RegisterExtension;
 
 import static org.junit.jupiter.api.Assertions.*;
 
+@StatusLoggerLevel("FATAL")
 public class ValidHostValidatorTest {
 
-    @RegisterExtension
-    static StatusLoggerLevelExtension extension = new StatusLoggerLevelExtension(Level.FATAL);
-
     private PluginType<HostAndPort> plugin;
     private Node node;
 
diff --git a/log4j-core/src/test/resources/MemoryMappedFileAppenderLocationTest.xml b/log4j-core/src/test/resources/MemoryMappedFileAppenderLocationTest.xml
index 14b6b25..b192995 100644
--- a/log4j-core/src/test/resources/MemoryMappedFileAppenderLocationTest.xml
+++ b/log4j-core/src/test/resources/MemoryMappedFileAppenderLocationTest.xml
@@ -5,7 +5,7 @@
         fileName="target/MemoryMappedFileAppenderLocationTest.log" 
         regionLength="32000" immediateFlush="true" append="false">
       <PatternLayout>
-        <Pattern>%d %p %c{1.} [%t] %X{aKey} %m %location %ex%n</Pattern>
+        <Pattern>%location: %m%n</Pattern>
       </PatternLayout>
     </MemoryMappedFile>
   </Appenders>
@@ -15,4 +15,4 @@
       <AppenderRef ref="MemoryMappedFile"/>
     </Root>
   </Loggers>
-</Configuration>
\ No newline at end of file
+</Configuration>
diff --git a/log4j-core/src/test/resources/MemoryMappedFileAppenderRemapTest.xml b/log4j-core/src/test/resources/MemoryMappedFileAppenderRemapTest.xml
index 02799a5..d46b902 100644
--- a/log4j-core/src/test/resources/MemoryMappedFileAppenderRemapTest.xml
+++ b/log4j-core/src/test/resources/MemoryMappedFileAppenderRemapTest.xml
@@ -5,7 +5,7 @@
         fileName="target/MemoryMappedFileAppenderRemapTest.log" 
         regionLength="256" immediateFlush="true" append="false">
       <PatternLayout>
-        <Pattern>%d %p %c{1.} [%t] %X{aKey} %m%ex%n</Pattern>
+        <Pattern>%m%n</Pattern>
       </PatternLayout>
     </MemoryMappedFile>
   </Appenders>
@@ -15,4 +15,4 @@
       <AppenderRef ref="MemoryMappedFile"/>
     </Root>
   </Loggers>
-</Configuration>
\ No newline at end of file
+</Configuration>
diff --git a/log4j-core/src/test/resources/MemoryMappedFileAppenderTest.xml b/log4j-core/src/test/resources/MemoryMappedFileAppenderTest.xml
index 430c8b1..209459d 100644
--- a/log4j-core/src/test/resources/MemoryMappedFileAppenderTest.xml
+++ b/log4j-core/src/test/resources/MemoryMappedFileAppenderTest.xml
@@ -5,7 +5,7 @@
          fileName="target/MemoryMappedFileAppenderTest.log" 
          immediateFlush="false" append="false">
       <PatternLayout>
-        <Pattern>%d %p %c{1.} [%t] %X{aKey} %m%ex%n</Pattern>
+        <Pattern>%m%n</Pattern>
       </PatternLayout>
     </MemoryMappedFile>
   </Appenders>
@@ -15,4 +15,4 @@
       <AppenderRef ref="MemoryMappedFile"/>
     </Root>
   </Loggers>
-</Configuration>
\ No newline at end of file
+</Configuration>
diff --git a/pom.xml b/pom.xml
index 3924d63..e592087 100644
--- a/pom.xml
+++ b/pom.xml
@@ -243,7 +243,7 @@
     <minSeverity>info</minSeverity>
     <jctoolsVersion>3.1.0</jctoolsVersion>
     <junitVersion>4.13</junitVersion>
-    <junitJupiterVersion>5.6.2</junitJupiterVersion>
+    <junitJupiterVersion>5.7.0</junitJupiterVersion>
     <mockitoVersion>3.5.5</mockitoVersion>
     <argLine>-Xms256m -Xmx1024m</argLine>
     <javaTargetVersion>1.8</javaTargetVersion>
@@ -1184,10 +1184,6 @@
           </systemPropertyVariables>
           <forkCount>1</forkCount>
           <reuseForks>false</reuseForks>
-          <excludes>
-            <exclude>${log4j.skip.test1}</exclude>
-            <exclude>${log4j.skip.test2}</exclude>
-          </excludes>
         </configuration>
       </plugin>
       <plugin>