/** * Logback: the reliable, generic, fast and flexible logging framework. * Copyright (C) 1999-2013, 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 ch.qos.logback.core.encoder.EchoEncoder; import ch.qos.logback.core.util.CoreTestConstants; import org.junit.Before; import org.junit.Test; import java.io.IOException; import java.util.ArrayList; import java.util.List; public class SizeBasedRollingTest extends ScaffoldingForRollingTests { RollingFileAppender<Object> rfa = new RollingFileAppender<Object>(); FixedWindowRollingPolicy fwrp = new FixedWindowRollingPolicy(); SizeBasedTriggeringPolicy<Object> sizeBasedTriggeringPolicy = new SizeBasedTriggeringPolicy<Object>(); EchoEncoder<Object> encoder = new EchoEncoder<Object>(); @Before public void setUp() { super.setUp(); fwrp.setContext(context); fwrp.setParent(rfa); rfa.setContext(context); sizeBasedTriggeringPolicy.setContext(context); } private void initRFA(String filename) { rfa.setEncoder(encoder); if (filename != null) { rfa.setFile(filename); } } /** * Test whether FixedWindowRollingPolicy throws an exception when the * ActiveFileName is not set. */ @Test(expected = IllegalStateException.class) public void 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. } void generic(String testName, String fileName, String filenamePattern, List<String> expectedFilenameList) throws InterruptedException, IOException { 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(); int runLength = 40; String prefix = "hello"; for (int i = 0; i < runLength; i++){ Thread.sleep(10); rfa.doAppend(prefix + i); } rfa.stop(); existenceCheck(expectedFilenameList); reverseSortedContentCheck(randomOutputDir, runLength, prefix); } @Test public void smoke() throws IOException, InterruptedException { expectedFilenameList.add(randomOutputDir + "a-sizeBased-smoke.log"); expectedFilenameList.add(randomOutputDir + "sizeBased-smoke.0"); expectedFilenameList.add(randomOutputDir + "sizeBased-smoke.1"); generic("zipped", "a-sizeBased-smoke.log", "sizeBased-smoke.%i", expectedFilenameList); } @Test public void gz() throws IOException, InterruptedException { expectedFilenameList.add(randomOutputDir + "a-sbr-gzed.log"); expectedFilenameList.add(randomOutputDir + "sbr-gzed.0.gz"); expectedFilenameList.add(randomOutputDir + "sbr-gzed.1.gz"); generic("gzed", "a-sbr-gzed.log", "sbr-gzed.%i.gz", expectedFilenameList); } // see also LBCORE-199 @Test public void zipped() throws IOException, InterruptedException { expectedFilenameList.add(randomOutputDir + "a-sbr-zipped.log"); expectedFilenameList.add(randomOutputDir + "sbr-zipped.0.zip"); expectedFilenameList.add(randomOutputDir + "sbr-zipped.1.zip"); generic("zipped", "a-sbr-zipped.log", "sbr-zipped.%i.zip", expectedFilenameList); List<String> zipFiles = filterElementsInListBySuffix(".zip"); zipEntryNameCheck(zipFiles, "sbr-zipped.20\\d{2}-\\d{2}-\\d{2}_\\d{4}"); } }