Commit | Line | Data |
---|---|---|
2b408e85 AM |
1 | /* |
2 | * Copyright (C) 2015, EfficiOS Inc., Alexandre Montplaisir <alexmonthy@efficios.com> | |
3 | * | |
4 | * This program is free software; you can redistribute it and/or modify | |
5 | * it under the terms of the GNU General Public License as published by | |
6 | * the Free Software Foundation; either version 2 of the License, or | |
7 | * (at your option) any later version. | |
8 | * | |
9 | * This program is distributed in the hope that it will be useful, | |
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
12 | * GNU General Public License for more details. | |
13 | * | |
14 | * You should have received a copy of the GNU General Public License along | |
15 | * with this program; if not, write to the Free Software Foundation, Inc., | |
16 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | |
17 | */ | |
18 | ||
c5524c71 AM |
19 | package org.lttng.ust.agent.integration.log4j; |
20 | ||
21 | import static org.junit.Assert.assertEquals; | |
22 | import static org.junit.Assert.assertNotNull; | |
23 | import static org.junit.Assert.assertTrue; | |
24 | import static org.junit.Assert.fail; | |
25 | import static org.junit.Assume.assumeTrue; | |
26 | ||
c5524c71 AM |
27 | import java.lang.reflect.Field; |
28 | import java.util.List; | |
29 | ||
30 | import org.apache.log4j.Level; | |
31 | import org.apache.log4j.Logger; | |
32 | import org.junit.After; | |
33 | import org.junit.AfterClass; | |
34 | import org.junit.Before; | |
35 | import org.junit.BeforeClass; | |
36 | import org.junit.Test; | |
37 | import org.lttng.ust.agent.ILttngHandler; | |
38 | import org.lttng.ust.agent.LTTngAgent; | |
8576633f AM |
39 | import org.lttng.ust.agent.utils.LttngSession; |
40 | import org.lttng.ust.agent.utils.LttngSession.Domain; | |
24b260d9 | 41 | import org.lttng.ust.agent.utils.MiscTestUtils; |
c5524c71 AM |
42 | |
43 | @SuppressWarnings("deprecation") | |
44 | public class Log4jLegacyApiTest { | |
45 | ||
46 | private static final Domain DOMAIN = Domain.LOG4J; | |
47 | ||
48 | private static final String EVENT_NAME_A = "EventA"; | |
49 | private static final String EVENT_NAME_B = "EventB"; | |
50 | ||
8576633f AM |
51 | private LttngSession session; |
52 | ||
c5524c71 AM |
53 | private Logger loggerA; |
54 | private Logger loggerB; | |
55 | ||
56 | @BeforeClass | |
57 | public static void classSetup() { | |
58 | /* Skip tests if we can't find the JNI library or lttng-tools */ | |
24b260d9 AM |
59 | assumeTrue(MiscTestUtils.checkForLog4jLibrary()); |
60 | assumeTrue(MiscTestUtils.checkForLttngTools(Domain.LOG4J)); | |
e41ec02a AM |
61 | |
62 | LttngSession.destroyAllSessions(); | |
c5524c71 AM |
63 | } |
64 | ||
65 | @AfterClass | |
66 | public static void classCleanup() { | |
8576633f | 67 | LttngSession.deleteAllTracee(); |
c5524c71 AM |
68 | } |
69 | ||
70 | @Before | |
71 | public void setup() { | |
72 | loggerA = Logger.getLogger(EVENT_NAME_A); | |
73 | LTTngAgent.getLTTngAgent(); | |
74 | loggerB = Logger.getLogger(EVENT_NAME_B); | |
75 | ||
76 | loggerA.setLevel(Level.ALL); | |
77 | loggerB.setLevel(Level.ALL); | |
8576633f AM |
78 | |
79 | session = new LttngSession(null, DOMAIN); | |
c5524c71 AM |
80 | } |
81 | ||
82 | @After | |
83 | public void tearDown() { | |
8576633f | 84 | session.close(); |
c5524c71 AM |
85 | |
86 | LTTngAgent.dispose(); | |
87 | ||
88 | loggerA = null; | |
89 | loggerB = null; | |
90 | } | |
91 | ||
92 | @Test | |
93 | public void testNoEvents() { | |
8576633f | 94 | assertTrue(session.start()); |
c5524c71 | 95 | |
8576633f AM |
96 | Log4jTestUtils.send10Events(loggerA); |
97 | Log4jTestUtils.send10Events(loggerB); | |
c5524c71 | 98 | |
8576633f | 99 | assertTrue(session.stop()); |
c5524c71 | 100 | |
8576633f | 101 | List<String> output = session.view(); |
c5524c71 AM |
102 | assertNotNull(output); |
103 | assertTrue(output.isEmpty()); | |
104 | ||
c5524c71 AM |
105 | ILttngHandler handler = getAgentHandler(); |
106 | assertEquals(0, handler.getEventCount()); | |
107 | } | |
108 | ||
109 | @Test | |
110 | public void testAllEvents() { | |
8576633f AM |
111 | assertTrue(session.enableAllEvents()); |
112 | assertTrue(session.start()); | |
c5524c71 | 113 | |
8576633f AM |
114 | Log4jTestUtils.send10Events(loggerA); |
115 | Log4jTestUtils.send10Events(loggerB); | |
c5524c71 | 116 | |
8576633f | 117 | assertTrue(session.stop()); |
c5524c71 | 118 | |
8576633f | 119 | List<String> output = session.view(); |
c5524c71 AM |
120 | assertNotNull(output); |
121 | assertEquals(20, output.size()); | |
122 | ||
c5524c71 AM |
123 | ILttngHandler handler = getAgentHandler(); |
124 | assertEquals(20, handler.getEventCount()); | |
125 | } | |
126 | ||
127 | @Test | |
128 | public void testSomeEvents() { | |
8576633f AM |
129 | assertTrue(session.enableEvents(EVENT_NAME_A)); |
130 | assertTrue(session.start()); | |
c5524c71 | 131 | |
8576633f AM |
132 | Log4jTestUtils.send10Events(loggerA); |
133 | Log4jTestUtils.send10Events(loggerB); | |
c5524c71 | 134 | |
8576633f | 135 | assertTrue(session.stop()); |
c5524c71 | 136 | |
8576633f | 137 | List<String> output = session.view(); |
c5524c71 AM |
138 | assertNotNull(output); |
139 | assertEquals(10, output.size()); | |
140 | ||
c5524c71 AM |
141 | ILttngHandler handler = getAgentHandler(); |
142 | assertEquals(10, handler.getEventCount()); | |
143 | } | |
144 | ||
145 | /** | |
146 | * Get the singleton Log4j Handler currently managed by the LTTngAgent. It | |
147 | * is not public, so we need reflection to access it. | |
148 | * | |
149 | * @return The agent's Log4j handler | |
150 | */ | |
8576633f | 151 | private static ILttngHandler getAgentHandler() { |
c5524c71 AM |
152 | try { |
153 | Field log4jAppenderField = LTTngAgent.class.getDeclaredField("log4jAppender"); | |
154 | log4jAppenderField.setAccessible(true); | |
155 | return (ILttngHandler) log4jAppenderField.get(LTTngAgent.getLTTngAgent()); | |
156 | } catch (ReflectiveOperationException | SecurityException e) { | |
157 | fail(); | |
158 | return null; | |
159 | } | |
160 | } | |
161 | ||
162 | } | |
163 |