1
2
3
4
5
6
7
8
9
10 package ch.qos.logback.classic;
11
12 import static org.junit.Assert.assertEquals;
13 import static org.junit.Assert.assertNull;
14
15 import java.util.List;
16 import java.util.Map;
17
18 import org.junit.Ignore;
19 import org.junit.Test;
20
21 import ch.qos.logback.classic.control.ControlLogger;
22 import ch.qos.logback.classic.control.ControlLoggerContext;
23 import ch.qos.logback.classic.control.CreateLogger;
24 import ch.qos.logback.classic.control.ScenarioAction;
25 import ch.qos.logback.classic.control.ScenarioMaker;
26 import ch.qos.logback.classic.control.SetLevel;
27 import ch.qos.logback.classic.control.Scenario;
28
29
30 public class ScenarioBasedLoggerContextTest {
31 LoggerContext lc;
32
33
34 @Test
35 public void testLen3() {
36 doScenarioedTest(3);
37 }
38
39 @Test
40 public void testLength_30() {
41 doScenarioedTest(30);
42 }
43
44 @Test
45 public void testLength_20000() {
46 doScenarioedTest(20*1000);
47 }
48
49 @Test
50 @Ignore
51 public void testLengthLong() {
52 doScenarioedTest(100*1000);
53 }
54
55 private void doScenarioedTest(int len) {
56 LoggerContext lc = new LoggerContext();
57 ControlLoggerContext controlContext = new ControlLoggerContext();
58 Scenario s = ScenarioMaker.makeRealisticCreationScenario(len);
59 List actionList = s.getActionList();
60 int size = actionList.size();
61 for (int i = 0; i < size; i++) {
62 ScenarioAction action = (ScenarioAction) actionList.get(i);
63 if (action instanceof CreateLogger) {
64 CreateLogger cl = (CreateLogger) action;
65 lc.getLogger(cl.getLoggerName());
66 controlContext.getLogger(cl.getLoggerName());
67 } else if (action instanceof SetLevel) {
68 SetLevel sl = (SetLevel) action;
69 Logger l = lc.getLogger(sl.getLoggerName());
70 ControlLogger controlLogger = controlContext.getLogger(sl.getLoggerName());
71 l.setLevel(sl.getLevel());
72 controlLogger.setLevel(sl.getLevel());
73 }
74 }
75
76 compareLoggerContexts(controlContext, lc);
77 }
78
79 void compareLoggerContexts(ControlLoggerContext controlLC, LoggerContext lc) {
80 Map<String, ControlLogger> controlLoggerMap = controlLC.getLoggerMap();
81
82 assertEquals(controlLoggerMap.size()+1, lc.size());
83
84 for (String loggerName: controlLoggerMap.keySet()) {
85
86 Logger logger = lc.exists(loggerName);
87 ControlLogger controlLogger = (ControlLogger) controlLoggerMap.get(loggerName);
88 if (logger == null) {
89 throw new IllegalStateException("logger" + loggerName + " should exist");
90 }
91 assertEquals(loggerName, logger.getName());
92 assertEquals(loggerName, controlLogger.getName());
93
94 compareLoggers(controlLogger, logger);
95 }
96 }
97
98 void compareLoggers(ControlLogger controlLogger, Logger logger) {
99 assertEquals(controlLogger.getName(), logger.getName());
100 assertEquals(controlLogger.getEffectiveLevel(), logger.getEffectiveLevel());
101
102 Level controlLevel = controlLogger.getLevel();
103 Level level = logger.getLevel();
104
105 if (controlLevel == null) {
106 assertNull(level);
107 } else {
108 assertEquals(controlLevel, level);
109 }
110 }
111 }