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/03/29 14:05:44 UTC

[logging-log4j2] 24/25: Catch all FileAppenderTest asynchronous errors

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

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

commit f24c83447a15e0d8508336a8fe702ae70f052455
Author: Piotr P. Karwasz <pi...@karwasz.org>
AuthorDate: Sun Mar 13 21:19:34 2022 +0100

    Catch all FileAppenderTest asynchronous errors
    
    Assertions are not exceptions, so they were not passed on to the Junit
    thread.
    # Conflicts:
    #	log4j-core/src/test/java/org/apache/logging/log4j/core/appender/FileAppenderTest.java
---
 .../log4j/core/appender/FileAppenderTest.java      | 51 ++++++++++++++--------
 1 file changed, 32 insertions(+), 19 deletions(-)

diff --git a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/FileAppenderTest.java b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/FileAppenderTest.java
index 3927458..b2667be 100644
--- a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/FileAppenderTest.java
+++ b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/FileAppenderTest.java
@@ -26,6 +26,7 @@ import java.nio.file.Paths;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicReference;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
@@ -34,6 +35,7 @@ import org.apache.logging.log4j.core.Layout;
 import org.apache.logging.log4j.core.LogEvent;
 import org.apache.logging.log4j.core.impl.Log4jLogEvent;
 import org.apache.logging.log4j.core.layout.PatternLayout;
+import org.apache.logging.log4j.core.util.Integers;
 import org.apache.logging.log4j.core.util.Throwables;
 import org.apache.logging.log4j.test.junit.CleanUpFiles;
 import org.apache.logging.log4j.message.SimpleMessage;
@@ -124,10 +126,16 @@ public class FileAppenderTest {
             long prevLen = curLen;
             assertEquals(0, curLen, "File length: " + curLen);
             for (int i = 0; i < 100; ++i) {
-                final LogEvent event = Log4jLogEvent.newBuilder().setLoggerName("TestLogger") //
-                        .setLoggerFqcn(FileAppenderTest.class.getName()).setLevel(Level.INFO) //
-                        .setMessage(new SimpleMessage("Test")).setThreadName(this.getClass().getSimpleName()) //
-                        .setTimeMillis(System.currentTimeMillis()).build();
+                // @formatter:off
+                final LogEvent event = Log4jLogEvent.newBuilder()
+                        .setLoggerName("TestLogger")
+                        .setLoggerFqcn(FileAppenderTest.class.getName())
+                        .setLevel(Level.INFO)
+                        .setMessage(new SimpleMessage("Test"))
+                        .setThreadName(this.getClass().getSimpleName())
+                        .setTimeMillis(System.currentTimeMillis())
+                        .build();
+                // @formatter:on
                 appender.append(event);
                 curLen = file.length();
                 assertTrue(curLen > prevLen, "File length: " + curLen);
@@ -158,17 +166,17 @@ public class FileAppenderTest {
     private void testMultipleLockingAppenderThreads(final boolean lock, final int threadCount, boolean createOnDemand)
             throws InterruptedException, Exception {
         final ExecutorService threadPool = Executors.newFixedThreadPool(threadCount);
-        final Exception[] exceptionRef = new Exception[1];
+        final AtomicReference<Throwable> throwableRef = new AtomicReference<>();
         final int logEventCount = 100;
-        final Runnable runnable = new FileWriterRunnable(createOnDemand, lock, logEventCount, exceptionRef);
+        final Runnable runnable = new FileWriterRunnable(createOnDemand, lock, logEventCount, throwableRef);
         for (int i = 0; i < threadCount; ++i) {
             threadPool.execute(runnable);
         }
         threadPool.shutdown();
         assertTrue(
                 threadPool.awaitTermination(10, TimeUnit.SECONDS), "The thread pool has not shutdown: " + threadPool);
-        if (exceptionRef[0] != null) {
-            throw exceptionRef[0];
+        if (throwableRef.get() != null) {
+            Throwables.rethrow(throwableRef.get());
         }
         verifyFile(threadCount * logEventCount);
     }
@@ -240,10 +248,16 @@ public class FileAppenderTest {
                 assertNotEquals(createOnDemand, exists, msg);
             }
             for (int i = 0; i < logEventCount; ++i) {
-                final LogEvent logEvent = Log4jLogEvent.newBuilder().setLoggerName("TestLogger")
-                        .setLoggerFqcn(FileAppenderTest.class.getName()).setLevel(Level.INFO)
-                        .setMessage(new SimpleMessage("Test")).setThreadName(name)
-                        .setTimeMillis(System.currentTimeMillis()).build();
+                // @formatter:off
+                final LogEvent logEvent = Log4jLogEvent.newBuilder()
+                        .setLoggerName("TestLogger")
+                        .setLoggerFqcn(FileAppenderTest.class.getName())
+                        .setLevel(Level.INFO)
+                        .setMessage(new SimpleMessage("Test"))
+                        .setThreadName(name)
+                        .setTimeMillis(System.currentTimeMillis())
+                        .build();
+                // @formatter:on
                 appender.append(logEvent);
                 Thread.sleep(25); // Give up control long enough for another thread/process to occasionally do something.
             }
@@ -275,14 +289,14 @@ public class FileAppenderTest {
         private final boolean createOnDemand;
         private final boolean lock;
         private final int logEventCount;
-        private final Exception[] exceptionRef;
+        private final AtomicReference<Throwable> throwableRef;
 
         public FileWriterRunnable(
-                boolean createOnDemand, final boolean lock, final int logEventCount, final Exception[] exceptionRef) {
+                boolean createOnDemand, final boolean lock, final int logEventCount, final AtomicReference<Throwable> throwableRef) {
             this.createOnDemand = createOnDemand;
             this.lock = lock;
             this.logEventCount = logEventCount;
-            this.exceptionRef = exceptionRef;
+            this.throwableRef = throwableRef;
         }
 
         @Override
@@ -291,9 +305,8 @@ public class FileAppenderTest {
 
             try {
                 writer(lock, logEventCount, thread.getName(), createOnDemand, true);
-            } catch (final Exception e) {
-                exceptionRef[0] = e;
-                Throwables.rethrow(e);
+            } catch (final Throwable e) {
+                throwableRef.set(e);
             }
         }
     }
@@ -308,7 +321,7 @@ public class FileAppenderTest {
             }
             final String id = args[0];
 
-            final int count = Integer.parseInt(args[1]);
+            final int count = Integers.parseInt(args[1]);
 
             if (count <= 0) {
                 System.out.println("Invalid count value: " + args[1]);