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