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

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

commit 4be704a00f8587cf1a66ddf3aaf9f875f827d0a3
Author: Matt Sicker <mattsic...@apache.org>
AuthorDate: Sat Jun 18 18:26:28 2022 -0500

    Make RollingAppenderDirectWrite1906Test less sleepy
    
    Relates to LOG4J2-2923.
    
    Signed-off-by: Matt Sicker <mattsic...@apache.org>
---
 .../RollingAppenderDirectWrite1906Test.java        | 82 ++++++++++------------
 1 file changed, 36 insertions(+), 46 deletions(-)

diff --git 
a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDirectWrite1906Test.java
 
b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDirectWrite1906Test.java
index 7f3d78c2cb..4ac4f9fa9b 100644
--- 
a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDirectWrite1906Test.java
+++ 
b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDirectWrite1906Test.java
@@ -19,36 +19,35 @@ package org.apache.logging.log4j.core.appender.rolling;
 import org.apache.logging.log4j.Level;
 import org.apache.logging.log4j.core.LoggerContext;
 import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
+import org.apache.logging.log4j.plugins.Named;
 import org.apache.logging.log4j.status.StatusData;
 import org.apache.logging.log4j.status.StatusListener;
 import org.apache.logging.log4j.status.StatusLogger;
 import org.apache.logging.log4j.test.junit.CleanUpDirectories;
 import org.junit.jupiter.api.BeforeAll;
-import org.junit.jupiter.api.Tag;
 import org.junit.jupiter.api.Test;
 
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileReader;
 import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
 import java.util.List;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
-import static org.apache.logging.log4j.core.test.hamcrest.Descriptors.that;
-import static org.apache.logging.log4j.core.test.hamcrest.FileMatchers.hasName;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.Matchers.endsWith;
-import static org.hamcrest.Matchers.hasItemInArray;
-import static org.junit.jupiter.api.Assertions.*;
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  *
  */
-@Tag("sleepy")
-public class RollingAppenderDirectWrite1906Test {
+public class RollingAppenderDirectWrite1906Test extends 
AbstractRollingListenerTest {
 
     private static final String CONFIG = "log4j-rolling-direct-1906.xml";
 
     private static final String DIR = "target/rolling-direct-1906";
+    private final CountDownLatch rollover = new CountDownLatch(2);
 
     @BeforeAll
     static void beforeAll() {
@@ -58,48 +57,39 @@ public class RollingAppenderDirectWrite1906Test {
     @Test
     @CleanUpDirectories(DIR)
     @LoggerContextSource(value = CONFIG, timeout = 10)
-    public void testAppender(final LoggerContext context) throws Exception {
+    public void testAppender(final LoggerContext context, 
@Named("RollingFile") final RollingFileManager manager) throws Exception {
+        manager.addRolloverListener(this);
         final var logger = context.getLogger(getClass());
         int count = 100;
-        for (int i=0; i < count; ++i) {
+        for (int i = 0; i < count; ++i) {
             logger.debug("This is test message number " + i);
-            Thread.sleep(50);
+            currentTimeMillis.addAndGet(50);
         }
-        Thread.sleep(50);
-        final File dir = new File(DIR);
-        assertTrue(dir.exists() && dir.listFiles().length > 0, "Directory not 
created");
-        final File[] files = dir.listFiles();
-        assertNotNull(files);
-        assertThat(files, 
hasItemInArray(that(hasName(that(endsWith(".log"))))));
-        int found = 0;
-        for (File file: files) {
-            String actual = file.getName();
-            BufferedReader reader = new BufferedReader(new FileReader(file));
-            String line;
-            while ((line = reader.readLine()) != null) {
-                assertNotNull(line, "No log event in file " + actual);
-                String[] parts = line.split((" "));
-                String expected = "rollingfile." + parts[0] + ".log";
-
-                assertEquals(expected, actual, logFileNameError(expected, 
actual));
-                ++found;
-            }
-            reader.close();
+        rollover.await();
+        final Path dir = Path.of(DIR);
+        assertThat(dir).isNotEmptyDirectory();
+        assertThat(dir).isDirectoryContaining("glob:**.log");
+
+        try (final Stream<Path> files = Files.list(dir)) {
+            final AtomicInteger found = new AtomicInteger();
+            assertThat(files).allSatisfy(file -> {
+                final String expected = file.getFileName().toString();
+                try (final Stream<String> stream = Files.lines(file)) {
+                    final List<String> lines = stream
+                            .map(line -> String.format("rollingfile.%s.log", 
line.substring(0, line.indexOf(' '))))
+                            .collect(Collectors.toList());
+                    found.addAndGet(lines.size());
+                    assertThat(lines).allSatisfy(actual -> 
assertThat(actual).isEqualTo(expected));
+                }
+            });
+            assertEquals(count, found.get(), "Incorrect number of events read. 
Expected " + count + ", Actual " + found.get());
         }
-        assertEquals(count, found, "Incorrect number of events read. Expected 
" + count + ", Actual " + found);
-
     }
 
 
-    private String logFileNameError(String expected, String actual) {
-        final List<StatusData> statusData = 
StatusLogger.getLogger().getStatusData();
-        final StringBuilder sb = new StringBuilder();
-        for (StatusData statusItem : statusData) {
-            sb.append(statusItem.getFormattedStatus());
-            sb.append("\n");
-        }
-        sb.append("Incorrect file name. Expected: ").append(expected).append(" 
Actual: ").append(actual);
-        return sb.toString();
+    @Override
+    public void rolloverComplete(final String fileName) {
+        rollover.countDown();
     }
 
     private static class NoopStatusListener implements StatusListener {

Reply via email to