This is an automated email from the ASF dual-hosted git repository.
ggregory pushed a commit to branch release-2.x
in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git
The following commit(s) were added to refs/heads/release-2.x by this push:
new 097c60a Fix async test since The GZ compression takes place
asynchronously.
097c60a is described below
commit 097c60a7e15293022aef2dfc783c177c7b2e62cf
Author: Gary Gregory <[email protected]>
AuthorDate: Wed Nov 11 11:58:56 2020 -0500
Fix async test since The GZ compression takes place asynchronously.
- Make sure it's done before validating.
- Use JUnit 5 APIs.
---
.../core/appender/rolling/RollingFileManager.java | 9 ++++
.../rolling/RollingAppenderRestartTest.java | 53 +++++++++++++++-------
2 files changed, 45 insertions(+), 17 deletions(-)
diff --git
a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/RollingFileManager.java
b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/RollingFileManager.java
index 638ff43..7d7811d 100644
---
a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/RollingFileManager.java
+++
b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/RollingFileManager.java
@@ -409,6 +409,15 @@ public class RollingFileManager extends FileManager {
}
/**
+ * Package-private access for tests only.
+ *
+ * @return The semaphore that controls access to the rollover operation.
+ */
+ Semaphore getSemaphore() {
+ return semaphore;
+ }
+
+ /**
* Returns the rollover strategy.
* @return The RolloverStrategy
*/
diff --git
a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderRestartTest.java
b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderRestartTest.java
index 1c02ac9..384e110 100644
---
a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderRestartTest.java
+++
b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderRestartTest.java
@@ -16,15 +16,13 @@
*/
package org.apache.logging.log4j.core.appender.rolling;
-import org.apache.commons.io.file.PathUtils;
-import org.apache.logging.log4j.Logger;
-import org.apache.logging.log4j.junit.LoggerContextRule;
-import org.hamcrest.Matcher;
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.RuleChain;
+import static org.apache.logging.log4j.hamcrest.Descriptors.that;
+import static org.apache.logging.log4j.hamcrest.FileMatchers.hasName;
+import static org.hamcrest.Matchers.endsWith;
+import static org.hamcrest.Matchers.hasItemInArray;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
import java.io.File;
import java.io.IOException;
@@ -37,12 +35,18 @@ import java.nio.file.attribute.FileTime;
import java.time.Instant;
import java.time.temporal.ChronoUnit;
import java.util.Arrays;
+import java.util.concurrent.TimeUnit;
-import static org.apache.logging.log4j.hamcrest.Descriptors.that;
-import static org.apache.logging.log4j.hamcrest.FileMatchers.hasName;
-import static org.hamcrest.Matchers.endsWith;
-import static org.hamcrest.Matchers.hasItemInArray;
-import static org.junit.Assert.assertTrue;
+import org.apache.commons.io.file.PathUtils;
+import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.core.appender.RollingFileAppender;
+import org.apache.logging.log4j.junit.LoggerContextRule;
+import org.hamcrest.Matcher;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.RuleChain;
public class RollingAppenderRestartTest {
@@ -82,11 +86,26 @@ public class RollingAppenderRestartTest {
public void testAppender() throws Exception {
final Logger logger = loggerContextRule.getLogger();
logger.info("This is test message number 1");
+ // The GZ compression takes place asynchronously.
+ // Make sure it's done before validating.
+ Thread.yield();
+ final String name = "RollingFile";
+ RollingFileAppender appender = loggerContextRule.getAppender(name);
+ assertNotNull(appender, name);
+ if (appender.getManager().getSemaphore().tryAcquire(5,
TimeUnit.SECONDS)) {
+ // If we are in here, either the rollover is done or has not taken
place yet.
+ validate();
+ } else {
+ fail("Rolling over is taking too long.");
+ }
+ }
+
+ private void validate() {
final Matcher<File[]> hasGzippedFile =
hasItemInArray(that(hasName(that(endsWith(".gz")))));
final File[] files = DIR.toFile().listFiles();
- assertTrue(
- "was expecting files with '.gz' suffix, found: " +
Arrays.toString(files),
- hasGzippedFile.matches(files));
+ Arrays.sort(files);
+ assertTrue(hasGzippedFile.matches(files),
+ () -> "was expecting files with '.gz' suffix, found: " +
Arrays.toString(files));
}
}