[logback-dev] [GIT] Logback: the generic, reliable, fast and flexible logging framework. branch, master, updated. v_0.9.28-42-g9361dc3

added by portage for gitosis-gentoo git-noreply at pixie.qos.ch
Thu Jun 2 00:07:17 CEST 2011


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Logback: the generic, reliable, fast and flexible logging framework.".

The branch, master has been updated
       via  9361dc343687d87e376b5fbf3216fc4c88395074 (commit)
      from  fa4c0c64511c879482103f6476ad2af84321ba7f (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://git.qos.ch/gitweb/?p=logback.git;a=commit;h=9361dc343687d87e376b5fbf3216fc4c88395074
http://github.com/ceki/logback/commit/9361dc343687d87e376b5fbf3216fc4c88395074

commit 9361dc343687d87e376b5fbf3216fc4c88395074
Author: Ceki Gulcu <ceki at qos.ch>
Date:   Wed Jun 1 23:58:31 2011 +0200

    - Further work on tests:
      1) moved SizeAndTimeBasedFNATP_Test.java to SizeAndTimeBasedFNATP_STest.scala
      2) made sure that SizeAndTimeBased rolling creates the correct zip entry for zip files

diff --git a/logback-core/src/main/java/ch/qos/logback/core/rolling/TimeBasedRollingPolicy.java b/logback-core/src/main/java/ch/qos/logback/core/rolling/TimeBasedRollingPolicy.java
index 1939b60..1a90833 100644
--- a/logback-core/src/main/java/ch/qos/logback/core/rolling/TimeBasedRollingPolicy.java
+++ b/logback-core/src/main/java/ch/qos/logback/core/rolling/TimeBasedRollingPolicy.java
@@ -19,7 +19,6 @@ import java.util.concurrent.Future;
 
 import ch.qos.logback.core.CoreConstants;
 import ch.qos.logback.core.rolling.helper.*;
-import ch.qos.logback.core.util.FileUtil;
 
 /**
  * <code>TimeBasedRollingPolicy</code> is both easy to configure and quite
diff --git a/logback-core/src/main/java/ch/qos/logback/core/rolling/helper/Compressor.java b/logback-core/src/main/java/ch/qos/logback/core/rolling/helper/Compressor.java
index 4797906..9819391 100644
--- a/logback-core/src/main/java/ch/qos/logback/core/rolling/helper/Compressor.java
+++ b/logback-core/src/main/java/ch/qos/logback/core/rolling/helper/Compressor.java
@@ -20,7 +20,6 @@ import java.util.zip.GZIPOutputStream;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipOutputStream;
 
-import ch.qos.logback.core.rolling.TimeBasedRollingPolicy;
 import ch.qos.logback.core.spi.ContextAwareBase;
 import ch.qos.logback.core.status.ErrorStatus;
 import ch.qos.logback.core.status.WarnStatus;
@@ -194,9 +193,15 @@ public class Compressor extends ContextAwareBase {
     int len = fileNamePatternStr.length();
     switch (compressionMode) {
       case GZ:
-        return fileNamePatternStr.substring(0, len - 3);
+    	  if(fileNamePatternStr.endsWith(".gz")) 
+            return fileNamePatternStr.substring(0, len - 3);
+    	  else 
+    		 return fileNamePatternStr;
       case ZIP:
-        return fileNamePatternStr.substring(0, len - 4);
+    	  if(fileNamePatternStr.endsWith(".zip")) 
+    	  return fileNamePatternStr.substring(0, len - 4);
+    	  else 
+    		return fileNamePatternStr;	  
       case NONE:
         return fileNamePatternStr;
     }
diff --git a/logback-core/src/test/java/ch/qos/logback/core/recovery/RecoveryCoordinatorTest.java b/logback-core/src/test/java/ch/qos/logback/core/recovery/RecoveryCoordinatorTest.java
index cd591ee..2f7233e 100644
--- a/logback-core/src/test/java/ch/qos/logback/core/recovery/RecoveryCoordinatorTest.java
+++ b/logback-core/src/test/java/ch/qos/logback/core/recovery/RecoveryCoordinatorTest.java
@@ -31,7 +31,9 @@ public class RecoveryCoordinatorTest {
   
   @Test
   public void smoke() {
-    assertTrue(rc.isTooSoon());
+    // if the machine is really too busy or too slow, rc.isTooSoon can
+    // return false, hence we comment out the next line
+    // assertTrue(rc.isTooSoon());
     rc.setCurrentTime(now+RecoveryCoordinator.BACKOFF_COEFFICIENT_MIN+1);
     assertFalse(rc.isTooSoon());
   }
diff --git a/logback-core/src/test/java/ch/qos/logback/core/rolling/PackageTest.java b/logback-core/src/test/java/ch/qos/logback/core/rolling/PackageTest.java
index a61f8fa..8d20a87 100644
--- a/logback-core/src/test/java/ch/qos/logback/core/rolling/PackageTest.java
+++ b/logback-core/src/test/java/ch/qos/logback/core/rolling/PackageTest.java
@@ -18,9 +18,9 @@ import org.junit.runners.Suite;
 
 @RunWith(Suite.class)
 @Suite.SuiteClasses({RenameUtilTest.class, SizeBasedRolling_STest.class,
-        TimeBasedRolling_STest.class, TimeBasedRollingWithArchiveRemovalTest.class,
+	    TimeBasedRolling_STest.class, TimeBasedRollingWithArchiveRemovalTest.class,
         MultiThreadedRollingTest.class,
-        SizeAndTimeBasedFNATP_Test.class,
+        SizeAndTimeBasedFNATP_STest.class,
         RollingFileAppenderTest.class,
         ch.qos.logback.core.rolling.helper.PackageTest.class})
 public class PackageTest {
diff --git a/logback-core/src/test/java/ch/qos/logback/core/rolling/SizeAndTimeBasedFNATP_Test.java b/logback-core/src/test/java/ch/qos/logback/core/rolling/SizeAndTimeBasedFNATP_Test.java
deleted file mode 100644
index 7e4cc05..0000000
--- a/logback-core/src/test/java/ch/qos/logback/core/rolling/SizeAndTimeBasedFNATP_Test.java
+++ /dev/null
@@ -1,273 +0,0 @@
-/**
- * Logback: the reliable, generic, fast and flexible logging framework.
- * Copyright (C) 1999-2011, QOS.ch. All rights reserved.
- *
- * This program and the accompanying materials are dual-licensed under
- * either the terms of the Eclipse Public License v1.0 as published by
- * the Eclipse Foundation
- *
- *   or (per the licensee's choosing)
- *
- * under the terms of the GNU Lesser General Public License version 2.1
- * as published by the Free Software Foundation.
- */
-package ch.qos.logback.core.rolling;
-
-
-import java.io.File;
-import java.util.Date;
-
-import ch.qos.logback.core.status.InfoStatus;
-import ch.qos.logback.core.status.StatusManager;
-import org.junit.Before;
-import org.junit.Test;
-
-import ch.qos.logback.core.util.StatusPrinter;
-
-public class SizeAndTimeBasedFNATP_Test extends
-        ScaffoldingForRollingTests {
-
-  SizeAndTimeBasedFNATP<Object> sizeAndTimeBasedFNATP;
-  RollingFileAppender<Object> rfa1 = new RollingFileAppender<Object>();
-  TimeBasedRollingPolicy<Object> tbrp1 = new TimeBasedRollingPolicy<Object>();
-
-  RollingFileAppender<Object> rfa2 = new RollingFileAppender<Object>();
-  TimeBasedRollingPolicy<Object> tbrp2 = new TimeBasedRollingPolicy<Object>();
-
-  StatusManager sm = context.getStatusManager();
-
-  int fileSize = 0;
-  int fileIndexCounter = 0;
-  int sizeThreshold;
-
-  @Before
-  @Override
-  public void setUp() {
-    super.setUp();
-  }
-
-  void initRFA(RollingFileAppender<Object> rfa, String filename) {
-    rfa.setContext(context);
-    rfa.setEncoder(encoder);
-    if (filename != null) {
-      rfa.setFile(filename);
-    }
-  }
-
-  void initTRBP(RollingFileAppender<Object> rfa,
-                TimeBasedRollingPolicy<Object> tbrp, String filenamePattern,
-                int sizeThreshold, long givenTime, long lastCheck) {
-
-    sizeAndTimeBasedFNATP = new SizeAndTimeBasedFNATP<Object>();
-    tbrp.setContext(context);
-    sizeAndTimeBasedFNATP.setMaxFileSize("" + sizeThreshold);
-    tbrp.setTimeBasedFileNamingAndTriggeringPolicy(sizeAndTimeBasedFNATP);
-    tbrp.setFileNamePattern(filenamePattern);
-    tbrp.setParent(rfa);
-    tbrp.timeBasedFileNamingAndTriggeringPolicy.setCurrentTime(givenTime);
-//    if (lastCheck != 0) {
-//      tbrp.timeBasedTriggering.setDateInCurrentPeriod(new Date(lastCheck));
-//    }
-    rfa.setRollingPolicy(tbrp);
-    tbrp.start();
-    rfa.start();
-  }
-
-  @Test
-  public void noCompression_FileSet_NoRestart_1() throws Exception {
-    String testId = "test1";
-    String file = randomOutputDir + "toto.log";
-    initRFA(rfa1, file);
-    sizeThreshold = 300;
-    initTRBP(rfa1, tbrp1, randomOutputDir + testId + "-%d{"
-            + DATE_PATTERN_WITH_SECONDS + "}-%i.txt", sizeThreshold, currentTime, 0);
-
-    addExpectedFileName(testId, getDateOfCurrentPeriodsStart(),
-            fileIndexCounter, false);
-
-    incCurrentTime(100);
-    tbrp1.timeBasedFileNamingAndTriggeringPolicy.setCurrentTime(currentTime);
-
-    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.timeBasedFileNamingAndTriggeringPolicy.setCurrentTime(currentTime);
-    }
-
-    massageExpectedFilesToCorresponToCurrentTarget(file);
-    existenceCheck(expectedFilenameList);
-    sortedContentCheck(randomOutputDir, runLength, prefix);
-  }
-
-  @Test
-  public void noCompression_FileBlank_NoRestart_2() throws Exception {
-    String testId = "test1";
-    initRFA(rfa1, null);
-    sizeThreshold = 300;
-    initTRBP(rfa1, tbrp1, randomOutputDir + testId + "-%d{"
-            + DATE_PATTERN_WITH_SECONDS + "}-%i.txt", sizeThreshold, currentTime, 0);
-
-    addExpectedFileName(testId, getDateOfCurrentPeriodsStart(),
-            fileIndexCounter, false);
-
-    incCurrentTime(100);
-    tbrp1.timeBasedFileNamingAndTriggeringPolicy.setCurrentTime(currentTime);
-
-    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.timeBasedFileNamingAndTriggeringPolicy.setCurrentTime(currentTime);
-    }
-    existenceCheck(expectedFilenameList);
-    sortedContentCheck(randomOutputDir, runLength, prefix);
-  }
-
-  @Test
-  public void noCompression_FileBlank_WithStopStart_3() throws Exception {
-    String testId = "test3";
-    initRFA(rfa1, null);
-    sizeThreshold = 300;
-    initTRBP(rfa1, tbrp1, randomOutputDir + testId + "-%d{"
-            + DATE_PATTERN_WITH_SECONDS + "}-%i.txt", sizeThreshold, currentTime, 0);
-
-    addExpectedFileName(testId, getDateOfCurrentPeriodsStart(),
-            fileIndexCounter, false);
-
-    incCurrentTime(100);
-    tbrp1.timeBasedFileNamingAndTriggeringPolicy.setCurrentTime(currentTime);
-
-    int runLength = 100;
-    String prefix = "Hello -----------------";
-
-    int i = 0;
-
-    for (; i < runLength; i++) {
-      String msg = prefix + i;
-      rfa1.doAppend(msg);
-      addExpectedFileNamedIfItsTime(testId, msg, false);
-      incCurrentTime(20);
-      tbrp1.timeBasedFileNamingAndTriggeringPolicy.setCurrentTime(currentTime);
-    }
-    rfa1.stop();
-    initRFA(rfa2, null);
-    initTRBP(rfa2, tbrp2, randomOutputDir + testId + "-%d{"
-            + DATE_PATTERN_WITH_SECONDS + "}-%i.txt", sizeThreshold, currentTime, 0);
-
-    runLength *= 2;
-    for (; i < runLength; i++) {
-      String msg = prefix + i;
-      addExpectedFileNamedIfItsTime(testId, msg, false);
-      rfa2.doAppend(msg);
-      incCurrentTime(100);
-      tbrp2.timeBasedFileNamingAndTriggeringPolicy.setCurrentTime(currentTime);
-    }
-    StatusPrinter.print(context);
-    existenceCheck(expectedFilenameList);
-    sortedContentCheck(randomOutputDir, runLength, prefix);
-  }
-
-  @Test
-  public void noCompression_FileSet_WithStopStart_4() throws Exception {
-    String testId = "test4";
-    String file = randomOutputDir + testId + ".log";
-    initRFA(rfa1, file);
-    sizeThreshold = 300;
-    initTRBP(rfa1, tbrp1, randomOutputDir + testId + "-%d{"
-            + DATE_PATTERN_WITH_SECONDS + "}-%i.txt", sizeThreshold, currentTime, 0);
-
-    incCurrentTime(100);
-    tbrp1.timeBasedFileNamingAndTriggeringPolicy.setCurrentTime(currentTime);
-
-
-    String prefix = "Hello -----------------";
-
-    int runLength = 100;
-    int i = 0;
-
-    for (; i < runLength; i++) {
-      incCurrentTime(20);
-      tbrp1.timeBasedFileNamingAndTriggeringPolicy.setCurrentTime(currentTime);
-      String msg = prefix + i;
-      rfa1.doAppend(msg);
-      addExpectedFileNamedIfItsTime(testId, msg, false);
-
-    }
-    rfa1.stop();
-
-    File f = new File(file);
-    f.setLastModified(currentTime);
-
-    sm.add(new InfoStatus("Time when rfa1 is stopped: " + new Date(currentTime), this));
-    sm.add(new InfoStatus("currentTime%1000=" + (currentTime % 1000), this));
-
-    initRFA(rfa2, file);
-    initTRBP(rfa2, tbrp2, randomOutputDir + testId + "-%d{"
-            + DATE_PATTERN_WITH_SECONDS + "}-%i.txt", sizeThreshold, currentTime, 0);
-
-    runLength *= 2;
-    for (; i < runLength; i++) {
-      incCurrentTime(100);
-      tbrp2.timeBasedFileNamingAndTriggeringPolicy.setCurrentTime(currentTime);
-      String msg = prefix + i;
-      addExpectedFileNamedIfItsTime(testId, msg, false);
-      rfa2.doAppend(msg);
-    }
-    StatusPrinter.print(context);
-    massageExpectedFilesToCorresponToCurrentTarget(file);
-    sortedContentCheck(randomOutputDir, runLength, prefix);
-    existenceCheck(expectedFilenameList);
-  }
-
-
-  void massageExpectedFilesToCorresponToCurrentTarget(String file) {
-    // we added one too many files by date
-    expectedFilenameList.remove(expectedFilenameList.size() - 1);
-    expectedFilenameList.add(file);
-  }
-
-  void addExpectedFileNamedIfItsTime(String testId, String msg,
-                                     boolean gzExtension) {
-    fileSize += msg.getBytes().length;
-
-    if (passThresholdTime(nextRolloverThreshold)) {
-      fileIndexCounter = 0;
-      fileSize = 0;
-      addExpectedFileName(testId, getDateOfCurrentPeriodsStart(),
-              fileIndexCounter, gzExtension);
-      recomputeRolloverThreshold(currentTime);
-      return;
-    }
-
-    // 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 = randomOutputDir + testId + "-" + SDF.format(date) + "-"
-            + fileIndexCounter + ".txt";
-    if (gzExtension) {
-      fn += ".gz";
-    }
-    sm.add(new InfoStatus("xx Adding " + fn, this));
-    expectedFilenameList.add(fn);
-  }
-
-}
diff --git a/logback-core/src/test/java/ch/qos/logback/core/spi/AppenderAttachableImplLockTest.java b/logback-core/src/test/java/ch/qos/logback/core/spi/AppenderAttachableImplLockTest.java
index ea0a8e3..c000d7d 100644
--- a/logback-core/src/test/java/ch/qos/logback/core/spi/AppenderAttachableImplLockTest.java
+++ b/logback-core/src/test/java/ch/qos/logback/core/spi/AppenderAttachableImplLockTest.java
@@ -50,7 +50,7 @@ public class AppenderAttachableImplLockTest {
   private AppenderAttachableImpl<Integer> aai = new AppenderAttachableImpl<Integer>();
 
   @SuppressWarnings("unchecked")
-  @Test(timeout = 1000)
+  @Test(timeout = 5000)
   public void getAppenderBoom() {
 
     Appender<Integer> mockAppender1 = EasyMock.createStrictMock(Appender.class);
diff --git a/logback-core/src/test/java/ch/qos/logback/core/testUtil/FileToBufferUtil.java b/logback-core/src/test/java/ch/qos/logback/core/testUtil/FileToBufferUtil.java
index 2caa7dd..fdc9fea 100644
--- a/logback-core/src/test/java/ch/qos/logback/core/testUtil/FileToBufferUtil.java
+++ b/logback-core/src/test/java/ch/qos/logback/core/testUtil/FileToBufferUtil.java
@@ -13,13 +13,17 @@
  */
 package ch.qos.logback.core.testUtil;
 
-import java.io.*;
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
 import java.util.Enumeration;
 import java.util.List;
 import java.util.zip.GZIPInputStream;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipFile;
-import java.util.zip.ZipInputStream;
 
 public class FileToBufferUtil {
 
@@ -30,15 +34,13 @@ public class FileToBufferUtil {
       gzFileReadIntoList(file, stringList);
     } else if (file.getName().endsWith(".zip")) {
       zipFileReadIntoList(file, stringList);
-
     } else {
       regularReadIntoList(file, stringList);
     }
   }
 
   private static void zipFileReadIntoList(File file, List<String> stringList) throws IOException {
-    FileInputStream fis = new FileInputStream(file);
-    ZipInputStream zin = new ZipInputStream(new BufferedInputStream(fis));
+	System.out.println("Reading zip file ["+file+"]");
     ZipFile zipFile = new ZipFile(file);
     Enumeration entries = zipFile.entries();
     ZipEntry entry = (ZipEntry) entries.nextElement();
diff --git a/logback-core/src/test/scala/ch/qos/logback/core/rolling/RollingScaffolding.scala b/logback-core/src/test/scala/ch/qos/logback/core/rolling/RollingScaffolding.scala
index 23da3c3..5d4f71a 100644
--- a/logback-core/src/test/scala/ch/qos/logback/core/rolling/RollingScaffolding.scala
+++ b/logback-core/src/test/scala/ch/qos/logback/core/rolling/RollingScaffolding.scala
@@ -21,12 +21,16 @@ import org.junit.Assert._
 import java.io.File
 import ch.qos.logback.core.testUtil.{FileToBufferUtil, RandomUtil}
 import java.util.{ArrayList, Date, Calendar}
+import java.util.zip.{ZipEntry, ZipFile}
+import com.sun.xml.internal.ws.developer.MemberSubmissionAddressing.Validation
 
 trait RollingScaffolding {
   final val DATE_PATTERN_WITH_SECONDS = "yyyy-MM-dd_HH_mm_ss"
   final val SDF = new CachingDateFormatter(DATE_PATTERN_WITH_SECONDS)
 
-  var context: Context = new ContextBase
+  val context: Context = new ContextBase
+  val sm = context.getStatusManager()
+  
   var diff: Int = RandomUtil.getPositiveInt
 
   protected var currentTime: Long = 0L
@@ -43,7 +47,7 @@ trait RollingScaffolding {
     context.setName("test")
     cal.set(Calendar.MILLISECOND, 333)
     currentTime = cal.getTimeInMillis
-    nextRolloverThreshold = recomputeRolloverThreshold(currentTime)
+    recomputeRolloverThreshold(currentTime)
   }
 
   protected def incCurrentTime(increment: Long): Unit = {
@@ -69,10 +73,16 @@ trait RollingScaffolding {
 
   }
 
+  protected def addExpectedFileName_ByFileIndexCounter(randomOutputDir: String, testId: String, millis: Long, fileIndexCounter: Int, compressionSuffix: String): Unit = {
+    var fn: String = randomOutputDir + testId + "-" + SDF.format(millis) + "-" + fileIndexCounter + ".txt"+compressionSuffix
+    expectedFilenameList = expectedFilenameList ::: List(fn)
+  }
+
+    
   protected def addExpectedFileNamedIfItsTime_ByDate(outputDir: String, testId: String, gzExtension: Boolean): Unit = {
     if (passThresholdTime(nextRolloverThreshold)) {
       addExpectedFileName_ByDate(outputDir, testId, getMillisOfCurrentPeriodsStart, gzExtension)
-      nextRolloverThreshold = recomputeRolloverThreshold(currentTime)
+      recomputeRolloverThreshold(currentTime)
     }
   }
 
@@ -80,9 +90,9 @@ trait RollingScaffolding {
     return currentTime >= nextRolloverThreshold
   }
 
-  protected def recomputeRolloverThreshold(ct: Long): Long = {
+  protected def recomputeRolloverThreshold(ct: Long) {
     var delta: Long = ct % 1000
-    (ct - delta) + 1000
+    nextRolloverThreshold = (ct - delta) + 1000
   }
 
   private[rolling] def addGZIfNotLast(i: Int, suff: String): String = {
@@ -145,4 +155,30 @@ trait RollingScaffolding {
     import scala.collection.JavaConversions.asScalaBuffer
     assertEquals(witnessList, asScalaBuffer(stringList))
   }
+
+  def zipEntryNameCheck(expectedFilenameList: List[String], pattern: String): Unit = {
+    expectedFilenameList.foreach(filepath => checkZipEntryName(filepath, pattern))
+  }
+
+  def checkZipEntryMatchesZipFilename(expectedFilenameList: List[String], pattern: String): Unit = {
+    expectedFilenameList.foreach(filepath => checkZipEntryName(filepath, stripStemFromZipFilename(filepath)))
+
+    def stripStemFromZipFilename(filepath: String) = {
+      val filepathAsFile = new File(filepath)
+      val stem = filepathAsFile.getName
+      stem.dropRight(".zip".length)
+    }
+  }
+
+  def checkZipEntryName(filepath: String, pattern: String): Unit = {
+    System.out.println("Checking [" + filepath + "]")
+    var zf: ZipFile = new ZipFile(filepath)
+    var entries: java.util.Enumeration[_ <: ZipEntry] = zf.entries
+    assert((entries.hasMoreElements))
+    var firstZipEntry: ZipEntry = entries.nextElement
+    assert((!entries.hasMoreElements))
+    System.out.println("Testing zip entry [" + firstZipEntry.getName + "]")
+    assertTrue(firstZipEntry.getName.matches(pattern))
+  }
+
 }
\ No newline at end of file
diff --git a/logback-core/src/test/scala/ch/qos/logback/core/rolling/SizeAndTimeBasedFNATP_STest.scala b/logback-core/src/test/scala/ch/qos/logback/core/rolling/SizeAndTimeBasedFNATP_STest.scala
index 643fce2..370323f 100644
--- a/logback-core/src/test/scala/ch/qos/logback/core/rolling/SizeAndTimeBasedFNATP_STest.scala
+++ b/logback-core/src/test/scala/ch/qos/logback/core/rolling/SizeAndTimeBasedFNATP_STest.scala
@@ -13,11 +13,14 @@ package ch.qos.logback.core.rolling
  * under the terms of the GNU Lesser General Public License version 2.1
  * as published by the Free Software Foundation.
  */
-import ch.qos.logback.core.encoder.EchoEncoder
-import ch.qos.logback.core.status.InfoStatus
-import java.util.Date
+
+import ch.qos.logback.core.encoder.EchoEncoder
+import ch.qos.logback.core.status.InfoStatus
+import java.util.Date
 import org.junit.{Ignore, Test}
-import org.junit.Before
+import org.junit.Before
+import java.io.File
+import ch.qos.logback.core.util.StatusPrinter
 
 /**
  * @author Ceki G&uuml;c&uuml;
@@ -33,12 +36,12 @@ class SizeAndTimeBasedFNATP_STest extends RollingScaffolding {
   var fileSize = 0
   var fileIndexCounter = 0
   var sizeThreshold = 0
-  
+
   @Before
   def setUp() {
     setUpScaffolding
   }
-  
+
   private def initRollingFileAppender(rfa: RollingFileAppender[AnyRef], filename: String): Unit = {
     rfa.setContext(context)
     rfa.setEncoder(encoder)
@@ -60,43 +63,31 @@ class SizeAndTimeBasedFNATP_STest extends RollingScaffolding {
     rfa.start
   }
 
-  private def addExpectedFileName(randomOutputDir: String, testId: String, millis: Long, fileIndexCounter: Int, gzExtension: Boolean): Unit = {
-    var fn: String = randomOutputDir + testId + "-" + SDF.format(millis) + "-" + fileIndexCounter + ".txt"
-    if (gzExtension) {
-      fn += ".gz"
+  private def addExpectedFileNamedIfItsTime(randomOutputDir: String, testId: String, msg: String, compressionSuffix: String) {
+    fileSize = fileSize + msg.getBytes.length
+    if (passThresholdTime(nextRolloverThreshold)) {
+      fileIndexCounter = 0
+      fileSize = 0
+      addExpectedFileName_ByFileIndexCounter(randomOutputDir, testId, getMillisOfCurrentPeriodsStart, fileIndexCounter, compressionSuffix)
+      recomputeRolloverThreshold(currentTime)
+      return
     }
-     expectedFilenameList = expectedFilenameList ::: List(fn)
-  }
-
-  private def addExpectedFileNamedIfItsTime(randomOutputDir: String, testId: String, msg: String, gzExtension: Boolean): Unit = {
-      fileSize = fileSize + msg.getBytes.length
-      if (passThresholdTime(nextRolloverThreshold)) {
-        fileIndexCounter = 0
-        fileSize = 0
-        addExpectedFileName(randomOutputDir, testId, getMillisOfCurrentPeriodsStart, fileIndexCounter, gzExtension)
-        recomputeRolloverThreshold(currentTime)
-        return
-      }
 
     // windows can delay file size changes, so we only allow for
-    // fileIndexCounter 0 and 1
-      if ((fileIndexCounter < 1) && fileSize > sizeThreshold) {
-        addExpectedFileName(randomOutputDir, testId, getMillisOfCurrentPeriodsStart, ({
-          fileIndexCounter += 1; fileIndexCounter - 1
-        }), gzExtension)
-        fileSize = 0
-        return
-      }
+    // fileIndexCounter 0
+    if ((fileIndexCounter < 1) && fileSize > sizeThreshold) {
+      addExpectedFileName_ByFileIndexCounter(randomOutputDir, testId, getMillisOfCurrentPeriodsStart, fileIndexCounter, compressionSuffix)
+      fileIndexCounter = fileIndexCounter + 1 
+      fileSize = 0
     }
+  }
 
-  @Test
-  def noCompression_FileSet_NoRestart_1 {
-    var testId: String = "test1"
-    var file: String = randomOutputDir + "toto.log"
+  def generic(testId: String, stem: String, withSecondPhase: Boolean, compressionSuffix: String = "") {
+    var file = if (stem != null) randomOutputDir + stem else null
     initRollingFileAppender(rfa1, file)
     sizeThreshold = 300
-    initPolicies(rfa1, tbrp1, randomOutputDir + testId + "-%d{" + DATE_PATTERN_WITH_SECONDS + "}-%i.txt", sizeThreshold, currentTime, 0)
-    addExpectedFileName(randomOutputDir, testId, getMillisOfCurrentPeriodsStart, fileIndexCounter, false)
+    initPolicies(rfa1, tbrp1, randomOutputDir + testId + "-%d{" + DATE_PATTERN_WITH_SECONDS + "}-%i.txt"+compressionSuffix, sizeThreshold, currentTime, 0)
+    addExpectedFileName_ByFileIndexCounter(randomOutputDir, testId, getMillisOfCurrentPeriodsStart, fileIndexCounter, compressionSuffix)
     incCurrentTime(100)
     tbrp1.timeBasedFileNamingAndTriggeringPolicy.setCurrentTime(currentTime)
     var runLength: Int = 100
@@ -105,14 +96,93 @@ class SizeAndTimeBasedFNATP_STest extends RollingScaffolding {
     for (i <- 0 until runLength) {
       var msg: String = prefix + i
       rfa1.doAppend(msg)
-      addExpectedFileNamedIfItsTime(randomOutputDir, testId, msg, false)
+      addExpectedFileNamedIfItsTime(randomOutputDir, testId, msg, compressionSuffix)
       incCurrentTime(20)
       tbrp1.timeBasedFileNamingAndTriggeringPolicy.setCurrentTime(currentTime)
     }
-    massageExpectedFilesToCorresponToCurrentTarget(file)
+
+
+    if(withSecondPhase) {
+      secondPhase
+      runLength = runLength*2
+    }
+    
+    if (stem != null)
+      massageExpectedFilesToCorresponToCurrentTarget(file)
+
+    Thread.sleep(20)
+    // wait for compression to finish
+    if(tbrp1.future != null) {
+      tbrp1.future.get()
+    }
+    
+    StatusPrinter.print(context)
     expectedFilenameList.foreach(println(_))
- 
     existenceCheck(expectedFilenameList)
     sortedContentCheck(randomOutputDir, runLength, prefix)
+
+    def secondPhase() {
+      rfa1.stop();
+   
+      if(stem != null) {
+        val f = new File(file);
+        f.setLastModified(currentTime);
+      }
+   
+      sm.add(new InfoStatus("Time when rfa1 is stopped: " + new Date(currentTime), this));
+      sm.add(new InfoStatus("currentTime%1000=" + (currentTime % 1000), this));
+
+      initRollingFileAppender(rfa2, file);
+      initPolicies(rfa2, tbrp2, randomOutputDir + testId + "-%d{"
+              + DATE_PATTERN_WITH_SECONDS + "}-%i.txt"+compressionSuffix, sizeThreshold, currentTime, 0);
+
+      for (i <- runLength until runLength * 2) {
+        incCurrentTime(100);
+        tbrp2.timeBasedFileNamingAndTriggeringPolicy.setCurrentTime(currentTime);
+        var msg = prefix + i
+        rfa2.doAppend(msg);
+        addExpectedFileNamedIfItsTime(randomOutputDir, testId, msg, compressionSuffix);
+      }         
+    }
+  }
+
+  val FIRST_PHASE_ONLY = false
+  val WITH_SECOND_PHASE = true
+
+  @Test
+  def noCompression_FileSet_NoRestart_1 {
+    generic("test1", "toto.log", FIRST_PHASE_ONLY)
+  }
+
+  @Test
+  def noCompression_FileBlank_NoRestart_2 {
+    generic("test2", null, FIRST_PHASE_ONLY)
+  }
+
+  @Test
+  def noCompression_FileBlank_WithStopStart_3 {
+    generic("test3", null, WITH_SECOND_PHASE)
+  }
+  
+  @Test
+  def noCompression_FileSet_WithStopStart_4 {
+    generic("test4", "test4.log", WITH_SECOND_PHASE)
+  }
+
+  @Test
+  def withGZCompression_FileSet_NoRestart_5 {
+    generic("test5", "toto.log", FIRST_PHASE_ONLY, ".gz")
+  }
+
+  @Test
+  def withGZCompression_FileBlank_NoRestart_6 {
+    generic("test6", null, FIRST_PHASE_ONLY, ".gz")
+  }
+
+  @Test
+  def withZipCompression_FileSet_NoRestart_7 {
+    generic("test7", "toto.log", FIRST_PHASE_ONLY, ".zip")
+    checkZipEntryMatchesZipFilename(expectedFilenameList.filter(_.endsWith(".zip")), "test7-20\\d{2}-\\d{2}-\\d{2}_\\d{2}_\\d{2}_\\d{2}-\\d")
+
   }
 }
diff --git a/logback-core/src/test/scala/ch/qos/logback/core/rolling/SizeBasedRolling_STest.scala b/logback-core/src/test/scala/ch/qos/logback/core/rolling/SizeBasedRolling_STest.scala
new file mode 100644
index 0000000..ebeff2b
--- /dev/null
+++ b/logback-core/src/test/scala/ch/qos/logback/core/rolling/SizeBasedRolling_STest.scala
@@ -0,0 +1,116 @@
+/**
+ * Logback: the reliable, generic, fast and flexible logging framework.
+ * Copyright (C) 1999-2010, QOS.ch. All rights reserved.
+ *
+ * This program and the accompanying materials are dual-licensed under
+ * either the terms of the Eclipse Public License v1.0 as published by
+ * the Eclipse Foundation
+ *
+ *   or (per the licensee's choosing)
+ *
+ * under the terms of the GNU Lesser General Public License version 2.1
+ * as published by the Free Software Foundation.
+ */
+package ch.qos.logback.core.rolling
+
+import org.junit.{Before, Test}
+import ch.qos.logback.core.encoder.EchoEncoder
+import java.util.zip.{ZipEntry, ZipFile}
+import org.junit.Assert._
+import ch.qos.logback.core.util.{CoreTestConstants, StatusPrinter}
+
+class SizeBasedRolling_STest extends RollingScaffolding {
+
+  
+  var rfa: RollingFileAppender[AnyRef] = new RollingFileAppender[AnyRef]
+  var fwrp: FixedWindowRollingPolicy = new FixedWindowRollingPolicy
+  var sizeBasedTriggeringPolicy = new SizeBasedTriggeringPolicy[AnyRef]
+  var encoder: EchoEncoder[AnyRef] = new EchoEncoder[AnyRef]
+
+  @Before
+  def setUp: Unit = {
+    setUpScaffolding
+    fwrp.setContext(context)
+    fwrp.setParent(rfa)
+    rfa.setContext(context)
+    sizeBasedTriggeringPolicy.setContext(context)
+  }
+
+  private def initRFA(filename: String): Unit = {
+    rfa.setEncoder(encoder)
+    if (filename != null) {
+      rfa.setFile(filename)
+    }
+  }
+
+
+  /**
+   * Test whether FixedWindowRollingPolicy throws an exception when the
+   * ActiveFileName is not set.
+   */
+  @Test(expected = classOf[IllegalStateException])
+  def activeFileNameNotSet() {
+    sizeBasedTriggeringPolicy.setMaxFileSize("100")
+    sizeBasedTriggeringPolicy.start
+
+    fwrp.setFileNamePattern(CoreTestConstants.OUTPUT_DIR_PREFIX + "sizeBased-test1.%i")
+    fwrp.start
+    // The absence of activeFileName option should cause an exception.
+  }
+
+
+  def generic(testName: String, fileName: String, filenamePattern: String, expectedFilenameList: List[String]) {
+    rfa.setName("ROLLING")
+    initRFA(randomOutputDir + fileName)
+
+    sizeBasedTriggeringPolicy.setMaxFileSize("100");
+    fwrp.setMinIndex(0);
+    fwrp.setFileNamePattern(randomOutputDir + filenamePattern);
+
+    rfa.triggeringPolicy = sizeBasedTriggeringPolicy
+    rfa.rollingPolicy = fwrp
+
+    fwrp.start
+    sizeBasedTriggeringPolicy.start
+    rfa.start
+
+    val runLength = 40
+    val prefix = "hello"
+    for (i <- 0 until runLength) {
+      Thread.sleep(10)
+      rfa.doAppend(prefix + i)
+    }
+
+    existenceCheck(expectedFilenameList)
+    reverseSortedContentCheck(randomOutputDir, runLength, prefix)
+
+  }
+
+  @Test
+  def smoke() {
+    expectedFilenameList = expectedFilenameList ::: List(randomOutputDir + "a-sizeBased-smoke.log")
+    expectedFilenameList = expectedFilenameList ::: List(randomOutputDir + "sizeBased-smoke.0")
+    expectedFilenameList = expectedFilenameList ::: List(randomOutputDir + "sizeBased-smoke.1")
+    generic("zipped", "a-sizeBased-smoke.log", "sizeBased-smoke.%i", expectedFilenameList)
+
+  }
+  @Test
+  def gz() {
+    println(randomOutputDir)
+    expectedFilenameList = expectedFilenameList ::: List(randomOutputDir + "a-sbr-gzed.log")
+    expectedFilenameList = expectedFilenameList ::: List(randomOutputDir + "sbr-gzed.0.gz")
+    expectedFilenameList = expectedFilenameList ::: List(randomOutputDir + "sbr-gzed.1.gz")
+    generic("gzed", "a-sbr-gzed.log", "sbr-gzed.%i.gz", expectedFilenameList)
+  }
+
+  // see also LBCORE-199
+  @Test
+  def zipped() {
+    println(randomOutputDir)
+    expectedFilenameList = expectedFilenameList ::: List(randomOutputDir + "a-sbr-zipped.log")
+    expectedFilenameList = expectedFilenameList ::: List(randomOutputDir + "sbr-zipped.0.zip")
+    expectedFilenameList = expectedFilenameList ::: List(randomOutputDir + "sbr-zipped.1.zip")
+    generic("zipped", "a-sbr-zipped.log", "sbr-zipped.%i.zip", expectedFilenameList)
+    zipEntryNameCheck(expectedFilenameList.filter(_.endsWith(".zip")), "sbr-zipped.20\\d{2}-\\d{2}-\\d{2}_\\d{4}")
+  }
+}
\ No newline at end of file
diff --git a/logback-core/src/test/scala/ch/qos/logback/core/rolling/TimeBasedRolling_STest.scala b/logback-core/src/test/scala/ch/qos/logback/core/rolling/TimeBasedRolling_STest.scala
index 51e14c0..30ae0be 100644
--- a/logback-core/src/test/scala/ch/qos/logback/core/rolling/TimeBasedRolling_STest.scala
+++ b/logback-core/src/test/scala/ch/qos/logback/core/rolling/TimeBasedRolling_STest.scala
@@ -85,7 +85,7 @@ class TimeBasedRolling_STest extends RollingScaffolding {
     }
 
     if (fileOptionIsSet) {
-      massageExpectedFilesToCorresponToCurrentTarget(testId + ".log")
+      massageExpectedFilesToCorresponToCurrentTarget(fileName)
     }
 
     checkFunction(testId, withCompression, compressionSuffix)

-----------------------------------------------------------------------

Summary of changes:
 .../core/rolling/TimeBasedRollingPolicy.java       |    1 -
 .../logback/core/rolling/helper/Compressor.java    |   11 +-
 .../core/recovery/RecoveryCoordinatorTest.java     |    4 +-
 .../ch/qos/logback/core/rolling/PackageTest.java   |    4 +-
 .../core/rolling/SizeAndTimeBasedFNATP_Test.java   |  273 --------------------
 .../core/spi/AppenderAttachableImplLockTest.java   |    2 +-
 .../logback/core/testUtil/FileToBufferUtil.java    |   12 +-
 .../logback/core/rolling/RollingScaffolding.scala  |   46 +++-
 .../core/rolling/SizeAndTimeBasedFNATP_STest.scala |  148 ++++++++---
 .../core/rolling/SizeBasedRolling_STest.scala      |  116 +++++++++
 .../core/rolling/TimeBasedRolling_STest.scala      |    2 +-
 11 files changed, 288 insertions(+), 331 deletions(-)
 delete mode 100644 logback-core/src/test/java/ch/qos/logback/core/rolling/SizeAndTimeBasedFNATP_Test.java
 create mode 100644 logback-core/src/test/scala/ch/qos/logback/core/rolling/SizeBasedRolling_STest.scala


hooks/post-receive
-- 
Logback: the generic, reliable, fast and flexible logging framework.


More information about the logback-dev mailing list