1   /**
2    * Logback: the generic, reliable, fast and flexible logging framework.
3    * 
4    * Copyright (C) 2000-2008, QOS.ch
5    * 
6    * This library is free software, you can redistribute it and/or modify it under
7    * the terms of the GNU Lesser General Public License as published by the Free
8    * Software Foundation.
9    */
10  package ch.qos.logback.classic.sift;
11  
12  import static org.junit.Assert.assertEquals;
13  import static org.junit.Assert.assertFalse;
14  import static org.junit.Assert.assertNotNull;
15  
16  import java.util.List;
17  
18  import org.junit.Test;
19  import org.slf4j.MDC;
20  
21  import ch.qos.logback.classic.Level;
22  import ch.qos.logback.classic.Logger;
23  import ch.qos.logback.classic.LoggerContext;
24  import ch.qos.logback.classic.joran.JoranConfigurator;
25  import ch.qos.logback.classic.spi.LoggingEvent;
26  import ch.qos.logback.classic.util.TeztConstants;
27  import ch.qos.logback.core.joran.spi.JoranException;
28  import ch.qos.logback.core.read.ListAppender;
29  import ch.qos.logback.core.sift.AppenderTracker;
30  import ch.qos.logback.core.testUtil.StringListAppender;
31  import ch.qos.logback.core.util.StatusPrinter;
32  
33  public class SiftingAppenderTest {
34  
35    static String PREFIX = TeztConstants.TEST_DIR_PREFIX + "input/joran/sift/";
36  
37    LoggerContext loggerContext = new LoggerContext();
38    Logger logger = loggerContext.getLogger(this.getClass().getName());
39    Logger root = loggerContext.getLogger(LoggerContext.ROOT_NAME);
40  
41    void configure(String file) throws JoranException {
42      JoranConfigurator jc = new JoranConfigurator();
43      jc.setContext(loggerContext);
44      jc.doConfigure(file);
45    }
46  
47    @Test
48    public void unsetDefaultValueProperty() throws JoranException {
49      configure(PREFIX + "unsetDefaultValueProperty.xml");
50      logger.debug("hello");
51      SiftingAppender sa = (SiftingAppender) root.getAppender("SIFT");
52      assertFalse(sa.isStarted());
53    }
54  
55    @Test
56    public void smoke() throws JoranException {
57      configure(PREFIX + "smoke.xml");
58      logger.debug("smoke");
59      long timestamp = 0;
60      SiftingAppender ha = (SiftingAppender) root.getAppender("SIFT");
61      ListAppender<LoggingEvent> listAppender = (ListAppender<LoggingEvent>) ha
62          .getAppenderTracker().get("smoke", timestamp);
63  
64      StatusPrinter.print(loggerContext);
65      assertNotNull(listAppender);
66      List<LoggingEvent> eventList = listAppender.list;
67      assertEquals(1, listAppender.list.size());
68      assertEquals("smoke", eventList.get(0).getMessage());
69    }
70  
71    @Test
72    public void defaultLayoutRule() throws JoranException {
73      configure(PREFIX + "defaultLayoutRule.xml");
74      logger.debug("hello");
75      long timestamp = 0;
76      SiftingAppender ha = (SiftingAppender) root.getAppender("SIFT");
77      StringListAppender<LoggingEvent> listAppender = (StringListAppender<LoggingEvent>) ha
78          .getAppenderTracker().get("default", timestamp);
79  
80      StatusPrinter.print(loggerContext);
81      assertNotNull(listAppender);
82      List<String> strList = listAppender.strList;
83      assertEquals(1, strList.size());
84      assertEquals("DEBUG hello", strList.get(0));
85    }
86  
87    @Test
88    public void testWholeCycle() throws JoranException {
89      String mdcKey = "cycle";
90      configure(PREFIX + "completeCycle.xml");
91      MDC.put(mdcKey, "a");
92      logger.debug("smoke");
93      long timestamp = System.currentTimeMillis();
94      SiftingAppender ha = (SiftingAppender) root.getAppender("SIFT");
95      ListAppender<LoggingEvent> listAppender = (ListAppender<LoggingEvent>) ha
96          .getAppenderTracker().get("a", timestamp);
97      StatusPrinter.print(loggerContext);
98  
99      assertNotNull(listAppender);
100     List<LoggingEvent> eventList = listAppender.list;
101     assertEquals(1, listAppender.list.size());
102     assertEquals("smoke", eventList.get(0).getMessage());
103 
104     MDC.remove(mdcKey);
105     LoggingEvent le = new LoggingEvent("x", logger, Level.INFO, "hello", null,
106         null);
107     le.setTimeStamp(timestamp + AppenderTracker.THRESHOLD * 2);
108     ha.doAppend(le);
109     assertFalse(listAppender.isStarted());
110     assertEquals(1, ha.getAppenderTracker().keyList().size());
111     assertEquals("cycleDefault", ha.getAppenderTracker().keyList().get(0));
112   }
113 }