View Javadoc
1   /**
2    * Logback: the reliable, generic, fast and flexible logging framework.
3    * Copyright (C) 1999-2015, QOS.ch. All rights reserved.
4    *
5    * This program and the accompanying materials are dual-licensed under
6    * either the terms of the Eclipse Public License v1.0 as published by
7    * the Eclipse Foundation
8    *
9    *   or (per the licensee's choosing)
10   *
11   * under the terms of the GNU Lesser General Public License version 2.1
12   * as published by the Free Software Foundation.
13   */
14  package ch.qos.logback.classic;
15  
16  import static org.junit.Assert.assertEquals;
17  import static org.junit.Assert.assertFalse;
18  import static org.junit.Assert.assertNotNull;
19  import static org.junit.Assert.assertTrue;
20  
21  import org.junit.Before;
22  import org.junit.Test;
23  import org.slf4j.Marker;
24  import org.slf4j.MarkerFactory;
25  
26  import ch.qos.logback.classic.turbo.MarkerFilter;
27  import ch.qos.logback.classic.turbo.TurboFilter;
28  import ch.qos.logback.core.spi.FilterReply;
29  
30  public class TurboFilteringInLoggerTest {
31  
32      static final String BLUE = "BLUE";
33      LoggerContext context;
34      Logger logger;
35      Marker blueMarker = MarkerFactory.getMarker(BLUE);
36  
37      @Before
38      public void setUp() throws Exception {
39          context = new LoggerContext();
40          context.setName("test");
41          context.start();
42          logger = context.getLogger(TurboFilteringInLoggerTest.class);
43      }
44  
45      private void addYesFilter() {
46          YesFilter filter = new YesFilter();
47          filter.start();
48          context.addTurboFilter(filter);
49      }
50  
51      private void addNoFilter() {
52          NoFilter filter = new NoFilter();
53          filter.start();
54          context.addTurboFilter(filter);
55      }
56  
57      private void addAcceptBLUEFilter() {
58          MarkerFilter filter = new MarkerFilter();
59          filter.setMarker(BLUE);
60          filter.setOnMatch("ACCEPT");
61          filter.start();
62          context.addTurboFilter(filter);
63      }
64  
65      private void addDenyBLUEFilter() {
66          MarkerFilter filter = new MarkerFilter();
67          filter.setMarker(BLUE);
68          filter.setOnMatch("DENY");
69          filter.start();
70          context.addTurboFilter(filter);
71      }
72  
73      @Test
74      public void testIsDebugEnabledWithYesFilter() {
75          addYesFilter();
76          logger.setLevel(Level.INFO);
77          assertTrue(logger.isDebugEnabled());
78      }
79  
80      @Test
81      public void testIsInfoEnabledWithYesFilter() {
82          addYesFilter();
83          logger.setLevel(Level.WARN);
84          assertTrue(logger.isInfoEnabled());
85      }
86  
87      @Test
88      public void testIsWarnEnabledWithYesFilter() {
89          addYesFilter();
90          logger.setLevel(Level.ERROR);
91          assertTrue(logger.isWarnEnabled());
92      }
93  
94      @Test
95      public void testIsErrorEnabledWithYesFilter() {
96          addYesFilter();
97          logger.setLevel(Level.OFF);
98          assertTrue(logger.isErrorEnabled());
99      }
100 
101     @Test
102     public void testIsEnabledForWithYesFilter() {
103         addYesFilter();
104         logger.setLevel(Level.ERROR);
105         assertTrue(logger.isEnabledFor(Level.INFO));
106     }
107 
108     @Test
109     public void testIsEnabledForWithNoFilter() {
110         addNoFilter();
111         logger.setLevel(Level.DEBUG);
112         assertFalse(logger.isEnabledFor(Level.INFO));
113     }
114 
115     @Test
116     public void testIsDebugEnabledWithNoFilter() {
117         addNoFilter();
118         logger.setLevel(Level.DEBUG);
119         assertFalse(logger.isDebugEnabled());
120     }
121 
122     @Test
123     public void testIsInfoEnabledWithNoFilter() {
124         addNoFilter();
125         logger.setLevel(Level.DEBUG);
126         assertFalse(logger.isInfoEnabled());
127     }
128 
129     @Test
130     public void testIsWarnEnabledWithNoFilter() {
131         addNoFilter();
132         logger.setLevel(Level.DEBUG);
133         assertFalse(logger.isWarnEnabled());
134     }
135 
136     @Test
137     public void testIsErrorEnabledWithNoFilter() {
138         addNoFilter();
139         logger.setLevel(Level.DEBUG);
140         assertFalse(logger.isErrorEnabled());
141     }
142 
143     @Test
144     public void testIsErrorEnabledWithAcceptBlueFilter() {
145         addAcceptBLUEFilter();
146         logger.setLevel(Level.ERROR);
147         assertTrue(logger.isDebugEnabled(blueMarker));
148     }
149 
150     @Test
151     public void testIsErrorEnabledWithDenyBlueFilter() {
152         addDenyBLUEFilter();
153         logger.setLevel(Level.ALL);
154         assertFalse(logger.isDebugEnabled(blueMarker));
155     }
156 
157     @Test
158     public void testLoggingContextReset() {
159         addYesFilter();
160         assertNotNull(context.getTurboFilterList().get(0));
161         context.reset();
162         assertEquals(0, context.getTurboFilterList().size());
163     }
164 
165 }
166 
167 class YesFilter extends TurboFilter {
168     @Override
169     public FilterReply decide(Marker marker, Logger logger, Level level, String format, Object[] params, Throwable t) {
170         return FilterReply.ACCEPT;
171     }
172 }
173 
174 class NoFilter extends TurboFilter {
175     @Override
176     public FilterReply decide(Marker marker, Logger logger, Level level, String format, Object[] params, Throwable t) {
177         return FilterReply.DENY;
178     }
179 }