Try to fix test on Jenkins by waiting a little longer for messages to come. Refactor this waiting in a new ListAppender method.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/bdd0e362 Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/bdd0e362 Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/bdd0e362 Branch: refs/heads/LOG4J2-1349-gcfree-threadcontext Commit: bdd0e36237a8a30d46b814961140a08181a34ad1 Parents: 86a037f Author: Gary Gregory <ggreg...@apache.org> Authored: Thu Sep 8 13:29:45 2016 -0700 Committer: Gary Gregory <ggreg...@apache.org> Committed: Thu Sep 8 13:29:45 2016 -0700 ---------------------------------------------------------------------- .../logging/log4j/core/appender/AsyncAppenderTest.java | 9 ++++----- .../apache/logging/log4j/test/appender/ListAppender.java | 11 +++++++++++ 2 files changed, 15 insertions(+), 5 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/bdd0e362/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/AsyncAppenderTest.java ---------------------------------------------------------------------- diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/AsyncAppenderTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/AsyncAppenderTest.java index 8031909..601ddb5 100644 --- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/AsyncAppenderTest.java +++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/AsyncAppenderTest.java @@ -17,6 +17,7 @@ package org.apache.logging.log4j.core.appender; import java.util.List; +import java.util.concurrent.TimeUnit; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -38,7 +39,7 @@ import static org.junit.Assert.*; @RunWith(Parameterized.class) public class AsyncAppenderTest { - private static final int SLEEP_MILLIS = 100; + private static final int TIMEOUT_MILLIS = 1000; @Parameterized.Parameters(name = "{0}") public static Object[] data() { @@ -77,8 +78,7 @@ public class AsyncAppenderTest { final Logger logger = LogManager.getLogger(AsyncAppender.class); logger.error("This is a test"); logger.warn("Hello world!"); - Thread.sleep(SLEEP_MILLIS); - final List<String> list = listAppender.getMessages(); + final List<String> list = listAppender.getMessages(TIMEOUT_MILLIS, TimeUnit.MILLISECONDS); assertNotNull("No events generated", list); assertTrue("Incorrect number of events. Expected 2, got " + list.size(), list.size() == 2); String msg = list.get(0); @@ -95,8 +95,7 @@ public class AsyncAppenderTest { final Exception parent = new IllegalStateException("Test"); final Throwable child = new LoggingException("This is a test", parent); logger.error("This is a test", child); - Thread.sleep(SLEEP_MILLIS); - final List<String> list = listAppender.getMessages(); + final List<String> list = listAppender.getMessages(TIMEOUT_MILLIS, TimeUnit.MILLISECONDS); assertNotNull("No events generated", list); assertTrue("Incorrect number of events. Expected 1, got " + list.size(), list.size() == 1); final String msg = list.get(0); http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/bdd0e362/log4j-core/src/test/java/org/apache/logging/log4j/test/appender/ListAppender.java ---------------------------------------------------------------------- diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/test/appender/ListAppender.java b/log4j-core/src/test/java/org/apache/logging/log4j/test/appender/ListAppender.java index 6ecf5c3..68ee55d 100644 --- a/log4j-core/src/test/java/org/apache/logging/log4j/test/appender/ListAppender.java +++ b/log4j-core/src/test/java/org/apache/logging/log4j/test/appender/ListAppender.java @@ -174,6 +174,17 @@ public class ListAppender extends AbstractAppender { return Collections.unmodifiableList(messages); } + /** + * Polls the messages for at most timeout timeUnits and return a copy of what we have so far. + */ + public List<String> getMessages(long timeout, TimeUnit timeUnit) throws InterruptedException { + final long endMillis = System.currentTimeMillis() + timeUnit.toMillis(timeout); + while (messages.isEmpty() && System.currentTimeMillis() < endMillis) { + Thread.sleep(100); + } + return Collections.unmodifiableList(messages); + } + public synchronized List<byte[]> getData() { return Collections.unmodifiableList(data); }