svn commit: r1917 - in logback/trunk/logback-core/src: main/java/ch/qos/logback/core/rolling test/java/ch/qos/logback/core/rolling test/java/ch/qos/logback/core/util test/witness/rolling

Author: ceki Date: Thu Oct 30 19:43:22 2008 New Revision: 1917 Added: logback/trunk/logback-core/src/test/witness/rolling/tbr-test2.3 logback/trunk/logback-core/src/test/witness/rolling/tbr-test4.3 logback/trunk/logback-core/src/test/witness/rolling/tbr-test4B.0 logback/trunk/logback-core/src/test/witness/rolling/tbr-test4B.1 logback/trunk/logback-core/src/test/witness/rolling/tbr-test4B.2 logback/trunk/logback-core/src/test/witness/rolling/tbr-test4B.3 logback/trunk/logback-core/src/test/witness/rolling/tbr-test4B.4 Modified: logback/trunk/logback-core/src/main/java/ch/qos/logback/core/rolling/RollingFileAppender.java logback/trunk/logback-core/src/main/java/ch/qos/logback/core/rolling/TimeBasedRollingPolicy.java logback/trunk/logback-core/src/test/java/ch/qos/logback/core/rolling/TimeBasedRollingTest.java logback/trunk/logback-core/src/test/java/ch/qos/logback/core/util/Compare.java logback/trunk/logback-core/src/test/witness/rolling/tbr-test2.2 logback/trunk/logback-core/src/test/witness/rolling/tbr-test4.2 Log: - fixed LBCORE-21, TimeBasedRollingPolicy will now check at initialization time to see if an existing target file needs to be rolled over - further refactoring of TimebasedRollingPolicyTest Modified: logback/trunk/logback-core/src/main/java/ch/qos/logback/core/rolling/RollingFileAppender.java ============================================================================== --- logback/trunk/logback-core/src/main/java/ch/qos/logback/core/rolling/RollingFileAppender.java (original) +++ logback/trunk/logback-core/src/main/java/ch/qos/logback/core/rolling/RollingFileAppender.java Thu Oct 30 19:43:22 2008 @@ -1,7 +1,7 @@ /** - * Logback: the reliable, generic, fast and flexible logging framework. + * Logback: the generic, reliable, fast and flexible logging framework. * - * Copyright (C) 1999-2006, QOS.ch + * Copyright (C) 2000-2008, QOS.ch * * This library is free software, you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free @@ -25,7 +25,6 @@ * * @author Heinz Richter * @author Ceki Gülcü - * @since 1.3 * */ public class RollingFileAppender<E> extends FileAppender<E> { File activeFileCache; Modified: logback/trunk/logback-core/src/main/java/ch/qos/logback/core/rolling/TimeBasedRollingPolicy.java ============================================================================== --- logback/trunk/logback-core/src/main/java/ch/qos/logback/core/rolling/TimeBasedRollingPolicy.java (original) +++ logback/trunk/logback-core/src/main/java/ch/qos/logback/core/rolling/TimeBasedRollingPolicy.java Thu Oct 30 19:43:22 2008 @@ -14,8 +14,8 @@ import java.util.concurrent.Future; import ch.qos.logback.core.rolling.helper.AsynchronousCompressor; -import ch.qos.logback.core.rolling.helper.Compressor; import ch.qos.logback.core.rolling.helper.CompressionMode; +import ch.qos.logback.core.rolling.helper.Compressor; import ch.qos.logback.core.rolling.helper.DateTokenConverter; import ch.qos.logback.core.rolling.helper.FileNamePattern; import ch.qos.logback.core.rolling.helper.RenameUtil; @@ -24,9 +24,8 @@ /** * <code>TimeBasedRollingPolicy</code> is both easy to configure and quite - * powerful. It allows the roll over to be made based on time. It is - * possible to specify that the roll over occur once per day, per week or - * per month. + * powerful. It allows the roll over to be made based on time. It is possible to + * specify that the roll over occur once per day, per week or per month. * * <p>For more information, please refer to the online manual at * http://logback.qos.ch/manual/appenders.html#TimeBasedRollingPolicy @@ -37,21 +36,21 @@ TriggeringPolicy<E> { static final String FNP_NOT_SET = "The FileNamePattern option must be set before using TimeBasedRollingPolicy. "; static final String SEE_FNP_NOT_SET = "See also http://logback.qos.ch/codes.html#tbr_fnp_not_set"; - static final int DEFAULT_MAX_HISTORY = 0; + static final int NO_DELETE_HISTORY = 0; RollingCalendar rc; long currentTime; long nextCheck; // indicate whether the time has been forced or not boolean isTimeForced = false; - Date lastCheck = new Date(); + Date lastCheck = null; String elapsedPeriodsFileName; FileNamePattern activeFileNamePattern; RenameUtil util = new RenameUtil(); String lastGeneratedFileName; Future<?> future; - int maxHistory = DEFAULT_MAX_HISTORY; + int maxHistory = NO_DELETE_HISTORY; TimeBasedCleaner tbCleaner; public void setCurrentTime(long timeInMillis) { @@ -113,15 +112,32 @@ + "' from file name pattern '" + fileNamePattern.getPattern() + "'."); rc.printPeriodicity(this); - // currentTime = System.currentTimeMillis(); - lastCheck.setTime(getCurrentTime()); + // lastCheck can be set by test classes + // if it has not been set, we set it here + if (lastCheck == null) { + lastCheck = new Date(); + lastCheck.setTime(getCurrentTime()); + if (getParentFileName() != null) { + File currentFile = new File(getParentFileName()); + if (currentFile.exists() && currentFile.canRead()) { + lastCheck.setTime(currentFile.lastModified()); + } + } + } nextCheck = rc.getNextTriggeringMillis(lastCheck); - - if (maxHistory != DEFAULT_MAX_HISTORY) { + + if (maxHistory != NO_DELETE_HISTORY) { tbCleaner = new TimeBasedCleaner(fileNamePattern, rc, maxHistory); } } + + // allow Test classes to act on the lastCheck field to simulate old + // log files needing rollover + void setLastCheck(Date _lastCheck) { + this.lastCheck = _lastCheck; + } + public void rollover() throws RolloverFailure { // when rollover is called the elapsed period's file has @@ -140,7 +156,7 @@ if (tbCleaner != null) { tbCleaner.clean(new Date(getCurrentTime())); } - + // let's update the parent active file name setParentFileName(getNewActiveFileName()); @@ -183,19 +199,17 @@ * file equals the file name for the current period as computed by the * <b>FileNamePattern</b> option. * - * <p> - * The RollingPolicy must know wether it is responsible for changing the name - * of the active file or not. If the active file name is set by the user via - * the configuration file, then the RollingPolicy must let it like it is. If - * the user does not specify an active file name, then the RollingPolicy + * <p> The RollingPolicy must know wether it is responsible for changing the + * name of the active file or not. If the active file name is set by the user + * via the configuration file, then the RollingPolicy must let it like it is. + * If the user does not specify an active file name, then the RollingPolicy * generates one. * - * <p> - * To be sure that the file name used by the parent class has been generated - * by the RollingPolicy and not specified by the user, we keep track of the - * last generated name object and compare its reference to the parent file - * name. If they match, then the RollingPolicy knows it's responsible for the - * change of the file name. + * <p> To be sure that the file name used by the parent class has been + * generated by the RollingPolicy and not specified by the user, we keep track + * of the last generated name object and compare its reference to the parent + * file name. If they match, then the RollingPolicy knows it's responsible for + * the change of the file name. * */ public String getNewActiveFileName() { @@ -214,21 +228,13 @@ long time = getCurrentTime(); if (time >= nextCheck) { - // addInfo("Time to trigger roll-over"); - // We set the elapsedPeriodsFileName before we set the 'lastCheck' - // variable + // We set the elapsedPeriodsFileName before we set the 'lastCheck' variable // The elapsedPeriodsFileName corresponds to the file name of the period // that just elapsed. elapsedPeriodsFileName = activeFileNamePattern.convertDate(lastCheck); - // addInfo("elapsedPeriodsFileName set to "+elapsedPeriodsFileName); lastCheck.setTime(time); nextCheck = rc.getNextTriggeringMillis(lastCheck); - - Date x = new Date(); - x.setTime(nextCheck); - // addInfo("Next check on "+ x); - return true; } else { return false; Modified: logback/trunk/logback-core/src/test/java/ch/qos/logback/core/rolling/TimeBasedRollingTest.java ============================================================================== --- logback/trunk/logback-core/src/test/java/ch/qos/logback/core/rolling/TimeBasedRollingTest.java (original) +++ logback/trunk/logback-core/src/test/java/ch/qos/logback/core/rolling/TimeBasedRollingTest.java Thu Oct 30 19:43:22 2008 @@ -16,7 +16,6 @@ import java.sql.Date; import java.text.SimpleDateFormat; import java.util.ArrayList; -import java.util.Arrays; import java.util.Calendar; import java.util.List; import java.util.concurrent.TimeUnit; @@ -69,31 +68,27 @@ Calendar cal = Calendar.getInstance(); long currentTime; // initialized in setUp() long nextRolloverThreshold; // initialized in setUp() - List<String> filenameList = new ArrayList<String>(); + List<String> expectedFilenameList = new ArrayList<String>(); @Before public void setUp() { context.setName("test"); - cal.set(Calendar.MILLISECOND, 0); + cal.set(Calendar.MILLISECOND, 333); currentTime = cal.getTimeInMillis(); recomputeRolloverThreshold(currentTime); + System.out.println("currentTime=" + sdf.format(new Date(currentTime))); // Delete .log files - { - File target = new File(Constants.OUTPUT_DIR_PREFIX + "test4.log"); - target.mkdirs(); - target.delete(); - } - { - File target = new File(Constants.OUTPUT_DIR_PREFIX + "test5.log"); - target.mkdirs(); - target.delete(); - } - { - File target = new File(Constants.OUTPUT_DIR_PREFIX + "test6.log"); - target.mkdirs(); - target.delete(); - } + deleteStaleLogFile("test4.log"); + deleteStaleLogFile("test4B.log"); + deleteStaleLogFile("test5.log"); + deleteStaleLogFile("test6.log"); + } + + void deleteStaleLogFile(String filename) { + File target = new File(Constants.OUTPUT_DIR_PREFIX + filename); + target.mkdirs(); + target.delete(); } @After @@ -122,61 +117,35 @@ rfa.start(); } - void addFileName(String testId, Date date, boolean compression) { - String fn = Constants.OUTPUT_DIR_PREFIX + testId + sdf.format(date); - if (compression) { - fn += ".gz"; - } - filenameList.add(fn); - } - - String[] computeFilenames(String testStr, boolean compression, String lastFile) { - String[] filenames = new String[3]; - int oneBeforeLast = filenames.length - 1; - for (int i = 0; i < oneBeforeLast; i++) { - filenames[i] = Constants.OUTPUT_DIR_PREFIX + testStr - + sdf.format(cal.getTime()); - if (compression) { - filenames[i] += ".gz"; - } - cal.add(Calendar.SECOND, 1); - } - if (lastFile != null) { - filenames[oneBeforeLast] = Constants.OUTPUT_DIR_PREFIX + lastFile; - } else { - filenames[oneBeforeLast] = Constants.OUTPUT_DIR_PREFIX + testStr - + sdf.format(cal.getTime()); - } - return filenames; - } - /** * Test rolling without compression, file option left blank, no stop/start */ @Test public void noCompression_FileBlank_NoRestart_1() throws Exception { - String testId = "test1-"; + String testId = "test1"; initRFA(rfa1, null); - initTRBP(rfa1, tbrp1, Constants.OUTPUT_DIR_PREFIX + testId + "%d{" + initTRBP(rfa1, tbrp1, Constants.OUTPUT_DIR_PREFIX + testId + "-%d{" + DATE_PATTERN + "}", currentTime, 0); // compute the current filename - addFileName(testId, getTimeForElapsedPeriod(), false); + addExpectedFileName_ByDate(testId, getDateOfCurrentPeriodsStart(), false); incCurrentTime(1100); tbrp1.setCurrentTime(currentTime); for (int i = 0; i < 3; i++) { - addFileNameIfNecessary(testId, false); rfa1.doAppend("Hello---" + i); + addExpectedFileNamedIfItsTime_ByDate(testId, false); incCurrentTime(500); tbrp1.setCurrentTime(currentTime); } + System.out.println(expectedFilenameList); + int i = 0; - for (String fn : filenameList) { + for (String fn : expectedFilenameList) { assertTrue(Compare.compare(fn, Constants.TEST_DIR_PREFIX - + "witness/rolling/tbr-test1." + i++)); + + "witness/rolling/tbr-" + testId + "." + i++)); } } @@ -185,19 +154,21 @@ */ @Test public void noCompression_FileBlank_StopRestart_2() throws Exception { - String testId = "test2-"; + String testId = "test2"; initRFA(rfa1, null); - initTRBP(rfa1, tbrp1, Constants.OUTPUT_DIR_PREFIX + testId + "%d{" + initTRBP(rfa1, tbrp1, Constants.OUTPUT_DIR_PREFIX + testId + "-%d{" + DATE_PATTERN + "}", currentTime, 0); - addFileName(testId, getTimeForElapsedPeriod(), false); + // a new file is created by virtue of rfa.start(); + addExpectedFileName_ByDate(testId, getDateOfCurrentPeriodsStart(), false); + incCurrentTime(1100); tbrp1.setCurrentTime(currentTime); for (int i = 0; i <= 2; i++) { - addFileNameIfNecessary(testId, false); rfa1.doAppend("Hello---" + i); + addExpectedFileNamedIfItsTime_ByDate(testId, false); incCurrentTime(500); tbrp1.setCurrentTime(currentTime); } @@ -205,20 +176,20 @@ rfa1.stop(); initRFA(rfa2, null); - initTRBP(rfa2, tbrp2, Constants.OUTPUT_DIR_PREFIX + "test2-%d{" + initTRBP(rfa2, tbrp2, Constants.OUTPUT_DIR_PREFIX + testId + "-%d{" + DATE_PATTERN + "}", tbrp1.getCurrentTime(), 0); for (int i = 0; i <= 2; i++) { - addFileNameIfNecessary(testId, false); - rfa2.doAppend("Hello---" + i); + addExpectedFileNamedIfItsTime_ByDate(testId, false); + rfa2.doAppend("World---" + i); incCurrentTime(100); tbrp2.setCurrentTime(currentTime); } int i = 0; - for (String fn : filenameList) { + for (String fn : expectedFilenameList) { assertTrue(Compare.compare(fn, Constants.TEST_DIR_PREFIX - + "witness/rolling/tbr-test2." + i++)); + + "witness/rolling/tbr-" + testId + "." + i++)); } } @@ -227,35 +198,31 @@ */ @Test public void withCompression_FileBlank_NoRestart_3() throws Exception { - String testId = "test3-"; + String testId = "test3"; initRFA(rfa1, null); - initTRBP(rfa1, tbrp1, Constants.OUTPUT_DIR_PREFIX + testId + "%d{" + initTRBP(rfa1, tbrp1, Constants.OUTPUT_DIR_PREFIX + testId + "-%d{" + DATE_PATTERN + "}.gz", currentTime, 0); - String[] filenames = computeFilenames(testId, true, null); - - addFileName(testId, getTimeForElapsedPeriod(), true); + addExpectedFileName_ByDate(testId, getDateOfCurrentPeriodsStart(), true); incCurrentTime(1100); tbrp1.setCurrentTime(currentTime); for (int i = 0; i < 3; i++) { - addFileNameIfNecessary(testId, true); + // when i == 2, file name should not have .gz extension + addExpectedFileNamedIfItsTime_ByDate(testId, i != 2); rfa1.doAppend("Hello---" + i); - tbrp1.setCurrentTime(addTime(tbrp1.getCurrentTime(), 500)); + incCurrentTime(500); + tbrp1.setCurrentTime(currentTime); } tbrp1.future.get(2000, TimeUnit.MILLISECONDS); - System.out.println(Arrays.toString(filenames)); - System.out.println(filenameList.toString()); - - for (int i = 0; i < 2; i++) { - assertTrue(Compare.gzCompare(filenameList.get(i), - Constants.TEST_DIR_PREFIX + "witness/rolling/tbr-test3." + i + ".gz")); + int i = 0; + for (String fn : expectedFilenameList) { + assertTrue(Compare.compare(fn, Constants.TEST_DIR_PREFIX + + "witness/rolling/tbr-" + testId + "." + i + addGZIfNotLast(i))); + i++; } - - assertTrue(Compare.compare(filenameList.get(2), Constants.TEST_DIR_PREFIX - + "witness/rolling/tbr-test3.2")); } /** @@ -263,95 +230,89 @@ */ @Test public void noCompression_FileSet_StopRestart_4() throws Exception { - initRFA(rfa1, Constants.OUTPUT_DIR_PREFIX + "test4.log"); - initTRBP(rfa1, tbrp1, Constants.OUTPUT_DIR_PREFIX + "test4-%d{" + String testId = "test4"; + initRFA(rfa1, testId2FileName(testId)); + initTRBP(rfa1, tbrp1, Constants.OUTPUT_DIR_PREFIX + testId + "-%d{" + DATE_PATTERN + "}", currentTime, 0); - String[] filenames = computeFilenames("test4-", false, "test4.log"); + addExpectedFileName_ByDate(testId, getDateOfCurrentPeriodsStart(), false); - System.out.println("CT=" + sdf.format(new Date(currentTime))); - System.out.println("tbrp1 CT=" - + sdf.format(new Date(tbrp1.getCurrentTime()))); - - tbrp1.setCurrentTime(addTime(currentTime, 1100)); - - System.out.println("tbrp1 CT=" - + sdf.format(new Date(tbrp1.getCurrentTime()))); + incCurrentTime(1100); + tbrp1.setCurrentTime(currentTime); for (int i = 0; i <= 2; i++) { rfa1.doAppend("Hello---" + i); - tbrp1.setCurrentTime(addTime(tbrp1.getCurrentTime(), 500)); + addExpectedFileNamedIfItsTime_ByDate(testId, false); + incCurrentTime(500); + tbrp1.setCurrentTime(currentTime); } rfa1.stop(); - initRFA(rfa2, Constants.OUTPUT_DIR_PREFIX + "test4.log"); - initTRBP(rfa2, tbrp2, Constants.OUTPUT_DIR_PREFIX + "test4-%d{" - + DATE_PATTERN + "}", tbrp1.getCurrentTime(), tbrp1.getCurrentTime()); + initRFA(rfa2, testId2FileName(testId)); + initTRBP(rfa2, tbrp2, Constants.OUTPUT_DIR_PREFIX + testId + "-%d{" + + DATE_PATTERN + "}", currentTime, currentTime); for (int i = 0; i <= 2; i++) { rfa2.doAppend("World---" + i); - tbrp2.setCurrentTime(addTime(tbrp2.getCurrentTime(), 100)); + addExpectedFileNamedIfItsTime_ByDate(testId, false); + incCurrentTime(100); + tbrp2.setCurrentTime(currentTime); } - for (int i = 0; i < 3; i++) { - assertTrue(Compare.compare(filenames[i], Constants.TEST_DIR_PREFIX - + "witness/rolling/tbr-test4." + i)); + massageExpectedFilesToCorresponToCurrentTarget("test4.log"); + + int i = 0; + for (String fn : expectedFilenameList) { + assertTrue(Compare.compare(fn, Constants.TEST_DIR_PREFIX + + "witness/rolling/tbr-" + testId + "." + i++)); } } @Test public void noCompression_FileSet_StopRestart_WithLongWait_4B() throws Exception { - initRFA(rfa1, Constants.OUTPUT_DIR_PREFIX + "test4B.log"); - initTRBP(rfa1, tbrp1, Constants.OUTPUT_DIR_PREFIX + "test4B-%d{" + String testId = "test4B"; + initRFA(rfa1, testId2FileName(testId)); + initTRBP(rfa1, tbrp1, Constants.OUTPUT_DIR_PREFIX + testId + "-%d{" + DATE_PATTERN + "}", currentTime, 0); - String[] filenames = computeFilenames("test4B-", false, "test4B.log"); - - System.out.println("CT=" + sdf.format(new Date(currentTime))); - System.out.println("tbrp1 CT=" - + sdf.format(new Date(tbrp1.getCurrentTime()))); - - tbrp1.setCurrentTime(addTime(currentTime, 1100)); + addExpectedFileName_ByDate(testId, getDateOfCurrentPeriodsStart(), false); - System.out.println("tbrp1 CT=" - + sdf.format(new Date(tbrp1.getCurrentTime()))); + incCurrentTime(1100); + tbrp1.setCurrentTime(currentTime); for (int i = 0; i <= 2; i++) { rfa1.doAppend("Hello---" + i); - tbrp1.setCurrentTime(addTime(tbrp1.getCurrentTime(), 500)); + addExpectedFileNamedIfItsTime_ByDate(testId, false); + incCurrentTime(500); + tbrp1.setCurrentTime(currentTime); } rfa1.stop(); - System.out.println("post stop tbrp1 CT=" - + sdf.format(new Date(tbrp1.getCurrentTime()))); - initRFA(rfa2, Constants.OUTPUT_DIR_PREFIX + "test4B.log"); - initTRBP(rfa2, tbrp2, Constants.OUTPUT_DIR_PREFIX + "test4B-%d{" - + DATE_PATTERN + "}", tbrp1.getCurrentTime() + 3000, tbrp1 - .getCurrentTime()); + long fileTimestamp = currentTime; + incCurrentTime(2000); - System.out.println("tbrp2 CT=" - + sdf.format(new Date(tbrp2.getCurrentTime()))); + initRFA(rfa2, Constants.OUTPUT_DIR_PREFIX + "test4B.log"); + initTRBP(rfa2, tbrp2, Constants.OUTPUT_DIR_PREFIX + testId +"-%d{" + + DATE_PATTERN + "}", currentTime, fileTimestamp); for (int i = 0; i <= 2; i++) { rfa2.doAppend("World---" + i); - System.out.println("in loop tbrp2 CT=" - + sdf.format(new Date(tbrp2.getCurrentTime()))); - tbrp2.setCurrentTime(addTime(tbrp2.getCurrentTime(), 500)); + addExpectedFileNamedIfItsTime_ByDate(testId, false); + incCurrentTime(100); + tbrp2.setCurrentTime(currentTime); } - System.out.println("tbrp2 CT=" - + sdf.format(new Date(tbrp2.getCurrentTime()))); + massageExpectedFilesToCorresponToCurrentTarget("test4B.log"); - if (1 == 1) { - return; - } - for (int i = 0; i < 3; i++) { - assertTrue(Compare.compare(filenames[i], Constants.TEST_DIR_PREFIX - + "witness/rolling/tbr-test4." + i)); + int i = 0; + for (String fn : expectedFilenameList) { + assertTrue(Compare.compare(fn, Constants.TEST_DIR_PREFIX + + "witness/rolling/tbr-test4B." + i++)); } + } /** @@ -359,22 +320,30 @@ */ @Test public void noCompression_FileSet_NoRestart_5() throws Exception { - initRFA(rfa1, Constants.OUTPUT_DIR_PREFIX + "test5.log"); - initTRBP(rfa1, tbrp1, Constants.OUTPUT_DIR_PREFIX + "test5-%d{" + String testId = "test5"; + + initRFA(rfa1, testId2FileName(testId)); + initTRBP(rfa1, tbrp1, Constants.OUTPUT_DIR_PREFIX + testId + "-%d{" + DATE_PATTERN + "}", currentTime, 0); - String[] filenames = computeFilenames("test5-", false, "test5.log"); + addExpectedFileName_ByDate(testId, getDateOfCurrentPeriodsStart(), false); - tbrp1.setCurrentTime(addTime(currentTime, 1100)); + incCurrentTime(1100); + tbrp1.setCurrentTime(currentTime); for (int i = 0; i < 3; i++) { rfa1.doAppend("Hello---" + i); - tbrp1.setCurrentTime(addTime(tbrp1.getCurrentTime(), 500)); + addExpectedFileNamedIfItsTime_ByDate(testId, false); + incCurrentTime(500); + tbrp1.setCurrentTime(currentTime); } - for (int i = 0; i < 3; i++) { - assertTrue(Compare.compare(filenames[i], Constants.TEST_DIR_PREFIX - + "witness/rolling/tbr-test5." + i)); + massageExpectedFilesToCorresponToCurrentTarget("test5.log"); + + int i = 0; + for (String fn : expectedFilenameList) { + assertTrue(Compare.compare(fn, Constants.TEST_DIR_PREFIX + + "witness/rolling/tbr-test5." + i++)); } } @@ -383,47 +352,93 @@ */ @Test public void withCompression_FileSet_NoRestart_6() throws Exception { - initRFA(rfa1, Constants.OUTPUT_DIR_PREFIX + "test6.log"); - initTRBP(rfa1, tbrp1, Constants.OUTPUT_DIR_PREFIX + "test6-%d{" + + String testId = "test6"; + + initRFA(rfa1, testId2FileName(testId)); + initTRBP(rfa1, tbrp1, Constants.OUTPUT_DIR_PREFIX + testId + "-%d{" + DATE_PATTERN + "}.gz", currentTime, 0); - String[] filenames = computeFilenames("test6-", true, "test6.log"); + addExpectedFileName_ByDate(testId, getDateOfCurrentPeriodsStart(), true); - tbrp1.setCurrentTime(addTime(currentTime, 1100)); + incCurrentTime(1100); + tbrp1.setCurrentTime(currentTime); for (int i = 0; i < 3; i++) { rfa1.doAppend("Hello---" + i); - tbrp1.setCurrentTime(addTime(tbrp1.getCurrentTime(), 500)); + addExpectedFileNamedIfItsTime_ByDate(testId, true); + incCurrentTime(500); + tbrp1.setCurrentTime(currentTime); } // wait for the compression task to finish tbrp1.future.get(1000, TimeUnit.MILLISECONDS); - for (int i = 0; i < 2; i++) { - assertTrue(Compare.gzCompare(filenames[i], Constants.TEST_DIR_PREFIX - + "witness/rolling/tbr-test6." + i + ".gz")); - } + massageExpectedFilesToCorresponToCurrentTarget("test6.log"); - assertTrue(Compare.compare(filenames[2], Constants.TEST_DIR_PREFIX - + "witness/rolling/tbr-test6.2")); + int i = 0; + for (String fn : expectedFilenameList) { + assertTrue(Compare.compare(fn, Constants.TEST_DIR_PREFIX + + "witness/rolling/tbr-" + testId + "." + i + addGZIfNotLast(i))); + i++; + } } // ========================================================================= // utility methods // ========================================================================= - void addFileNameIfNecessary(String testId, boolean compression) { + String testId2FileName(String testId) { + return Constants.OUTPUT_DIR_PREFIX + testId + ".log"; + } + + void massageExpectedFilesToCorresponToCurrentTarget(String file) { + // we added one too many files by date + expectedFilenameList.remove(expectedFilenameList.size() - 1); + // since file is set, we have to add it + addExpectedFileName_ByFile(file); + } + + String addGZIfNotLast(int i) { + int lastIndex = expectedFilenameList.size() - 1; + if (i != lastIndex) { + return ".gz"; + } else { + return ""; + } + } + + void addExpectedFileName_ByDate(String testId, Date date, boolean gzExtension) { + String fn = Constants.OUTPUT_DIR_PREFIX + testId + "-" + sdf.format(date); + if (gzExtension) { + fn += ".gz"; + } + expectedFilenameList.add(fn); + } + + void addExpectedFileNamedIfItsTime_ByDate(String testId, boolean gzExtension) { if (passThresholdTime(nextRolloverThreshold)) { - addFileName(testId, getTimeForElapsedPeriod(), compression); + addExpectedFileName_ByDate(testId, getDateOfCurrentPeriodsStart(), + gzExtension); recomputeRolloverThreshold(currentTime); } } - Date getTimeForElapsedPeriod() { + void addExpectedFileName_ByFile(String filenameSuffix) { + String fn = Constants.OUTPUT_DIR_PREFIX + filenameSuffix; + expectedFilenameList.add(fn); + } + + Date getDateOfCurrentPeriodsStart() { long delta = currentTime % 1000; return new Date(currentTime - delta); } + Date getDateOfPastPeriodsStart() { + long delta = currentTime % 1000; + return new Date(currentTime - delta - 1000); + } + static long addTime(long currentTime, long timeToWait) { return currentTime + timeToWait; } @@ -441,4 +456,9 @@ void incCurrentTime(long increment) { currentTime += increment; } + + void printLongAsDate(String msg, long time) { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd_HH_mm_ss"); + System.out.println(msg + sdf.format(new Date(time))); + } } Modified: logback/trunk/logback-core/src/test/java/ch/qos/logback/core/util/Compare.java ============================================================================== --- logback/trunk/logback-core/src/test/java/ch/qos/logback/core/util/Compare.java (original) +++ logback/trunk/logback-core/src/test/java/ch/qos/logback/core/util/Compare.java Thu Oct 30 19:43:22 2008 @@ -18,15 +18,41 @@ import java.io.InputStreamReader; import java.util.zip.GZIPInputStream; - public class Compare { static final int B1_NULL = -1; static final int B2_NULL = -2; - public static boolean compare(String file1, String file2) - throws FileNotFoundException, IOException { + public static boolean compare(String file1, String file2) throws FileNotFoundException, IOException { + if (file1.endsWith(".gz")) { + //System.out.println(file1 +" is a gz file"); + return gzFileCompare(file1, file2); + } else { + return regularFileCompare(file1, file2); + } + } + + static BufferedReader gzFileToBufferedReader(String file) throws IOException { + FileInputStream fis = new FileInputStream(file); + GZIPInputStream gzis = new GZIPInputStream(fis); + BufferedReader br = new BufferedReader(new InputStreamReader(gzis)); + return br; + } + + public static boolean gzFileCompare(String file1, String file2) throws IOException { + BufferedReader in1 = gzFileToBufferedReader(file1); + BufferedReader in2 = gzFileToBufferedReader(file2); + return bufferCompare(in1, in2, file1, file2); + } + + public static boolean regularFileCompare(String file1, String file2) + throws FileNotFoundException, IOException { BufferedReader in1 = new BufferedReader(new FileReader(file1)); BufferedReader in2 = new BufferedReader(new FileReader(file2)); + return bufferCompare(in1, in2, file1, file2); + } + + public static boolean bufferCompare(BufferedReader in1, BufferedReader in2, + String file1, String file2) throws FileNotFoundException, IOException { String s1; int lineCounter = 0; @@ -37,9 +63,8 @@ String s2 = in2.readLine(); if (!s1.equals(s2)) { - System.out.println( - "Files [" + file1 + "] and [" + file2 + "] differ on line " - + lineCounter); + System.out.println("Files [" + file1 + "] and [" + file2 + + "] differ on line " + lineCounter); System.out.println("One reads: [" + s1 + "]."); System.out.println("Other reads:[" + s2 + "]."); outputFile(file1); @@ -51,8 +76,8 @@ // the second file is longer if (in2.read() != -1) { - System.out.println( - "File [" + file2 + "] longer than file [" + file1 + "]."); + System.out.println("File [" + file2 + "] longer than file [" + file1 + + "]."); outputFile(file1); outputFile(file2); @@ -62,13 +87,13 @@ return true; } - /** + /** * * Prints file on the console. - * + * */ - private static void outputFile(String file) - throws FileNotFoundException, IOException { + private static void outputFile(String file) throws FileNotFoundException, + IOException { BufferedReader in1 = new BufferedReader(new FileReader(file)); String s1; @@ -93,43 +118,44 @@ System.out.println(s1); } } - - public static boolean gzCompare(String file1, String file2) - throws FileNotFoundException, IOException { - BufferedReader in1 = new BufferedReader(new InputStreamReader(new GZIPInputStream(new FileInputStream(file1)))); - BufferedReader in2 = new BufferedReader(new InputStreamReader(new GZIPInputStream(new FileInputStream(file2)))); - String s1; - int lineCounter = 0; + public static boolean gzCompare(String file1, String file2) + throws FileNotFoundException, IOException { + BufferedReader in1 = new BufferedReader(new InputStreamReader( + new GZIPInputStream(new FileInputStream(file1)))); + BufferedReader in2 = new BufferedReader(new InputStreamReader( + new GZIPInputStream(new FileInputStream(file2)))); - while ((s1 = in1.readLine()) != null) { - lineCounter++; + String s1; + int lineCounter = 0; - String s2 = in2.readLine(); - - if (!s1.equals(s2)) { - System.out.println( - "Files [" + file1 + "] and [" + file2 + "] differ on line " - + lineCounter); - System.out.println("One reads: [" + s1 + "]."); - System.out.println("Other reads:[" + s2 + "]."); - outputFile(file1); - outputFile(file2); + while ((s1 = in1.readLine()) != null) { + lineCounter++; - return false; - } - } + String s2 = in2.readLine(); - // the second file is longer - if (in2.read() != -1) { - System.out.println( - "File [" + file2 + "] longer than file [" + file1 + "]."); + if (!s1.equals(s2)) { + System.out.println("Files [" + file1 + "] and [" + file2 + + "] differ on line " + lineCounter); + System.out.println("One reads: [" + s1 + "]."); + System.out.println("Other reads:[" + s2 + "]."); outputFile(file1); outputFile(file2); return false; } + } - return true; + // the second file is longer + if (in2.read() != -1) { + System.out.println("File [" + file2 + "] longer than file [" + file1 + + "]."); + outputFile(file1); + outputFile(file2); + + return false; } + + return true; + } } Modified: logback/trunk/logback-core/src/test/witness/rolling/tbr-test2.2 ============================================================================== --- logback/trunk/logback-core/src/test/witness/rolling/tbr-test2.2 (original) +++ logback/trunk/logback-core/src/test/witness/rolling/tbr-test2.2 Thu Oct 30 19:43:22 2008 @@ -1,4 +1,2 @@ Hello---2 -Hello---0 -Hello---1 -Hello---2 +World---0 \ No newline at end of file Added: logback/trunk/logback-core/src/test/witness/rolling/tbr-test2.3 ============================================================================== --- (empty file) +++ logback/trunk/logback-core/src/test/witness/rolling/tbr-test2.3 Thu Oct 30 19:43:22 2008 @@ -0,0 +1,2 @@ +World---1 +World---2 \ No newline at end of file Modified: logback/trunk/logback-core/src/test/witness/rolling/tbr-test4.2 ============================================================================== --- logback/trunk/logback-core/src/test/witness/rolling/tbr-test4.2 (original) +++ logback/trunk/logback-core/src/test/witness/rolling/tbr-test4.2 Thu Oct 30 19:43:22 2008 @@ -1,4 +1,2 @@ Hello---2 World---0 -World---1 -World---2 Added: logback/trunk/logback-core/src/test/witness/rolling/tbr-test4.3 ============================================================================== --- (empty file) +++ logback/trunk/logback-core/src/test/witness/rolling/tbr-test4.3 Thu Oct 30 19:43:22 2008 @@ -0,0 +1,2 @@ +World---1 +World---2 Added: logback/trunk/logback-core/src/test/witness/rolling/tbr-test4B.0 ============================================================================== Added: logback/trunk/logback-core/src/test/witness/rolling/tbr-test4B.1 ============================================================================== --- (empty file) +++ logback/trunk/logback-core/src/test/witness/rolling/tbr-test4B.1 Thu Oct 30 19:43:22 2008 @@ -0,0 +1,2 @@ +Hello---0 +Hello---1 \ No newline at end of file Added: logback/trunk/logback-core/src/test/witness/rolling/tbr-test4B.2 ============================================================================== --- (empty file) +++ logback/trunk/logback-core/src/test/witness/rolling/tbr-test4B.2 Thu Oct 30 19:43:22 2008 @@ -0,0 +1 @@ +Hello---2 Added: logback/trunk/logback-core/src/test/witness/rolling/tbr-test4B.3 ============================================================================== --- (empty file) +++ logback/trunk/logback-core/src/test/witness/rolling/tbr-test4B.3 Thu Oct 30 19:43:22 2008 @@ -0,0 +1 @@ +World---0 \ No newline at end of file Added: logback/trunk/logback-core/src/test/witness/rolling/tbr-test4B.4 ============================================================================== --- (empty file) +++ logback/trunk/logback-core/src/test/witness/rolling/tbr-test4B.4 Thu Oct 30 19:43:22 2008 @@ -0,0 +1,2 @@ +World---1 +World---2 \ No newline at end of file
participants (1)
-
noreply.ceki@qos.ch