This is an automated email from the ASF dual-hosted git repository. mattsicker pushed a commit to branch release-2.x in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git
commit e0d78a4494ad07edfdbbc38f321c21a66dc3d439 Author: Matt Sicker <boa...@gmail.com> AuthorDate: Sun Sep 13 16:30:42 2020 -0500 Migrate more appender tests to JUnit 5 Backported from 3.x. Signed-off-by: Matt Sicker <boa...@gmail.com> --- .../log4j/core/appender/InMemoryAppenderTest.java | 15 +- .../core/appender/MemoryMappedFileManagerTest.java | 28 ++- .../core/appender/OutputStreamManagerTest.java | 18 +- .../core/appender/RandomAccessFileManagerTest.java | 37 ++-- .../core/appender/ReconfigureAppenderTest.java | 6 +- .../core/appender/ScriptAppenderSelectorTest.java | 87 +++----- .../core/appender/SocketAppenderBuilderTest.java | 9 +- .../log4j/core/appender/TlsSyslogFrameTest.java | 16 +- .../log4j/core/appender/WriterAppenderTest.java | 224 +++++++++++---------- 9 files changed, 202 insertions(+), 238 deletions(-) diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/InMemoryAppenderTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/InMemoryAppenderTest.java index 75d4929..fe0c359 100644 --- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/InMemoryAppenderTest.java +++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/InMemoryAppenderTest.java @@ -24,13 +24,10 @@ import org.apache.logging.log4j.core.layout.PatternLayout; import org.apache.logging.log4j.message.SimpleMessage; import org.apache.logging.log4j.test.appender.InMemoryAppender; import org.apache.logging.log4j.util.Strings; -import org.junit.Test; +import org.junit.jupiter.api.Test; -import static org.junit.Assert.*; +import static org.junit.jupiter.api.Assertions.*; -/** - * - */ public class InMemoryAppenderTest { @Test @@ -68,15 +65,15 @@ public class InMemoryAppenderTest { .setMessage(new SimpleMessage("Test")) // .build(); app.start(); - assertTrue("Appender did not start", app.isStarted()); + assertTrue(app.isStarted(), "Appender did not start"); app.append(event); app.append(event); final String msg = app.toString(); - assertNotNull("No message", msg); + assertNotNull(msg, "No message"); final String expectedHeader = header == null ? "" : header; final String expected = expectedHeader + "Test" + Strings.LINE_SEPARATOR + "Test" + Strings.LINE_SEPARATOR; - assertTrue("Incorrect message: " + msg, msg.equals(expected)); + assertEquals(expected, msg, "Incorrect message: " + msg); app.stop(); - assertFalse("Appender did not stop", app.isStarted()); + assertFalse(app.isStarted(), "Appender did not stop"); } } diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/MemoryMappedFileManagerTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/MemoryMappedFileManagerTest.java index 84f7a4e..e5bb0d2 100644 --- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/MemoryMappedFileManagerTest.java +++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/MemoryMappedFileManagerTest.java @@ -16,17 +16,16 @@ */ package org.apache.logging.log4j.core.appender; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; - import java.io.BufferedReader; import java.io.File; import java.io.FileOutputStream; import java.io.FileReader; import java.io.IOException; -import org.junit.Test; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; + +import static org.junit.jupiter.api.Assertions.*; /** * Tests the MemoryMappedFileManager class. @@ -35,12 +34,13 @@ import org.junit.Test; */ public class MemoryMappedFileManagerTest { + @TempDir + File tempDir; + @Test public void testRemapAfterInitialMapSizeExceeded() throws IOException { final int mapSize = 64; // very small, on purpose - final File file = File.createTempFile("log4j2", "test"); - file.deleteOnExit(); - assertEquals(0, file.length()); + final File file = new File(tempDir, "memory-mapped-file.bin"); final boolean append = false; final boolean immediateFlush = false; @@ -57,8 +57,8 @@ public class MemoryMappedFileManagerTest { try (BufferedReader reader = new BufferedReader(new FileReader(file))) { String line = reader.readLine(); for (int i = 0; i < 1000; i++) { - assertNotNull("line", line); - assertTrue("line incorrect", line.contains("Message " + i)); + assertNotNull(line, "line"); + assertTrue(line.contains("Message " + i), "line incorrect"); line = reader.readLine(); } } @@ -66,9 +66,7 @@ public class MemoryMappedFileManagerTest { @Test public void testAppendDoesNotOverwriteExistingFile() throws IOException { - final File file = File.createTempFile("log4j2", "test"); - file.deleteOnExit(); - assertEquals(0, file.length()); + final File file = new File(tempDir, "memory-mapped-file.bin"); final int initialLength = 4 * 1024; @@ -77,7 +75,7 @@ public class MemoryMappedFileManagerTest { fos.write(new byte[initialLength], 0, initialLength); fos.flush(); } - assertEquals("all flushed to disk", initialLength, file.length()); + assertEquals(initialLength, file.length(), "all flushed to disk"); final boolean isAppend = true; final boolean immediateFlush = false; @@ -86,6 +84,6 @@ public class MemoryMappedFileManagerTest { manager.writeBytes(new byte[initialLength], 0, initialLength); } final int expected = initialLength * 2; - assertEquals("appended, not overwritten", expected, file.length()); + assertEquals(expected, file.length(), "appended, not overwritten"); } } \ No newline at end of file diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/OutputStreamManagerTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/OutputStreamManagerTest.java index 884d6b8..86d1990 100644 --- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/OutputStreamManagerTest.java +++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/OutputStreamManagerTest.java @@ -20,28 +20,24 @@ package org.apache.logging.log4j.core.appender; import java.util.List; import org.apache.logging.log4j.Level; -import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import org.apache.logging.log4j.junit.LoggerContextRule; +import org.apache.logging.log4j.core.LoggerContext; +import org.apache.logging.log4j.junit.LoggerContextSource; import org.apache.logging.log4j.status.StatusData; import org.apache.logging.log4j.status.StatusLogger; -import org.junit.ClassRule; -import org.junit.Test; +import org.junit.jupiter.api.Test; -import static org.junit.Assert.*; +import static org.junit.jupiter.api.Assertions.*; /** * OutputStreamManager Tests. */ public class OutputStreamManagerTest { - private static final String CONFIG = "multipleIncompatibleAppendersTest.xml"; - - @ClassRule - public static LoggerContextRule context = new LoggerContextRule(CONFIG); @Test - public void narrow() throws Exception { - final Logger logger = LogManager.getLogger(OutputStreamManagerTest.class); + @LoggerContextSource("multipleIncompatibleAppendersTest.xml") + public void narrow(final LoggerContext context) { + final Logger logger = context.getLogger(OutputStreamManagerTest.class); logger.info("test"); final List<StatusData> statusData = StatusLogger.getLogger().getStatusData(); StatusData data = statusData.get(0); diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/RandomAccessFileManagerTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/RandomAccessFileManagerTest.java index fac3171..62b2bec 100644 --- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/RandomAccessFileManagerTest.java +++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/RandomAccessFileManagerTest.java @@ -23,19 +23,18 @@ import java.io.OutputStream; import java.io.RandomAccessFile; import org.apache.logging.log4j.core.util.NullOutputStream; -import org.junit.ClassRule; -import org.junit.Test; -import org.junit.rules.TemporaryFolder; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; -import static org.junit.Assert.*; +import static org.junit.jupiter.api.Assertions.*; /** * Tests the RandomAccessFileManager class. */ public class RandomAccessFileManagerTest { - @ClassRule - public static TemporaryFolder folder = new TemporaryFolder(); + @TempDir + File tempDir; /** * Test method for @@ -44,7 +43,7 @@ public class RandomAccessFileManagerTest { */ @Test public void testWrite_multiplesOfBufferSize() throws IOException { - final File file = folder.newFile(); + final File file = new File(tempDir, "random-access-file.bin"); try (final RandomAccessFile raf = new RandomAccessFile(file, "rw")) { final OutputStream os = NullOutputStream.getInstance(); final RandomAccessFileManager manager = new RandomAccessFileManager(null, raf, file.getName(), @@ -56,7 +55,8 @@ public class RandomAccessFileManagerTest { // all data is written if exceeds buffer size assertEquals(RandomAccessFileManager.DEFAULT_BUFFER_SIZE * 3, raf.length()); - }} + } + } /** * Test method for @@ -65,7 +65,7 @@ public class RandomAccessFileManagerTest { */ @Test public void testWrite_dataExceedingBufferSize() throws IOException { - final File file = folder.newFile(); + final File file = new File(tempDir, "random-access-file.bin"); try (final RandomAccessFile raf = new RandomAccessFile(file, "rw")) { final OutputStream os = NullOutputStream.getInstance(); final RandomAccessFileManager manager = new RandomAccessFileManager(null, raf, file.getName(), @@ -79,11 +79,12 @@ public class RandomAccessFileManagerTest { manager.flush(); assertEquals(size, raf.length()); // all data written to file now - }} + } + } @Test public void testConfigurableBufferSize() throws IOException { - final File file = folder.newFile(); + final File file = new File(tempDir, "random-access-file.bin"); try (final RandomAccessFile raf = new RandomAccessFile(file, "rw")) { final OutputStream os = NullOutputStream.getInstance(); final int bufferSize = 4 * 1024; @@ -94,11 +95,12 @@ public class RandomAccessFileManagerTest { // check the resulting buffer size is what was requested assertEquals(bufferSize, manager.getBufferSize()); - }} + } + } @Test public void testWrite_dataExceedingMinBufferSize() throws IOException { - final File file = folder.newFile(); + final File file = new File(tempDir, "random-access-file.bin"); try (final RandomAccessFile raf = new RandomAccessFile(file, "rw")) { final OutputStream os = NullOutputStream.getInstance(); final int bufferSize = 1; @@ -113,12 +115,13 @@ public class RandomAccessFileManagerTest { manager.flush(); assertEquals(size, raf.length()); // all data written to file now - }} + } + } @Test public void testAppendDoesNotOverwriteExistingFile() throws IOException { final boolean isAppend = true; - final File file = folder.newFile(); + final File file = new File(tempDir, "random-access-file.bin"); assertEquals(0, file.length()); final byte[] bytes = new byte[4 * 1024]; @@ -128,12 +131,12 @@ public class RandomAccessFileManagerTest { fos.write(bytes, 0, bytes.length); fos.flush(); } - assertEquals("all flushed to disk", bytes.length, file.length()); + assertEquals(bytes.length, file.length(), "all flushed to disk"); final RandomAccessFileManager manager = RandomAccessFileManager.getFileManager( file.getAbsolutePath(), isAppend, true, RandomAccessFileManager.DEFAULT_BUFFER_SIZE, null, null, null); manager.write(bytes, 0, bytes.length, true); final int expected = bytes.length * 2; - assertEquals("appended, not overwritten", expected, file.length()); + assertEquals(expected, file.length(), "appended, not overwritten"); } } diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/ReconfigureAppenderTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/ReconfigureAppenderTest.java index bbdf01d..6adc018 100644 --- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/ReconfigureAppenderTest.java +++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/ReconfigureAppenderTest.java @@ -32,12 +32,8 @@ import org.apache.logging.log4j.core.config.builder.api.ConfigurationBuilderFact import org.apache.logging.log4j.core.config.builder.impl.BuiltConfiguration; import org.apache.logging.log4j.core.layout.PatternLayout; import org.apache.logging.log4j.core.util.Builder; -import org.junit.Test; +import org.junit.jupiter.api.Test; -/** - * Class Description goes here. - * Created by rgoers on 2019-02-02 - */ public class ReconfigureAppenderTest { private RollingFileAppender appender; diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/ScriptAppenderSelectorTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/ScriptAppenderSelectorTest.java index fbea216..6b3800f 100644 --- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/ScriptAppenderSelectorTest.java +++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/ScriptAppenderSelectorTest.java @@ -16,79 +16,44 @@ */ package org.apache.logging.log4j.core.appender; -import org.apache.logging.log4j.Marker; import org.apache.logging.log4j.MarkerManager; -import org.apache.logging.log4j.categories.Scripts; -import org.apache.logging.log4j.core.Logger; -import org.apache.logging.log4j.junit.LoggerContextRule; +import org.apache.logging.log4j.core.config.Configuration; +import org.apache.logging.log4j.junit.LoggerContextSource; +import org.apache.logging.log4j.spi.ExtendedLogger; import org.apache.logging.log4j.test.appender.ListAppender; -import org.junit.Rule; -import org.junit.Test; -import org.junit.experimental.categories.Category; -import org.junit.runner.RunWith; -import org.junit.runners.Parameterized; +import org.junit.jupiter.api.Test; -import static org.junit.Assert.*; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.hasSize; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNull; -@RunWith(Parameterized.class) -@Category(Scripts.Groovy.class) public class ScriptAppenderSelectorTest { - @Parameterized.Parameters(name = "{0}") - public static Object[][] getParameters() { - // @formatter:off - return new Object[][] { - { "log4j-appender-selector-groovy.xml" }, - { "log4j-appender-selector-javascript.xml" }, - }; - // @formatter:on - } - - @Rule - public final LoggerContextRule loggerContextRule; - - public ScriptAppenderSelectorTest(final String configLocation) { - this.loggerContextRule = new LoggerContextRule(configLocation); + @Test + @LoggerContextSource("log4j-appender-selector-javascript.xml") + void testJavaScriptSelector(final Configuration config) { + verify(config); } - private ListAppender getListAppender() { - return loggerContextRule.getListAppender("SelectIt"); + @Test + @LoggerContextSource("log4j-appender-selector-groovy.xml") + void testGroovySelector(final Configuration config) { + verify(config); } - private void logAndCheck() { - final Marker marker = MarkerManager.getMarker("HEXDUMP"); - final Logger logger = loggerContextRule.getLogger(ScriptAppenderSelectorTest.class); + static void verify(final Configuration config) { + assertNull(config.getAppender("List1"), "List1 appender should not be initialized"); + assertNull(config.getAppender("List2"), "List2 appender should not be initialized"); + final ListAppender listAppender = config.getAppender("SelectIt"); + assertNotNull(listAppender); + final ExtendedLogger logger = config.getLoggerContext().getLogger(ScriptAppenderSelectorTest.class); logger.error("Hello"); - final ListAppender listAppender = getListAppender(); - assertEquals("Incorrect number of events", 1, listAppender.getEvents().size()); + assertThat(listAppender.getEvents(), hasSize(1)); logger.error("World"); - assertEquals("Incorrect number of events", 2, listAppender.getEvents().size()); - logger.error(marker, "DEADBEEF"); - assertEquals("Incorrect number of events", 3, listAppender.getEvents().size()); - } - - @Test(expected = AssertionError.class) - public void testAppender1Absence() { - loggerContextRule.getListAppender("List1"); - } - - @Test(expected = AssertionError.class) - public void testAppender2Absence() { - loggerContextRule.getListAppender("List2"); + assertThat(listAppender.getEvents(), hasSize(2)); + logger.error(MarkerManager.getMarker("HEXDUMP"), "DEADBEEF"); + assertThat(listAppender.getEvents(), hasSize(3)); } - @Test - public void testAppenderPresence() { - getListAppender(); - } - - @Test - public void testLogging1() { - logAndCheck(); - } - - @Test - public void testLogging2() { - logAndCheck(); - } } diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/SocketAppenderBuilderTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/SocketAppenderBuilderTest.java index bdfd35a..3636af3 100644 --- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/SocketAppenderBuilderTest.java +++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/SocketAppenderBuilderTest.java @@ -16,9 +16,9 @@ */ package org.apache.logging.log4j.core.appender; -import org.apache.logging.log4j.core.appender.SocketAppender; -import org.junit.Assert; -import org.junit.Test; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertTrue; public class SocketAppenderBuilderTest { @@ -27,6 +27,7 @@ public class SocketAppenderBuilderTest { */ @Test public void testDefaultImmediateFlush() { - Assert.assertTrue(SocketAppender.newBuilder().isImmediateFlush()); + assertTrue(SocketAppender.newBuilder().isImmediateFlush(), + "Regression of LOG4J2-1620: default value for immediateFlush should be true"); } } diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/TlsSyslogFrameTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/TlsSyslogFrameTest.java index 887ba99..a1df85a 100644 --- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/TlsSyslogFrameTest.java +++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/TlsSyslogFrameTest.java @@ -19,8 +19,10 @@ package org.apache.logging.log4j.core.appender; import java.nio.charset.StandardCharsets; import org.apache.logging.log4j.util.Chars; -import org.junit.Assert; -import org.junit.Test; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotEquals; public class TlsSyslogFrameTest { private static final String TEST_MESSAGE = "The quick brown fox jumps over the lazy dog"; @@ -29,16 +31,16 @@ public class TlsSyslogFrameTest { public void equals() { final TlsSyslogFrame first = new TlsSyslogFrame(TEST_MESSAGE); final TlsSyslogFrame second = new TlsSyslogFrame(TEST_MESSAGE); - Assert.assertEquals(first, second); - Assert.assertEquals(first.hashCode(), second.hashCode()); + assertEquals(first, second); + assertEquals(first.hashCode(), second.hashCode()); } @Test public void notEquals() { final TlsSyslogFrame first = new TlsSyslogFrame("A message"); final TlsSyslogFrame second = new TlsSyslogFrame("B message"); - Assert.assertNotEquals(first, second); - Assert.assertNotEquals(first.hashCode(), second.hashCode()); + assertNotEquals(first, second); + assertNotEquals(first.hashCode(), second.hashCode()); } @Test @@ -46,6 +48,6 @@ public class TlsSyslogFrameTest { final TlsSyslogFrame frame = new TlsSyslogFrame(TEST_MESSAGE); final int length = TEST_MESSAGE.getBytes(StandardCharsets.UTF_8).length; final String expected = Integer.toString(length) + Chars.SPACE + TEST_MESSAGE; - Assert.assertEquals(expected, frame.toString()); + assertEquals(expected, frame.toString()); } } \ No newline at end of file diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/WriterAppenderTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/WriterAppenderTest.java index dd4b8e0..392862e 100644 --- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/WriterAppenderTest.java +++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/WriterAppenderTest.java @@ -1,109 +1,115 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache license, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the license for the specific language governing permissions and - * limitations under the license. - */ -package org.apache.logging.log4j.core.appender; - -import java.io.ByteArrayOutputStream; -import java.io.CharArrayWriter; -import java.io.OutputStreamWriter; -import java.io.PrintWriter; -import java.io.StringWriter; -import java.io.Writer; -import java.sql.SQLException; - -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; -import org.apache.logging.log4j.core.Appender; -import org.apache.logging.log4j.core.LoggerContext; -import org.apache.logging.log4j.core.config.Configuration; -import org.apache.logging.log4j.core.layout.PatternLayout; -import org.junit.Assert; -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.TestName; - -/** - * Tests {@link WriterAppender}. - */ -public class WriterAppenderTest { - - private static final String TEST_MSG = "FOO ERROR"; - - @Rule - public TestName testName = new TestName(); - - private String getName(final Writer writer) { - return writer.getClass().getSimpleName() + "." + testName.getMethodName(); - } - - private void test(final ByteArrayOutputStream out, final Writer writer) throws SQLException { - final String name = getName(writer); - addAppender(writer, name); - final Logger logger = LogManager.getLogger(name); - logger.error(TEST_MSG); - final String actual = out.toString(); - Assert.assertTrue(actual, actual.contains(TEST_MSG)); - } - - private void test(final Writer writer) throws SQLException { - final String name = getName(writer); - addAppender(writer, name); - final Logger logger = LogManager.getLogger(name); - logger.error(TEST_MSG); - final String actual = writer.toString(); - Assert.assertTrue(actual, actual.contains(TEST_MSG)); - } - - private void addAppender(final Writer writer, final String writerName) { - final LoggerContext context = LoggerContext.getContext(false); - final Configuration config = context.getConfiguration(); - final PatternLayout layout = PatternLayout.createDefaultLayout(config); - final Appender appender = WriterAppender.createAppender(layout, null, writer, writerName, false, true); - appender.start(); - config.addAppender(appender); - ConfigurationTestUtils.updateLoggers(appender, config); - } - - @Test - public void testWriterAppenderToCharArrayWriter() throws SQLException { - test(new CharArrayWriter()); - } - - @Test - public void testWriterAppenderToOutputStreamWriter() throws SQLException { - final ByteArrayOutputStream out = new ByteArrayOutputStream(); - final Writer writer = new OutputStreamWriter(out); - test(out, writer); - } - - @Test - public void testWriterAppenderToPrintWriter() throws SQLException { - final ByteArrayOutputStream out = new ByteArrayOutputStream(); - final Writer writer = new PrintWriter(out); - test(out, writer); - } - - @Test - public void testWriterAppenderToStringWriter() throws SQLException { - test(new StringWriter()); - } - - @Test - public void testBuilder() { - // This should compile - WriterAppender.newBuilder().setTarget(new StringWriter()).setName("testWriterAppender").build(); - } -} +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache license, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the license for the specific language governing permissions and + * limitations under the license. + */ +package org.apache.logging.log4j.core.appender; + +import java.io.ByteArrayOutputStream; +import java.io.CharArrayWriter; +import java.io.OutputStreamWriter; +import java.io.PrintWriter; +import java.io.StringWriter; +import java.io.Writer; +import java.lang.reflect.Method; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.core.Appender; +import org.apache.logging.log4j.core.LoggerContext; +import org.apache.logging.log4j.core.config.Configuration; +import org.apache.logging.log4j.core.layout.PatternLayout; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestInfo; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.containsString; + +/** + * Tests {@link WriterAppender}. + */ +public class WriterAppenderTest { + + private static final String TEST_MSG = "FOO ERROR"; + + private String testMethodName; + + @BeforeEach + void setUp(final TestInfo testInfo) { + testMethodName = testInfo.getTestMethod().map(Method::getName).orElseGet(testInfo::getDisplayName); + } + + private String getName(final Writer writer) { + return writer.getClass().getSimpleName() + "." + testMethodName; + } + + private void test(final ByteArrayOutputStream out, final Writer writer) { + final String name = getName(writer); + addAppender(writer, name); + final Logger logger = LogManager.getLogger(name); + logger.error(TEST_MSG); + final String actual = out.toString(); + assertThat(actual, containsString(TEST_MSG)); + } + + private void test(final Writer writer) { + final String name = getName(writer); + addAppender(writer, name); + final Logger logger = LogManager.getLogger(name); + logger.error(TEST_MSG); + final String actual = writer.toString(); + assertThat(actual, containsString(TEST_MSG)); + } + + private void addAppender(final Writer writer, final String writerName) { + final LoggerContext context = LoggerContext.getContext(false); + final Configuration config = context.getConfiguration(); + final PatternLayout layout = PatternLayout.createDefaultLayout(config); + final Appender appender = WriterAppender.createAppender(layout, null, writer, writerName, false, true); + appender.start(); + config.addAppender(appender); + ConfigurationTestUtils.updateLoggers(appender, config); + } + + @Test + public void testWriterAppenderToCharArrayWriter() { + test(new CharArrayWriter()); + } + + @Test + public void testWriterAppenderToOutputStreamWriter() { + final ByteArrayOutputStream out = new ByteArrayOutputStream(); + final Writer writer = new OutputStreamWriter(out); + test(out, writer); + } + + @Test + public void testWriterAppenderToPrintWriter() { + final ByteArrayOutputStream out = new ByteArrayOutputStream(); + final Writer writer = new PrintWriter(out); + test(out, writer); + } + + @Test + public void testWriterAppenderToStringWriter() { + test(new StringWriter()); + } + + @Test + public void testBuilder() { + // This should compile + WriterAppender.newBuilder().setTarget(new StringWriter()).setName("testWriterAppender").build(); + } +}