    1   /*
    2    * Licensed to the Apache Software Foundation (ASF) under one or more
    3    * contributor license agreements.  See the NOTICE file distributed with
    4    * this work for additional information regarding copyright ownership.
    5    * The ASF licenses this file to You under the Apache License, Version 2.0
    6    * (the "License"); you may not use this file except in compliance with
    7    * the License.  You may obtain a copy of the License at
    8    *
    9    *      http://www.apache.org/licenses/LICENSE-2.0
    10   *
    11   * Unless required by applicable law or agreed to in writing, software
    12   * distributed under the License is distributed on an "AS IS" BASIS,
    13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    14   * See the License for the specific language governing permissions and
    15   * limitations under the License.
    16   */
    17
    18  package org.apache.log4j.varia;
    19
    20  import junit.framework.TestCase;
    21  import junit.framework.TestSuite;
    22  import junit.framework.Test;
    23
    24  import org.apache.log4j.Logger;
    25  import org.apache.log4j.Level;
    26  import org.apache.log4j.Appender;
    27  import org.apache.log4j.FileAppender;
    28  import org.apache.log4j.Layout;
    29  import org.apache.log4j.SimpleLayout;
    30  import org.apache.log4j.varia.LevelMatchFilter;
    31  import org.apache.log4j.varia.DenyAllFilter;
    32
    33  import org.apache.log4j.util.Transformer;
    34  import org.apache.log4j.util.Compare;
    35  import org.apache.log4j.util.LineNumberFilter;
    36
    37  /**
    38     Test case for varia/LevelMatchFilter.java.
    39   */
    40  public class LevelMatchFilterTestCase extends TestCase {
    41
    42    static String ACCEPT_FILE     = "output/LevelMatchFilter_accept";
    43    static String ACCEPT_FILTERED = "output/LevelMatchFilter_accept_filtered";
    44    static String ACCEPT_WITNESS  = "witness/LevelMatchFilter_accept";
    45
    46    static String DENY_FILE       = "output/LevelMatchFilter_deny";
    47    static String DENY_FILTERED   = "output/LevelMatchFilter_deny_filtered";
    48    static String DENY_WITNESS    = "witness/LevelMatchFilter_deny";
    49
    50    Logger root;
    51    Logger logger;
    52
    53    public LevelMatchFilterTestCase(String name) {
    54      super(name);
    55    }
    56
    57    public void setUp() {
    58      root = Logger.getRootLogger();
    59      root.removeAllAppenders();
    60    }
    61
    62    public void tearDown() {
    63      root.getLoggerRepository().resetConfiguration();
    64    }
    65
    66    public void accept() throws Exception {
    67
    68      // set up appender
    69      Layout layout = new SimpleLayout();
    70      Appender appender = new FileAppender(layout, ACCEPT_FILE, false);
    71
    72      // create LevelMatchFilter
    73      LevelMatchFilter matchFilter = new LevelMatchFilter();
    74
    75       // attach match filter to appender
    76      appender.addFilter(matchFilter);
    77
    78      // attach DenyAllFilter to end of filter chain to deny neutral
    79      // (non matching) messages
    80      appender.addFilter(new DenyAllFilter());
    81
    82      // set appender on root and set level to debug
    83      root.addAppender(appender);
    84      root.setLevel(Level.TRACE);
    85
    86      Level[] levelArray = new Level[] {Level.TRACE, Level.DEBUG, Level.INFO, Level.WARN,
    87  				      Level.ERROR, Level.FATAL};
    88      for (int x = 0; x < levelArray.length; x++) {
    89        // set the level to match
    90        matchFilter.setLevelToMatch(levelArray[x].toString());
    91        common("pass " + x + "; filter set to accept only "
    92  	     + levelArray[x].toString() + " msgs");
    93      }
    94
    95      Transformer.transform(ACCEPT_FILE, ACCEPT_FILTERED, new LineNumberFilter());
    96      assertTrue(Compare.compare(ACCEPT_FILTERED, ACCEPT_WITNESS));
    97    }
    98
    99    public void deny() throws Exception {
    100
    101     // set up appender
    102     Layout layout = new SimpleLayout();
    103     Appender appender = new FileAppender(layout, DENY_FILE, false);
    104
    105     // create LevelMatchFilter, set to deny matches
    106     LevelMatchFilter matchFilter = new LevelMatchFilter();
    107     matchFilter.setAcceptOnMatch(false);
    108
    109      // attach match filter to appender
    110     appender.addFilter(matchFilter);
    111
    112     // set appender on root and set level to debug
    113     root.addAppender(appender);
    114     root.setLevel(Level.TRACE);
    115
    116     Level[] levelArray = new Level[] {Level.TRACE, Level.DEBUG, Level.INFO, Level.WARN,
    117 				      Level.ERROR, Level.FATAL};
    118     for (int x = 0; x < levelArray.length; x++) {
    119       // set the level to match
    120       matchFilter.setLevelToMatch(levelArray[x].toString());
    121       common("pass " + x + "; filter set to deny only " + levelArray[x].toString()
    122               + " msgs");
    123     }
    124
    125     Transformer.transform(DENY_FILE, DENY_FILTERED, new LineNumberFilter());
    126     assertTrue(Compare.compare(DENY_FILTERED, DENY_WITNESS));
    127   }
    128
    129
    130   void common(String msg) {
    131     Logger logger = Logger.getLogger("test");
    132     logger.trace(msg);
    133     logger.debug(msg);
    134     logger.info(msg);
    135     logger.warn(msg);
    136     logger.error(msg);
    137     logger.fatal(msg);
    138   }
    139
    140   public static Test suite() {
    141     TestSuite suite = new TestSuite();
    142     suite.addTest(new LevelMatchFilterTestCase("accept"));
    143     suite.addTest(new LevelMatchFilterTestCase("deny"));
    144     return suite;
    145   }
    146
    147 }