2222import ch .qos .logback .core .joran .spi .JoranException ;
2323import ch .qos .logback .core .read .ListAppender ;
2424import ch .qos .logback .core .sift .AppenderTracker ;
25+ import ch .qos .logback .core .spi .AbstractComponentTracker ;
2526import ch .qos .logback .core .spi .ComponentTracker ;
2627import ch .qos .logback .core .status .ErrorStatus ;
2728import ch .qos .logback .core .status .StatusChecker ;
3233import org .slf4j .MDC ;
3334
3435import java .util .List ;
35- import java .util .Set ;
3636
3737import static org .junit .Assert .*;
38+ import static org .junit .Assert .assertEquals ;
3839
3940public class SiftingAppenderTest {
4041
@@ -43,8 +44,9 @@ public class SiftingAppenderTest {
4344 LoggerContext loggerContext = new LoggerContext ();
4445 Logger logger = loggerContext .getLogger (this .getClass ().getName ());
4546 Logger root = loggerContext .getLogger (Logger .ROOT_LOGGER_NAME );
46- StatusChecker sc = new StatusChecker (loggerContext );
47+ StatusChecker statusChecker = new StatusChecker (loggerContext );
4748 int diff = RandomUtil .getPositiveInt ();
49+ int now = 0 ;
4850
4951 protected void configure (String file ) throws JoranException {
5052 JoranConfigurator jc = new JoranConfigurator ();
@@ -92,7 +94,7 @@ public void zeroNesting() throws JoranException {
9294 NOPAppender <ILoggingEvent > nopa = (NOPAppender <ILoggingEvent >) appender ;
9395 StatusPrinter .printInCaseOfErrorsOrWarnings (loggerContext );
9496
95- sc .assertContainsMatch (ErrorStatus .ERROR , "No nested appenders found" );
97+ statusChecker .assertContainsMatch (ErrorStatus .ERROR , "No nested appenders found" );
9698 }
9799
98100 @ Test
@@ -106,7 +108,7 @@ public void multipleNesting() throws JoranException {
106108 StatusPrinter .printInCaseOfErrorsOrWarnings (loggerContext );
107109
108110 assertNotNull (listAppender );
109- sc .assertContainsMatch (ErrorStatus .ERROR ,
111+ statusChecker .assertContainsMatch (ErrorStatus .ERROR ,
110112 "Only and only one appender can be nested" );
111113 }
112114
@@ -160,7 +162,6 @@ public void sessionFinalizationShouldCauseLingering() throws JoranException {
160162 long now = System .currentTimeMillis ();
161163 SiftingAppender sa = (SiftingAppender ) root .getAppender ("SIFT" );
162164 AppenderTracker <ILoggingEvent > tracker = sa .getAppenderTracker ();
163- String key = "a" ;
164165
165166 assertEquals (1 , tracker .allKeys ().size ());
166167 Appender <ILoggingEvent > appender = tracker .find (mdcVal );
@@ -182,7 +183,6 @@ public void localPropertiesShouldBeVisible() throws JoranException {
182183 configure (SIFT_FOLDER_PREFIX + "propertyPropagation.xml" );
183184 MDC .put (mdcKey , mdcVal );
184185 logger .debug (msg );
185- long timestamp = System .currentTimeMillis ();
186186 SiftingAppender sa = (SiftingAppender ) root .getAppender ("SIFT" );
187187 StringListAppender <ILoggingEvent > listAppender = (StringListAppender <ILoggingEvent >) sa
188188 .getAppenderTracker ().find (mdcVal );
@@ -201,7 +201,6 @@ public void propertyDefinedWithinSiftElementShouldBeVisible() throws JoranExcept
201201 configure (SIFT_FOLDER_PREFIX + "propertyDefinedInSiftElement.xml" );
202202 MDC .put (mdcKey , mdcVal );
203203 logger .debug (msg );
204- long timestamp = System .currentTimeMillis ();
205204 SiftingAppender sa = (SiftingAppender ) root .getAppender ("SIFT" );
206205 StringListAppender <ILoggingEvent > listAppender = (StringListAppender <ILoggingEvent >) sa
207206 .getAppenderTracker ().find (mdcVal );
@@ -220,7 +219,6 @@ public void compositePropertyShouldCombineWithinAndWithoutSiftElement() throws J
220219 configure (SIFT_FOLDER_PREFIX + "compositeProperty.xml" );
221220 MDC .put (mdcKey , mdcVal );
222221 logger .debug (msg );
223- long timestamp = System .currentTimeMillis ();
224222 SiftingAppender sa = (SiftingAppender ) root .getAppender ("SIFT" );
225223 StringListAppender <ILoggingEvent > listAppender = (StringListAppender <ILoggingEvent >) sa
226224 .getAppenderTracker ().find (mdcVal );
@@ -230,5 +228,45 @@ public void compositePropertyShouldCombineWithinAndWithoutSiftElement() throws J
230228 assertEquals (prefix + msg , strList .get (0 ));
231229 }
232230
231+ @ Test
232+ public void maxAppendersCountPropertyShouldBeHonored () throws JoranException {
233+ configure (SIFT_FOLDER_PREFIX + "maxAppenderCount.xml" );
234+ int max = 5 ;
235+ SiftingAppender sa = (SiftingAppender ) root .getAppender ("SIFT" );
236+ String mdcKey = "max" ;
237+ for (int i = 0 ; i <= max ; i ++) {
238+ MDC .put (mdcKey , "" + (diff + i ));
239+ LoggingEvent event = new LoggingEvent ("" , logger , Level .DEBUG , "max" +i , null , null );
240+ event .setTimeStamp (now );
241+ sa .doAppend (event );
242+ now += AbstractComponentTracker .WAIT_BETWEEN_SUCCESSIVE_REMOVAL_ITERATIONS ;
243+ }
244+ AppenderTracker <ILoggingEvent > tracker = sa .getAppenderTracker ();
245+ assertEquals (max , tracker .allKeys ().size ());
246+ assertNull (tracker .find ("" + (diff + 0 )));
247+ for (int i = 1 ; i <= max ; i ++) {
248+ assertNotNull (tracker .find ("" + (diff + i )));
249+ }
250+ }
251+
252+ @ Test
253+ public void timeoutPropertyShouldBeHonored () throws JoranException , InterruptedException {
254+ configure (SIFT_FOLDER_PREFIX + "timeout.xml" );
255+ long timeout = 30 *1000 ;
256+ SiftingAppender sa = (SiftingAppender ) root .getAppender ("SIFT" );
257+
258+ LoggingEvent event = new LoggingEvent ("" , logger , Level .DEBUG , "timeout" , null , null );
259+ event .setTimeStamp (now );
260+ sa .doAppend (event );
261+
262+ AppenderTracker <ILoggingEvent > tracker = sa .getAppenderTracker ();
263+
264+ assertEquals (1 , tracker .getComponentCount ());
265+
266+ now += timeout +1 ;
267+ tracker .removeStaleComponents (now );
268+ assertEquals (0 , tracker .getComponentCount ());
269+ statusChecker .assertIsErrorFree ();
270+ }
233271
234272}
0 commit comments