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 }