blob: 50d1503f7ba9a9d21b8ec91b93c27b60db38b1a1 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.log4j;
import junit.framework.TestCase;
import junit.framework.TestSuite;
import junit.framework.Test;
import org.apache.log4j.helpers.AbsoluteTimeDateFormat;
import org.apache.log4j.util.*;
/**
A superficial but general test of log4j.
*/
public class MinimumTestCase extends TestCase {
static String FILTERED = "output/filtered";
static String EXCEPTION1 = "java.lang.Exception: Just testing";
static String EXCEPTION2 = "\\s*at .*\\(.*\\)";
static String EXCEPTION3 = "\\s*at .*\\(Native Method\\)";
static String EXCEPTION4 = "\\s*at .*\\(.*Compiled Code\\)";
static String EXCEPTION5 = "\\s*at .*\\(.*libgcj.*\\)";
//18 fevr. 2002 20:02:41,551 [main] FATAL ERR - Message 0
static String TTCC_PAT = Filter.ABSOLUTE_DATE_AND_TIME_PAT+
" \\[main]\\ (TRACE|DEBUG|INFO|WARN|ERROR|FATAL) .* - Message \\d{1,2}";
static String TTCC2_PAT = Filter.ABSOLUTE_DATE_AND_TIME_PAT+
" \\[main]\\ (TRACE|DEBUG|INFO|WARN|ERROR|FATAL) .* - Messages should bear numbers 0 through 29\\.";
//18 fvr. 2002 19:49:53,456
Logger root;
Logger logger;
public MinimumTestCase(String name) {
super(name);
}
public void setUp() {
root = Logger.getRootLogger();
root.removeAllAppenders();
}
public void tearDown() {
root.getLoggerRepository().resetConfiguration();
}
public void simple() throws Exception {
Layout layout = new SimpleLayout();
Appender appender = new FileAppender(layout, "output/simple", false);
root.addAppender(appender);
common();
Transformer.transform(
"output/simple", FILTERED,
new Filter[] { new LineNumberFilter(),
new SunReflectFilter(),
new JunitTestRunnerFilter() });
assertTrue(Compare.compare(FILTERED, "witness/simple"));
}
public void ttcc() throws Exception {
Layout layout = new TTCCLayout(AbsoluteTimeDateFormat.DATE_AND_TIME_DATE_FORMAT);
Appender appender = new FileAppender(layout, "output/ttcc", false);
root.addAppender(appender);
String oldName = Thread.currentThread().getName();
Thread.currentThread().setName("main");
common();
Thread.currentThread().setName(oldName);
ControlFilter cf1 = new ControlFilter(new String[]{TTCC_PAT,
TTCC2_PAT, EXCEPTION1, EXCEPTION2,
EXCEPTION3, EXCEPTION4, EXCEPTION5 });
Transformer.transform(
"output/ttcc", FILTERED,
new Filter[] {
cf1, new LineNumberFilter(),
new AbsoluteDateAndTimeFilter(),
new SunReflectFilter(), new JunitTestRunnerFilter()
});
assertTrue(Compare.compare(FILTERED, "witness/ttcc"));
}
void common() {
int i = 0;
// In the lines below, the category names are chosen as an aid in
// remembering their level values. In general, the category names
// have no bearing to level values.
Logger ERR = Logger.getLogger("ERR");
ERR.setLevel(Level.ERROR);
Logger INF = Logger.getLogger("INF");
INF.setLevel(Level.INFO);
Logger INF_ERR = Logger.getLogger("INF.ERR");
INF_ERR.setLevel(Level.ERROR);
Logger DEB = Logger.getLogger("DEB");
DEB.setLevel(Level.DEBUG);
Logger TRC = Logger.getLogger("TRC");
TRC.setLevel(Level.TRACE);
// Note: categories with undefined level
Logger INF_UNDEF = Logger.getLogger("INF.UNDEF");
Logger INF_ERR_UNDEF = Logger.getLogger("INF.ERR.UNDEF");
Logger UNDEF = Logger.getLogger("UNDEF");
// These should all log.----------------------------
ERR.log(Level.FATAL, "Message " + i); i++; //0
ERR.error( "Message " + i); i++;
INF.log(Level.FATAL, "Message " + i); i++; // 2
INF.error( "Message " + i); i++;
INF.warn ( "Message " + i); i++;
INF.info ( "Message " + i); i++;
INF_UNDEF.log(Level.FATAL, "Message " + i); i++; //6
INF_UNDEF.error( "Message " + i); i++;
INF_UNDEF.warn ( "Message " + i); i++;
INF_UNDEF.info ( "Message " + i); i++;
INF_ERR.log(Level.FATAL, "Message " + i); i++; // 10
INF_ERR.error( "Message " + i); i++;
INF_ERR_UNDEF.log(Level.FATAL, "Message " + i); i++;
INF_ERR_UNDEF.error( "Message " + i); i++;
DEB.log(Level.FATAL, "Message " + i); i++; //14
DEB.error( "Message " + i); i++;
DEB.warn ( "Message " + i); i++;
DEB.info ( "Message " + i); i++;
DEB.debug( "Message " + i); i++;
TRC.log(Level.FATAL, "Message " + i); i++; //19
TRC.error( "Message " + i); i++;
TRC.warn ( "Message " + i); i++;
TRC.info ( "Message " + i); i++;
TRC.debug( "Message " + i); i++;
TRC.trace( "Message " + i); i++;
// defaultLevel=DEBUG
UNDEF.log(Level.FATAL, "Message " + i); i++; // 25
UNDEF.error("Message " + i); i++;
UNDEF.warn ("Message " + i); i++;
UNDEF.info ("Message " + i); i++;
UNDEF.debug("Message " + i, new Exception("Just testing."));
int printCount = i;
i++;
// -------------------------------------------------
// The following should not log
ERR.warn("Message " + i); i++;
ERR.info("Message " + i); i++;
ERR.debug("Message " + i); i++;
INF.debug("Message " + i); i++;
INF_UNDEF.debug("Message " + i); i++;
INF_ERR.warn("Message " + i); i++;
INF_ERR.info("Message " + i); i++;
INF_ERR.debug("Message " + i); i++;
INF_ERR_UNDEF.warn("Message " + i); i++;
INF_ERR_UNDEF.info("Message " + i); i++;
INF_ERR_UNDEF.debug("Message " + i); i++;
UNDEF.trace("Message " + i, new Exception("Just testing.")); i++;
// -------------------------------------------------
INF.info("Messages should bear numbers 0 through "+printCount+".");
}
public static Test suite() {
TestSuite suite = new TestSuite();
suite.addTest(new MinimumTestCase("simple"));
suite.addTest(new MinimumTestCase("ttcc"));
return suite;
}
}