Commit | Line | Data |
---|---|---|
c5524c71 AM |
1 | package org.lttng.ust.agent.integration.log4j; |
2 | ||
3 | import static org.junit.Assert.assertEquals; | |
4 | import static org.junit.Assert.assertNotNull; | |
5 | import static org.junit.Assert.assertTrue; | |
6 | import static org.junit.Assert.fail; | |
7 | import static org.junit.Assume.assumeTrue; | |
8 | ||
c5524c71 AM |
9 | import java.lang.reflect.Field; |
10 | import java.util.List; | |
11 | ||
12 | import org.apache.log4j.Level; | |
13 | import org.apache.log4j.Logger; | |
14 | import org.junit.After; | |
15 | import org.junit.AfterClass; | |
16 | import org.junit.Before; | |
17 | import org.junit.BeforeClass; | |
18 | import org.junit.Test; | |
19 | import org.lttng.ust.agent.ILttngHandler; | |
20 | import org.lttng.ust.agent.LTTngAgent; | |
8576633f AM |
21 | import org.lttng.ust.agent.utils.LttngSession; |
22 | import org.lttng.ust.agent.utils.LttngSession.Domain; | |
23 | import org.lttng.ust.agent.utils.TestUtils; | |
c5524c71 AM |
24 | |
25 | @SuppressWarnings("deprecation") | |
26 | public class Log4jLegacyApiTest { | |
27 | ||
28 | private static final Domain DOMAIN = Domain.LOG4J; | |
29 | ||
30 | private static final String EVENT_NAME_A = "EventA"; | |
31 | private static final String EVENT_NAME_B = "EventB"; | |
32 | ||
8576633f AM |
33 | private LttngSession session; |
34 | ||
c5524c71 AM |
35 | private Logger loggerA; |
36 | private Logger loggerB; | |
37 | ||
38 | @BeforeClass | |
39 | public static void classSetup() { | |
40 | /* Skip tests if we can't find the JNI library or lttng-tools */ | |
8576633f AM |
41 | assumeTrue(TestUtils.checkForLog4jLibrary()); |
42 | assumeTrue(TestUtils.checkForLttngTools(Domain.LOG4J)); | |
c5524c71 AM |
43 | } |
44 | ||
45 | @AfterClass | |
46 | public static void classCleanup() { | |
8576633f | 47 | LttngSession.deleteAllTracee(); |
c5524c71 AM |
48 | } |
49 | ||
50 | @Before | |
51 | public void setup() { | |
52 | loggerA = Logger.getLogger(EVENT_NAME_A); | |
53 | LTTngAgent.getLTTngAgent(); | |
54 | loggerB = Logger.getLogger(EVENT_NAME_B); | |
55 | ||
56 | loggerA.setLevel(Level.ALL); | |
57 | loggerB.setLevel(Level.ALL); | |
8576633f AM |
58 | |
59 | session = new LttngSession(null, DOMAIN); | |
c5524c71 AM |
60 | } |
61 | ||
62 | @After | |
63 | public void tearDown() { | |
8576633f | 64 | session.close(); |
c5524c71 AM |
65 | |
66 | LTTngAgent.dispose(); | |
67 | ||
68 | loggerA = null; | |
69 | loggerB = null; | |
70 | } | |
71 | ||
72 | @Test | |
73 | public void testNoEvents() { | |
8576633f | 74 | assertTrue(session.start()); |
c5524c71 | 75 | |
8576633f AM |
76 | Log4jTestUtils.send10Events(loggerA); |
77 | Log4jTestUtils.send10Events(loggerB); | |
c5524c71 | 78 | |
8576633f | 79 | assertTrue(session.stop()); |
c5524c71 | 80 | |
8576633f | 81 | List<String> output = session.view(); |
c5524c71 AM |
82 | assertNotNull(output); |
83 | assertTrue(output.isEmpty()); | |
84 | ||
c5524c71 AM |
85 | ILttngHandler handler = getAgentHandler(); |
86 | assertEquals(0, handler.getEventCount()); | |
87 | } | |
88 | ||
89 | @Test | |
90 | public void testAllEvents() { | |
8576633f AM |
91 | assertTrue(session.enableAllEvents()); |
92 | assertTrue(session.start()); | |
c5524c71 | 93 | |
8576633f AM |
94 | Log4jTestUtils.send10Events(loggerA); |
95 | Log4jTestUtils.send10Events(loggerB); | |
c5524c71 | 96 | |
8576633f | 97 | assertTrue(session.stop()); |
c5524c71 | 98 | |
8576633f | 99 | List<String> output = session.view(); |
c5524c71 AM |
100 | assertNotNull(output); |
101 | assertEquals(20, output.size()); | |
102 | ||
c5524c71 AM |
103 | ILttngHandler handler = getAgentHandler(); |
104 | assertEquals(20, handler.getEventCount()); | |
105 | } | |
106 | ||
107 | @Test | |
108 | public void testSomeEvents() { | |
8576633f AM |
109 | assertTrue(session.enableEvents(EVENT_NAME_A)); |
110 | assertTrue(session.start()); | |
c5524c71 | 111 | |
8576633f AM |
112 | Log4jTestUtils.send10Events(loggerA); |
113 | Log4jTestUtils.send10Events(loggerB); | |
c5524c71 | 114 | |
8576633f | 115 | assertTrue(session.stop()); |
c5524c71 | 116 | |
8576633f | 117 | List<String> output = session.view(); |
c5524c71 AM |
118 | assertNotNull(output); |
119 | assertEquals(10, output.size()); | |
120 | ||
c5524c71 AM |
121 | ILttngHandler handler = getAgentHandler(); |
122 | assertEquals(10, handler.getEventCount()); | |
123 | } | |
124 | ||
125 | /** | |
126 | * Get the singleton Log4j Handler currently managed by the LTTngAgent. It | |
127 | * is not public, so we need reflection to access it. | |
128 | * | |
129 | * @return The agent's Log4j handler | |
130 | */ | |
8576633f | 131 | private static ILttngHandler getAgentHandler() { |
c5524c71 AM |
132 | try { |
133 | Field log4jAppenderField = LTTngAgent.class.getDeclaredField("log4jAppender"); | |
134 | log4jAppenderField.setAccessible(true); | |
135 | return (ILttngHandler) log4jAppenderField.get(LTTngAgent.getLTTngAgent()); | |
136 | } catch (ReflectiveOperationException | SecurityException e) { | |
137 | fail(); | |
138 | return null; | |
139 | } | |
140 | } | |
141 | ||
142 | } | |
143 |