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.assertFalse;
14 import static org.junit.Assert.assertNotNull;
15 import static org.junit.Assert.assertNull;
16 import static org.junit.Assert.assertTrue;
17 import static org.junit.Assert.fail;
18
19 import org.junit.Before;
20 import org.junit.Test;
21
22 import ch.qos.logback.classic.turbo.NOPTurboFilter;
23 import ch.qos.logback.core.status.StatusManager;
24
25 public class LoggerContextTest {
26 LoggerContext lc;
27
28 @Before
29 public void setUp() throws Exception {
30 Logger.instanceCount = 0;
31 lc = new LoggerContext();
32 lc.setName("x");
33 }
34
35 @Test
36 public void testRootGetLogger() {
37 Logger root = lc.getLogger(LoggerContext.ROOT_NAME);
38 assertEquals(Level.DEBUG, root.getLevel());
39 assertEquals(Level.DEBUG, root.getEffectiveLevel());
40 }
41
42 @Test
43 public void testLoggerX() {
44 Logger x = lc.getLogger("x");
45 assertNotNull(x);
46 assertEquals("x", x.getName());
47 assertNull(x.getLevel());
48 assertEquals(Level.DEBUG, x.getEffectiveLevel());
49 }
50
51 @Test
52 public void testNull() {
53 try {
54 lc.getLogger((String) null);
55 fail("null should cause an exception");
56 } catch (IllegalArgumentException e) {
57 }
58 }
59
60 @Test
61 public void testEmpty() {
62 Logger empty = lc.getLogger("");
63 LoggerTestHelper.assertNameEquals(empty, "");
64 LoggerTestHelper.assertLevels(null, empty, Level.DEBUG);
65
66 Logger dot = lc.getLogger(".");
67 LoggerTestHelper.assertNameEquals(dot, ".");
68
69
70
71
72 LoggerTestHelper.assertLevels(null, dot, Level.DEBUG);
73
74 assertEquals(3, Logger.instanceCount);
75 }
76
77 @Test
78 public void testDotDot() {
79 Logger dotdot = lc.getLogger("..");
80 assertEquals(4, Logger.instanceCount);
81 LoggerTestHelper.assertNameEquals(dotdot, "..");
82
83
84
85 }
86
87 @Test
88 public void testLoggerXY() {
89 assertEquals(1, Logger.instanceCount);
90
91 Logger xy = lc.getLogger("x.y");
92 assertEquals(3, Logger.instanceCount);
93 LoggerTestHelper.assertNameEquals(xy, "x.y");
94 LoggerTestHelper.assertLevels(null, xy, Level.DEBUG);
95
96 Logger x = lc.getLogger("x");
97 assertEquals(3, Logger.instanceCount);
98
99 Logger xy2 = lc.getLogger("x.y");
100 assertEquals(xy, xy2);
101
102 Logger x2 = lc.getLogger("x");
103 assertEquals(x, x2);
104 assertEquals(3, Logger.instanceCount);
105 }
106
107 @Test
108 public void testLoggerMultipleChildren() {
109 assertEquals(1, Logger.instanceCount);
110 Logger xy0 = lc.getLogger("x.y0");
111 LoggerTestHelper.assertNameEquals(xy0, "x.y0");
112
113 Logger xy1 = lc.getLogger("x.y1");
114 LoggerTestHelper.assertNameEquals(xy1, "x.y1");
115
116 LoggerTestHelper.assertLevels(null, xy0, Level.DEBUG);
117 LoggerTestHelper.assertLevels(null, xy1, Level.DEBUG);
118 assertEquals(4, Logger.instanceCount);
119
120 for (int i = 0; i < 100; i++) {
121 Logger xy_i = lc.getLogger("x.y" + i);
122 LoggerTestHelper.assertNameEquals(xy_i, "x.y" + i);
123 LoggerTestHelper.assertLevels(null, xy_i, Level.DEBUG);
124 }
125 assertEquals(102, Logger.instanceCount);
126 }
127
128 @Test
129 public void testMultiLevel() {
130 Logger wxyz = lc.getLogger("w.x.y.z");
131 LoggerTestHelper.assertNameEquals(wxyz, "w.x.y.z");
132 LoggerTestHelper.assertLevels(null, wxyz, Level.DEBUG);
133
134 Logger wx = lc.getLogger("w.x");
135 wx.setLevel(Level.INFO);
136 LoggerTestHelper.assertNameEquals(wx, "w.x");
137 LoggerTestHelper.assertLevels(Level.INFO, wx, Level.INFO);
138 LoggerTestHelper.assertLevels(null, lc.getLogger("w.x.y"), Level.INFO);
139 LoggerTestHelper.assertLevels(null, wxyz, Level.INFO);
140 }
141
142 @Test
143 public void testStatusWithUnconfiguredContext() {
144 Logger logger = lc.getLogger(LoggerContextTest.class);
145
146 for (int i = 0; i < 3; i++) {
147 logger.debug("test");
148 }
149
150 logger = lc.getLogger("x.y.z");
151
152 for (int i = 0; i < 3; i++) {
153 logger.debug("test");
154 }
155
156 StatusManager sm = lc.getStatusManager();
157 assertTrue("StatusManager has recieved too many messages",
158 sm.getCount() == 1);
159 }
160
161
162 @Test
163 public void resetTest() {
164
165 Logger root = lc.getLogger(LoggerContext.ROOT_NAME);
166 Logger a = lc.getLogger("a");
167 Logger ab = lc.getLogger("a.b");
168
169 ab.setLevel(Level.WARN);
170 root.setLevel(Level.INFO);
171 lc.reset();
172 assertEquals(Level.DEBUG, root.getEffectiveLevel());
173 assertEquals(Level.DEBUG, a.getEffectiveLevel());
174 assertEquals(Level.DEBUG, ab.getEffectiveLevel());
175
176 assertEquals(Level.DEBUG, root.getLevel());
177 assertNull(a.getLevel());
178 assertNull(ab.getLevel());
179 }
180
181
182 @Test
183 public void turboFilterStopOnReset() {
184 NOPTurboFilter nopTF = new NOPTurboFilter();
185 nopTF.start();
186 lc.addTurboFilter(nopTF);
187 assertTrue(nopTF.isStarted());
188 lc.reset();
189 assertFalse(nopTF.isStarted());
190 }
191 }