
Author: ceki Date: Thu Jul 30 23:27:25 2009 New Revision: 2385 Added: logback/trunk/logback-core/src/test/java/ch/qos/logback/core/testUtil/FileToBufferUtil.java Modified: logback/trunk/logback-core/src/test/java/ch/qos/logback/core/rolling/PackageTest.java logback/trunk/logback-core/src/test/java/ch/qos/logback/core/rolling/SizeAndTimeBasedFileNamingAndTriggeringPolicyTest.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/rolling/TimeBasedRollingWithCleanTest.java Log: Initial test case for SizeAndTimeBasedFileNamingAndTriggeringPolicy Modified: logback/trunk/logback-core/src/test/java/ch/qos/logback/core/rolling/PackageTest.java ============================================================================== --- logback/trunk/logback-core/src/test/java/ch/qos/logback/core/rolling/PackageTest.java (original) +++ logback/trunk/logback-core/src/test/java/ch/qos/logback/core/rolling/PackageTest.java Thu Jul 30 23:27:25 2009 @@ -7,6 +7,7 @@ @Suite.SuiteClasses( { RenamingTest.class, SizeBasedRollingTest.class, TimeBasedRollingTest.class, TimeBasedRollingWithCleanTest.class, MultiThreadedRollingTest.class, + SizeAndTimeBasedFileNamingAndTriggeringPolicyTest.class, ch.qos.logback.core.rolling.helper.PackageTest.class }) public class PackageTest { } Modified: logback/trunk/logback-core/src/test/java/ch/qos/logback/core/rolling/SizeAndTimeBasedFileNamingAndTriggeringPolicyTest.java ============================================================================== --- logback/trunk/logback-core/src/test/java/ch/qos/logback/core/rolling/SizeAndTimeBasedFileNamingAndTriggeringPolicyTest.java (original) +++ logback/trunk/logback-core/src/test/java/ch/qos/logback/core/rolling/SizeAndTimeBasedFileNamingAndTriggeringPolicyTest.java Thu Jul 30 23:27:25 2009 @@ -1,7 +1,20 @@ +/** + * Logback: the generic, reliable, fast and flexible logging framework. + * + * Copyright (C) 2000-2009, 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 + * Software Foundation. + */ + package ch.qos.logback.core.rolling; +import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; +import java.io.File; +import java.io.IOException; import java.sql.Date; import java.text.SimpleDateFormat; import java.util.ArrayList; @@ -14,16 +27,15 @@ import ch.qos.logback.core.Context; import ch.qos.logback.core.ContextBase; import ch.qos.logback.core.layout.EchoLayout; +import ch.qos.logback.core.testUtil.FileToBufferUtil; import ch.qos.logback.core.testUtil.RandomUtil; -import ch.qos.logback.core.util.Compare; import ch.qos.logback.core.util.CoreTestConstants; public class SizeAndTimeBasedFileNamingAndTriggeringPolicyTest { static final String DATE_PATTERN = "yyyy-MM-dd_HH_mm_ss"; int diff = RandomUtil.getPositiveInt(); - String randomOutputDir = CoreTestConstants.OUTPUT_DIR_PREFIX + "/" + diff - + "/"; + String randomOutputDir = CoreTestConstants.OUTPUT_DIR_PREFIX + diff + "/"; SizeAndTimeBasedFileNamingAndTriggeringPolicy<Object> satbfnatPolicy = new SizeAndTimeBasedFileNamingAndTriggeringPolicy<Object>(); @@ -42,15 +54,16 @@ int fileSize = 0; int fileIndexCounter = 0; int sizeThreshold; - + @Before public void setUp() { context.setName("test"); cal.set(Calendar.MILLISECOND, 333); currentTime = cal.getTimeInMillis(); recomputeRolloverThreshold(currentTime); - System.out.println("at setUp() currentTime=" - + sdf.format(new Date(currentTime))); + System.out.println(randomOutputDir); + // System.out.println("at setUp() currentTime=" + // + sdf.format(new Date(currentTime))); } @@ -68,11 +81,12 @@ } } - void initTRBP(RollingFileAppender<Object> rfa, TimeBasedRollingPolicy<Object> tbrp, - String filenamePattern, int sizeThreshold, long givenTime, long lastCheck) { + void initTRBP(RollingFileAppender<Object> rfa, + TimeBasedRollingPolicy<Object> tbrp, String filenamePattern, + int sizeThreshold, long givenTime, long lastCheck) { tbrp.setContext(context); - satbfnatPolicy.setMaxFileSize(""+sizeThreshold); + satbfnatPolicy.setMaxFileSize("" + sizeThreshold); tbrp.setTimeBasedTriggering(satbfnatPolicy); tbrp.setFileNamePattern(filenamePattern); tbrp.setParent(rfa); @@ -88,81 +102,113 @@ @Test public void noCompression_FileBSet_NoRestart_1() throws Exception { String testId = "test1"; - System.out.println(randomOutputDir); String file = randomOutputDir + "toto.log"; initRFA(rfa1, file); sizeThreshold = 300; initTRBP(rfa1, tbrp1, randomOutputDir + testId + "-%d{" + DATE_PATTERN + "}-%i.txt", sizeThreshold, currentTime, 0); - addExpectedFileName(testId, getDateOfCurrentPeriodsStart(), fileIndexCounter, false); + addExpectedFileName(testId, getDateOfCurrentPeriodsStart(), + fileIndexCounter, false); incCurrentTime(100); tbrp1.timeBasedTriggering.setCurrentTime(currentTime); - for (int i = 0; i < 100; i++) { - String msg = "Hello -----------------" + i; + int runLength = 100; + String prefix = "Hello -----------------"; + + for (int i = 0; i < runLength; i++) { + String msg = prefix + i; rfa1.doAppend(msg); addExpectedFileNamedIfItsTime(testId, msg, false); incCurrentTime(20); tbrp1.timeBasedTriggering.setCurrentTime(currentTime); } - massageExpectedFilesToCorresponToCurrentTarget(file); - int i = 0; - for (String fn : expectedFilenameList) { - System.out.println(fn); - //assertTrue(Compare.compare(fn, CoreTestConstants.TEST_DIR_PREFIX - // + "witness/rolling/satb-test1." + i++)); + existenceCheck(expectedFilenameList); + contentCheck(runLength, prefix); + + } + + void existenceCheck(String filename) { + assertTrue("File " + filename + " does not exist", new File(filename) + .exists()); + } + + void contentCheck(int runLength, String prefix) throws IOException { + File outputDir = new File(randomOutputDir); + File[] fileArray = outputDir.listFiles(); + List<String> stringList = new ArrayList<String>(); + for (File file : fileArray) { + FileToBufferUtil.readIntoList(file, stringList); + } + + List<String> witnessList = new ArrayList<String>(); + + for(int i = 0; i < runLength; i++) { + witnessList.add(prefix+i); + } + assertEquals(witnessList, stringList); + } + + void existenceCheck(List<String> filenameList) { + for (String filename : filenameList) { + assertTrue("File " + filename + " does not exist", new File(filename) + .exists()); } } - + void massageExpectedFilesToCorresponToCurrentTarget(String file) { // we added one too many files by date expectedFilenameList.remove(expectedFilenameList.size() - 1); expectedFilenameList.add(file); } - + boolean passThresholdTime(long nextRolloverThreshold) { return currentTime >= nextRolloverThreshold; } - - void addExpectedFileNamedIfItsTime(String testId, String msg, boolean gzExtension) { + + void addExpectedFileNamedIfItsTime(String testId, String msg, + boolean gzExtension) { fileSize += msg.getBytes().length; - + if (passThresholdTime(nextRolloverThreshold)) { fileIndexCounter = 0; fileSize = 0; - addExpectedFileName(testId, getDateOfCurrentPeriodsStart(), fileIndexCounter, - gzExtension); + addExpectedFileName(testId, getDateOfCurrentPeriodsStart(), + fileIndexCounter, gzExtension); recomputeRolloverThreshold(currentTime); return; } - - // windows can delay file size changes - if((fileIndexCounter <= 1) && fileSize > sizeThreshold) { - addExpectedFileName(testId, getDateOfCurrentPeriodsStart(), ++fileIndexCounter, - gzExtension); + + // windows can delay file size changes, so we only allow for + // fileIndexCounter 0 and 1 + if ((fileIndexCounter < 1) && fileSize > sizeThreshold) { + addExpectedFileName(testId, getDateOfCurrentPeriodsStart(), + ++fileIndexCounter, gzExtension); fileSize = 0; return; } - + } - void addExpectedFileName(String testId, Date date, int fileIndexCounter, boolean gzExtension) { - String fn = CoreTestConstants.OUTPUT_DIR_PREFIX + testId + "-" + sdf.format(date)+"-"+fileIndexCounter+".txt"; + void addExpectedFileName(String testId, Date date, int fileIndexCounter, + boolean gzExtension) { + + String fn = randomOutputDir + testId + "-" + sdf.format(date) + "-" + + fileIndexCounter + ".txt"; if (gzExtension) { fn += ".gz"; } expectedFilenameList.add(fn); } - + Date getDateOfCurrentPeriodsStart() { long delta = currentTime % 1000; return new Date(currentTime - delta); } - + void incCurrentTime(long increment) { currentTime += increment; } 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 Jul 30 23:27:25 2009 @@ -40,13 +40,13 @@ * with witness files. * * <pre> - * Compression file option Stop/Restart - * Test1 NO BLANK NO - * Test2 YES BLANK NO - * Test3 NO BLANK YES - * Test4 NO SET YES - * Test5 NO SET NO - * Test6 YES SET NO + * Compression file option Stop/Restart + * Test1 NO BLANK NO + * Test2 YES BLANK NO + * Test3 NO BLANK YES + * Test4 NO SET YES + * Test5 NO SET NO + * Test6 YES SET NO * </pre> * * @author Ceki Gülcü @@ -60,10 +60,10 @@ Context context = new ContextBase(); RollingFileAppender<Object> rfa1 = new RollingFileAppender<Object>(); - TimeBasedRollingPolicy tbrp1 = new TimeBasedRollingPolicy(); + TimeBasedRollingPolicy<Object> tbrp1 = new TimeBasedRollingPolicy<Object>(); RollingFileAppender<Object> rfa2 = new RollingFileAppender<Object>(); - TimeBasedRollingPolicy tbrp2 = new TimeBasedRollingPolicy(); + TimeBasedRollingPolicy<Object> tbrp2 = new TimeBasedRollingPolicy<Object>(); Calendar cal = Calendar.getInstance(); long currentTime; // initialized in setUp() @@ -76,7 +76,8 @@ cal.set(Calendar.MILLISECOND, 333); currentTime = cal.getTimeInMillis(); recomputeRolloverThreshold(currentTime); - System.out.println("at setUp() currentTime=" + sdf.format(new Date(currentTime))); + System.out.println("at setUp() currentTime=" + + sdf.format(new Date(currentTime))); // Delete .log files deleteStaleLogFile("test4.log"); @@ -103,11 +104,12 @@ } } - void initTRBP(RollingFileAppender<Object> rfa, TimeBasedRollingPolicy tbrp, + void initTRBP(RollingFileAppender<Object> rfa, TimeBasedRollingPolicy<Object> tbrp, String filenamePattern, long givenTime, long lastCheck) { tbrp.setContext(context); tbrp.setFileNamePattern(filenamePattern); tbrp.setParent(rfa); + tbrp.timeBasedTriggering = new DefaultTimeBasedFileNamingAndTriggeringPolicy<Object>(); tbrp.timeBasedTriggering.setCurrentTime(givenTime); if (lastCheck != 0) { tbrp.timeBasedTriggering.setDateInCurrentPeriod(new Date(lastCheck)); @@ -222,7 +224,7 @@ + "witness/rolling/tbr-" + testId + "." + i++)); } } - + /** * Without compression, file option set, with stop/restart */ @@ -293,7 +295,7 @@ incCurrentTime(2000); initRFA(rfa2, CoreTestConstants.OUTPUT_DIR_PREFIX + "test4B.log"); - initTRBP(rfa2, tbrp2, CoreTestConstants.OUTPUT_DIR_PREFIX + testId +"-%d{" + initTRBP(rfa2, tbrp2, CoreTestConstants.OUTPUT_DIR_PREFIX + testId + "-%d{" + DATE_PATTERN + "}", currentTime, fileTimestamp); for (int i = 0; i <= 2; i++) { @@ -407,7 +409,8 @@ } void addExpectedFileName_ByDate(String testId, Date date, boolean gzExtension) { - String fn = CoreTestConstants.OUTPUT_DIR_PREFIX + testId + "-" + sdf.format(date); + String fn = CoreTestConstants.OUTPUT_DIR_PREFIX + testId + "-" + + sdf.format(date); if (gzExtension) { fn += ".gz"; } Modified: logback/trunk/logback-core/src/test/java/ch/qos/logback/core/rolling/TimeBasedRollingWithCleanTest.java ============================================================================== --- logback/trunk/logback-core/src/test/java/ch/qos/logback/core/rolling/TimeBasedRollingWithCleanTest.java (original) +++ logback/trunk/logback-core/src/test/java/ch/qos/logback/core/rolling/TimeBasedRollingWithCleanTest.java Thu Jul 30 23:27:25 2009 @@ -72,12 +72,13 @@ rfa.setContext(context); rfa.setLayout(layout); // rfa.setFile(Constants.OUTPUT_DIR_PREFIX + "clean.txt"); - TimeBasedRollingPolicy tbrp = new TimeBasedRollingPolicy(); + TimeBasedRollingPolicy<Object> tbrp = new TimeBasedRollingPolicy<Object>(); tbrp.setContext(context); tbrp.setFileNamePattern(fileNamePattern); tbrp.setMaxHistory(maxHistory); tbrp.setParent(rfa); + tbrp.timeBasedTriggering = new DefaultTimeBasedFileNamingAndTriggeringPolicy<Object>(); tbrp.timeBasedTriggering.setCurrentTime(currentTime); tbrp.start(); rfa.setRollingPolicy(tbrp); Added: logback/trunk/logback-core/src/test/java/ch/qos/logback/core/testUtil/FileToBufferUtil.java ============================================================================== --- (empty file) +++ logback/trunk/logback-core/src/test/java/ch/qos/logback/core/testUtil/FileToBufferUtil.java Thu Jul 30 23:27:25 2009 @@ -0,0 +1,33 @@ +/** + * Logback: the generic, reliable, fast and flexible logging framework. + * + * Copyright (C) 2000-2009, 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 + * Software Foundation. + */ + +package ch.qos.logback.core.testUtil; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.List; + +public class FileToBufferUtil { + + static public void readIntoList(File file, List<String> stringList) + throws IOException { + + FileInputStream fis = new FileInputStream(file); + BufferedReader in = new BufferedReader(new InputStreamReader(fis)); + String line; + while( (line = in.readLine()) != null) { + stringList.add(line); + } + in.close(); + } +}