diff --git a/build.xml b/build.xml
index 4739f35..fb2a6cf 100644
--- a/build.xml
+++ b/build.xml
@@ -3,7 +3,7 @@
@@ -103,6 +103,14 @@
The message levels that should have been logged.
*/ protected Level testLevels[] = - { Level.FINE, Level.INFO, Level.WARNING, Level.SEVERE }; + { Level.FINE, Level.INFO, Level.WARNING, Level.SEVERE, Level.SEVERE }; /** *The message strings that should have been logged.
*/ protected String testMessages[] = - { "debug", "info", "warn", "error" }; + { "debug", "info", "warn", "error", "fatal" }; // ------------------------------------------- JUnit Infrastructure Methods @@ -224,6 +224,7 @@ public class CustomConfigTestCase extends DefaultConfigTestCase { super.testPristineLog(); // Assert which logging levels have been enabled + assertTrue(log.isFatalEnabled()); assertTrue(log.isErrorEnabled()); assertTrue(log.isWarnEnabled()); assertTrue(log.isInfoEnabled()); @@ -298,6 +299,7 @@ public class CustomConfigTestCase extends DefaultConfigTestCase { log.info("info", t); log.warn("warn", t); log.error("error", t); + log.fatal("fatal", t); } @@ -308,6 +310,7 @@ public class CustomConfigTestCase extends DefaultConfigTestCase { log.info("info"); log.warn("warn"); log.error("error"); + log.fatal("fatal"); } diff --git a/src/test/org/apache/commons/logging/log4j/CustomConfig.properties b/src/test/org/apache/commons/logging/log4j/CustomConfig.properties new file mode 100644 index 0000000..4a19514 --- /dev/null +++ b/src/test/org/apache/commons/logging/log4j/CustomConfig.properties @@ -0,0 +1,8 @@ +# This is the custom configuration properties for the Log4J logger tests +# in CustomConfigTestCase. + +# Configure the root logger's level and appender +log4j.rootLogger = INFO, A1 + +# Configure the default appender +log4j.appender.A1 = org.apache.commons.logging.log4j.TestAppender diff --git a/src/test/org/apache/commons/logging/log4j/CustomConfigTestCase.java b/src/test/org/apache/commons/logging/log4j/CustomConfigTestCase.java new file mode 100644 index 0000000..e607fbf --- /dev/null +++ b/src/test/org/apache/commons/logging/log4j/CustomConfigTestCase.java @@ -0,0 +1,318 @@ +/* + * $Header: /home/jerenkrantz/tmp/commons/commons-convert/cvs/home/cvs/jakarta-commons//logging/src/test/org/apache/commons/logging/log4j/CustomConfigTestCase.java,v 1.1 2003/03/30 05:22:50 craigmcc Exp $ + * $Revision: 1.1 $ + * $Date: 2003/03/30 05:22:50 $ + * + * ==================================================================== + * + * The Apache Software License, Version 1.1 + * + * Copyright (c) 1999-2003 The Apache Software Foundation. All rights + * reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The end-user documentation included with the redistribution, if + * any, must include the following acknowlegement: + * "This product includes software developed by the + * Apache Software Foundation (http://www.apache.org/)." + * Alternately, this acknowlegement may appear in the software itself, + * if and wherever such third-party acknowlegements normally appear. + * + * 4. The names "The Jakarta Project", "Commons", and "Apache Software + * Foundation" must not be used to endorse or promote products derived + * from this software without prior written permission. For written + * permission, please contact apache@apache.org. + * + * 5. Products derived from this software may not be called "Apache" + * nor may "Apache" appear in their names without prior written + * permission of the Apache Group. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * ==================================================================== + * + * This software consists of voluntary contributions made by many + * individuals on behalf of the Apache Software Foundation. For more + * information on the Apache Software Foundation, please see + *TestCase for Log4J logging when running on a system with Log4J present, + * so that Log4J should be selected and an appropriate + * logger configured per the configuration properties.
+ * + * @author Craig R. McClanahan + * @version $Revision: 1.1 $ $Date: 2003/03/30 05:22:50 $ + */ + +public class CustomConfigTestCase extends DefaultConfigTestCase { + + + // ----------------------------------------------------------- Constructors + + + /** + *Construct a new instance of this test case.
+ */ + public CustomConfigTestCase() { + super(); + } + + + /** + *Construct a new instance of this test case.
+ * + * @param name Name of the test case + */ + public CustomConfigTestCase(String name) { + super(name); + } + + + // ----------------------------------------------------- Instance Variables + + + /** + *The Appender we are utilizing.
The Logger we are utilizing.
The message levels that should have been logged.
+ */ + protected Level testLevels[] = + { Level.INFO, Level.WARN, Level.ERROR, Level.FATAL }; + + + /** + *The message strings that should have been logged.
+ */ + protected String testMessages[] = + { "info", "warn", "error", "fatal" }; + + + // ------------------------------------------- JUnit Infrastructure Methods + + + /** + * Set up instance variables required by this test case. + */ + public void setUp() throws Exception { + setUpAppender + ("org/apache/commons/logging/log4j/CustomConfig.properties"); + setUpLogger("TestLogger"); + setUpFactory(); + setUpLog("TestLogger"); + } + + + /** + * Return the tests included in this test suite. + */ + public static Test suite() { + return (new TestSuite(CustomConfigTestCase.class)); + } + + /** + * Tear down instance variables required by this test case. + */ + public void tearDown() { + super.tearDown(); + Logger.getRootLogger().removeAppender(appender); + appender = null; + logger = null; + } + + + // ----------------------------------------------------------- Test Methods + + + // Test logging message strings with exceptions + public void testExceptionMessages() throws Exception { + + logExceptionMessages(); + checkLoggingEvents(true); + + } + + + // Test logging plain message strings + public void testPlainMessages() throws Exception { + + logPlainMessages(); + checkLoggingEvents(false); + + } + + + // Test pristine Appender instance + public void testPristineAppender() { + + assertNotNull("Appender exists", appender); + + } + + + // Test pristine Log instance + public void testPristineLog() { + + super.testPristineLog(); + + // Assert which logging levels have been enabled + assertTrue(log.isErrorEnabled()); + assertTrue(log.isWarnEnabled()); + assertTrue(log.isInfoEnabled()); + assertTrue(!log.isDebugEnabled()); + assertTrue(!log.isTraceEnabled()); + + } + + + // Test pristine Logger instance + public void testPristineLogger() { + + assertNotNull("Logger exists", logger); + assertEquals("Logger level", Level.INFO, logger.getEffectiveLevel()); + assertEquals("Logger name", "TestLogger", logger.getName()); + + } + + + // -------------------------------------------------------- Support Methods + + + // Check the recorded messages + protected void checkLoggingEvents(boolean thrown) { + Iterator events = appender.events(); + for (int i = 0; i < testMessages.length; i++) { + assertTrue(events.hasNext()); + LoggingEvent event = (LoggingEvent) events.next(); + assertEquals("LoggingEvent level", + testLevels[i], event.getLevel()); + assertEquals("LoggingEvent message", + testMessages[i], event.getMessage()); + /* Does not appear to be logged correctly? + assertEquals("LoggingEvent class", + this.getClass().getName(), + event.getLocationInformation().getClassName()); + */ + /* Does not appear to be logged correctly? + if (thrown) { + assertEquals("LoggingEvent method", + "logExceptionMessages", + event.getLocationInformation().getMethodName()); + } else { + assertEquals("LoggingEvent method", + "logPlainMessages", + event.getLocationInformation().getMethodName()); + } + */ + if (thrown) { + assertNotNull("LoggingEvent thrown", + event.getThrowableInformation().getThrowable()); + assertTrue("LoggingEvent thrown type", + event.getThrowableInformation().getThrowable() + instanceof IndexOutOfBoundsException); + } else { + assertNull("LoggingEvent thrown", + event.getThrowableInformation()); + } + } + assertTrue(!events.hasNext()); + appender.flush(); + } + + + // Log the messages with exceptions + protected void logExceptionMessages() { + Throwable t = new IndexOutOfBoundsException(); + log.trace("trace", t); // Should not actually get logged + log.debug("debug", t); // Should not actually get logged + log.info("info", t); + log.warn("warn", t); + log.error("error", t); + log.fatal("fatal", t); + } + + + // Log the plain messages + protected void logPlainMessages() { + log.trace("trace"); // Should not actually get logged + log.debug("debug"); // Should not actually get logged + log.info("info"); + log.warn("warn"); + log.error("error"); + log.fatal("fatal"); + } + + + // Set up our custom Appender + protected void setUpAppender(String config) throws Exception { + Properties props = new Properties(); + InputStream is = + this.getClass().getClassLoader().getResourceAsStream(config); + props.load(is); + is.close(); + PropertyConfigurator.configure(props); + Enumeration appenders = Logger.getRootLogger().getAllAppenders(); + appender = (TestAppender) appenders.nextElement(); + } + + + // Set up our custom Logger + protected void setUpLogger(String name) throws Exception { + logger = Logger.getLogger(name); + } + + +} diff --git a/src/test/org/apache/commons/logging/log4j/DefaultConfigTestCase.java b/src/test/org/apache/commons/logging/log4j/DefaultConfigTestCase.java new file mode 100644 index 0000000..c22249f --- /dev/null +++ b/src/test/org/apache/commons/logging/log4j/DefaultConfigTestCase.java @@ -0,0 +1,205 @@ +/* + * $Header: /home/jerenkrantz/tmp/commons/commons-convert/cvs/home/cvs/jakarta-commons//logging/src/test/org/apache/commons/logging/log4j/DefaultConfigTestCase.java,v 1.1 2003/03/30 05:22:50 craigmcc Exp $ + * $Revision: 1.1 $ + * $Date: 2003/03/30 05:22:50 $ + * + * ==================================================================== + * + * The Apache Software License, Version 1.1 + * + * Copyright (c) 1999-2003 The Apache Software Foundation. All rights + * reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The end-user documentation included with the redistribution, if + * any, must include the following acknowlegement: + * "This product includes software developed by the + * Apache Software Foundation (http://www.apache.org/)." + * Alternately, this acknowlegement may appear in the software itself, + * if and wherever such third-party acknowlegements normally appear. + * + * 4. The names "The Jakarta Project", "Commons", and "Apache Software + * Foundation" must not be used to endorse or promote products derived + * from this software without prior written permission. For written + * permission, please contact apache@apache.org. + * + * 5. Products derived from this software may not be called "Apache" + * nor may "Apache" appear in their names without prior written + * permission of the Apache Group. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * ==================================================================== + * + * This software consists of voluntary contributions made by many + * individuals on behalf of the Apache Software Foundation. For more + * information on the Apache Software Foundation, please see + *TestCase for Log4J logging when running on a system with + * zero configuration, and with Log4J present (so Log4J logging + * should be automatically configured).
+ * + * @author Craig R. McClanahan + * @version $Revision: 1.1 $ $Date: 2003/03/30 05:22:50 $ + */ + +public class DefaultConfigTestCase extends TestCase { + + + // ----------------------------------------------------------- Constructors + + + /** + *Construct a new instance of this test case.
+ */ + public DefaultConfigTestCase() { + super(); + } + + + /** + *Construct a new instance of this test case.
+ * + * @param name Name of the test case + */ + public DefaultConfigTestCase(String name) { + super(name); + } + + + // ----------------------------------------------------- Instance Variables + + + /** + *The {@link LogFactory} implementation we have selected.
+ */ + protected LogFactory factory = null; + + + /** + *The {@link Log} implementation we have selected.
+ */ + protected Log log = null; + + + // ------------------------------------------- JUnit Infrastructure Methods + + + /** + * Set up instance variables required by this test case. + */ + public void setUp() throws Exception { + setUpFactory(); + setUpLog("TestLogger"); + } + + + /** + * Return the tests included in this test suite. + */ + public static Test suite() { + return (new TestSuite(DefaultConfigTestCase.class)); + } + + /** + * Tear down instance variables required by this test case. + */ + public void tearDown() { + log = null; + if (factory != null) { + factory.releaseAll(); + factory = null; + } + } + + + // ----------------------------------------------------------- Test Methods + + + // Test pristine Log instance + public void testPristineLog() { + + assertNotNull("Log exists", log); + assertEquals("Log class", + "org.apache.commons.logging.impl.Log4JLogger", + log.getClass().getName()); + + // Can we call level checkers with no exceptions? + log.isDebugEnabled(); + log.isErrorEnabled(); + log.isFatalEnabled(); + log.isInfoEnabled(); + log.isTraceEnabled(); + log.isWarnEnabled(); + + } + + + // Test pristine LogFactory instance + public void testPristineFactory() { + + assertNotNull("LogFactory exists", factory); + assertEquals("LogFactory class", + "org.apache.commons.logging.impl.LogFactoryImpl", + factory.getClass().getName()); + + String names[] = factory.getAttributeNames(); + assertNotNull("Names exists", names); + assertEquals("Names empty", 0, names.length); + + } + + + // -------------------------------------------------------- Support Methods + + + + // Set up factory instance + protected void setUpFactory() throws Exception { + factory = LogFactory.getFactory(); + } + + + // Set up log instance + protected void setUpLog(String name) throws Exception { + log = factory.getLog(name); + } + + +} diff --git a/src/test/org/apache/commons/logging/log4j/TestAppender.java b/src/test/org/apache/commons/logging/log4j/TestAppender.java new file mode 100644 index 0000000..578efc6 --- /dev/null +++ b/src/test/org/apache/commons/logging/log4j/TestAppender.java @@ -0,0 +1,120 @@ +/* + * $Header: /home/jerenkrantz/tmp/commons/commons-convert/cvs/home/cvs/jakarta-commons//logging/src/test/org/apache/commons/logging/log4j/TestAppender.java,v 1.1 2003/03/30 05:22:50 craigmcc Exp $ + * $Revision: 1.1 $ + * $Date: 2003/03/30 05:22:50 $ + * + * ==================================================================== + * + * The Apache Software License, Version 1.1 + * + * Copyright (c) 1999-2003 The Apache Software Foundation. All rights + * reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The end-user documentation included with the redistribution, if + * any, must include the following acknowlegement: + * "This product includes software developed by the + * Apache Software Foundation (http://www.apache.org/)." + * Alternately, this acknowlegement may appear in the software itself, + * if and wherever such third-party acknowlegements normally appear. + * + * 4. The names "The Jakarta Project", "Commons", and "Apache Software + * Foundation" must not be used to endorse or promote products derived + * from this software without prior written permission. For written + * permission, please contact apache@apache.org. + * + * 5. Products derived from this software may not be called "Apache" + * nor may "Apache" appear in their names without prior written + * permission of the Apache Group. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * ==================================================================== + * + * This software consists of voluntary contributions made by many + * individuals on behalf of the Apache Software Foundation. For more + * information on the Apache Software Foundation, please see + *Test implementation of org.apache.log4j.Appender.