Add some integration tests for JUL
[lttng-ust-java-tests.git] / src / org / lttng / ust / agent / integration / jul / JulEnabledEventsTest.java
CommitLineData
da8308fe
AM
1package org.lttng.ust.agent.integration.jul;
2
3import static org.junit.Assert.assertEquals;
4import static org.junit.Assert.assertNotNull;
5import static org.junit.Assert.assertTrue;
6import static org.junit.Assume.assumeTrue;
7
8import java.io.IOException;
9import java.util.List;
da8308fe
AM
10import java.util.logging.Level;
11import java.util.logging.Logger;
12
13import org.junit.After;
9368bd5e 14import org.junit.AfterClass;
da8308fe
AM
15import org.junit.Before;
16import org.junit.BeforeClass;
17import org.junit.Test;
18import org.lttng.ust.agent.jul.LttngLogHandler;
19import org.lttng.ust.agent.utils.LttngSessionControl;
20import org.lttng.ust.agent.utils.LttngSessionControl.Domain;
21
22public class JulEnabledEventsTest {
23
24 private static final Domain DOMAIN = Domain.JUL;
25
9368bd5e
AM
26 private static final String SESSION_NAME = JulEnabledEventsTest.class.getSimpleName();
27
da8308fe
AM
28 private static final String EVENT_NAME_A = "EventA";
29 private static final String EVENT_NAME_B = "EventAB";
30 private static final String EVENT_NAME_C = "EventABC";
31 private static final String EVENT_NAME_D = "EventABCD";
32
33 private Logger loggerA;
34 private Logger loggerB;
35 private Logger loggerC;
36 private Logger loggerD;
37
9368bd5e
AM
38 private LttngLogHandler handlerA;
39 private LttngLogHandler handlerB;
40 private LttngLogHandler handlerC;
da8308fe
AM
41
42 @BeforeClass
43 public static void classSetup() {
44 /* Skip tests if we can't find the JNI library or lttng-tools */
45 try {
46 LttngLogHandler testHandler = new LttngLogHandler();
47 testHandler.close();
48 } catch (SecurityException | IOException e) {
49 assumeTrue(false);
50 }
51
52 boolean ret1 = LttngSessionControl.setupSession(null, DOMAIN);
9368bd5e
AM
53 boolean ret2 = LttngSessionControl.stopSession(null);
54 /* "lttng view" also tests that Babeltrace is installed and working */
55 List<String> contents = LttngSessionControl.viewSession(null);
56 boolean ret3 = LttngSessionControl.destroySession(null);
da8308fe 57 assumeTrue(ret1 && ret2 && ret3);
9368bd5e
AM
58 assumeTrue(contents.isEmpty());
59 }
60
61 @AfterClass
62 public static void classCleanup() {
63 LttngSessionControl.deleteAllTracee();
da8308fe
AM
64 }
65
66 @Before
67 public void setup() throws SecurityException, IOException {
9368bd5e
AM
68 // TODO Wipe all existing LTTng sessions?
69
da8308fe
AM
70 loggerA = Logger.getLogger(EVENT_NAME_A);
71 loggerB = Logger.getLogger(EVENT_NAME_B);
72 loggerC = Logger.getLogger(EVENT_NAME_C);
73 loggerD = Logger.getLogger(EVENT_NAME_D);
74
75 loggerA.setLevel(Level.ALL);
76 loggerB.setLevel(Level.ALL);
77 loggerC.setLevel(Level.ALL);
78 loggerD.setLevel(Level.ALL);
79
80 handlerA = new LttngLogHandler();
81 handlerB = new LttngLogHandler();
82 handlerC = new LttngLogHandler();
83
84 loggerA.addHandler(handlerA);
85 loggerB.addHandler(handlerB);
9368bd5e 86 loggerC.addHandler(handlerC);
da8308fe
AM
87 }
88
89 @After
90 public void teardown() {
9368bd5e
AM
91 /* Just in case the test failed */
92 LttngSessionControl.tryDestroySession(SESSION_NAME);
93
da8308fe
AM
94 loggerA.removeHandler(handlerA);
95 loggerB.removeHandler(handlerB);
96 loggerC.removeHandler(handlerC);
97
98 handlerA.close();
99 handlerB.close();
100 handlerC.close();
101
102 loggerA = null;
103 loggerB = null;
104 loggerC = null;
105 loggerD = null;
106 handlerA = null;
107 handlerB = null;
108 handlerC = null;
109 }
110
111 /**
112 * Test sending events on the Java side, but no events enabled in the
9368bd5e
AM
113 * tracing session. There should be nothing in the resulting trace, and
114 * handlers should not have logged anything.
da8308fe
AM
115 */
116 @Test
117 public void testNoEvents() {
9368bd5e 118 assertTrue(LttngSessionControl.setupSession(SESSION_NAME, DOMAIN));
da8308fe
AM
119
120 send10Events(loggerA);
121 send10Events(loggerB);
122 send10Events(loggerC);
123 send10Events(loggerD);
124
9368bd5e 125 assertTrue(LttngSessionControl.stopSession(SESSION_NAME));
da8308fe 126
9368bd5e 127 List<String> output = LttngSessionControl.viewSession(SESSION_NAME);
da8308fe
AM
128 assertNotNull(output);
129 assertTrue(output.isEmpty());
130
9368bd5e
AM
131 assertTrue(LttngSessionControl.destroySession(SESSION_NAME));
132
133 assertEquals(0, handlerA.getEventCount());
134 assertEquals(0, handlerB.getEventCount());
135 assertEquals(0, handlerC.getEventCount());
da8308fe
AM
136 }
137
138 /**
139 * Test sending events on the Java side, and all events enabled in the
140 * tracing session. All handlers should have sent their events.
141 */
142 @Test
143 public void testAllEvents() {
9368bd5e 144 assertTrue(LttngSessionControl.setupSessionAllEvents(SESSION_NAME, DOMAIN));
da8308fe
AM
145
146 send10Events(loggerA);
147 send10Events(loggerB);
148 send10Events(loggerC);
149 send10Events(loggerD);
150
9368bd5e 151 assertTrue(LttngSessionControl.stopSession(SESSION_NAME));
da8308fe 152
9368bd5e 153 List<String> output = LttngSessionControl.viewSession(SESSION_NAME);
da8308fe 154 assertNotNull(output);
9368bd5e 155 assertEquals(30, output.size()); // loggerD has no handler attached
da8308fe 156
9368bd5e
AM
157 assertTrue(LttngSessionControl.destroySession(SESSION_NAME));
158
159 assertEquals(10, handlerA.getEventCount());
160 assertEquals(10, handlerB.getEventCount());
161 assertEquals(10, handlerC.getEventCount());
da8308fe
AM
162 }
163
164 /**
165 * Test sending events on the Java side, with only some of them enabled in
166 * the tracing session. Only the subset that is enabled should be received.
167 */
168 @Test
169 public void testSomeEvents() {
9368bd5e
AM
170 assertTrue(LttngSessionControl.setupSession(SESSION_NAME, DOMAIN,
171 EVENT_NAME_A, EVENT_NAME_C, EVENT_NAME_D));
172
173 send10Events(loggerA);
174 send10Events(loggerB);
175 send10Events(loggerC);
176 send10Events(loggerD);
177
178 assertTrue(LttngSessionControl.stopSession(SESSION_NAME));
179
180 List<String> output = LttngSessionControl.viewSession(SESSION_NAME);
181 assertNotNull(output);
182 assertEquals(20, output.size());
183
184 assertTrue(LttngSessionControl.destroySession(SESSION_NAME));
185
186 assertEquals(10, handlerA.getEventCount());
187 assertEquals(0, handlerB.getEventCount());
188 assertEquals(10, handlerC.getEventCount());
189 }
190
191 /**
192 * Test with all events enabled (-a), plus some other events added manually.
193 * Events should still be retained, but there should be no duplicates.
194 */
195 @Test
196 public void testAllEventsAndSome() {
197 assertTrue(LttngSessionControl.setupSessionAllEvents(SESSION_NAME, DOMAIN));
198 assertTrue(LttngSessionControl.enableEvents(SESSION_NAME, DOMAIN,
199 EVENT_NAME_A, EVENT_NAME_B));
200
201 send10Events(loggerA);
202 send10Events(loggerB);
203 send10Events(loggerC);
204 send10Events(loggerD);
205
206 assertTrue(LttngSessionControl.stopSession(SESSION_NAME));
207
208 List<String> output = LttngSessionControl.viewSession(SESSION_NAME);
209 assertNotNull(output);
210 assertEquals(30, output.size());
211
212 assertTrue(LttngSessionControl.destroySession(SESSION_NAME));
213
214 assertEquals(10, handlerA.getEventCount());
215 assertEquals(10, handlerB.getEventCount());
216 assertEquals(10, handlerC.getEventCount());
217 }
218
219 /**
220 * Same as {@link #testSomeEvents()}, but some events were enabled first,
221 * then disabled. Makes sure the enabled-event refcounting works properly.
222 */
223 @Test
224 public void testSomeEventsAfterDisabling() {
225 assertTrue(LttngSessionControl.setupSession(SESSION_NAME, DOMAIN,
226 EVENT_NAME_A, EVENT_NAME_C, EVENT_NAME_D));
227
228 assertTrue(LttngSessionControl.disableEvents(SESSION_NAME, DOMAIN,
229 EVENT_NAME_C));
230
231 send10Events(loggerA);
232 send10Events(loggerB);
233 send10Events(loggerC);
234 send10Events(loggerD);
235
236 assertTrue(LttngSessionControl.stopSession(SESSION_NAME));
237
238 List<String> output = LttngSessionControl.viewSession(SESSION_NAME);
239 assertNotNull(output);
240 assertEquals(10, output.size());
241
242 assertTrue(LttngSessionControl.destroySession(SESSION_NAME));
243
244 assertEquals(10, handlerA.getEventCount());
245 assertEquals(0, handlerB.getEventCount());
246 assertEquals(0, handlerC.getEventCount());
247 }
248
249 /**
250 * Test enabling an event prefix, which means an event name ending with a *,
251 * to match all events starting with this name.
252 */
253 @Test
254 public void testEventPrefix() {
255 assertTrue(LttngSessionControl.setupSession(SESSION_NAME, DOMAIN,
256 "EventAB*")); // should match event/loggers B and C, but not A.
257
258 send10Events(loggerA);
259 send10Events(loggerB);
260 send10Events(loggerC);
261 send10Events(loggerD);
262
263 assertTrue(LttngSessionControl.stopSession(SESSION_NAME));
264
265 List<String> output = LttngSessionControl.viewSession(SESSION_NAME);
266 assertNotNull(output);
267 assertEquals(20, output.size());
268
269 assertTrue(LttngSessionControl.destroySession(SESSION_NAME));
270
271 assertEquals(0, handlerA.getEventCount());
272 assertEquals(10, handlerB.getEventCount());
273 assertEquals(10, handlerC.getEventCount());
274 }
275
276 /**
277 * Same as {@link #testEventPrefix()}, but with multiple prefixes that
278 * overlap. There should not be any duplicate events in the trace or in the
279 * handlers.
280 */
281 @Test
282 public void testEventPrefixOverlapping() {
283 assertTrue(LttngSessionControl.setupSession(SESSION_NAME, DOMAIN,
284 "EventAB*", "EventABC*")); // should still match B and C
da8308fe
AM
285
286 send10Events(loggerA);
287 send10Events(loggerB);
288 send10Events(loggerC);
289 send10Events(loggerD);
290
9368bd5e 291 assertTrue(LttngSessionControl.stopSession(SESSION_NAME));
da8308fe 292
9368bd5e 293 List<String> output = LttngSessionControl.viewSession(SESSION_NAME);
da8308fe 294 assertNotNull(output);
9368bd5e
AM
295 assertEquals(20, output.size());
296
297 assertTrue(LttngSessionControl.destroySession(SESSION_NAME));
298
299 assertEquals(0, handlerA.getEventCount());
300 assertEquals(10, handlerB.getEventCount());
301 assertEquals(10, handlerC.getEventCount());
302 }
303
304 /**
305 * Test with all events enabled (-a), plus an event prefix. Once again,
306 * there should be no duplicates.
307 */
308 @Test
309 public void testAllEventsAndPrefix() {
310 assertTrue(LttngSessionControl.setupSessionAllEvents(SESSION_NAME, DOMAIN));
311 assertTrue(LttngSessionControl.enableEvents(SESSION_NAME, DOMAIN,
312 "EventAB*")); // should match B and C
313
314 send10Events(loggerA);
315 send10Events(loggerB);
316 send10Events(loggerC);
317 send10Events(loggerD);
318
319 assertTrue(LttngSessionControl.stopSession(SESSION_NAME));
320
321 List<String> output = LttngSessionControl.viewSession(SESSION_NAME);
322 assertNotNull(output);
323 assertEquals(30, output.size());
324
325 assertTrue(LttngSessionControl.destroySession(SESSION_NAME));
da8308fe 326
9368bd5e
AM
327 assertEquals(10, handlerA.getEventCount());
328 assertEquals(10, handlerB.getEventCount());
329 assertEquals(10, handlerC.getEventCount());
da8308fe
AM
330 }
331
332 private static void send10Events(Logger logger) {
333 String a = new String("a");
9368bd5e 334 Object[] params = { a, new String("b"), new Object() };
da8308fe 335
9368bd5e 336 // Levels are FINE, FINER, FINEST, INFO, SEVERE, WARNING
da8308fe
AM
337 logger.fine("A fine level message");
338 logger.finer("A finer level message");
339 logger.finest("A finest level message");
340 logger.info("A info level message");
341 logger.severe("A severe level message");
342 logger.warning("A warning level message");
343 logger.warning("Another warning level message");
344 logger.log(Level.WARNING, "A warning message using Logger.log()");
345 logger.log(Level.INFO, "A message with one parameter", a);
346 logger.log(Level.INFO, "A message with parameters", params);
347 }
348
349}
This page took 0.045075 seconds and 4 git commands to generate.