| /* |
| * 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 java.text.SimpleDateFormat; |
| import java.util.Calendar; |
| import java.util.Date; |
| import java.util.Locale; |
| |
| import org.junit.Test; |
| |
| import static org.junit.Assert.*; |
| |
| /** |
| * Tests the PatternProcessor class. |
| */ |
| public class PatternProcessorTest { |
| |
| private String format(final long time) { |
| return new SimpleDateFormat("yyyy/MM/dd HH:mm:ss.SSS").format(new Date(time)); |
| } |
| |
| @Test |
| public void testDontInterpretBackslashAsEscape() { |
| final PatternProcessor pp = new PatternProcessor("c:\\test\\new/app-%d{HH-mm-ss}.log"); |
| final Calendar cal = Calendar.getInstance(); |
| cal.set(Calendar.HOUR_OF_DAY, 16); |
| cal.set(Calendar.MINUTE, 02); |
| cal.set(Calendar.SECOND, 15); |
| |
| final StringBuilder buf = new StringBuilder(); |
| pp.formatFileName(buf, cal.getTime(), 23); |
| assertEquals("c:\\test\\new/app-16-02-15.log", buf.toString()); |
| } |
| |
| @Test |
| public void testGetNextTimeHourlyReturnsFirstMinuteOfNextHour() { |
| final PatternProcessor pp = new PatternProcessor("logs/app-%d{yyyy-MM-dd-HH}.log.gz"); |
| final Calendar initial = Calendar.getInstance(); |
| initial.set(2014, Calendar.MARCH, 4, 10, 31, 59); // Tue, March 4, 2014, 10:31 |
| final long actual = pp.getNextTime(initial.getTimeInMillis(), 1, false); |
| |
| // expect Wed, March 4, 2014, 11:00 |
| final Calendar expected = Calendar.getInstance(); |
| expected.set(2014, Calendar.MARCH, 4, 11, 00, 00); |
| expected.set(Calendar.MILLISECOND, 0); |
| assertEquals(format(expected.getTimeInMillis()), format(actual)); |
| } |
| |
| @Test |
| public void testGetNextTimeHourlyReturnsFirstMinuteOfNextHour2() { |
| final PatternProcessor pp = new PatternProcessor("logs/app-%d{yyyy-MM-dd-HH}.log.gz"); |
| final Calendar initial = Calendar.getInstance(); |
| initial.set(2014, Calendar.MARCH, 4, 23, 31, 59); // Tue, March 4, 2014, 23:31 |
| final long actual = pp.getNextTime(initial.getTimeInMillis(), 1, false); |
| |
| // expect Wed, March 5, 2014, 00:00 |
| final Calendar expected = Calendar.getInstance(); |
| expected.set(2014, Calendar.MARCH, 5, 00, 00, 00); |
| expected.set(Calendar.MILLISECOND, 0); |
| assertEquals(format(expected.getTimeInMillis()), format(actual)); |
| } |
| |
| @Test |
| public void testGetNextTimeHourlyReturnsFirstMinuteOfNextYear() { |
| final PatternProcessor pp = new PatternProcessor("logs/app-%d{yyyy-MM-dd-HH}.log.gz"); |
| final Calendar initial = Calendar.getInstance(); |
| initial.set(2015, Calendar.DECEMBER, 31, 23, 31, 59); |
| final long actual = pp.getNextTime(initial.getTimeInMillis(), 1, false); |
| |
| final Calendar expected = Calendar.getInstance(); |
| expected.set(2016, Calendar.JANUARY, 1, 0, 0, 0); |
| expected.set(Calendar.MILLISECOND, 0); |
| assertEquals(format(expected.getTimeInMillis()), format(actual)); |
| } |
| |
| @Test |
| public void testGetNextTimeMillisecondlyReturnsNextMillisec() { |
| final PatternProcessor pp = new PatternProcessor("logs/app-%d{yyyy-MM-dd-HH-mm-ss.SSS}.log.gz"); |
| final Calendar initial = Calendar.getInstance(); |
| initial.set(2014, Calendar.MARCH, 4, 10, 31, 53); // Tue, March 4, 2014, 10:31:53.123 |
| initial.set(Calendar.MILLISECOND, 123); |
| assertEquals("2014/03/04 10:31:53.123", format(initial.getTimeInMillis())); |
| final long actual = pp.getNextTime(initial.getTimeInMillis(), 1, false); |
| |
| // expect Tue, March 4, 2014, 10:31:53.124 |
| final Calendar expected = Calendar.getInstance(); |
| expected.set(2014, Calendar.MARCH, 4, 10, 31, 53); |
| expected.set(Calendar.MILLISECOND, 124); |
| assertEquals(format(expected.getTimeInMillis()), format(actual)); |
| } |
| |
| @Test |
| public void testGetNextTimeMinutelyReturnsFirstSecondOfNextMinute() { |
| final PatternProcessor pp = new PatternProcessor("logs/app-%d{yyyy-MM-dd-HH-mm}.log.gz"); |
| final Calendar initial = Calendar.getInstance(); |
| initial.set(2014, Calendar.MARCH, 4, 10, 31, 59); // Tue, March 4, 2014, 10:31 |
| initial.set(Calendar.MILLISECOND, 0); |
| assertEquals("2014/03/04 10:31:59.000", format(initial.getTimeInMillis())); |
| final long actual = pp.getNextTime(initial.getTimeInMillis(), 1, false); |
| |
| // expect Tue, March 4, 2014, 10:32 |
| final Calendar expected = Calendar.getInstance(); |
| expected.set(2014, Calendar.MARCH, 4, 10, 32, 00); |
| expected.set(Calendar.MILLISECOND, 0); |
| assertEquals(format(expected.getTimeInMillis()), format(actual)); |
| } |
| |
| @Test |
| public void testGetNextTimeMonthlyReturnsFirstDayOfNextMonth() { |
| final PatternProcessor pp = new PatternProcessor("logs/app-%d{yyyy-MM}.log.gz"); |
| final Calendar initial = Calendar.getInstance(); |
| initial.set(2014, Calendar.OCTOBER, 15, 10, 31, 59); // Oct 15th |
| final long actual = pp.getNextTime(initial.getTimeInMillis(), 1, false); |
| |
| // We expect 1st day of next month |
| final Calendar expected = Calendar.getInstance(); |
| expected.set(2014, Calendar.NOVEMBER, 1, 00, 00, 00); |
| expected.set(Calendar.MILLISECOND, 0); |
| assertEquals(format(expected.getTimeInMillis()), format(actual)); |
| } |
| |
| @Test |
| public void testGetNextTimeMonthlyReturnsFirstDayOfNextMonth2() { |
| final PatternProcessor pp = new PatternProcessor("logs/app-%d{yyyy-MM}.log.gz"); |
| final Calendar initial = Calendar.getInstance(); |
| initial.set(2014, Calendar.JANUARY, 31, 10, 31, 59); // 2014 Jan 31st |
| final long actual = pp.getNextTime(initial.getTimeInMillis(), 1, false); |
| |
| // Expect 1st of next month: 2014 Feb 1st |
| final Calendar expected = Calendar.getInstance(); |
| expected.set(2014, Calendar.FEBRUARY, 1, 00, 00, 00); |
| expected.set(Calendar.MILLISECOND, 0); |
| assertEquals(format(expected.getTimeInMillis()), format(actual)); |
| } |
| |
| @Test |
| public void testGetNextTimeMonthlyReturnsFirstDayOfNextMonth3() { |
| final PatternProcessor pp = new PatternProcessor("logs/app-%d{yyyy-MM}.log.gz"); |
| final Calendar initial = Calendar.getInstance(); |
| initial.set(2014, Calendar.DECEMBER, 31, 10, 31, 59); // 2014 Dec 31st |
| final long actual = pp.getNextTime(initial.getTimeInMillis(), 1, false); |
| |
| // Expect 1st of next month: 2015 Jan 1st |
| final Calendar expected = Calendar.getInstance(); |
| expected.set(2015, Calendar.JANUARY, 1, 00, 00, 00); |
| expected.set(Calendar.MILLISECOND, 0); |
| assertEquals(format(expected.getTimeInMillis()), format(actual)); |
| } |
| |
| @Test |
| public void testGetNextTimeMonthlyReturnsFirstDayOfNextYear() { |
| final PatternProcessor pp = new PatternProcessor("logs/app-%d{yyyy-MM}.log.gz"); |
| final Calendar initial = Calendar.getInstance(); |
| initial.set(2015, Calendar.DECEMBER, 28, 0, 0, 0); |
| final long actual = pp.getNextTime(initial.getTimeInMillis(), 1, false); |
| |
| // We expect 1st day of next month |
| final Calendar expected = Calendar.getInstance(); |
| expected.set(2016, Calendar.JANUARY, 1, 00, 00, 00); |
| expected.set(Calendar.MILLISECOND, 0); |
| assertEquals(format(expected.getTimeInMillis()), format(actual)); |
| } |
| |
| @Test |
| public void testGetNextTimeSecondlyReturnsFirstMillisecOfNextSecond() { |
| final PatternProcessor pp = new PatternProcessor("logs/app-%d{yyyy-MM-dd-HH-mm-ss}.log.gz"); |
| final Calendar initial = Calendar.getInstance(); |
| initial.set(2014, Calendar.MARCH, 4, 10, 31, 53); // Tue, March 4, 2014, 10:31:53 |
| initial.set(Calendar.MILLISECOND, 123); |
| assertEquals("2014/03/04 10:31:53.123", format(initial.getTimeInMillis())); |
| final long actual = pp.getNextTime(initial.getTimeInMillis(), 1, false); |
| |
| // expect Tue, March 4, 2014, 10:31:54 |
| final Calendar expected = Calendar.getInstance(); |
| expected.set(2014, Calendar.MARCH, 4, 10, 31, 54); |
| expected.set(Calendar.MILLISECOND, 0); |
| assertEquals(format(expected.getTimeInMillis()), format(actual)); |
| } |
| |
| @Test |
| public void testGetNextTimeWeeklyReturnsFirstDayOfNextWeek_FRANCE() { |
| final Locale old = Locale.getDefault(); |
| Locale.setDefault(Locale.FRANCE); // force 1st day of the week to be Monday |
| |
| try { |
| final PatternProcessor pp = new PatternProcessor("logs/app-%d{yyyy-MM-W}.log.gz"); |
| final Calendar initial = Calendar.getInstance(); |
| initial.set(2014, Calendar.MARCH, 4, 10, 31, 59); // Tue, March 4, 2014 |
| final long actual = pp.getNextTime(initial.getTimeInMillis(), 1, false); |
| |
| // expect Monday, March 10, 2014 |
| final Calendar expected = Calendar.getInstance(); |
| expected.set(2014, Calendar.MARCH, 10, 00, 00, 00); |
| expected.set(Calendar.MILLISECOND, 0); |
| assertEquals(format(expected.getTimeInMillis()), format(actual)); |
| } finally { |
| Locale.setDefault(old); |
| } |
| } |
| |
| @Test |
| public void testGetNextTimeWeeklyReturnsFirstDayOfNextWeek_US() { |
| final Locale old = Locale.getDefault(); |
| Locale.setDefault(Locale.US); // force 1st day of the week to be Sunday |
| |
| try { |
| final PatternProcessor pp = new PatternProcessor("logs/app-%d{yyyy-MM-W}.log.gz"); |
| final Calendar initial = Calendar.getInstance(); |
| initial.set(2014, Calendar.MARCH, 4, 10, 31, 59); // Tue, March 4, 2014 |
| final long actual = pp.getNextTime(initial.getTimeInMillis(), 1, false); |
| |
| // expect Sunday, March 9, 2014 |
| final Calendar expected = Calendar.getInstance(); |
| expected.set(2014, Calendar.MARCH, 9, 00, 00, 00); |
| expected.set(Calendar.MILLISECOND, 0); |
| assertEquals(format(expected.getTimeInMillis()), format(actual)); |
| } finally { |
| Locale.setDefault(old); |
| } |
| } |
| |
| /** |
| * Tests https://issues.apache.org/jira/browse/LOG4J2-1232 |
| */ |
| @Test |
| public void testGetNextTimeWeeklyReturnsFirstWeekInYear_US() { |
| final Locale old = Locale.getDefault(); |
| Locale.setDefault(Locale.US); // force 1st day of the week to be Sunday |
| try { |
| final PatternProcessor pp = new PatternProcessor("logs/market_data_msg.log-%d{yyyy-MM-'W'W}"); |
| final Calendar initial = Calendar.getInstance(); |
| initial.set(2015, Calendar.DECEMBER, 28, 00, 00, 00); // Monday, December 28, 2015 |
| final long actual = pp.getNextTime(initial.getTimeInMillis(), 1, false); |
| |
| // expect Sunday January 3, 2016 |
| final Calendar expected = Calendar.getInstance(); |
| expected.set(2016, Calendar.JANUARY, 3, 00, 00, 00); |
| expected.set(Calendar.MILLISECOND, 0); |
| assertEquals(format(expected.getTimeInMillis()), format(actual)); |
| } finally { |
| Locale.setDefault(old); |
| } |
| } |
| } |