Added org.apache.logging.log4j.core.layout.CsvParameterLayoutTest.testLogJsonArgument() for [LOG4J2-1502] CsvParameterLayout is inserting NUL character if data starts with {, (, [ or "
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/ae218df6 Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/ae218df6 Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/ae218df6 Branch: refs/heads/LOG4J2-1010&LOG4J2-1447-injectable-contextdata&better-datastructure Commit: ae218df64450d6e3d8744c07d173ed714473de19 Parents: d8d2ac0 Author: Gary Gregory <ggreg...@apache.org> Authored: Fri Aug 26 18:01:41 2016 -0700 Committer: Gary Gregory <ggreg...@apache.org> Committed: Fri Aug 26 18:01:41 2016 -0700 ---------------------------------------------------------------------- .../core/layout/CsvParameterLayoutTest.java | 59 ++++++++++++++------ 1 file changed, 43 insertions(+), 16 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ae218df6/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/CsvParameterLayoutTest.java ---------------------------------------------------------------------- diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/CsvParameterLayoutTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/CsvParameterLayoutTest.java index 58ce1bd..f4eddd1 100644 --- a/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/CsvParameterLayoutTest.java +++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/CsvParameterLayoutTest.java @@ -28,6 +28,7 @@ import java.util.concurrent.TimeUnit; import org.apache.commons.csv.CSVFormat; import org.apache.logging.log4j.Level; +import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.core.Appender; import org.apache.logging.log4j.core.Logger; import org.apache.logging.log4j.junit.LoggerContextRule; @@ -49,19 +50,15 @@ import org.junit.runners.Parameterized; public class CsvParameterLayoutTest { @Parameterized.Parameters(name = "{0}") public static Collection<Object[]> data() { - return Arrays.asList( - new Object[][]{ - { new LoggerContextRule("csvParamsSync.xml"), }, - { new LoggerContextRule("csvParamsMixedAsync.xml"), }, - } - ); + return Arrays.asList(new Object[][] { { new LoggerContextRule("csvParamsSync.xml"), }, + { new LoggerContextRule("csvParamsMixedAsync.xml"), }, }); } @Rule public final LoggerContextRule init; @Rule - public final ThreadContextRule threadContextRule = new ThreadContextRule(); + public final ThreadContextRule threadContextRule = new ThreadContextRule(); public CsvParameterLayoutTest(final LoggerContextRule contextRule) { this.init = contextRule; @@ -86,11 +83,9 @@ public class CsvParameterLayoutTest { assertEquals("text/csv; charset=UTF-8", layout.getContentType()); } - static void testLayoutNormalApi(final Logger root, final AbstractCsvLayout layout, final boolean messageApi) throws Exception { - final Map<String, Appender> appenders = root.getAppenders(); - for (final Appender appender : appenders.values()) { - root.removeAppender(appender); - } + static void testLayoutNormalApi(final Logger root, final AbstractCsvLayout layout, final boolean messageApi) + throws Exception { + removeAppenders(root); // set up appender final ListAppender appender = new ListAppender("List", null, layout, true, false); appender.start(); @@ -107,10 +102,12 @@ public class CsvParameterLayoutTest { } else { logDebugNormalApi(root); } - - // wait until background thread finished processing - appender.countDownLatch.await(10, TimeUnit.SECONDS); - assertEquals("Background thread did not finish processing: msg count", 4, appender.getMessages().size()); + final int msgCount = 4; + if (appender.getMessages().size() < msgCount) { + // wait until background thread finished processing + appender.countDownLatch.await(10, TimeUnit.SECONDS); + } + assertEquals("Background thread did not finish processing: msg count", msgCount, appender.getMessages().size()); // don't stop appender until background thread is done appender.stop(); @@ -123,6 +120,13 @@ public class CsvParameterLayoutTest { Assert.assertEquals("7" + d + "8" + d + "9" + d + "10", list.get(3)); } + private static void removeAppenders(final Logger root) { + final Map<String, Appender> appenders = root.getAppenders(); + for (final Appender appender : appenders.values()) { + root.removeAppender(appender); + } + } + private static void logDebugNormalApi(final Logger root) { root.debug("with placeholders: {}{}{}", 1, 2, 3); root.debug("without placeholders", 2, 3); @@ -154,4 +158,27 @@ public class CsvParameterLayoutTest { final Logger root = this.init.getRootLogger(); testLayoutNormalApi(root, CsvParameterLayout.createLayout(CSVFormat.TDF), true); } + + @Test + public void testLogJsonArgument() throws InterruptedException { + ListAppender appender = (ListAppender) init.getAppender("List"); + appender.countDownLatch = new CountDownLatch(4); + appender.clear(); + Logger logger = (Logger) LogManager.getRootLogger(); + final String json = "{\"id\":10,\"name\":\"Alice\"}"; + logger.error("log:{}", json); + // wait until background thread finished processing + final int msgCount = 1; + if (appender.getMessages().size() < msgCount) { + appender.countDownLatch.await(5, TimeUnit.SECONDS); + } + assertEquals("Background thread did not finish processing: msg count", msgCount, appender.getMessages().size()); + + // don't stop appender until background thread is done + appender.stop(); + final List<String> list = appender.getMessages(); + final String eventStr = list.get(0).toString(); + Assert.assertTrue(eventStr, eventStr.contains(json)); + } + }