diff --git a/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/SystemPropertyTestRule.java b/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/SystemPropertyTestRule.java deleted file mode 100644 index 18f68a94a7b..00000000000 --- a/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/SystemPropertyTestRule.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - * 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.test; - -import java.util.Objects; -import java.util.function.Supplier; -import org.junit.rules.TestRule; -import org.junit.runner.Description; -import org.junit.runners.model.Statement; - -/** - * A JUnit TestRule to set and reset a system property during a test. - */ -public class SystemPropertyTestRule implements TestRule { - - public static SystemPropertyTestRule create(final String name, final String value) { - return new SystemPropertyTestRule(name, value); - } - - private final String name; - private final Supplier valueSupplier; - private String value; - - protected SystemPropertyTestRule(final String name, final String value) { - this(name, () -> value); - } - - protected SystemPropertyTestRule(final String name, final Supplier value) { - this.name = Objects.requireNonNull(name, "name"); - this.valueSupplier = value; - } - - @Override - public Statement apply(final Statement base, final Description description) { - return new Statement() { - - @Override - public void evaluate() throws Throwable { - final String oldValue = System.getProperty(name); - try { - value = valueSupplier.get(); - System.setProperty(name, value); - base.evaluate(); - } finally { - // Restore if previously set - if (oldValue != null) { - System.setProperty(name, oldValue); - } - } - } - }; - } - - public String getName() { - return name; - } - - public String getValue() { - return value; - } - - public Supplier getValueSupplier() { - return valueSupplier; - } - - @Override - public String toString() { - // Value might be a secret... - return "SystemPropertyTestRule [name=" + name + "]"; - } -} diff --git a/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/junit/AbstractExternalFileCleaner.java b/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/junit/AbstractExternalFileCleaner.java index afac8b941be..50896353f11 100644 --- a/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/junit/AbstractExternalFileCleaner.java +++ b/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/junit/AbstractExternalFileCleaner.java @@ -16,6 +16,7 @@ */ package org.apache.logging.log4j.core.test.junit; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import java.io.File; import java.io.IOException; import java.io.PrintStream; @@ -28,13 +29,17 @@ import java.util.Map; import java.util.Set; import org.junit.Assert; +import org.junit.jupiter.api.extension.AfterEachCallback; +import org.junit.jupiter.api.extension.BeforeEachCallback; +import org.junit.jupiter.api.extension.ExtensionContext; import org.junit.rules.ExternalResource; /** * This class should not perform logging using Log4j to avoid accidentally * loading or re-loading Log4j configurations. */ -public abstract class AbstractExternalFileCleaner extends ExternalResource { +public abstract class AbstractExternalFileCleaner extends ExternalResource + implements BeforeEachCallback, AfterEachCallback { protected static final String CLEANER_MARKER = "CLEANER"; @@ -90,6 +95,11 @@ public AbstractExternalFileCleaner( } } + @Override + public void afterEach(ExtensionContext context) { + after(); + } + @Override protected void after() { if (cleanAfter()) { @@ -97,6 +107,11 @@ protected void after() { } } + @Override + public void beforeEach(ExtensionContext context) { + before(); + } + @Override protected void before() { if (cleanBefore()) { @@ -181,6 +196,7 @@ protected void println(final String msg) { } } + @SuppressFBWarnings("INFORMATION_EXPOSURE_THROUGH_AN_ERROR_MESSAGE") protected void printStackTrace(final Throwable t) { if (printStream != null) { t.printStackTrace(printStream); diff --git a/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/junit/CleanFoldersRuleExtension.java b/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/junit/CleanFoldersRuleExtension.java new file mode 100644 index 00000000000..eae3b1a16c2 --- /dev/null +++ b/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/junit/CleanFoldersRuleExtension.java @@ -0,0 +1,88 @@ +/* + * 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.test.junit; + +import java.util.concurrent.TimeUnit; +import org.apache.logging.log4j.core.LoggerContext; +import org.apache.logging.log4j.core.config.Configurator; +import org.apache.logging.log4j.status.StatusLogger; +import org.junit.jupiter.api.extension.AfterEachCallback; +import org.junit.jupiter.api.extension.BeforeEachCallback; +import org.junit.jupiter.api.extension.ExtensionContext; +import org.junit.jupiter.api.extension.ParameterContext; +import org.junit.jupiter.api.extension.ParameterResolutionException; +import org.junit.jupiter.api.extension.ParameterResolver; + +public class CleanFoldersRuleExtension implements BeforeEachCallback, AfterEachCallback, ParameterResolver { + + private final String CONFIG; + private final String ClassName; + private final ClassLoader ClassNameLoader; + private LoggerContext context; + private CleanFolders cleanFolders; + + public CleanFoldersRuleExtension( + final String DIR, final String CONFIG, final String ClassName, final ClassLoader ClassNameLoader) { + this.CONFIG = CONFIG; + this.ClassName = ClassName; + this.ClassNameLoader = ClassNameLoader; + this.cleanFolders = new CleanFolders(DIR); + } + + public CleanFoldersRuleExtension( + final String DIR, + final String CONFIG, + final String ClassName, + final ClassLoader ClassNameLoader, + final boolean before, + final boolean after, + final int maxTries) { + this.CONFIG = CONFIG; + this.ClassName = ClassName; + this.ClassNameLoader = ClassNameLoader; + this.cleanFolders = new CleanFolders(before, after, maxTries, DIR); + } + + @Override + public void beforeEach(final ExtensionContext ctx) throws Exception { + this.cleanFolders.beforeEach(ctx); + this.context = Configurator.initialize(ClassName, ClassNameLoader, CONFIG); + } + + @Override + public void afterEach(final ExtensionContext ctx) throws Exception { + if (this.context != null) { + Configurator.shutdown(this.context, 10, TimeUnit.SECONDS); + StatusLogger.getLogger().reset(); + } + this.cleanFolders.afterEach(ctx); + } + + @Override + public boolean supportsParameter(final ParameterContext parameterContext, final ExtensionContext extensionContext) + throws ParameterResolutionException { + // Check if the parameter is of type LoggerContext + return parameterContext.getParameter().getType().equals(LoggerContext.class); + } + + @Override + public Object resolveParameter(final ParameterContext parameterContext, final ExtensionContext extensionContext) + throws ParameterResolutionException { + // Return the LoggerContext instance + return this.context; + } +} diff --git a/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/layout/Log4j2_1482_Test.java b/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/layout/Log4j2_1482_Test.java index 79f8bbd17f9..6a60148f828 100644 --- a/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/layout/Log4j2_1482_Test.java +++ b/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/layout/Log4j2_1482_Test.java @@ -16,6 +16,8 @@ */ package org.apache.logging.log4j.core.test.layout; +import static org.junit.jupiter.api.Assertions.fail; + import java.io.File; import java.io.IOException; import java.nio.charset.Charset; @@ -26,23 +28,28 @@ import java.util.List; import org.apache.logging.log4j.core.LoggerContext; import org.apache.logging.log4j.core.config.Configurator; -import org.apache.logging.log4j.core.test.categories.Layouts; -import org.apache.logging.log4j.core.test.junit.CleanFolders; -import org.junit.Assert; -import org.junit.Rule; -import org.junit.Test; -import org.junit.experimental.categories.Category; +import org.apache.logging.log4j.core.test.junit.CleanFoldersRuleExtension; +import org.junit.jupiter.api.Tag; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.RegisterExtension; /** * Tests https://issues.apache.org/jira/browse/LOG4J2-1482 */ -@Category(Layouts.Csv.class) +@Tag("Layouts.Csv") public abstract class Log4j2_1482_Test { static final String CONFIG_LOCATION = "log4j2-1482.xml"; static final String FOLDER = "target/log4j2-1482"; + @RegisterExtension + private CleanFoldersRuleExtension cleanFolders = new CleanFoldersRuleExtension( + FOLDER, + CONFIG_LOCATION, + Log4j2_1482_Test.class.getName(), + this.getClass().getClassLoader()); + private static final int LOOP_COUNT = 10; static void assertFileContents(final int runNumber) throws IOException { @@ -56,15 +63,11 @@ static void assertFileContents(final int runNumber) throws IOException { final File[] files = folder.toFile().listFiles(); Arrays.sort(files); System.out.println("Run " + runNumber + ": " + Arrays.toString(files)); - Assert.fail( - String.format("Run %,d, line %,d of %,d: \"%s\" in %s", runNumber, i++, size, string, lines)); + fail(String.format("Run %,d, line %,d of %,d: \"%s\" in %s", runNumber, i++, size, string, lines)); } } } - @Rule - public CleanFolders cleanFolders = new CleanFolders(FOLDER); - protected abstract void log(int runNumber); private void loopingRun(final int loopCount) throws IOException { diff --git a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/db/AbstractDatabaseAppenderTest.java b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/db/AbstractDatabaseAppenderTest.java index 80808a5adf3..c2d39d47094 100644 --- a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/db/AbstractDatabaseAppenderTest.java +++ b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/db/AbstractDatabaseAppenderTest.java @@ -16,9 +16,9 @@ */ package org.apache.logging.log4j.core.appender.db; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertSame; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertSame; import static org.mockito.ArgumentMatchers.same; import static org.mockito.BDDMockito.given; import static org.mockito.BDDMockito.then; @@ -29,12 +29,12 @@ import org.apache.logging.log4j.core.Filter; import org.apache.logging.log4j.core.LogEvent; import org.apache.logging.log4j.core.config.Property; -import org.junit.Test; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Mock; -import org.mockito.junit.MockitoJUnitRunner; +import org.mockito.junit.jupiter.MockitoExtension; -@RunWith(MockitoJUnitRunner.class) +@ExtendWith(MockitoExtension.class) public class AbstractDatabaseAppenderTest { private static class LocalAbstractDatabaseAppender extends AbstractDatabaseAppender { @@ -85,16 +85,16 @@ public void testAppend() { public void testNameAndGetLayout01() { setUp("testName01"); - assertEquals("The name is not correct.", "testName01", appender.getName()); - assertNull("The layout should always be null.", appender.getLayout()); + assertEquals("testName01", appender.getName(), "The name is not correct."); + assertNull(appender.getLayout(), "The layout should always be null."); } @Test public void testNameAndGetLayout02() { setUp("anotherName02"); - assertEquals("The name is not correct.", "anotherName02", appender.getName()); - assertNull("The layout should always be null.", appender.getLayout()); + assertEquals("anotherName02", appender.getName(), "The name is not correct."); + assertNull(appender.getLayout(), "The layout should always be null."); } @Test @@ -102,7 +102,7 @@ public void testReplaceManager() throws Exception { setUp("name"); final LocalAbstractDatabaseManager oldManager = appender.getManager(); - assertSame("The manager should be the same.", manager, oldManager); + assertSame(manager, oldManager, "The manager should be the same."); final LocalAbstractDatabaseManager newManager = mock(LocalAbstractDatabaseManager.class); appender.replaceManager(newManager); diff --git a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/nosql/NoSqlDatabaseManagerTest.java b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/nosql/NoSqlDatabaseManagerTest.java index 2f8114c6229..c6010e5add9 100644 --- a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/nosql/NoSqlDatabaseManagerTest.java +++ b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/nosql/NoSqlDatabaseManagerTest.java @@ -16,16 +16,18 @@ */ package org.apache.logging.log4j.core.appender.nosql; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.BDDMockito.given; import static org.mockito.BDDMockito.then; import static org.mockito.Mockito.mock; import java.io.IOException; +// import java.sql.SQLException; import java.util.Collection; import java.util.Date; import java.util.HashMap; @@ -39,21 +41,22 @@ import org.apache.logging.log4j.core.impl.ContextDataFactory; import org.apache.logging.log4j.core.impl.Log4jLogEvent; import org.apache.logging.log4j.message.Message; -import org.apache.logging.log4j.test.junit.ThreadContextStackRule; -import org.junit.Before; -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.ExpectedException; -import org.junit.runner.RunWith; +import org.apache.logging.log4j.test.junit.UsingAnyThreadContext; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.ArgumentCaptor; import org.mockito.Captor; import org.mockito.Mock; -import org.mockito.invocation.InvocationOnMock; -import org.mockito.junit.MockitoJUnitRunner; -import org.mockito.stubbing.Answer; +import org.mockito.junit.jupiter.MockitoExtension; +import org.mockito.junit.jupiter.MockitoSettings; +import org.mockito.quality.Strictness; -@RunWith(MockitoJUnitRunner.class) +@ExtendWith(MockitoExtension.class) +@MockitoSettings(strictness = Strictness.LENIENT) +@UsingAnyThreadContext public class NoSqlDatabaseManagerTest { + @Mock private NoSqlConnection, DefaultNoSqlObject> connection; @@ -66,27 +69,12 @@ public class NoSqlDatabaseManagerTest { @Captor private ArgumentCaptor>> captor; - @Rule - public final ThreadContextStackRule threadContextRule = new ThreadContextStackRule(); - - @Rule - public final ExpectedException expectedException = ExpectedException.none(); - - @Before + @BeforeEach public void setUp() { given(provider.getConnection()).willReturn(connection); - given(connection.createObject()).willAnswer(new Answer() { - @Override - public DefaultNoSqlObject answer(final InvocationOnMock invocation) throws Throwable { - return new DefaultNoSqlObject(); - } - }); - given(connection.createList(anyInt())).willAnswer(new Answer() { - @Override - public DefaultNoSqlObject[] answer(final InvocationOnMock invocation) throws Throwable { - return new DefaultNoSqlObject[invocation.getArgument(0)]; - } - }); + given(connection.createObject()).willAnswer(invocation -> new DefaultNoSqlObject()); + given(connection.createList(anyInt())) + .willAnswer(invocation -> new DefaultNoSqlObject[invocation.getArgument(0)]); } @Test @@ -94,7 +82,7 @@ public void testConnection() { try (final NoSqlDatabaseManager manager = NoSqlDatabaseManager.getNoSqlDatabaseManager("name", 0, provider, null, null)) { - assertNotNull("The manager should not be null.", manager); + assertNotNull(manager, "The manager should not be null."); manager.connectAndStart(); then(provider).should().getConnection(); @@ -106,8 +94,7 @@ public void testConnection() { public void testWriteInternalNotConnected01() { try (final NoSqlDatabaseManager manager = NoSqlDatabaseManager.getNoSqlDatabaseManager("name", 0, provider, null, null)) { - expectedException.expect(AppenderLoggingException.class); - manager.writeInternal(mock(LogEvent.class)); + assertThrows(AppenderLoggingException.class, () -> manager.writeInternal(mock(LogEvent.class))); } } @@ -122,8 +109,7 @@ public void testWriteInternalNotConnected02() { manager.connectAndStart(); then(provider).should().getConnection(); - expectedException.expect(AppenderLoggingException.class); - manager.writeInternal(mock(LogEvent.class)); + assertThrows(AppenderLoggingException.class, () -> manager.writeInternal(mock(LogEvent.class))); } } @@ -154,33 +140,33 @@ public void testWriteInternal01() { then(connection).should().insertObject(captor.capture()); final NoSqlObject> inserted = captor.getValue(); - assertNotNull("The inserted value should not be null.", inserted); + assertNotNull(inserted, "The inserted value should not be null."); final Map object = inserted.unwrap(); - assertNotNull("The unwrapped object should not be null.", object); + assertNotNull(object, "The unwrapped object should not be null."); - assertEquals("The level is not correct.", Level.WARN, object.get("level")); + assertEquals(Level.WARN, object.get("level"), "The level is not correct."); assertEquals( - "The logger is not correct.", "com.foo.NoSQLDbTest.testWriteInternal01", object.get("loggerName")); - assertEquals("The message is not correct.", "My formatted message 01.", object.get("message")); - assertEquals("The thread is not correct.", "MyThread-A", object.get("threadName")); - assertEquals("The millis is not correct.", 1234567890123L, object.get("millis")); - assertEquals("The date is not correct.", 1234567890123L, ((Date) object.get("date")).getTime()); + "com.foo.NoSQLDbTest.testWriteInternal01", object.get("loggerName"), "The logger is not correct."); + assertEquals("My formatted message 01.", object.get("message"), "The message is not correct."); + assertEquals("MyThread-A", object.get("threadName"), "The thread is not correct."); + assertEquals(1234567890123L, object.get("millis"), "The millis is not correct."); + assertEquals(1234567890123L, ((Date) object.get("date")).getTime(), "The date is not correct."); - assertTrue("The source should be a map.", object.get("source") instanceof Map); + assertTrue(object.get("source") instanceof Map, "The source should be a map."); @SuppressWarnings("unchecked") final Map source = (Map) object.get("source"); - assertEquals("The class is not correct.", "com.foo.Bar", source.get("className")); - assertEquals("The method is not correct.", "testMethod01", source.get("methodName")); - assertEquals("The file name is not correct.", "Bar.java", source.get("fileName")); - assertEquals("The line number is not correct.", 15, source.get("lineNumber")); + assertEquals("com.foo.Bar", source.get("className"), "The class is not correct."); + assertEquals("testMethod01", source.get("methodName"), "The method is not correct."); + assertEquals("Bar.java", source.get("fileName"), "The file name is not correct."); + assertEquals(15, source.get("lineNumber"), "The line number is not correct."); - assertNull("The marker should be null.", object.get("marker")); + assertNull(object.get("marker"), "The marker should be null."); - assertNull("The thrown should be null.", object.get("thrown")); + assertNull(object.get("thrown"), "The thrown should be null."); - assertTrue("The context map should be empty.", ((Map) object.get("contextMap")).isEmpty()); + assertTrue(((Map) object.get("contextMap")).isEmpty(), "The context map should be empty."); - assertTrue("The context stack should be null.", ((Collection) object.get("contextStack")).isEmpty()); + assertTrue(((Collection) object.get("contextStack")).isEmpty(), "The context stack should be null."); } } @@ -225,62 +211,62 @@ public void testWriteInternal02() { then(connection).should().insertObject(captor.capture()); final NoSqlObject> inserted = captor.getValue(); - assertNotNull("The inserted value should not be null.", inserted); + assertNotNull(inserted, "The inserted value should not be null."); final Map object = inserted.unwrap(); - assertNotNull("The unwrapped object should not be null.", object); + assertNotNull(object, "The unwrapped object should not be null."); - assertEquals("The level is not correct.", Level.DEBUG, object.get("level")); + assertEquals(Level.DEBUG, object.get("level"), "The level is not correct."); assertEquals( - "The logger is not correct.", "com.foo.NoSQLDbTest.testWriteInternal02", object.get("loggerName")); - assertEquals("The message is not correct.", "Another cool message 02.", object.get("message")); - assertEquals("The thread is not correct.", "AnotherThread-B", object.get("threadName")); - assertEquals("The millis is not correct.", 987654321564L, object.get("millis")); - assertEquals("The date is not correct.", 987654321564L, ((Date) object.get("date")).getTime()); + "com.foo.NoSQLDbTest.testWriteInternal02", object.get("loggerName"), "The logger is not correct."); + assertEquals("Another cool message 02.", object.get("message"), "The message is not correct."); + assertEquals("AnotherThread-B", object.get("threadName"), "The thread is not correct."); + assertEquals(987654321564L, object.get("millis"), "The millis is not correct."); + assertEquals(987654321564L, ((Date) object.get("date")).getTime(), "The date is not correct."); - assertTrue("The source should be a map.", object.get("source") instanceof Map); + assertTrue(object.get("source") instanceof Map, "The source should be a map."); @SuppressWarnings("unchecked") final Map source = (Map) object.get("source"); - assertEquals("The class is not correct.", "com.bar.Foo", source.get("className")); - assertEquals("The method is not correct.", "anotherMethod03", source.get("methodName")); - assertEquals("The file name is not correct.", "Foo.java", source.get("fileName")); - assertEquals("The line number is not correct.", 9, source.get("lineNumber")); + assertEquals("com.bar.Foo", source.get("className"), "The class is not correct."); + assertEquals("anotherMethod03", source.get("methodName"), "The method is not correct."); + assertEquals("Foo.java", source.get("fileName"), "The file name is not correct."); + assertEquals(9, source.get("lineNumber"), "The line number is not correct."); - assertTrue("The marker should be a map.", object.get("marker") instanceof Map); + assertTrue(object.get("marker") instanceof Map, "The marker should be a map."); @SuppressWarnings("unchecked") final Map marker = (Map) object.get("marker"); - assertEquals("The marker name is not correct.", "LoneMarker", marker.get("name")); - assertNull("The marker parent should be null.", marker.get("parent")); + assertEquals("LoneMarker", marker.get("name"), "The marker name is not correct."); + assertNull(marker.get("parent"), "The marker parent should be null."); - assertTrue("The thrown should be a map.", object.get("thrown") instanceof Map); + assertTrue(object.get("thrown") instanceof Map, "The thrown should be a map."); @SuppressWarnings("unchecked") final Map thrown = (Map) object.get("thrown"); - assertEquals("The thrown type is not correct.", "java.lang.RuntimeException", thrown.get("type")); - assertEquals("The thrown message is not correct.", "This is something cool!", thrown.get("message")); - assertTrue("The thrown stack trace should be a list.", thrown.get("stackTrace") instanceof List); + assertEquals("java.lang.RuntimeException", thrown.get("type"), "The thrown type is not correct."); + assertEquals("This is something cool!", thrown.get("message"), "The thrown message is not correct."); + assertTrue(thrown.get("stackTrace") instanceof List, "The thrown stack trace should be a list."); @SuppressWarnings("unchecked") final List> stackTrace = (List>) thrown.get("stackTrace"); assertEquals( - "The thrown stack trace length is not correct.", exception.getStackTrace().length, - stackTrace.size()); + stackTrace.size(), + "The thrown stack trace length is not correct."); for (int i = 0; i < exception.getStackTrace().length; i++) { final StackTraceElement e1 = exception.getStackTrace()[i]; final Map e2 = stackTrace.get(i); - assertEquals("Element class name [" + i + "] is not correct.", e1.getClassName(), e2.get("className")); + assertEquals(e1.getClassName(), e2.get("className"), "Element class name [" + i + "] is not correct."); assertEquals( - "Element method name [" + i + "] is not correct.", e1.getMethodName(), e2.get("methodName")); - assertEquals("Element file name [" + i + "] is not correct.", e1.getFileName(), e2.get("fileName")); + e1.getMethodName(), e2.get("methodName"), "Element method name [" + i + "] is not correct."); + assertEquals(e1.getFileName(), e2.get("fileName"), "Element file name [" + i + "] is not correct."); assertEquals( - "Element line number [" + i + "] is not correct.", e1.getLineNumber(), e2.get("lineNumber")); + e1.getLineNumber(), e2.get("lineNumber"), "Element line number [" + i + "] is not correct."); } - assertNull("The thrown should have no cause.", thrown.get("cause")); + assertNull(thrown.get("cause"), "The thrown should have no cause."); - assertTrue("The context map should be a map.", object.get("contextMap") instanceof Map); - assertEquals("The context map is not correct.", context, object.get("contextMap")); + assertTrue(object.get("contextMap") instanceof Map, "The context map should be a map."); + assertEquals(context, object.get("contextMap"), "The context map is not correct."); - assertTrue("The context stack should be list.", object.get("contextStack") instanceof List); - assertEquals("The context stack is not correct.", stack.asList(), object.get("contextStack")); + assertTrue(object.get("contextStack") instanceof List, "The context stack should be list."); + assertEquals(stack.asList(), object.get("contextStack"), "The context stack is not correct."); } } @@ -330,111 +316,111 @@ public void testWriteInternal03() { then(connection).should().insertObject(captor.capture()); final NoSqlObject> inserted = captor.getValue(); - assertNotNull("The inserted value should not be null.", inserted); + assertNotNull(inserted, "The inserted value should not be null."); final Map object = inserted.unwrap(); - assertNotNull("The unwrapped object should not be null.", object); + assertNotNull(object, "The unwrapped object should not be null."); - assertEquals("The level is not correct.", Level.DEBUG, object.get("level")); + assertEquals(Level.DEBUG, object.get("level"), "The level is not correct."); assertEquals( - "The logger is not correct.", "com.foo.NoSQLDbTest.testWriteInternal02", object.get("loggerName")); - assertEquals("The message is not correct.", "Another cool message 02.", object.get("message")); - assertEquals("The thread is not correct.", "AnotherThread-B", object.get("threadName")); - assertEquals("The millis is not correct.", 987654321564L, object.get("millis")); - assertEquals("The date is not correct.", 987654321564L, ((Date) object.get("date")).getTime()); + "com.foo.NoSQLDbTest.testWriteInternal02", object.get("loggerName"), "The logger is not correct."); + assertEquals("Another cool message 02.", object.get("message"), "The message is not correct."); + assertEquals("AnotherThread-B", object.get("threadName"), "The thread is not correct."); + assertEquals(987654321564L, object.get("millis"), "The millis is not correct."); + assertEquals(987654321564L, ((Date) object.get("date")).getTime(), "The date is not correct."); - assertTrue("The source should be a map.", object.get("source") instanceof Map); + assertTrue(object.get("source") instanceof Map, "The source should be a map."); @SuppressWarnings("unchecked") final Map source = (Map) object.get("source"); - assertEquals("The class is not correct.", "com.bar.Foo", source.get("className")); - assertEquals("The method is not correct.", "anotherMethod03", source.get("methodName")); - assertEquals("The file name is not correct.", "Foo.java", source.get("fileName")); - assertEquals("The line number is not correct.", 9, source.get("lineNumber")); + assertEquals("com.bar.Foo", source.get("className"), "The class is not correct."); + assertEquals("anotherMethod03", source.get("methodName"), "The method is not correct."); + assertEquals("Foo.java", source.get("fileName"), "The file name is not correct."); + assertEquals(9, source.get("lineNumber"), "The line number is not correct."); - assertTrue("The marker should be a map.", object.get("marker") instanceof Map); + assertTrue(object.get("marker") instanceof Map, "The marker should be a map."); @SuppressWarnings("unchecked") final Map marker = (Map) object.get("marker"); - assertEquals("The marker name is not correct.", "AnotherMarker", marker.get("name")); + assertEquals("AnotherMarker", marker.get("name"), "The marker name is not correct."); - assertTrue("The marker parents should be a list.", marker.get("parents") instanceof List); + assertTrue(marker.get("parents") instanceof List, "The marker parents should be a list."); @SuppressWarnings("unchecked") final List markerParents = (List) marker.get("parents"); - assertEquals("The marker parents should contain two parents", 2, markerParents.size()); + assertEquals(2, markerParents.size(), "The marker parents should contain two parents"); - assertTrue("The marker parents[0] should be a map.", markerParents.get(0) instanceof Map); + assertTrue(markerParents.get(0) instanceof Map, "The marker parents[0] should be a map."); @SuppressWarnings("unchecked") final Map parent1 = (Map) markerParents.get(0); - assertEquals("The first marker parent name is not correct.", "Parent1", parent1.get("name")); + assertEquals("Parent1", parent1.get("name"), "The first marker parent name is not correct."); - assertTrue("The marker parents[1] should be a map.", markerParents.get(1) instanceof Map); + assertTrue(markerParents.get(1) instanceof Map, "The marker parents[1] should be a map."); @SuppressWarnings("unchecked") final Map parent2 = (Map) markerParents.get(1); - assertEquals("The second marker parent name is not correct.", "Parent2", parent2.get("name")); - assertNull("The second marker should have no parent.", parent2.get("parent")); + assertEquals("Parent2", parent2.get("name"), "The second marker parent name is not correct."); + assertNull(parent2.get("parent"), "The second marker should have no parent."); - assertTrue("The parent1 parents should be a list.", parent1.get("parents") instanceof List); + assertTrue(parent1.get("parents") instanceof List, "The parent1 parents should be a list."); @SuppressWarnings("unchecked") final List parent1Parents = (List) parent1.get("parents"); - assertEquals("The parent1 parents should have only one parent", 1, parent1Parents.size()); + assertEquals(1, parent1Parents.size(), "The parent1 parents should have only one parent"); - assertTrue("The parent1Parents[0] should be a map.", parent1Parents.get(0) instanceof Map); + assertTrue(parent1Parents.get(0) instanceof Map, "The parent1Parents[0] should be a map."); @SuppressWarnings("unchecked") final Map parent1parent = (Map) parent1Parents.get(0); - assertEquals("The first parent1 parent name is not correct.", "GrandParent1", parent1parent.get("name")); - assertNull("The parent1parent marker should have no parent.", parent1parent.get("parent")); + assertEquals("GrandParent1", parent1parent.get("name"), "The first parent1 parent name is not correct."); + assertNull(parent1parent.get("parent"), "The parent1parent marker should have no parent."); - assertTrue("The thrown should be a map.", object.get("thrown") instanceof Map); + assertTrue(object.get("thrown") instanceof Map, "The thrown should be a map."); @SuppressWarnings("unchecked") final Map thrown = (Map) object.get("thrown"); - assertEquals("The thrown type is not correct.", "java.lang.IllegalStateException", thrown.get("type")); - assertEquals("The thrown message is not correct.", "This is the result.", thrown.get("message")); - assertTrue("The thrown stack trace should be a list.", thrown.get("stackTrace") instanceof List); + assertEquals("java.lang.IllegalStateException", thrown.get("type"), "The thrown type is not correct."); + assertEquals("This is the result.", thrown.get("message"), "The thrown message is not correct."); + assertTrue(thrown.get("stackTrace") instanceof List, "The thrown stack trace should be a list."); @SuppressWarnings("unchecked") final List> stackTrace = (List>) thrown.get("stackTrace"); assertEquals( - "The thrown stack trace length is not correct.", exception2.getStackTrace().length, - stackTrace.size()); + stackTrace.size(), + "The thrown stack trace length is not correct."); for (int i = 0; i < exception2.getStackTrace().length; i++) { final StackTraceElement e1 = exception2.getStackTrace()[i]; final Map e2 = stackTrace.get(i); - assertEquals("Element class name [" + i + "] is not correct.", e1.getClassName(), e2.get("className")); + assertEquals(e1.getClassName(), e2.get("className"), "Element class name [" + i + "] is not correct."); assertEquals( - "Element method name [" + i + "] is not correct.", e1.getMethodName(), e2.get("methodName")); - assertEquals("Element file name [" + i + "] is not correct.", e1.getFileName(), e2.get("fileName")); + e1.getMethodName(), e2.get("methodName"), "Element method name [" + i + "] is not correct."); + assertEquals(e1.getFileName(), e2.get("fileName"), "Element file name [" + i + "] is not correct."); assertEquals( - "Element line number [" + i + "] is not correct.", e1.getLineNumber(), e2.get("lineNumber")); + e1.getLineNumber(), e2.get("lineNumber"), "Element line number [" + i + "] is not correct."); } - assertTrue("The thrown cause should be a map.", thrown.get("cause") instanceof Map); + assertTrue(thrown.get("cause") instanceof Map, "The thrown cause should be a map."); @SuppressWarnings("unchecked") final Map cause = (Map) thrown.get("cause"); - assertEquals("The cause type is not correct.", "java.io.IOException", cause.get("type")); - assertEquals("The cause message is not correct.", "This is the cause.", cause.get("message")); - assertTrue("The cause stack trace should be a list.", cause.get("stackTrace") instanceof List); + assertEquals("java.io.IOException", cause.get("type"), "The cause type is not correct."); + assertEquals("This is the cause.", cause.get("message"), "The cause message is not correct."); + assertTrue(cause.get("stackTrace") instanceof List, "The cause stack trace should be a list."); @SuppressWarnings("unchecked") final List> causeStackTrace = (List>) cause.get("stackTrace"); assertEquals( - "The cause stack trace length is not correct.", exception1.getStackTrace().length, - causeStackTrace.size()); + causeStackTrace.size(), + "The cause stack trace length is not correct."); for (int i = 0; i < exception1.getStackTrace().length; i++) { final StackTraceElement e1 = exception1.getStackTrace()[i]; final Map e2 = causeStackTrace.get(i); - assertEquals("Element class name [" + i + "] is not correct.", e1.getClassName(), e2.get("className")); + assertEquals(e1.getClassName(), e2.get("className"), "Element class name [" + i + "] is not correct."); assertEquals( - "Element method name [" + i + "] is not correct.", e1.getMethodName(), e2.get("methodName")); - assertEquals("Element file name [" + i + "] is not correct.", e1.getFileName(), e2.get("fileName")); + e1.getMethodName(), e2.get("methodName"), "Element method name [" + i + "] is not correct."); + assertEquals(e1.getFileName(), e2.get("fileName"), "Element file name [" + i + "] is not correct."); assertEquals( - "Element line number [" + i + "] is not correct.", e1.getLineNumber(), e2.get("lineNumber")); + e1.getLineNumber(), e2.get("lineNumber"), "Element line number [" + i + "] is not correct."); } - assertNull("The cause should have no cause.", cause.get("cause")); + assertNull(cause.get("cause"), "The cause should have no cause."); - assertTrue("The context map should be a map.", object.get("contextMap") instanceof Map); - assertEquals("The context map is not correct.", context, object.get("contextMap")); + assertTrue(object.get("contextMap") instanceof Map, "The context map should be a map."); + assertEquals(context, object.get("contextMap"), "The context map is not correct."); - assertTrue("The context stack should be list.", object.get("contextStack") instanceof List); - assertEquals("The context stack is not correct.", stack.asList(), object.get("contextStack")); + assertTrue(object.get("contextStack") instanceof List, "The context stack should be list."); + assertEquals(stack.asList(), object.get("contextStack"), "The context stack is not correct."); } } } diff --git a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderCronAndSizeLookupTest.java b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderCronAndSizeLookupTest.java index c878ec3520c..fd7a6cb89b3 100644 --- a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderCronAndSizeLookupTest.java +++ b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderCronAndSizeLookupTest.java @@ -18,22 +18,22 @@ 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.Assert.assertNotNull; -import static org.junit.Assert.assertNotSame; -import static org.junit.Assert.assertThat; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNotSame; +import static org.junit.jupiter.api.Assertions.assertTrue; import java.io.File; import java.util.Arrays; import java.util.Random; import org.apache.logging.log4j.Logger; -import org.apache.logging.log4j.core.test.junit.LoggerContextRule; -import org.junit.Before; -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.RuleChain; +import org.apache.logging.log4j.core.LoggerContext; +import org.apache.logging.log4j.core.test.junit.CleanFoldersRuleExtension; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.RegisterExtension; /** * LOG4J2-1804. @@ -44,17 +44,18 @@ public class RollingAppenderCronAndSizeLookupTest { private static final String DIR = "target/rolling-cron-size-lookup"; - public static LoggerContextRule loggerContextRule = - LoggerContextRule.createShutdownTimeoutLoggerContextRule(CONFIG); - - @Rule - public RuleChain chain = loggerContextRule.withCleanFoldersRule(DIR); + @RegisterExtension + CleanFoldersRuleExtension extension = new CleanFoldersRuleExtension( + DIR, + CONFIG, + RollingAppenderCronAndSizeLookupTest.class.getName(), + this.getClass().getClassLoader()); private Logger logger; - @Before - public void setUp() throws Exception { - this.logger = loggerContextRule.getLogger(RollingAppenderCronAndSizeLookupTest.class.getName()); + @BeforeEach + public void setUp(final LoggerContext loggerContext) { + this.logger = loggerContext.getLogger(RollingAppenderCronAndSizeLookupTest.class.getName()); } @Test @@ -69,7 +70,7 @@ public void testAppender() throws Exception { } Thread.sleep(50); final File dir = new File(DIR); - assertTrue("Directory not created", dir.exists() && dir.listFiles().length > 0); + assertTrue(dir.exists() && dir.listFiles().length > 0, "Directory not created"); final File[] files = dir.listFiles(); Arrays.sort(files); assertNotNull(files); @@ -79,7 +80,7 @@ public void testAppender() throws Exception { String previous = ""; for (final File file : files) { final String actual = file.getName(); - if (previous.length() == 0) { + if (previous.isEmpty()) { previous = actual; } else { assertNotSame("File names snould not be equal", previous, actual); diff --git a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDirectWriteStartupSizeTest.java b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDirectWriteStartupSizeTest.java index 92562cf4182..5e60c20fa01 100644 --- a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDirectWriteStartupSizeTest.java +++ b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDirectWriteStartupSizeTest.java @@ -16,16 +16,19 @@ */ package org.apache.logging.log4j.core.appender.rolling; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; + import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import org.apache.logging.log4j.core.appender.RollingFileAppender; -import org.apache.logging.log4j.core.test.junit.CleanFolders; -import org.apache.logging.log4j.core.test.junit.LoggerContextRule; -import org.junit.Assert; -import org.junit.BeforeClass; -import org.junit.Rule; -import org.junit.Test; +import org.apache.logging.log4j.core.test.junit.CleanFoldersRuleExtension; +import org.apache.logging.log4j.core.test.junit.LoggerContextSource; +import org.apache.logging.log4j.core.test.junit.Named; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.RegisterExtension; /** * Test LOG4J2-2485. @@ -40,14 +43,18 @@ public class RollingAppenderDirectWriteStartupSizeTest { private static final String MESSAGE = "test message"; - @Rule - public LoggerContextRule loggerContextRule = LoggerContextRule.createShutdownTimeoutLoggerContextRule(CONFIG); - - @Rule - public CleanFolders cleanFolders = new CleanFolders(false, true, 10, DIR); + @RegisterExtension + private CleanFoldersRuleExtension cleanFolders = new CleanFoldersRuleExtension( + DIR, + CONFIG, + RollingAppenderDirectWriteStartupSizeTest.class.getName(), + this.getClass().getClassLoader(), + false, + true, + 10); - @BeforeClass - public static void beforeClass() throws Exception { + @BeforeAll + public static void beforeAll() throws Exception { final Path log = Paths.get(DIR, FILE); if (Files.exists(log)) { Files.delete(log); @@ -59,12 +66,11 @@ public static void beforeClass() throws Exception { } @Test - public void testRollingFileAppenderWithReconfigure() throws Exception { - final RollingFileAppender rfAppender = - loggerContextRule.getRequiredAppender("RollingFile", RollingFileAppender.class); + @LoggerContextSource(value = CONFIG, timeout = 10) + public void testRollingFileAppenderWithReconfigure(@Named("RollingFile") RollingFileAppender rfAppender) { final RollingFileManager manager = rfAppender.getManager(); - Assert.assertNotNull(manager); - Assert.assertEquals("Existing file size not preserved on startup", MESSAGE.getBytes().length, manager.size); + assertNotNull(manager); + assertEquals(MESSAGE.getBytes().length, manager.size, "Existing file size not preserved on startup"); } } diff --git a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDirectWriteWithFilenameTest.java b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDirectWriteWithFilenameTest.java index c445e747f48..525d8de4613 100644 --- a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDirectWriteWithFilenameTest.java +++ b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderDirectWriteWithFilenameTest.java @@ -16,15 +16,15 @@ */ package org.apache.logging.log4j.core.appender.rolling; -import static org.junit.Assert.assertFalse; +import static org.junit.jupiter.api.Assertions.assertFalse; import java.io.File; import org.apache.logging.log4j.Logger; -import org.apache.logging.log4j.core.test.junit.LoggerContextRule; -import org.junit.Before; -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.RuleChain; +import org.apache.logging.log4j.core.LoggerContext; +import org.apache.logging.log4j.core.test.junit.CleanFoldersRuleExtension; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.RegisterExtension; /** * @@ -32,25 +32,25 @@ public class RollingAppenderDirectWriteWithFilenameTest { private static final String CONFIG = "log4j2-rolling-1833.xml"; - private static final String DIR = "target/rolling-1833"; - public static LoggerContextRule loggerContextRule = - LoggerContextRule.createShutdownTimeoutLoggerContextRule(CONFIG); - - @Rule - public RuleChain chain = loggerContextRule.withCleanFoldersRule(DIR); - private Logger logger; - @Before - public void setUp() throws Exception { - this.logger = loggerContextRule.getLogger(RollingAppenderDirectWriteWithFilenameTest.class.getName()); + @RegisterExtension + CleanFoldersRuleExtension extension = new CleanFoldersRuleExtension( + DIR, + CONFIG, + RollingAppenderDirectWriteWithFilenameTest.class.getName(), + this.getClass().getClassLoader()); + + @BeforeEach + public void setUp(final LoggerContext loggerContext) { + this.logger = loggerContext.getLogger(RollingAppenderDirectWriteWithFilenameTest.class.getName()); } @Test - public void testAppender() throws Exception { + public void testAppender(LoggerContext context) { final File dir = new File(DIR); - assertFalse("Directory created", dir.exists()); + assertFalse(dir.exists(), "Directory created"); } } diff --git a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderNoUnconditionalDeleteTest.java b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderNoUnconditionalDeleteTest.java index f63cf7ab6c8..557c041b7e6 100644 --- a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderNoUnconditionalDeleteTest.java +++ b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderNoUnconditionalDeleteTest.java @@ -16,62 +16,35 @@ */ package org.apache.logging.log4j.core.appender.rolling; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; import java.io.File; import java.nio.charset.Charset; import java.nio.file.Files; -import java.util.Arrays; -import java.util.Collection; import java.util.List; import org.apache.logging.log4j.Logger; -import org.apache.logging.log4j.core.test.junit.LoggerContextRule; -import org.junit.Before; -import org.junit.Rule; -import org.junit.Test; +import org.apache.logging.log4j.core.LoggerContext; +import org.apache.logging.log4j.core.test.junit.LoggerContextSource; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Tag; -import org.junit.runner.RunWith; -import org.junit.runners.Parameterized; +import org.junit.jupiter.api.Test; /** * */ -@RunWith(Parameterized.class) @Tag("sleepy") public class RollingAppenderNoUnconditionalDeleteTest { - private final File directory; + private File directory; private Logger logger; - @Parameterized.Parameters(name = "{0} \u2192 {1}") - public static Collection data() { - return Arrays.asList(new Object[][] { // - // @formatter:off - {"log4j-rolling-with-custom-delete-unconditional1.xml", "target/rolling-unconditional-delete1/test"}, // - {"log4j-rolling-with-custom-delete-unconditional2.xml", "target/rolling-unconditional-delete2/test"}, // - {"log4j-rolling-with-custom-delete-unconditional3.xml", "target/rolling-unconditional-delete3/test"}, // - // @formatter:on - }); + @BeforeEach + public void setUp(final LoggerContext loggerContext) { + this.logger = loggerContext.getLogger(RollingAppenderNoUnconditionalDeleteTest.class.getName()); } - @Rule - public LoggerContextRule loggerContextRule; - - public RollingAppenderNoUnconditionalDeleteTest(final String configFile, final String dir) { - this.directory = new File(dir); - this.loggerContextRule = LoggerContextRule.createShutdownTimeoutLoggerContextRule(configFile); - deleteDir(); - deleteDirParent(); - } - - @Before - public void setUp() throws Exception { - this.logger = this.loggerContextRule.getLogger(); - } - - @Test - public void testAppender() throws Exception { + void testAppender() throws Exception { final int LINECOUNT = 18; // config has max="100" for (int i = 0; i < LINECOUNT; ++i) { // 30 chars per message: each message triggers a rollover @@ -79,15 +52,46 @@ public void testAppender() throws Exception { } Thread.sleep(100); // Allow time for rollover to complete - assertTrue("Dir " + directory + " should exist", directory.exists()); - assertTrue("Dir " + directory + " should contain files", directory.listFiles().length > 0); + assertTrue(directory.exists(), "Dir " + directory + " should exist"); + assertTrue(directory.listFiles().length > 0, "Dir " + directory + " should contain files"); int total = 0; for (final File file : directory.listFiles()) { final List lines = Files.readAllLines(file.toPath(), Charset.defaultCharset()); total += lines.size(); } - assertEquals("rolled over lines", LINECOUNT - 1, total); + assertEquals(LINECOUNT - 1, total, "rolled over lines"); + + cleanUp(); + } + + void cleanUp() { + deleteDir(); + deleteDirParent(); + } + + @Test + @LoggerContextSource(value = "log4j-rolling-with-custom-delete-unconditional1.xml", timeout = 10) + public void RollingWithCustomUnconditionalDeleteTest1() throws Exception { + final String dir = "target/rolling-unconditional-delete1/test"; + this.directory = new File(dir); + testAppender(); + } + + @Test + @LoggerContextSource(value = "log4j-rolling-with-custom-delete-unconditional2.xml", timeout = 10) + public void RollingWithCustomUnconditionalDeleteTest2() throws Exception { + final String dir = "target/rolling-unconditional-delete2/test"; + this.directory = new File(dir); + testAppender(); + } + + @Test + @LoggerContextSource(value = "log4j-rolling-with-custom-delete-unconditional3.xml", timeout = 10) + public void RollingWithCustomUnconditionalDeleteTest3() throws Exception { + final String dir = "target/rolling-unconditional-delete3/test"; + this.directory = new File(dir); + testAppender(); } private void deleteDir() { diff --git a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderSizeMaxWidthTest.java b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderSizeMaxWidthTest.java index 449d60d1251..7fec8c459b1 100644 --- a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderSizeMaxWidthTest.java +++ b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderSizeMaxWidthTest.java @@ -16,62 +16,41 @@ */ package org.apache.logging.log4j.core.appender.rolling; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; +import static org.junit.jupiter.api.Assertions.assertEquals; +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.util.ArrayList; import java.util.Arrays; -import java.util.Collection; import java.util.List; import java.util.stream.IntStream; import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.core.LoggerContext; import org.apache.logging.log4j.core.appender.RollingFileAppender; import org.apache.logging.log4j.core.pattern.ArrayPatternConverter; import org.apache.logging.log4j.core.pattern.FormattingInfo; import org.apache.logging.log4j.core.pattern.IntegerPatternConverter; -import org.apache.logging.log4j.core.test.junit.LoggerContextRule; -import org.junit.Before; -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.RuleChain; -import org.junit.runner.RunWith; -import org.junit.runners.Parameterized; +import org.apache.logging.log4j.core.test.junit.CleanFolders; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.RegisterExtension; /** * */ -@RunWith(Parameterized.class) -public class RollingAppenderSizeMaxWidthTest implements RolloverListener { - @Parameterized.Parameters(name = "{0}") - public static Collection data() { - return Arrays.asList(new Object[][] { - { - new LoggerContextRule("log4j-rolling-size-max-width-1.xml"), - }, - { - new LoggerContextRule("log4j-rolling-size-max-width-2.xml"), - }, - { - new LoggerContextRule("log4j-rolling-size-max-width-3.xml"), - }, - { - new LoggerContextRule("log4j-rolling-size-max-width-4.xml"), - }, - }); - } +public abstract class RollingAppenderSizeMaxWidthTest implements RolloverListener { private static final String DIR = "target/rolling-max-width/archive"; private static final String MESSAGE = "This is test message number "; - private static final int COUNT = 10000; private static final int[] POWERS_OF_10 = {1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000, 1000000000 }; - public LoggerContextRule loggerContextRule; - @Rule - public RuleChain chain; + private LoggerContext context; + + @RegisterExtension + private CleanFolders cleanFolders; List rolledFileNames = new ArrayList<>(); int min; @@ -90,15 +69,16 @@ private static int powerOfTen(final int pow) { return POWERS_OF_10[pow]; } - public RollingAppenderSizeMaxWidthTest(final LoggerContextRule loggerContextRule) { - this.loggerContextRule = loggerContextRule; - this.chain = loggerContextRule.withCleanFoldersRule(DIR); + public RollingAppenderSizeMaxWidthTest(final LoggerContext context) { + this.context = context; + this.cleanFolders = new CleanFolders(DIR); } - @Before - public void setUp() throws Exception { - this.logger = loggerContextRule.getLogger(RollingAppenderSizeMaxWidthTest.class.getName()); - final RollingFileAppender app = (RollingFileAppender) loggerContextRule.getRequiredAppender("RollingFile"); + @BeforeEach + public void setUp() { + this.logger = context.getLogger(RollingAppenderSizeMaxWidthTest.class.getName()); + final RollingFileAppender app = + (RollingFileAppender) context.getConfiguration().getAppender("RollingFile"); app.getManager().addRolloverListener(this); final ArrayPatternConverter[] patternConverters = app.getManager().getPatternProcessor().getPatternConverters(); @@ -128,17 +108,17 @@ public void setUp() throws Exception { } else { policy = app.getTriggeringPolicy(); } - assertNotNull("No SizeBasedTriggeringPolicy", policy); + assertNotNull(policy, "No SizeBasedTriggeringPolicy"); rolloverSize = policy.getMaxFileSize(); } @Test - public void testAppender() throws Exception { + public void testAppender() { if (minWidth > 0) { - assertTrue("min must be greater than or equal to the minimum width", min > -powerOfTen(minWidth)); + assertTrue(min > -powerOfTen(minWidth), "min must be greater than or equal to the minimum width"); } if (maxWidth < Integer.MAX_VALUE) { - assertTrue("max must be less than or equal to the maximum width", max <= powerOfTen(maxWidth)); + assertTrue(max <= powerOfTen(maxWidth), "max must be less than or equal to the maximum width"); } long bytes = 0; for (int i = 0; i < 10000; ++i) { @@ -149,21 +129,21 @@ public void testAppender() throws Exception { final long minExpected = ((bytes / rolloverSize) * 95) / 100; final long maxExpected = ((bytes / rolloverSize) * 105) / 100; final File dir = new File(DIR); - assertTrue("Directory not created", dir.exists()); + assertTrue(dir.exists(), "Directory not created"); final File[] files = dir.listFiles(); assertNotNull(files); assertTrue( - "Not enough rollovers: expected: " + minExpected + ", actual: " + rolloverCount, - rolloverCount + 1 >= minExpected); + rolloverCount + 1 >= minExpected, + "Not enough rollovers: expected: " + minExpected + ", actual: " + rolloverCount); assertTrue( - "Too many rollovers: expected: " + maxExpected + ", actual: " + rolloverCount, - rolloverCount <= maxExpected); + rolloverCount <= maxExpected, + "Too many rollovers: expected: " + maxExpected + ", actual: " + rolloverCount); final int maxFiles = max - min + 1; final int maxExpectedFiles = Math.min(maxFiles, rolloverCount); assertEquals( - "More files than expected. expected: " + maxExpectedFiles + ", actual: " + files.length, maxExpectedFiles, - files.length); + files.length, + "More files than expected. expected: " + maxExpectedFiles + ", actual: " + files.length); } @Override diff --git a/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/AvailablePortSystemPropertyTestRule.java b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderSizeMaxWidthTest1.java similarity index 58% rename from log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/AvailablePortSystemPropertyTestRule.java rename to log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderSizeMaxWidthTest1.java index 45416c79242..1745f6481b1 100644 --- a/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/AvailablePortSystemPropertyTestRule.java +++ b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderSizeMaxWidthTest1.java @@ -14,19 +14,15 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.logging.log4j.core.test; +package org.apache.logging.log4j.core.appender.rolling; -/** - * A JUnit TestRule to discover an available port and save it in a system property. Useful for setting up tests using - * Apache Active MQ. - */ -public class AvailablePortSystemPropertyTestRule extends SystemPropertyTestRule { +import org.apache.logging.log4j.core.LoggerContext; +import org.apache.logging.log4j.core.test.junit.LoggerContextSource; - public static AvailablePortSystemPropertyTestRule create(final String name) { - return new AvailablePortSystemPropertyTestRule(name); - } +@LoggerContextSource("log4j-rolling-size-max-width-1.xml") +public class RollingAppenderSizeMaxWidthTest1 extends RollingAppenderSizeMaxWidthTest { - protected AvailablePortSystemPropertyTestRule(final String name) { - super(name, () -> Integer.toString(AvailablePortFinder.getNextAvailable())); + public RollingAppenderSizeMaxWidthTest1(LoggerContext context) { + super(context); } } diff --git a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderSizeMaxWidthTest2.java b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderSizeMaxWidthTest2.java new file mode 100644 index 00000000000..b99fabd7650 --- /dev/null +++ b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderSizeMaxWidthTest2.java @@ -0,0 +1,28 @@ +/* + * 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.rolling; + +import org.apache.logging.log4j.core.LoggerContext; +import org.apache.logging.log4j.core.test.junit.LoggerContextSource; + +@LoggerContextSource("log4j-rolling-size-max-width-2.xml") +public class RollingAppenderSizeMaxWidthTest2 extends RollingAppenderSizeMaxWidthTest { + + public RollingAppenderSizeMaxWidthTest2(LoggerContext context) { + super(context); + } +} diff --git a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderSizeMaxWidthTest3.java b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderSizeMaxWidthTest3.java new file mode 100644 index 00000000000..0b62d2245df --- /dev/null +++ b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderSizeMaxWidthTest3.java @@ -0,0 +1,28 @@ +/* + * 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.rolling; + +import org.apache.logging.log4j.core.LoggerContext; +import org.apache.logging.log4j.core.test.junit.LoggerContextSource; + +@LoggerContextSource("log4j-rolling-size-max-width-3.xml") +public class RollingAppenderSizeMaxWidthTest3 extends RollingAppenderSizeMaxWidthTest { + + public RollingAppenderSizeMaxWidthTest3(LoggerContext context) { + super(context); + } +} diff --git a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderSizeMaxWidthTest4.java b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderSizeMaxWidthTest4.java new file mode 100644 index 00000000000..97d0f4cde17 --- /dev/null +++ b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderSizeMaxWidthTest4.java @@ -0,0 +1,28 @@ +/* + * 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.rolling; + +import org.apache.logging.log4j.core.LoggerContext; +import org.apache.logging.log4j.core.test.junit.LoggerContextSource; + +@LoggerContextSource("log4j-rolling-size-max-width-4.xml") +public class RollingAppenderSizeMaxWidthTest4 extends RollingAppenderSizeMaxWidthTest { + + public RollingAppenderSizeMaxWidthTest4(LoggerContext context) { + super(context); + } +} diff --git a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderTimeTest.java b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderTimeTest.java index e5e68f593e1..92dd6ab5088 100644 --- a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderTimeTest.java +++ b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderTimeTest.java @@ -20,16 +20,16 @@ import static org.apache.logging.log4j.core.test.hamcrest.FileMatchers.hasName; import static org.hamcrest.Matchers.endsWith; import static org.hamcrest.Matchers.hasItemInArray; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.Assertions.fail; import java.io.File; import org.apache.logging.log4j.Logger; -import org.apache.logging.log4j.core.test.junit.LoggerContextRule; +import org.apache.logging.log4j.core.LoggerContext; +import org.apache.logging.log4j.core.test.junit.CleanFoldersRuleExtension; import org.hamcrest.Matcher; -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.RuleChain; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.RegisterExtension; /** * @@ -39,15 +39,16 @@ public class RollingAppenderTimeTest { private static final String CONFIG = "log4j-rolling2.xml"; private static final String DIR = "target/rolling2"; - private final LoggerContextRule loggerContextRule = - LoggerContextRule.createShutdownTimeoutLoggerContextRule(CONFIG); - - @Rule - public RuleChain chain = loggerContextRule.withCleanFoldersRule(DIR); + @RegisterExtension + CleanFoldersRuleExtension extension = new CleanFoldersRuleExtension( + DIR, + CONFIG, + RollingAppenderTimeTest.class.getName(), + this.getClass().getClassLoader()); @Test - public void testAppender() throws Exception { - final Logger logger = loggerContextRule.getLogger(); + public void testAppender(final LoggerContext loggerContext) throws Exception { + final Logger logger = loggerContext.getLogger(RollingAppenderTimeTest.class.getName()); logger.debug("This is test message number 1"); Thread.sleep(1500); // Trigger the rollover @@ -55,7 +56,7 @@ public void testAppender() throws Exception { logger.debug("This is test message number " + i + 1); } final File dir = new File(DIR); - assertTrue("Directory not created", dir.exists() && dir.listFiles().length > 0); + assertTrue(dir.exists() && dir.listFiles().length > 0, "Directory not created"); final int MAX_TRIES = 20; final Matcher hasGzippedFile = hasItemInArray(that(hasName(that(endsWith(".gz"))))); diff --git a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingFileAppenderInterruptedThreadTest.java b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingFileAppenderInterruptedThreadTest.java index 156c85e8f0c..5f573ee9157 100644 --- a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingFileAppenderInterruptedThreadTest.java +++ b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingFileAppenderInterruptedThreadTest.java @@ -16,8 +16,10 @@ */ package org.apache.logging.log4j.core.appender.rolling; +import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.hasItem; import static org.hamcrest.Matchers.instanceOf; +import static org.junit.jupiter.api.Assertions.assertTrue; import java.io.File; import org.apache.logging.log4j.Level; @@ -30,11 +32,10 @@ import org.apache.logging.log4j.core.config.builder.api.ConfigurationBuilderFactory; import org.apache.logging.log4j.core.config.builder.impl.BuiltConfiguration; import org.apache.logging.log4j.core.test.junit.CleanFolders; -import org.junit.After; -import org.junit.Assert; -import org.junit.Before; -import org.junit.Rule; -import org.junit.Test; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.RegisterExtension; /** * Tests https://issues.apache.org/jira/browse/LOG4J2-1798 @@ -44,12 +45,12 @@ public class RollingFileAppenderInterruptedThreadTest { private static final String ROLLING_APPENDER_FILES_DIR = "target/" + RollingFileAppenderInterruptedThreadTest.class.getSimpleName(); - @Rule - public CleanFolders cleanFolders = new CleanFolders(true, false, 3, ROLLING_APPENDER_FILES_DIR); - LoggerContext loggerContext; - @Before + @RegisterExtension + private CleanFolders cleanFolders = new CleanFolders(true, false, 3, ROLLING_APPENDER_FILES_DIR); + + @BeforeEach public void setUp() { final ConfigurationBuilder builder = ConfigurationBuilderFactory.newConfigurationBuilder(); builder.setConfigurationName("LOG4J2-1798 test"); @@ -70,7 +71,7 @@ public void setUp() { loggerContext = Configurator.initialize(builder.build()); } - @After + @AfterEach public void tearDown() { Configurator.shutdown(loggerContext); loggerContext = null; @@ -80,14 +81,14 @@ public void tearDown() { public void testRolloverInInterruptedThread() { final Logger logger = loggerContext.getLogger(getClass().getName()); - Assert.assertThat(logger.getAppenders().values(), hasItem(instanceOf(RollingFileAppender.class))); + assertThat(logger.getAppenders().values(), hasItem(instanceOf(RollingFileAppender.class))); logger.info("Sending logging event 1"); // send first event to initialize rollover system Thread.currentThread().interrupt(); // mark thread as interrupted logger.info("Sending logging event 2"); // send second event to trigger rotation, expecting 2 files in result - Assert.assertTrue(new File(ROLLING_APPENDER_FILES_DIR, "file-1.log").exists()); - Assert.assertTrue(new File(ROLLING_APPENDER_FILES_DIR, "file-2.log").exists()); + assertTrue(new File(ROLLING_APPENDER_FILES_DIR, "file-1.log").exists()); + assertTrue(new File(ROLLING_APPENDER_FILES_DIR, "file-2.log").exists()); } } diff --git a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingFileAppenderReconfigureTest.java b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingFileAppenderReconfigureTest.java index 6644ece96a6..41522f67774 100644 --- a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingFileAppenderReconfigureTest.java +++ b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingFileAppenderReconfigureTest.java @@ -16,20 +16,18 @@ */ package org.apache.logging.log4j.core.appender.rolling; -import org.apache.logging.log4j.core.test.junit.LoggerContextRule; -import org.junit.Rule; -import org.junit.Test; +import org.apache.logging.log4j.core.LoggerContext; +import org.apache.logging.log4j.core.test.junit.LoggerContextSource; +import org.junit.jupiter.api.Test; /** * Tests https://issues.apache.org/jira/browse/LOG4J2-1967 */ public class RollingFileAppenderReconfigureTest { - @Rule - public final LoggerContextRule loggerContextRule = new LoggerContextRule("rolling-file-appender-reconfigure.xml"); - @Test - public void testReconfigure() { - loggerContextRule.reconfigure(); + @LoggerContextSource(value = "rolling-file-appender-reconfigure.xml") + public void testReconfigure(final LoggerContext loggerContext) { + loggerContext.reconfigure(); } } diff --git a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingFileAppenderReconfigureUndefinedSystemPropertyTest.java b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingFileAppenderReconfigureUndefinedSystemPropertyTest.java index 84a20894d29..86a788a45b7 100644 --- a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingFileAppenderReconfigureUndefinedSystemPropertyTest.java +++ b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingFileAppenderReconfigureUndefinedSystemPropertyTest.java @@ -16,21 +16,18 @@ */ package org.apache.logging.log4j.core.appender.rolling; -import org.apache.logging.log4j.core.test.junit.LoggerContextRule; -import org.junit.Rule; -import org.junit.Test; +import org.apache.logging.log4j.core.LoggerContext; +import org.apache.logging.log4j.core.test.junit.LoggerContextSource; +import org.junit.jupiter.api.Test; /** * Tests https://issues.apache.org/jira/browse/LOG4J2-1967 */ public class RollingFileAppenderReconfigureUndefinedSystemPropertyTest { - @Rule - public final LoggerContextRule loggerContextRule = - new LoggerContextRule("src/test/rolling-file-appender-reconfigure.original.xml"); - @Test - public void testReconfigure() { - loggerContextRule.reconfigure(); + @LoggerContextSource("src/test/rolling-file-appender-reconfigure.original.xml") + public void testReconfigure(final LoggerContext loggerContext) { + loggerContext.reconfigure(); } } diff --git a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingRandomAppenderDirectWriteWithFilenameTest.java b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingRandomAppenderDirectWriteWithFilenameTest.java index cea54269cb8..03c43242b05 100644 --- a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingRandomAppenderDirectWriteWithFilenameTest.java +++ b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingRandomAppenderDirectWriteWithFilenameTest.java @@ -16,15 +16,15 @@ */ package org.apache.logging.log4j.core.appender.rolling; -import static org.junit.Assert.assertFalse; +import static org.junit.jupiter.api.Assertions.assertFalse; import java.io.File; import org.apache.logging.log4j.Logger; -import org.apache.logging.log4j.core.test.junit.LoggerContextRule; -import org.junit.Before; -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.RuleChain; +import org.apache.logging.log4j.core.LoggerContext; +import org.apache.logging.log4j.core.test.junit.CleanFoldersRuleExtension; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.RegisterExtension; /** * @@ -35,22 +35,23 @@ public class RollingRandomAppenderDirectWriteWithFilenameTest { private static final String DIR = "target/random-1833"; - public static LoggerContextRule loggerContextRule = - LoggerContextRule.createShutdownTimeoutLoggerContextRule(CONFIG); - - @Rule - public RuleChain chain = loggerContextRule.withCleanFoldersRule(DIR); + @RegisterExtension + CleanFoldersRuleExtension extension = new CleanFoldersRuleExtension( + DIR, + CONFIG, + RollingRandomAppenderDirectWriteWithFilenameTest.class.getName(), + this.getClass().getClassLoader()); private Logger logger; - @Before - public void setUp() throws Exception { - this.logger = loggerContextRule.getLogger(RollingRandomAppenderDirectWriteWithFilenameTest.class.getName()); + @BeforeEach + public void setUp(final LoggerContext loggerContext) { + this.logger = loggerContext.getLogger(RollingRandomAppenderDirectWriteWithFilenameTest.class.getName()); } @Test - public void testAppender() throws Exception { + public void testAppender() { final File dir = new File(DIR); - assertFalse("Directory created", dir.exists()); + assertFalse(dir.exists(), "Directory created"); } } diff --git a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/routing/RoutingAppenderWithPurgingTest.java b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/routing/RoutingAppenderWithPurgingTest.java index 890b2a05d2c..ec1779fc392 100644 --- a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/routing/RoutingAppenderWithPurgingTest.java +++ b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/routing/RoutingAppenderWithPurgingTest.java @@ -16,10 +16,10 @@ */ package org.apache.logging.log4j.core.appender.routing; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; import java.io.File; import java.util.HashSet; @@ -27,22 +27,22 @@ import java.util.Set; import org.apache.logging.log4j.EventLogger; import org.apache.logging.log4j.core.LogEvent; +import org.apache.logging.log4j.core.LoggerContext; import org.apache.logging.log4j.core.test.appender.ListAppender; -import org.apache.logging.log4j.core.test.junit.LoggerContextRule; +import org.apache.logging.log4j.core.test.junit.CleanFiles; +import org.apache.logging.log4j.core.test.junit.LoggerContextSource; +import org.apache.logging.log4j.core.test.junit.Named; import org.apache.logging.log4j.message.StructuredDataMessage; -import org.junit.After; -import org.junit.Before; -import org.junit.Rule; -import org.junit.Test; import org.junit.jupiter.api.Tag; -import org.junit.rules.RuleChain; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.Timeout; +import org.junit.jupiter.api.extension.RegisterExtension; /** * Tests Routing appender purge facilities */ @Tag("sleepy") public class RoutingAppenderWithPurgingTest { - private static final String CONFIG = "log4j-routing-purge.xml"; private static final String IDLE_LOG_FILE1 = "target/routing-purge-idle/routingtest-1.log"; private static final String IDLE_LOG_FILE2 = "target/routing-purge-idle/routingtest-2.log"; private static final String IDLE_LOG_FILE3 = "target/routing-purge-idle/routingtest-3.log"; @@ -50,41 +50,34 @@ public class RoutingAppenderWithPurgingTest { private static final String MANUAL_LOG_FILE2 = "target/routing-purge-manual/routingtest-2.log"; private static final String MANUAL_LOG_FILE3 = "target/routing-purge-manual/routingtest-3.log"; - private ListAppender app; - private RoutingAppender routingAppenderIdle; - private RoutingAppender routingAppenderIdleWithHangingAppender; - private RoutingAppender routingAppenderManual; - - private final LoggerContextRule loggerContextRule = new LoggerContextRule(CONFIG); - - @Rule - public RuleChain chain = loggerContextRule.withCleanFilesRule( - IDLE_LOG_FILE1, IDLE_LOG_FILE2, IDLE_LOG_FILE3, MANUAL_LOG_FILE1, MANUAL_LOG_FILE2, MANUAL_LOG_FILE3); - - @Before - public void setUp() throws Exception { - this.app = this.loggerContextRule.getListAppender("List"); - this.routingAppenderIdle = - this.loggerContextRule.getRequiredAppender("RoutingPurgeIdle", RoutingAppender.class); - this.routingAppenderIdleWithHangingAppender = this.loggerContextRule.getRequiredAppender( - "RoutingPurgeIdleWithHangingAppender", RoutingAppender.class); - this.routingAppenderManual = - this.loggerContextRule.getRequiredAppender("RoutingPurgeManual", RoutingAppender.class); - } - - @After - public void tearDown() throws Exception { - this.app.clear(); - this.loggerContextRule.getLoggerContext().stop(); - } - - @Test(timeout = 5000) - public void routingTest() throws InterruptedException { + @RegisterExtension + CleanFiles cleanFiles = new CleanFiles( + false, + true, + 10, + IDLE_LOG_FILE1, + IDLE_LOG_FILE2, + IDLE_LOG_FILE3, + MANUAL_LOG_FILE1, + MANUAL_LOG_FILE2, + MANUAL_LOG_FILE3); + + @Test + @Timeout(5000) + @LoggerContextSource("log4j-routing-purge.xml") + public void routingTest( + final LoggerContext loggerContext, + @Named("List") final ListAppender app, + @Named("RoutingPurgeIdle") final RoutingAppender routingAppenderIdle, + @Named("RoutingPurgeIdleWithHangingAppender") final RoutingAppender routingAppenderIdleWithHangingAppender, + @Named("RoutingPurgeManual") final RoutingAppender routingAppenderManual, + @Named("ReferencedList") final ListAppender referencedListAppender) + throws InterruptedException { StructuredDataMessage msg = new StructuredDataMessage("1", "This is a test 1", "Service"); EventLogger.logEvent(msg); final List list = app.getEvents(); - assertNotNull("No events generated", list); - assertEquals("Incorrect number of events. Expected 1, got " + list.size(), 1, list.size()); + assertNotNull(list, "No events generated"); + assertTrue(list.size() == 1, "Incorrect number of events. Expected 1, got " + list.size()); msg = new StructuredDataMessage("2", "This is a test 2", "Service"); EventLogger.logEvent(msg); msg = new StructuredDataMessage("3", "This is a test 3", "Service"); @@ -97,72 +90,51 @@ public void routingTest() throws InterruptedException { expectedAppenderKeys.add("3"); assertEquals(expectedAppenderKeys, routingAppenderManual.getAppenders().keySet()); - assertFalse(((ListAppender) loggerContextRule.getAppender("ReferencedList")) - .getEvents() - .isEmpty()); + assertFalse(((ListAppender) referencedListAppender).getEvents().isEmpty()); assertEquals( - "Incorrect number of appenders with IdlePurgePolicy.", - 2, - routingAppenderIdle.getAppenders().size()); - assertEquals( - "Incorrect number of appenders with IdlePurgePolicy with HangingAppender.", - 2, - routingAppenderIdleWithHangingAppender.getAppenders().size()); + 2, routingAppenderIdle.getAppenders().size(), "Incorrect number of appenders with IdlePurgePolicy."); assertEquals( - "Incorrect number of appenders manual purge.", 2, - routingAppenderManual.getAppenders().size()); + routingAppenderIdleWithHangingAppender.getAppenders().size(), + "Incorrect number of appenders with IdlePurgePolicy with HangingAppender."); + assertEquals(2, routingAppenderManual.getAppenders().size(), "Incorrect number of appenders manual purge."); Thread.sleep(3000); EventLogger.logEvent(msg); assertEquals( - "Incorrect number of appenders with IdlePurgePolicy.", - 1, - routingAppenderIdle.getAppenders().size()); + 1, routingAppenderIdle.getAppenders().size(), "Incorrect number of appenders with IdlePurgePolicy."); assertEquals( - "Incorrect number of appenders with manual purge.", - 2, - routingAppenderManual.getAppenders().size()); + 2, routingAppenderManual.getAppenders().size(), "Incorrect number of appenders with manual purge."); routingAppenderManual.deleteAppender("1"); routingAppenderManual.deleteAppender("2"); routingAppenderManual.deleteAppender("3"); assertEquals( - "Incorrect number of appenders with IdlePurgePolicy.", - 1, - routingAppenderIdle.getAppenders().size()); + 1, routingAppenderIdle.getAppenders().size(), "Incorrect number of appenders with IdlePurgePolicy."); assertEquals( - "Incorrect number of appenders with manual purge.", - 0, - routingAppenderManual.getAppenders().size()); + 0, routingAppenderManual.getAppenders().size(), "Incorrect number of appenders with manual purge."); - assertFalse( - "Reference based routes should not be stoppable", - loggerContextRule.getAppender("ReferencedList").isStopped()); + assertFalse(referencedListAppender.isStopped(), "Reference based routes should not be stoppable"); msg = new StructuredDataMessage("5", "This is a test 5", "Service"); EventLogger.logEvent(msg); assertEquals( - "Incorrect number of appenders with manual purge.", - 1, - routingAppenderManual.getAppenders().size()); + 1, routingAppenderManual.getAppenders().size(), "Incorrect number of appenders with manual purge."); routingAppenderManual.deleteAppender("5"); routingAppenderManual.deleteAppender("5"); assertEquals( - "Incorrect number of appenders with manual purge.", - 0, - routingAppenderManual.getAppenders().size()); + 0, routingAppenderManual.getAppenders().size(), "Incorrect number of appenders with manual purge."); } private void assertFileExistance(final String... files) { for (final String file : files) { - assertTrue("File should exist - " + file + " file ", new File(file).exists()); + assertTrue(new File(file).exists(), "File should exist - " + file + " file "); } } } diff --git a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/async/Log4j2Jira1688Test.java b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/async/Log4j2Jira1688Test.java index ce41365b1a9..b93cd886401 100644 --- a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/async/Log4j2Jira1688Test.java +++ b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/async/Log4j2Jira1688Test.java @@ -16,37 +16,31 @@ */ package org.apache.logging.log4j.core.async; +import static org.junit.jupiter.api.Assertions.assertArrayEquals; + import java.util.Arrays; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; import org.apache.logging.log4j.Level; +import org.apache.logging.log4j.core.LoggerContext; import org.apache.logging.log4j.core.test.appender.ListAppender; -import org.apache.logging.log4j.core.test.categories.AsyncLoggers; -import org.apache.logging.log4j.core.test.junit.LoggerContextRule; +import org.apache.logging.log4j.core.test.junit.LoggerContextSource; import org.apache.logging.log4j.spi.ExtendedLogger; -import org.junit.Assert; -import org.junit.Before; -import org.junit.Rule; -import org.junit.Test; -import org.junit.experimental.categories.Category; -import org.junit.runner.RunWith; -import org.junit.runners.BlockJUnit4ClassRunner; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Tag; +import org.junit.jupiter.api.Test; /** * Tests LOG4J2-1688 Multiple loggings of arguments are setting these arguments to null. */ -@RunWith(BlockJUnit4ClassRunner.class) -@Category(AsyncLoggers.class) +@Tag("async") public class Log4j2Jira1688Test { - @Rule - public LoggerContextRule context = new LoggerContextRule("log4j-list.xml"); - private ListAppender listAppender; - @Before - public void before() throws Exception { - listAppender = context.getListAppender("List"); + @BeforeEach + public void before(LoggerContext context) { + listAppender = context.getConfiguration().getAppender("List"); } private static Object[] createArray(final int size) { @@ -58,7 +52,8 @@ private static Object[] createArray(final int size) { } @Test - public void testLog4j2Only() throws InterruptedException { + @LoggerContextSource("log4j-list.xml") + public void testLog4j2Only(LoggerContext context) throws InterruptedException { final ExtendedLogger log4JLogger = context.getLogger(this.getClass()); final int limit = 11; // more than unrolled varargs final Object[] args = createArray(limit); @@ -68,9 +63,9 @@ public void testLog4j2Only() throws InterruptedException { log4JLogger.logIfEnabled("test", Level.ERROR, null, "test {}", args); listAppender.countDownLatch.await(1, TimeUnit.SECONDS); - Assert.assertArrayEquals(Arrays.toString(args), originalArgs, args); + assertArrayEquals(originalArgs, args, Arrays.toString(args)); log4JLogger.logIfEnabled("test", Level.ERROR, null, "test {}", args); - Assert.assertArrayEquals(Arrays.toString(args), originalArgs, args); + assertArrayEquals(originalArgs, args, Arrays.toString(args)); } } diff --git a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/impl/NestedLoggingFromThrowableMessageTest.java b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/impl/NestedLoggingFromThrowableMessageTest.java index 108b08b19ee..8fa7450a51b 100644 --- a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/impl/NestedLoggingFromThrowableMessageTest.java +++ b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/impl/NestedLoggingFromThrowableMessageTest.java @@ -16,8 +16,8 @@ */ package org.apache.logging.log4j.core.impl; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; import java.io.BufferedReader; import java.io.File; @@ -26,36 +26,33 @@ import java.nio.file.Files; import java.util.HashSet; import java.util.Set; +import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.core.test.CoreLoggerContexts; -import org.apache.logging.log4j.core.test.junit.LoggerContextRule; -import org.junit.Before; -import org.junit.BeforeClass; -import org.junit.Rule; -import org.junit.Test; +import org.apache.logging.log4j.core.test.junit.LoggerContextSource; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; /** * Test for LOG4J2-2368. */ +@LoggerContextSource("log4j-nested-logging-throwable-message.xml") public class NestedLoggingFromThrowableMessageTest { private static final File file1 = new File("target/NestedLoggerTest1.log"); private static final File file2 = new File("target/NestedLoggerTest2.log"); - @BeforeClass - public static void beforeClass() { - file1.delete(); - file2.delete(); + @BeforeAll + public static void beforeAll() { + System.setProperty("log4j2.enableThreadlocals", "true"); } - @Rule - public LoggerContextRule context = new LoggerContextRule("log4j-nested-logging-throwable-message.xml"); - private Logger logger; - @Before + @BeforeEach public void before() { - logger = context.getLogger(NestedLoggingFromThrowableMessageTest.class); + logger = LogManager.getLogger(NestedLoggingFromThrowableMessageTest.class); } class ThrowableLogsInGetMessage extends RuntimeException { @@ -77,7 +74,7 @@ public void testNestedLoggingInLastArgument() throws Exception { final Set lines1 = readUniqueLines(file1); final Set lines2 = readUniqueLines(file2); - assertEquals("Expected the same data from both appenders", lines1, lines2); + assertEquals(lines1, lines2, "Expected the same data from both appenders"); assertEquals(2, lines1.size()); assertTrue(lines1.contains("INFO NestedLoggingFromThrowableMessageTest Logging in getMessage ")); assertTrue(lines1.contains("ERROR NestedLoggingFromThrowableMessageTest Test message")); @@ -89,7 +86,7 @@ private static Set readUniqueLines(final File input) throws IOException new BufferedReader(new InputStreamReader(Files.newInputStream(input.toPath())))) { String line; while ((line = reader.readLine()) != null) { - assertTrue("Read duplicate line: " + line, lines.add(line)); + assertTrue(lines.add(line), "Read duplicate line: " + line); } } return lines;