blob: c06ce5e31a97fa1d6f6328f97a53100c04ad6ec1 [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.xml;
import junit.framework.TestCase;
import org.apache.log4j.xml.QpidLog4JConfigurator.IllegalLoggerLevelException;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
public class QpidLog4JConfiguratorTest extends TestCase
{
private static final String NEWLINE = System.getProperty("line.separator");
private File _testConfigFile;
private File createTempTestLog4JConfig(String loggerLevel,String rootLoggerLevel, boolean missingTagClose, boolean incorrectAttribute)
{
File tmpFile = null;
try
{
tmpFile = File.createTempFile("QpidLog4JConfiguratorTestLog4jConfig", ".tmp");
tmpFile.deleteOnExit();
FileWriter fstream = new FileWriter(tmpFile);
BufferedWriter writer = new BufferedWriter(fstream);
writer.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"+NEWLINE);
writer.write("<!DOCTYPE log4j:configuration SYSTEM \"log4j.dtd\">"+NEWLINE);
writer.write("<log4j:configuration xmlns:log4j=\"http://jakarta.apache.org/log4j/\" debug=\"null\" " +
"threshold=\"null\">"+NEWLINE);
writer.write(" <appender class=\"org.apache.log4j.ConsoleAppender\" name=\"STDOUT\">"+NEWLINE);
writer.write(" <layout class=\"org.apache.log4j.PatternLayout\">"+NEWLINE);
writer.write(" <param name=\"ConversionPattern\" value=\"%d %-5p [%t] %C{2} (%F:%L) - %m%n\"/>"+NEWLINE);
writer.write(" </layout>"+NEWLINE);
writer.write(" </appender>"+NEWLINE);
String closeTag="/";
if(missingTagClose)
{
closeTag="";
}
//Example of a 'category' with a 'priority'
writer.write(" <category additivity=\"true\" name=\"logger1\">"+NEWLINE);
writer.write(" <priority value=\"" + loggerLevel+ "\"" + closeTag + ">"+NEWLINE);
writer.write(" <appender-ref ref=\"STDOUT\"/>"+NEWLINE);
writer.write(" </category>"+NEWLINE);
String attributeName="value";
if(incorrectAttribute)
{
attributeName="values";
}
//Example of a 'category' with a 'level'
writer.write(" <category additivity=\"true\" name=\"logger2\">"+NEWLINE);
writer.write(" <level " + attributeName + "=\"" + loggerLevel+ "\"/>"+NEWLINE);
writer.write(" <appender-ref ref=\"STDOUT\"/>"+NEWLINE);
writer.write(" </category>"+NEWLINE);
//Example of a 'logger' with a 'level'
writer.write(" <logger additivity=\"true\" name=\"logger3\">"+NEWLINE);
writer.write(" <level value=\"" + loggerLevel+ "\"/>"+NEWLINE);
writer.write(" <appender-ref ref=\"STDOUT\"/>"+NEWLINE);
writer.write(" </logger>"+NEWLINE);
//'root' logger
writer.write(" <root>"+NEWLINE);
writer.write(" <priority value=\"" + rootLoggerLevel+ "\"/>"+NEWLINE);
writer.write(" <appender-ref ref=\"STDOUT\"/>"+NEWLINE);
writer.write(" </root>"+NEWLINE);
writer.write("</log4j:configuration>"+NEWLINE);
writer.flush();
writer.close();
}
catch (IOException e)
{
fail("Unable to create temporary test log4j configuration");
}
return tmpFile;
}
//******* Test Methods ******* //
public void testCheckLevelsAndStrictParser()
{
//try the valid logger levels
_testConfigFile = createTempTestLog4JConfig("all", "info", false, false);
try
{
QpidLog4JConfigurator.checkLoggerLevels(_testConfigFile.getAbsolutePath());
}
catch (Exception e)
{
fail("No exception expected, valid levels and xml were used");
}
_testConfigFile = createTempTestLog4JConfig("trace", "info", false, false);
try
{
QpidLog4JConfigurator.checkLoggerLevels(_testConfigFile.getAbsolutePath());
}
catch (Exception e)
{
fail("No exception expected, valid levels and xml were used");
}
_testConfigFile = createTempTestLog4JConfig("debug", "info", false, false);
try
{
QpidLog4JConfigurator.checkLoggerLevels(_testConfigFile.getAbsolutePath());
}
catch (Exception e)
{
fail("No exception expected, valid levels and xml were used");
}
_testConfigFile = createTempTestLog4JConfig("info", "info", false, false);
try
{
QpidLog4JConfigurator.checkLoggerLevels(_testConfigFile.getAbsolutePath());
}
catch (Exception e)
{
fail("No exception expected, valid levels and xml were used");
}
_testConfigFile = createTempTestLog4JConfig("warn", "info", false, false);
try
{
QpidLog4JConfigurator.checkLoggerLevels(_testConfigFile.getAbsolutePath());
}
catch (Exception e)
{
fail("No exception expected, valid levels and xml were used");
}
_testConfigFile = createTempTestLog4JConfig("error", "info", false, false);
try
{
QpidLog4JConfigurator.checkLoggerLevels(_testConfigFile.getAbsolutePath());
}
catch (Exception e)
{
fail("No exception expected, valid levels and xml were used");
}
_testConfigFile = createTempTestLog4JConfig("fatal", "info", false, false);
try
{
QpidLog4JConfigurator.checkLoggerLevels(_testConfigFile.getAbsolutePath());
}
catch (Exception e)
{
fail("No exception expected, valid levels and xml were used");
}
_testConfigFile = createTempTestLog4JConfig("off", "info", false, false);
try
{
QpidLog4JConfigurator.checkLoggerLevels(_testConfigFile.getAbsolutePath());
}
catch (Exception e)
{
fail("No exception expected, valid levels and xml were used");
}
_testConfigFile = createTempTestLog4JConfig("null", "info", false, false);
try
{
QpidLog4JConfigurator.checkLoggerLevels(_testConfigFile.getAbsolutePath());
}
catch (Exception e)
{
fail("No exception expected, valid levels and xml were used");
}
_testConfigFile = createTempTestLog4JConfig("inherited", "info", false, false);
try
{
QpidLog4JConfigurator.checkLoggerLevels(_testConfigFile.getAbsolutePath());
}
catch (Exception e)
{
fail("No exception expected, valid levels and xml were used");
}
//now try an invalid logger level
_testConfigFile = createTempTestLog4JConfig("madeup", "info", false, false);
try
{
QpidLog4JConfigurator.checkLoggerLevels(_testConfigFile.getAbsolutePath());
fail("IllegalLoggerLevelException expected, invalid levels used");
}
catch (IllegalLoggerLevelException e)
{
//expected, ignore
}
catch (IOException e)
{
fail("Incorrect Exception, expected an IllegalLoggerLevelException");
}
//now try the valid rootLogger levels
_testConfigFile = createTempTestLog4JConfig("info", "all", false, false);
try
{
QpidLog4JConfigurator.checkLoggerLevels(_testConfigFile.getAbsolutePath());
}
catch (Exception e)
{
fail("No exception expected, valid levels and xml were used");
}
_testConfigFile = createTempTestLog4JConfig("info", "trace", false, false);
try
{
QpidLog4JConfigurator.checkLoggerLevels(_testConfigFile.getAbsolutePath());
}
catch (Exception e)
{
fail("No exception expected, valid levels and xml were used");
}
_testConfigFile = createTempTestLog4JConfig("info", "debug", false, false);
try
{
QpidLog4JConfigurator.checkLoggerLevels(_testConfigFile.getAbsolutePath());
}
catch (Exception e)
{
fail("No exception expected, valid levels and xml were used");
}
_testConfigFile = createTempTestLog4JConfig("info", "info", false, false);
try
{
QpidLog4JConfigurator.checkLoggerLevels(_testConfigFile.getAbsolutePath());
}
catch (Exception e)
{
fail("No exception expected, valid levels and xml were used");
}
_testConfigFile = createTempTestLog4JConfig("info", "warn", false, false);
try
{
QpidLog4JConfigurator.checkLoggerLevels(_testConfigFile.getAbsolutePath());
}
catch (Exception e)
{
fail("No exception expected, valid levels and xml were used");
}
_testConfigFile = createTempTestLog4JConfig("info", "error", false, false);
try
{
QpidLog4JConfigurator.checkLoggerLevels(_testConfigFile.getAbsolutePath());
}
catch (Exception e)
{
fail("No exception expected, valid levels and xml were used");
}
_testConfigFile = createTempTestLog4JConfig("info", "fatal", false, false);
try
{
QpidLog4JConfigurator.checkLoggerLevels(_testConfigFile.getAbsolutePath());
}
catch (Exception e)
{
fail("No exception expected, valid levels and xml were used");
}
_testConfigFile = createTempTestLog4JConfig("info", "off", false, false);
try
{
QpidLog4JConfigurator.checkLoggerLevels(_testConfigFile.getAbsolutePath());
}
catch (Exception e)
{
fail("No exception expected, valid levels and xml were used");
}
_testConfigFile = createTempTestLog4JConfig("info", "null", false, false);
try
{
QpidLog4JConfigurator.checkLoggerLevels(_testConfigFile.getAbsolutePath());
}
catch (Exception e)
{
fail("No exception expected, valid levels and xml were used");
}
_testConfigFile = createTempTestLog4JConfig("info", "inherited", false, false);
try
{
QpidLog4JConfigurator.checkLoggerLevels(_testConfigFile.getAbsolutePath());
}
catch (Exception e)
{
fail("No exception expected, valid levels and xml were used");
}
_testConfigFile = createTempTestLog4JConfig("info", "debug", false, false);
try
{
QpidLog4JConfigurator.checkLoggerLevels(_testConfigFile.getAbsolutePath());
}
catch (Exception e)
{
fail("No exception expected, valid levels and xml were used");
}
//now try an invalid logger level
_testConfigFile = createTempTestLog4JConfig("info", "madeup", false, false);
try
{
QpidLog4JConfigurator.checkLoggerLevels(_testConfigFile.getAbsolutePath());
fail("IllegalLoggerLevelException expected, invalid levels used");
}
catch (IllegalLoggerLevelException e)
{
//expected, ignore
}
catch (IOException e)
{
fail("Incorrect Exception, expected an IllegalLoggerLevelException");
}
//now try invalid xml
_testConfigFile = createTempTestLog4JConfig("info", "info", true, false);
try
{
QpidLog4JConfigurator.checkLoggerLevels(_testConfigFile.getAbsolutePath());
fail("IOException expected, malformed XML used");
}
catch (IllegalLoggerLevelException e)
{
fail("Incorrect Exception, expected an IOException");
}
catch (IOException e)
{
//expected, ignore
}
_testConfigFile = createTempTestLog4JConfig("info", "info", false, true);
try
{
QpidLog4JConfigurator.checkLoggerLevels(_testConfigFile.getAbsolutePath());
fail("IOException expected, malformed XML used");
}
catch (IllegalLoggerLevelException e)
{
//expected, ignore
}
catch (IOException e)
{
fail("Incorrect Exception, expected an IllegalLoggerLevelException");
}
}
}