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