From 78023a9d10f674437063ef112a2452127dd6d52d Mon Sep 17 00:00:00 2001 From: Tanmay Baid Date: Wed, 17 Sep 2025 22:13:52 -0700 Subject: [PATCH] Add new date pattern for DatePatternConverterTestBase and add new test class for LegacyInstantFormatter reprodcing bug #3667 --- .../pattern/DatePatternConverterTestBase.java | 13 ++++++++ ...nverterWithLegacyInstantFormatterTest.java | 32 +++++++++++++++++++ 2 files changed, 45 insertions(+) create mode 100644 log4j-core-test/src/test/java/org/apache/logging/log4j/core/pattern/DatePatternConverterWithLegacyInstantFormatterTest.java diff --git a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/pattern/DatePatternConverterTestBase.java b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/pattern/DatePatternConverterTestBase.java index 16fd89ac30b..64fbbb3da88 100644 --- a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/pattern/DatePatternConverterTestBase.java +++ b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/pattern/DatePatternConverterTestBase.java @@ -32,6 +32,7 @@ import org.apache.logging.log4j.core.time.Instant; import org.apache.logging.log4j.core.time.MutableInstant; import org.apache.logging.log4j.core.util.Constants; +import org.apache.logging.log4j.core.util.internal.instant.InstantPatternFormatter; import org.apache.logging.log4j.util.Strings; import org.junit.jupiter.api.Test; @@ -67,9 +68,15 @@ public long getTimeMillis() { private static final String[] ISO8601_FORMAT_OPTIONS = {ISO8601}; private final boolean threadLocalsEnabled; + private final boolean legacyFormatterEnabled; DatePatternConverterTestBase(final boolean threadLocalsEnabled) { + this(threadLocalsEnabled, false); + } + + DatePatternConverterTestBase(final boolean threadLocalsEnabled, final boolean legacyFormatterEnabled) { this.threadLocalsEnabled = threadLocalsEnabled; + this.legacyFormatterEnabled = legacyFormatterEnabled; } private static Date date(final int year, final int month, final int date) { @@ -84,6 +91,11 @@ void testThreadLocalsConstant() { assertEquals(Constants.ENABLE_THREADLOCALS, threadLocalsEnabled); } + @Test + void testInstantFormatterConstant() { + assertEquals(InstantPatternFormatter.LEGACY_FORMATTERS_ENABLED, legacyFormatterEnabled); + } + @Test void testFormatDateStringBuilderDefaultPattern() { assertDatePattern(null, date(2001, 1, 1), "2001-02-01 14:15:16,123"); @@ -163,6 +175,7 @@ void testFormatAmericanPatterns() { assertDatePattern("dd/MM/yyyy HH:mm:ss.SSSSSS", date, "11/03/2011 14:15:16.123000"); assertDatePattern("dd/MM/yy HH:mm:ss.SSS", date, "11/03/11 14:15:16.123"); assertDatePattern("dd/MM/yy HH:mm:ss.SSSSSS", date, "11/03/11 14:15:16.123000"); + assertDatePattern("EEE, dd MMM yyyy HH:mm:ss zzz", date, "Fri, 11 Mar 2011 14:15:16 PST"); } @SuppressWarnings("deprecation") diff --git a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/pattern/DatePatternConverterWithLegacyInstantFormatterTest.java b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/pattern/DatePatternConverterWithLegacyInstantFormatterTest.java new file mode 100644 index 00000000000..b558c4f616f --- /dev/null +++ b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/pattern/DatePatternConverterWithLegacyInstantFormatterTest.java @@ -0,0 +1,32 @@ +/* + * 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.pattern; + +import org.apache.logging.log4j.test.junit.SetTestProperty; +import org.apache.logging.log4j.test.junit.UsingTestProperties; + +@SetTestProperty.SetTestProperties(value = { + @SetTestProperty(key = "log4j2.enable.threadlocals", value = "false"), + @SetTestProperty(key = "log4j2.instantFormatter", value = "legacy") +}) +@UsingTestProperties +class DatePatternConverterWithLegacyInstantFormatterTest extends DatePatternConverterTestBase { + + DatePatternConverterWithLegacyInstantFormatterTest() { + super(false, true); + } +}