You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by pk...@apache.org on 2022/07/24 18:54:40 UTC

[logging-log4j2] 04/04: Adapt some tests

This is an automated email from the ASF dual-hosted git repository.

pkarwasz pushed a commit to branch parallel-tests
in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git

commit 05560945155ea3868a509d763b65d025ca32d161
Author: Piotr P. Karwasz <pi...@karwasz.org>
AuthorDate: Sun Jul 24 20:53:56 2022 +0200

    Adapt some tests
    
    Adapts some of the tests that use a logger context, but don't have a
    `@LoggerContextSource` annotation.
---
 .../log4j/test/junit/TestPropertySource.java       |  2 +-
 .../logging/log4j/core/test/junit/TestLookup.java} | 33 ++++++----
 .../logging/log4j/core/BasicLoggingTest.java       |  2 +
 .../log4j/core/EventParameterMemoryLeakTest.java   | 28 +++++----
 .../log4j/core/LoggerSerializationTest.java        |  2 +
 .../log4j/core/appender/ConsoleAppenderTest.java   | 25 ++++----
 .../core/appender/OutputStreamManagerTest.java     | 32 +++++-----
 .../log4j/core/appender/WriterAppenderTest.java    |  3 +
 .../async/AsyncAppenderConfigTest_LOG4J2_2032.java | 27 ++++----
 .../async/AsyncAppenderExceptionHandlingTest.java  | 73 +++++++++++-----------
 .../properties/PropertiesConfigurationTest.java    |  2 +-
 .../log4j/core/pattern/PatternParserTest.java      |  2 +
 .../core/util/ShutdownCallbackRegistryTest.java    |  2 +-
 .../AsyncAppenderExceptionHandlingTest.xml         |  2 +-
 14 files changed, 128 insertions(+), 107 deletions(-)

diff --git a/log4j-api-test/src/main/java/org/apache/logging/log4j/test/junit/TestPropertySource.java b/log4j-api-test/src/main/java/org/apache/logging/log4j/test/junit/TestPropertySource.java
index 92547a463f..d8190fdf4f 100644
--- a/log4j-api-test/src/main/java/org/apache/logging/log4j/test/junit/TestPropertySource.java
+++ b/log4j-api-test/src/main/java/org/apache/logging/log4j/test/junit/TestPropertySource.java
@@ -46,7 +46,7 @@ public class TestPropertySource implements PropertySource {
         return props;
     }
 
-    private static TestProperties getProperties() {
+    public static TestProperties getProperties() {
         return getProperties(null);
     }
 
diff --git a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/LoggerSerializationTest.java b/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/junit/TestLookup.java
similarity index 54%
copy from log4j-core-test/src/test/java/org/apache/logging/log4j/core/LoggerSerializationTest.java
copy to log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/junit/TestLookup.java
index b1944ed9c9..0b2ed846bb 100644
--- a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/LoggerSerializationTest.java
+++ b/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/junit/TestLookup.java
@@ -14,22 +14,29 @@
  * See the license for the specific language governing permissions and
  * limitations under the license.
  */
-package org.apache.logging.log4j.core;
+package org.apache.logging.log4j.core.test.junit;
 
-import java.util.stream.Stream;
+import org.apache.logging.log4j.core.LogEvent;
+import org.apache.logging.log4j.core.lookup.Lookup;
+import org.apache.logging.log4j.core.lookup.StrLookup;
+import org.apache.logging.log4j.plugins.Plugin;
+import org.apache.logging.log4j.test.junit.TestPropertySource;
 
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.test.AbstractSerializationTest;
-import org.junit.runners.Parameterized.Parameters;
-
-public class LoggerSerializationTest extends AbstractSerializationTest {
+/**
+ * Lookups keys from per-test properties.
+ */
+@Lookup
+@Plugin("test")
+public class TestLookup implements StrLookup {
 
-    @Parameters
-    protected Stream<Object> data() {
-        return Stream.of(new LoggerContext("").getLogger("", null),
-                LogManager.getRootLogger(),
-                LogManager.getLogger(),
-                LogManager.getLogger("test"));
+    @Override
+    public String lookup(final String key) {
+        return TestPropertySource.getProperties().getProperty(key);
     }
 
+    @Override
+    public String lookup(final LogEvent event, final String key) {
+        return lookup(key);
+    }
 }
+
diff --git a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/BasicLoggingTest.java b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/BasicLoggingTest.java
index 568cf066dd..69091ede43 100644
--- a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/BasicLoggingTest.java
+++ b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/BasicLoggingTest.java
@@ -18,10 +18,12 @@ package org.apache.logging.log4j.core;
 
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
 import org.junit.jupiter.api.Tag;
 import org.junit.jupiter.api.Test;
 
 @Tag("smoke")
+@LoggerContextSource
 public class BasicLoggingTest {
 
     @Test
diff --git a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/EventParameterMemoryLeakTest.java b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/EventParameterMemoryLeakTest.java
index 76c1b64e12..fa9b1a9da1 100644
--- a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/EventParameterMemoryLeakTest.java
+++ b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/EventParameterMemoryLeakTest.java
@@ -16,12 +16,10 @@
  */
 package org.apache.logging.log4j.core;
 
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-import org.apache.logging.log4j.core.test.CoreLoggerContexts;
-import org.junit.jupiter.api.Tag;
-import org.junit.jupiter.api.Test;
-import org.junitpioneer.jupiter.SetSystemProperty;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.containsString;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.io.BufferedReader;
 import java.io.File;
@@ -30,21 +28,25 @@ import java.lang.ref.Cleaner;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
 
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.Matchers.containsString;
-import static org.junit.jupiter.api.Assertions.assertNull;
-import static org.junit.jupiter.api.Assertions.assertTrue;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.core.test.CoreLoggerContexts;
+import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
+import org.apache.logging.log4j.test.junit.CleanUpFiles;
+import org.apache.logging.log4j.test.junit.SetTestProperty;
+import org.junit.jupiter.api.Tag;
+import org.junit.jupiter.api.Test;
 
 @Tag("functional")
-@SetSystemProperty(key = "log4j2.enable.direct.encoders", value = "true")
-@SetSystemProperty(key = "log4j2.configurationFile", value = "EventParameterMemoryLeakTest.xml")
 public class EventParameterMemoryLeakTest {
 
     @Test
+    @SetTestProperty(key = "log4j2.enable.direct.encoders", value = "true")
+    @CleanUpFiles("target/EventParameterMemoryLeakTest.log")
+    @LoggerContextSource(value = "EventParameterMemoryLeakTest.xml")
     @SuppressWarnings("UnusedAssignment") // parameter set to null to allow garbage collection
     public void testParametersAreNotLeaked() throws Exception {
         final File file = new File("target", "EventParameterMemoryLeakTest.log");
-        assertTrue(!file.exists() || file.delete(), "Deleted old file before test");
 
         final Logger log = LogManager.getLogger("com.foo.Bar");
         CountDownLatch latch = new CountDownLatch(1);
diff --git a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/LoggerSerializationTest.java b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/LoggerSerializationTest.java
index b1944ed9c9..95a3611009 100644
--- a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/LoggerSerializationTest.java
+++ b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/LoggerSerializationTest.java
@@ -19,12 +19,14 @@ package org.apache.logging.log4j.core;
 import java.util.stream.Stream;
 
 import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
 import org.apache.logging.log4j.test.AbstractSerializationTest;
 import org.junit.runners.Parameterized.Parameters;
 
 public class LoggerSerializationTest extends AbstractSerializationTest {
 
     @Parameters
+    @LoggerContextSource
     protected Stream<Object> data() {
         return Stream.of(new LoggerContext("").getLogger("", null),
                 LogManager.getRootLogger(),
diff --git a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/ConsoleAppenderTest.java b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/ConsoleAppenderTest.java
index 148d079427..36a6846ce2 100644
--- a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/ConsoleAppenderTest.java
+++ b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/ConsoleAppenderTest.java
@@ -16,6 +16,18 @@
  */
 package org.apache.logging.log4j.core.appender;
 
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.BDDMockito.then;
+import static org.mockito.Mockito.atLeastOnce;
+
+import java.io.ByteArrayOutputStream;
+import java.io.PrintStream;
+
 import org.apache.logging.log4j.Level;
 import org.apache.logging.log4j.core.Layout;
 import org.apache.logging.log4j.core.LogEvent;
@@ -23,25 +35,16 @@ import org.apache.logging.log4j.core.appender.ConsoleAppender.Target;
 import org.apache.logging.log4j.core.impl.Log4jLogEvent;
 import org.apache.logging.log4j.core.layout.PatternLayout;
 import org.apache.logging.log4j.message.SimpleMessage;
+import org.apache.logging.log4j.test.junit.SetTestProperty;
 import org.apache.logging.log4j.util.Strings;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
-import org.junitpioneer.jupiter.SetSystemProperty;
 import org.mockito.Mock;
 import org.mockito.junit.jupiter.MockitoExtension;
 
-import java.io.ByteArrayOutputStream;
-import java.io.PrintStream;
-
-import static org.junit.jupiter.api.Assertions.*;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.anyInt;
-import static org.mockito.BDDMockito.then;
-import static org.mockito.Mockito.atLeastOnce;
-
 @ExtendWith(MockitoExtension.class)
-@SetSystemProperty(key = "log4j.skipJansi", value = "true")
+@SetTestProperty(key = "log4j.skipJansi", value = "true")
 public class ConsoleAppenderTest {
 
     ByteArrayOutputStream baos;
diff --git a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/OutputStreamManagerTest.java b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/OutputStreamManagerTest.java
index 1064323c8a..8de34f5e92 100644
--- a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/OutputStreamManagerTest.java
+++ b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/OutputStreamManagerTest.java
@@ -17,21 +17,23 @@
 
 package org.apache.logging.log4j.core.appender;
 
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.util.Optional;
+
 import org.apache.logging.log4j.Level;
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.core.LoggerContext;
 import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
 import org.apache.logging.log4j.status.StatusData;
-import org.apache.logging.log4j.status.StatusLogger;
+import org.apache.logging.log4j.test.StatusMessages;
+import org.apache.logging.log4j.test.junit.UsingStatusLogger;
 import org.junit.jupiter.api.Test;
 
-import java.io.IOException;
-import java.io.OutputStream;
-import java.util.List;
-
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertThrows;
-
 /**
  * OutputStreamManager Tests.
  */
@@ -39,17 +41,15 @@ public class OutputStreamManagerTest {
 
     @Test
     @LoggerContextSource("multipleIncompatibleAppendersTest.xml")
-    public void narrow(final LoggerContext context) {
+    @UsingStatusLogger
+    public void narrow(final LoggerContext context, final StatusMessages messages) {
         final Logger logger = context.getLogger(OutputStreamManagerTest.class);
         logger.info("test");
-        final List<StatusData> statusData = StatusLogger.getLogger().getStatusData();
-        StatusData data = statusData.get(0);
-        if (data.getMessage().getFormattedMessage().contains("WindowsAnsiOutputStream")) {
-            data = statusData.get(1);
-        }
-        assertEquals(Level.ERROR, data.getLevel());
+        final Optional<StatusData> error = messages.findStatusMessages(Level.ERROR, "RollingRandomAccessFile")
+                .findFirst();
+        assertTrue(error.isPresent(), "Missing error message");
         assertEquals("Could not configure plugin element RollingRandomAccessFile: org.apache.logging.log4j.core.config.ConfigurationException: Configuration has multiple incompatible Appenders pointing to the same resource 'target/multiIncompatibleAppender.log'",
-                data.getMessage().getFormattedMessage());
+                error.get().getMessage().getFormattedMessage());
     }
 
     @Test
diff --git a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/WriterAppenderTest.java b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/WriterAppenderTest.java
index 392862e535..365eddc376 100644
--- a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/WriterAppenderTest.java
+++ b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/WriterAppenderTest.java
@@ -30,6 +30,8 @@ import org.apache.logging.log4j.core.Appender;
 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.apache.logging.log4j.core.test.junit.LoggerContextSource;
+import org.apache.logging.log4j.core.test.junit.ReconfigurationPolicy;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.TestInfo;
@@ -40,6 +42,7 @@ import static org.hamcrest.Matchers.containsString;
 /**
  * Tests {@link WriterAppender}.
  */
+@LoggerContextSource(reconfigure = ReconfigurationPolicy.BEFORE_EACH)
 public class WriterAppenderTest {
 
     private static final String TEST_MSG = "FOO ERROR";
diff --git a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/async/AsyncAppenderConfigTest_LOG4J2_2032.java b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/async/AsyncAppenderConfigTest_LOG4J2_2032.java
index 378f655a21..d831ebe656 100644
--- a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/async/AsyncAppenderConfigTest_LOG4J2_2032.java
+++ b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/async/AsyncAppenderConfigTest_LOG4J2_2032.java
@@ -16,35 +16,36 @@
  */
 package org.apache.logging.log4j.core.async;
 
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+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.LoggerContext;
 import org.apache.logging.log4j.core.test.CoreLoggerContexts;
+import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
 import org.apache.logging.log4j.test.junit.CleanUpFiles;
+import org.apache.logging.log4j.test.junit.SetTestProperty;
 import org.junit.jupiter.api.Tag;
 import org.junit.jupiter.api.Test;
-import org.junitpioneer.jupiter.SetSystemProperty;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileReader;
-
-import static org.junit.jupiter.api.Assertions.assertTrue;
 
 @Tag("async")
-@SetSystemProperty(key = "log4j2.logEventFactory", value = "org.apache.logging.log4j.core.impl.ReusableLogEventFactory")
-@SetSystemProperty(key = "log4j2.messageFactory", value = "org.apache.logging.log4j.message.ReusableMessageFactory")
-@SetSystemProperty(key = "log4j2.configurationFile", value = "AsyncAppenderConfigTest-LOG4J2-2032.xml")
+@SetTestProperty(key = "log4j2.logEventFactory", value = "org.apache.logging.log4j.core.impl.ReusableLogEventFactory")
+@SetTestProperty(key = "log4j2.messageFactory", value = "org.apache.logging.log4j.message.ReusableMessageFactory")
 public class AsyncAppenderConfigTest_LOG4J2_2032 {
 
     @Test
     @CleanUpFiles("target/AsyncAppenderConfigTest-LOG4J2-2032.log")
-    public void doNotProcessPlaceholdersTwice() throws Exception {
+    @LoggerContextSource("AsyncAppenderConfigTest-LOG4J2-2032.xml")
+    public void doNotProcessPlaceholdersTwice(LoggerContext context) throws Exception {
         final File file = new File("target", "AsyncAppenderConfigTest-LOG4J2-2032.log");
-        assertTrue(!file.exists() || file.delete(), "Deleted old file before test");
 
         final Logger log = LogManager.getLogger("com.foo.Bar");
         log.info("Text containing curly braces: {}", "Curly{}");
-        CoreLoggerContexts.stopLoggerContext(file); // stop async thread
+        context.stop(); // stop async thread
 
         try (BufferedReader reader = new BufferedReader(new FileReader(file))) {
             final String line1 = reader.readLine();
diff --git a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/async/AsyncAppenderExceptionHandlingTest.java b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/async/AsyncAppenderExceptionHandlingTest.java
index f2fb9042f4..ec29697c25 100644
--- a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/async/AsyncAppenderExceptionHandlingTest.java
+++ b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/async/AsyncAppenderExceptionHandlingTest.java
@@ -16,6 +16,10 @@
  */
 package org.apache.logging.log4j.core.async;
 
+import java.util.Collections;
+import java.util.List;
+import java.util.stream.Collectors;
+
 import org.apache.logging.log4j.core.Appender;
 import org.apache.logging.log4j.core.LogEvent;
 import org.apache.logging.log4j.core.Logger;
@@ -23,18 +27,16 @@ import org.apache.logging.log4j.core.LoggerContext;
 import org.apache.logging.log4j.core.appender.AsyncAppender;
 import org.apache.logging.log4j.core.config.AppenderControl;
 import org.apache.logging.log4j.core.config.Configuration;
-import org.apache.logging.log4j.core.config.Configurator;
-import org.apache.logging.log4j.message.Message;
 import org.apache.logging.log4j.core.test.appender.FailOnceAppender;
-import org.apache.logging.log4j.util.Strings;
+import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
+import org.apache.logging.log4j.core.util.NetUtils;
+import org.apache.logging.log4j.message.Message;
+import org.apache.logging.log4j.test.TestProperties;
+import org.apache.logging.log4j.test.junit.UsingTestProperties;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.params.ParameterizedTest;
 import org.junit.jupiter.params.provider.ValueSource;
 
-import java.util.Collections;
-import java.util.List;
-import java.util.stream.Collectors;
-
 /**
  * Verifies {@link AsyncAppender} works after certain type of {@link Appender}
  * failures.
@@ -55,43 +57,40 @@ class AsyncAppenderExceptionHandlingTest {
             FailOnceAppender.ThrowableClassName.THROWABLE,
             FailOnceAppender.ThrowableClassName.THREAD_DEATH
     })
-    void AsyncAppender_should_not_stop_on_appender_failures(String throwableClassName) {
+    @LoggerContextSource
+    @UsingTestProperties
+    void AsyncAppender_should_not_stop_on_appender_failures(String throwableClassName, TestProperties props, LoggerContext loggerContext) {
 
         // Create the logger.
         final String throwableClassNamePropertyName = "throwableClassName";
-        System.setProperty(throwableClassNamePropertyName, throwableClassName);
-        try (final LoggerContext loggerContext =
-                     Configurator.initialize("Test", "AsyncAppenderExceptionHandlingTest.xml")) {
-            final Logger logger = loggerContext.getRootLogger();
-
-            // Log the 1st message, which should fail due to the FailOnceAppender.
-            logger.info("message #1");
+        props.setProperty(throwableClassNamePropertyName, throwableClassName);
+        loggerContext.setConfigLocation(NetUtils.toURI("classpath:AsyncAppenderExceptionHandlingTest.xml"));
+        final Logger logger = loggerContext.getRootLogger();
 
-            // Log the 2nd message, which should succeed.
-            final String lastLogMessage = "message #2";
-            logger.info(lastLogMessage);
+        // Log the 1st message, which should fail due to the FailOnceAppender.
+        logger.info("message #1");
 
-            // Stop the AsyncAppender to drain the queued events.
-            Configuration configuration = loggerContext.getConfiguration();
-            AsyncAppender asyncAppender = configuration.getAppender("Async");
-            Assertions.assertNotNull(asyncAppender, "couldn't obtain the FailOnceAppender");
-            asyncAppender.stop();
+        // Log the 2nd message, which should succeed.
+        final String lastLogMessage = "message #2";
+        logger.info(lastLogMessage);
 
-            // Verify the logged message.
-            final FailOnceAppender failOnceAppender = configuration.getAppender("FailOnce");
-            Assertions.assertNotNull(failOnceAppender, "couldn't obtain the FailOnceAppender");
-            Assertions.assertTrue(failOnceAppender.isFailed(), "FailOnceAppender hasn't failed yet");
-            final List<String> accumulatedMessages = failOnceAppender
-                    .drainEvents()
-                    .stream()
-                    .map(LogEvent::getMessage)
-                    .map(Message::getFormattedMessage)
-                    .collect(Collectors.toList());
-            Assertions.assertEquals(Collections.singletonList(lastLogMessage), accumulatedMessages);
+        // Stop the AsyncAppender to drain the queued events.
+        Configuration configuration = loggerContext.getConfiguration();
+        AsyncAppender asyncAppender = configuration.getAppender("Async");
+        Assertions.assertNotNull(asyncAppender, "couldn't obtain the FailOnceAppender");
+        asyncAppender.stop();
 
-        } finally {
-            System.setProperty(throwableClassNamePropertyName, Strings.EMPTY);
-        }
+        // Verify the logged message.
+        final FailOnceAppender failOnceAppender = configuration.getAppender("FailOnce");
+        Assertions.assertNotNull(failOnceAppender, "couldn't obtain the FailOnceAppender");
+        Assertions.assertTrue(failOnceAppender.isFailed(), "FailOnceAppender hasn't failed yet");
+        final List<String> accumulatedMessages = failOnceAppender
+                .drainEvents()
+                .stream()
+                .map(LogEvent::getMessage)
+                .map(Message::getFormattedMessage)
+                .collect(Collectors.toList());
+        Assertions.assertEquals(Collections.singletonList(lastLogMessage), accumulatedMessages);
 
     }
 
diff --git a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/config/properties/PropertiesConfigurationTest.java b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/config/properties/PropertiesConfigurationTest.java
index 4b384782de..a035f2439a 100644
--- a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/config/properties/PropertiesConfigurationTest.java
+++ b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/config/properties/PropertiesConfigurationTest.java
@@ -132,8 +132,8 @@ class PropertiesConfigurationTest {
         assertEquals(1, firstEvents.size());
     }
 
-    @SetSystemProperty(key = "coreProps", value = "DEBUG, first, second")
     @Test
+    @SetSystemProperty(key = "coreProps", value = "DEBUG, first, second")
     @LoggerContextSource("LoggerLevelSysPropsAppenderTest.properties")
     void testLoggerLevelSysPropsAppender(final LoggerContext context, @Named final ListAppender first,
             @Named final ListAppender second, @Named final ListAppender third) {
diff --git a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/pattern/PatternParserTest.java b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/pattern/PatternParserTest.java
index c5d0f78b16..099c907e6b 100644
--- a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/pattern/PatternParserTest.java
+++ b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/pattern/PatternParserTest.java
@@ -29,6 +29,7 @@ import org.apache.logging.log4j.core.config.NullConfiguration;
 import org.apache.logging.log4j.core.impl.ContextDataFactory;
 import org.apache.logging.log4j.core.impl.Log4jLogEvent;
 import org.apache.logging.log4j.core.impl.ThrowableFormatOptions;
+import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
 import org.apache.logging.log4j.core.time.SystemNanoClock;
 import org.apache.logging.log4j.core.time.internal.DummyNanoClock;
 import org.apache.logging.log4j.message.SimpleMessage;
@@ -39,6 +40,7 @@ import org.junit.jupiter.api.Test;
 
 import static org.junit.jupiter.api.Assertions.*;
 
+@LoggerContextSource
 public class PatternParserTest {
 
     static String OUTPUT_FILE   = "output/PatternParser";
diff --git a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/util/ShutdownCallbackRegistryTest.java b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/util/ShutdownCallbackRegistryTest.java
index 93091019b6..2656194a37 100644
--- a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/util/ShutdownCallbackRegistryTest.java
+++ b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/util/ShutdownCallbackRegistryTest.java
@@ -42,7 +42,7 @@ public class ShutdownCallbackRegistryTest {
     }
 
     @Test
-    @LoggerContextSource(value = "ShutdownCallbackRegistryTest.xml", bootstrap = true)
+    @LoggerContextSource(value = "ShutdownCallbackRegistryTest.xml")
     public void testShutdownCallbackRegistry(final LoggerContext context) {
         assertTrue(context.isStarted(), "LoggerContext should be started");
         assertThat(Registry.CALLBACKS, hasSize(1));
diff --git a/log4j-core-test/src/test/resources/AsyncAppenderExceptionHandlingTest.xml b/log4j-core-test/src/test/resources/AsyncAppenderExceptionHandlingTest.xml
index 84764fe8ab..11e32e78d9 100644
--- a/log4j-core-test/src/test/resources/AsyncAppenderExceptionHandlingTest.xml
+++ b/log4j-core-test/src/test/resources/AsyncAppenderExceptionHandlingTest.xml
@@ -19,7 +19,7 @@
 -->
 <Configuration status="OFF" name="AsyncAppenderExceptionHandlingTest">
   <Appenders>
-    <FailOnce name="FailOnce" throwableClassName="${sys:throwableClassName}"/>
+    <FailOnce name="FailOnce" throwableClassName="${test:throwableClassName}"/>
     <Async name="Async">
       <AppenderRef ref="FailOnce" />
     </Async>