
Author: seb Date: Thu Sep 7 18:58:28 2006 New Revision: 522 Added: 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/SizeBasedTriggeringPolicyTest.java Modified: logback/trunk/logback-core/src/main/java/ch/qos/logback/core/rolling/SizeBasedTriggeringPolicy.java logback/trunk/logback-core/src/main/java/ch/qos/logback/core/rolling/TriggeringPolicyBase.java logback/trunk/logback-core/src/test/java/ch/qos/logback/core/AllTest.java logback/trunk/logback-core/src/test/java/ch/qos/logback/core/rolling/SizeBasedRollingTest.java Log: - modified maxFileSize attribute type to String - added maxFileSizeAsLong attribute - updated tests and package tests - created a test for the StringToLong method Modified: logback/trunk/logback-core/src/main/java/ch/qos/logback/core/rolling/SizeBasedTriggeringPolicy.java ============================================================================== --- logback/trunk/logback-core/src/main/java/ch/qos/logback/core/rolling/SizeBasedTriggeringPolicy.java (original) +++ logback/trunk/logback-core/src/main/java/ch/qos/logback/core/rolling/SizeBasedTriggeringPolicy.java Thu Sep 7 18:58:28 2006 @@ -26,27 +26,59 @@ */ public static final long DEFAULT_MAX_FILE_SIZE = 10 * 1024 * 1024; // 10 MB - long maxFileSize = DEFAULT_MAX_FILE_SIZE; + String maxFileSize = Long.toString(DEFAULT_MAX_FILE_SIZE); + long maxFileSizeAsLong; public SizeBasedTriggeringPolicy() { } - public SizeBasedTriggeringPolicy(final long maxFileSize) { - this.maxFileSize = maxFileSize; + public SizeBasedTriggeringPolicy(final String maxFileSize) { + setMaxFileSize(maxFileSize); } - public boolean isTriggeringEvent(final File file, final Object event) { //System.out.println("Size"+file.length()); - return (file.length() >= maxFileSize); + return (file.length() >= maxFileSizeAsLong); } - public long getMaxFileSize() { + public String getMaxFileSize() { return maxFileSize; } - public void setMaxFileSize(long l) { - maxFileSize = l; + public void setMaxFileSize(String maxFileSize) { + this.maxFileSize = maxFileSize; + this.maxFileSizeAsLong = toFileSize(maxFileSize); } + long toFileSize(String value) { + if(value == null) + return DEFAULT_MAX_FILE_SIZE; + + String s = value.trim().toUpperCase(); + long multiplier = 1; + int index; + + if((index = s.indexOf("KB")) != -1) { + multiplier = 1024; + s = s.substring(0, index); + } + else if((index = s.indexOf("MB")) != -1) { + multiplier = 1024*1024; + s = s.substring(0, index); + } + else if((index = s.indexOf("GB")) != -1) { + multiplier = 1024*1024*1024; + s = s.substring(0, index); + } + if(s != null) { + try { + return Long.valueOf(s).longValue() * multiplier; + } + catch (NumberFormatException e) { + addError("[" + s + "] is not in proper int form."); + addError("[" + value + "] not in expected format.", e); + } + } + return DEFAULT_MAX_FILE_SIZE; + } } Modified: logback/trunk/logback-core/src/main/java/ch/qos/logback/core/rolling/TriggeringPolicyBase.java ============================================================================== --- logback/trunk/logback-core/src/main/java/ch/qos/logback/core/rolling/TriggeringPolicyBase.java (original) +++ logback/trunk/logback-core/src/main/java/ch/qos/logback/core/rolling/TriggeringPolicyBase.java Thu Sep 7 18:58:28 2006 @@ -10,6 +10,8 @@ package ch.qos.logback.core.rolling; +import ch.qos.logback.core.spi.ContextAwareBase; + /** * SizeBasedTriggeringPolicy looks at size of the file being @@ -18,7 +20,7 @@ * @author Ceki Gülcü * */ -abstract public class TriggeringPolicyBase implements TriggeringPolicy { +abstract public class TriggeringPolicyBase extends ContextAwareBase implements TriggeringPolicy { private boolean start; Modified: logback/trunk/logback-core/src/test/java/ch/qos/logback/core/AllTest.java ============================================================================== --- logback/trunk/logback-core/src/test/java/ch/qos/logback/core/AllTest.java (original) +++ logback/trunk/logback-core/src/test/java/ch/qos/logback/core/AllTest.java Thu Sep 7 18:58:28 2006 @@ -14,6 +14,7 @@ suite.addTest(ch.qos.logback.core.pattern.AllTest.suite()); suite.addTest(ch.qos.logback.core.appender.PackageTest.suite()); suite.addTest(ch.qos.logback.core.rolling.helper.PackageTest.suite()); + suite.addTest(ch.qos.logback.core.rolling.PackageTest.suite()); suite.addTest(ch.qos.logback.core.joran.spi.PackageTest.suite()); return suite; } Added: logback/trunk/logback-core/src/test/java/ch/qos/logback/core/rolling/PackageTest.java ============================================================================== --- (empty file) +++ logback/trunk/logback-core/src/test/java/ch/qos/logback/core/rolling/PackageTest.java Thu Sep 7 18:58:28 2006 @@ -0,0 +1,16 @@ +package ch.qos.logback.core.rolling; + +import junit.framework.Test; +import junit.framework.TestCase; +import junit.framework.TestSuite; + +public class PackageTest extends TestCase { + + public static Test suite() { + TestSuite suite = new TestSuite(); + suite.addTestSuite(RenamingTest.class); + suite.addTestSuite(SizeBasedRollingTest.class); + suite.addTestSuite(TimeBasedRollingTest.class); + return suite; + } +} Modified: logback/trunk/logback-core/src/test/java/ch/qos/logback/core/rolling/SizeBasedRollingTest.java ============================================================================== --- logback/trunk/logback-core/src/test/java/ch/qos/logback/core/rolling/SizeBasedRollingTest.java (original) +++ logback/trunk/logback-core/src/test/java/ch/qos/logback/core/rolling/SizeBasedRollingTest.java Thu Sep 7 18:58:28 2006 @@ -21,6 +21,8 @@ import junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestSuite; +import ch.qos.logback.core.Context; +import ch.qos.logback.core.ContextBase; import ch.qos.logback.core.Layout; import ch.qos.logback.core.layout.DummyLayout; import ch.qos.logback.core.util.Compare; @@ -29,9 +31,10 @@ /** * - * Do not forget to call activateOptions when configuring programatically. + * Do not forget to call start() when configuring programatically. * * @author Ceki Gülcü + * @author Sébastien Pennec * */ public class SizeBasedRollingTest extends TestCase { @@ -42,14 +45,14 @@ public void setUp() { { - File target = new File(Constants.TEST_DIR_PREFIX + "output/sizeBased-test2.log"); - target.mkdirs(); - target.delete(); + File target = new File(Constants.TEST_DIR_PREFIX + "output/sizeBased-test2.log"); + target.mkdirs(); + target.delete(); } { - File target = new File(Constants.TEST_DIR_PREFIX + "output/sbr-test3.log"); - target.mkdirs(); - target.delete(); + File target = new File(Constants.TEST_DIR_PREFIX + "output/sbr-test3.log"); + target.mkdirs(); + target.delete(); } } @@ -63,13 +66,18 @@ public void test1() throws Exception { // We purposefully use the \n as the line separator. // This makes the regression test system independent. + Context context = new ContextBase(); Layout layout = new DummyLayout(); RollingFileAppender rfa = new RollingFileAppender(); rfa.setLayout(layout); + rfa.setContext(new ContextBase()); FixedWindowRollingPolicy fwrp = new FixedWindowRollingPolicy(); + fwrp.setContext(context); SizeBasedTriggeringPolicy sbtp = new SizeBasedTriggeringPolicy(); - sbtp.setMaxFileSize(100); + sbtp.setContext(context); + + sbtp.setMaxFileSize("100"); sbtp.start(); fwrp.setFileNamePattern(Constants.TEST_DIR_PREFIX + "output/sizeBased-test1.%i"); try { @@ -78,22 +86,28 @@ } catch (IllegalStateException e) { return; } + + //StatusPrinter.print(context.getStatusManager()); } /** * Test basic rolling functionality. */ public void test2() throws Exception { - + Context context = new ContextBase(); + DummyLayout layout = new DummyLayout(); RollingFileAppender rfa = new RollingFileAppender(); rfa.setName("ROLLING"); rfa.setLayout(layout); - + rfa.setContext(context); + FixedWindowRollingPolicy swrp = new FixedWindowRollingPolicy(); + swrp.setContext(context); SizeBasedTriggeringPolicy sbtp = new SizeBasedTriggeringPolicy(); + sbtp.setContext(context); - sbtp.setMaxFileSize(100); + sbtp.setMaxFileSize("100"); swrp.setMinIndex(0); swrp.setActiveFileName(Constants.TEST_DIR_PREFIX + "output/sizeBased-test2.log"); @@ -136,20 +150,26 @@ assertTrue(Compare.compare(Constants.TEST_DIR_PREFIX + "output/sizeBased-test2.1", Constants.TEST_DIR_PREFIX + "witness/rolling/sbr-test2.1")); } + + //StatusPrinter.print(context.getStatusManager()); } /** * Same as testBasic but also with GZ compression. */ public void test3() throws Exception { + Context context = new ContextBase(); DummyLayout layout = new DummyLayout(); RollingFileAppender rfa = new RollingFileAppender(); rfa.setLayout(layout); - + rfa.setContext(context); + FixedWindowRollingPolicy fwrp = new FixedWindowRollingPolicy(); + fwrp.setContext(context); SizeBasedTriggeringPolicy sbtp = new SizeBasedTriggeringPolicy(); - - sbtp.setMaxFileSize(100); + sbtp.setContext(context); + + sbtp.setMaxFileSize("100"); fwrp.setMinIndex(0); fwrp.setActiveFileName(Constants.TEST_DIR_PREFIX + "output/sbr-test3.log"); fwrp.setFileNamePattern(Constants.TEST_DIR_PREFIX + "output/sbr-test3.%i.gz"); @@ -189,6 +209,7 @@ Constants.TEST_DIR_PREFIX + "witness/rolling/sbr-test3.1.gz")); } + //StatusPrinter.print(context.getStatusManager()); } boolean isWindows() { Added: logback/trunk/logback-core/src/test/java/ch/qos/logback/core/rolling/SizeBasedTriggeringPolicyTest.java ============================================================================== --- (empty file) +++ logback/trunk/logback-core/src/test/java/ch/qos/logback/core/rolling/SizeBasedTriggeringPolicyTest.java Thu Sep 7 18:58:28 2006 @@ -0,0 +1,44 @@ +package ch.qos.logback.core.rolling; + +import junit.framework.TestCase; +import ch.qos.logback.core.Context; +import ch.qos.logback.core.ContextBase; + +public class SizeBasedTriggeringPolicyTest extends TestCase { + + public void testStringToLong() { + Context context = new ContextBase(); + SizeBasedTriggeringPolicy policy = new SizeBasedTriggeringPolicy(); + policy.setContext(context); + + Long result; + + { + result = policy.toFileSize("123"); + assertEquals(new Long("123"), result); + } + { + result = policy.toFileSize("123KB"); + // = 123 * 1024 + assertEquals(new Long("125952"), result); + } + { + result = policy.toFileSize("123MB"); + // = 123 * 1024 * 1024 + assertEquals(new Long("128974848"), result); + } + { + result = policy.toFileSize("123GB"); + // = 123 * 1024 * 1024 * 1024 + assertEquals(new Long("132070244352"), result); + } + + { + result = policy.toFileSize("123xxxx"); + // = 123 * 1024 * 1024 * 1024 + assertEquals(new Long(SizeBasedTriggeringPolicy.DEFAULT_MAX_FILE_SIZE), result); + assertEquals(2, context.getStatusManager().getCount()); + } + + } +}