1
2
3
4
5
6
7
8
9
10
11
12
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 }