lttng: Fix not being able to get available context with LTTng 2.8
[deliverable/tracecompass.git] / lttng / org.eclipse.tracecompass.lttng2.control.ui.tests / src / org / eclipse / tracecompass / lttng2 / control / ui / tests / service / LTTngControlServiceMiTest.java
1 /**********************************************************************
2 * Copyright (c) 2014 Ericsson
3 *
4 * All rights reserved. This program and the accompanying materials are
5 * made available under the terms of the Eclipse Public License v1.0 which
6 * accompanies this distribution, and is available at
7 * http://www.eclipse.org/legal/epl-v10.html
8 *
9 * Contributors:
10 * Jonathan Rajotte - Support of machine interface
11 **********************************************************************/
12
13 package org.eclipse.tracecompass.lttng2.control.ui.tests.service;
14
15 import static org.junit.Assert.assertEquals;
16 import static org.junit.Assert.assertNotNull;
17 import static org.junit.Assert.assertTrue;
18 import static org.junit.Assert.fail;
19
20 import java.net.URL;
21 import java.util.HashSet;
22 import java.util.List;
23 import java.util.Set;
24
25 import org.eclipse.core.commands.ExecutionException;
26 import org.eclipse.core.runtime.NullProgressMonitor;
27 import org.eclipse.tracecompass.internal.lttng2.control.core.model.IChannelInfo;
28 import org.eclipse.tracecompass.internal.lttng2.control.core.model.IDomainInfo;
29 import org.eclipse.tracecompass.internal.lttng2.control.core.model.IEventInfo;
30 import org.eclipse.tracecompass.internal.lttng2.control.core.model.ISessionInfo;
31 import org.eclipse.tracecompass.internal.lttng2.control.core.model.LogLevelType;
32 import org.eclipse.tracecompass.internal.lttng2.control.core.model.TraceChannelOutputType;
33 import org.eclipse.tracecompass.internal.lttng2.control.core.model.TraceEnablement;
34 import org.eclipse.tracecompass.internal.lttng2.control.core.model.TraceEventType;
35 import org.eclipse.tracecompass.internal.lttng2.control.core.model.TraceLogLevel;
36 import org.eclipse.tracecompass.internal.lttng2.control.core.model.TraceSessionState;
37 import org.eclipse.tracecompass.internal.lttng2.control.core.model.impl.SessionInfo;
38 import org.eclipse.tracecompass.internal.lttng2.control.ui.views.service.ILttngControlService;
39 import org.eclipse.tracecompass.internal.lttng2.control.ui.views.service.LTTngControlService;
40 import org.eclipse.tracecompass.internal.lttng2.control.ui.views.service.LTTngControlServiceConstants;
41 import org.eclipse.tracecompass.internal.lttng2.control.ui.views.service.LTTngControlServiceMI;
42 import org.junit.Ignore;
43 import org.junit.Test;
44
45 /**
46 * @author ejorajo
47 *
48 */
49 @SuppressWarnings("javadoc")
50 public class LTTngControlServiceMiTest extends LTTngControlServiceTest {
51
52 private static final String MI_TEST_STREAM = "LTTngServiceMiTest.cfg";
53
54 private static final String SCEN_SESSION_WITH_SYSCALLS = "GetSessionWithSyscalls";
55 private static final String SCEN_LIST_SESSION_2_7_COMPAT = "ListSession2.7Compat";
56 private static final String SCEN_GET_SESSION_FILTER_EXPRESSION = "GetSessionFilterExpression";
57 private static final String SCEN_LIST_CONTEXT_28 = "ListContext28";
58
59 @Override
60 protected ILttngControlService getControlService() {
61 try {
62 URL resource = LTTngControlServiceMI.class.getResource(LTTngControlServiceConstants.MI_XSD_FILENAME);
63 return new LTTngControlServiceMI(getShell(), resource);
64 } catch (ExecutionException e) {
65 return null;
66 }
67 }
68
69 @Override
70 public void testGetSessionNameGarbage() {
71 try {
72 fShell.setScenario(SCEN_GET_SESSION_GARBAGE_OUT);
73 fService.getSessionNames(new NullProgressMonitor());
74 } catch (ExecutionException e) {
75 // Success. Parsing of garbage result in an ExecutionException
76 // generated by the XML document parser: Unable to parse the xml
77 // document.
78 }
79 }
80
81 @Override
82 @Ignore
83 public void testCreateLiveSession() throws ExecutionException {
84 fShell.setScenario(SCEN_CREATE_LIVE_SESSION);
85
86 ISessionInfo params = new SessionInfo("mysession");
87 params.setLive(true);
88 params.setStreamedTrace(true);
89 params.setNetworkUrl("net://127.0.0.1");
90 ISessionInfo sessionInfo = fService.createSession(params, new NullProgressMonitor());
91 assertNotNull(sessionInfo);
92 assertEquals("mysession", sessionInfo.getName());
93 assertEquals(TraceSessionState.INACTIVE, sessionInfo.getSessionState());
94 assertTrue(sessionInfo.isStreamedTrace());
95 assertTrue(sessionInfo.isLive());
96 assertEquals("tcp4://127.0.0.1:5342/ [data: 5343]", sessionInfo.getSessionPath());
97 List<String> names = fService.getSessionNames(new NullProgressMonitor());
98 assertEquals(names.get(0), "mysession");
99 fService.destroySession("mysession", new NullProgressMonitor());
100 }
101
102 @Override
103 protected String getTestStream() {
104 return MI_TEST_STREAM;
105 }
106
107 @Override
108 protected TraceLogLevel getAllEventTraceLogLevel() {
109 return TraceLogLevel.TRACE_DEBUG;
110 }
111
112 @Override
113 public void testGetKernelProviderNoUstVerbose() {
114 // Verbose mode in machine interface is deactivated. This test is
115 // ignored.
116 }
117
118 @Override
119 public void testCreateSession2_1() {
120 // 2.1 is not supported by mi. This test is ignored.
121 }
122
123 @Override
124 public void testGetKernelProviderNoUst3() {
125 // Verbose mode in machine interface is deactivated. This test is
126 // ignored.
127 }
128
129 @Override
130 public void testGetKernelProviderNoKernelVerbose() {
131 // Verbose mode in machine interface is deactivated. This test is
132 // ignored.
133 }
134
135 @Override
136 public void testCreateSessionVerbose2_1() {
137 // Verbose mode in machine interface is deactivated. This test is
138 // ignored.
139 }
140
141 @Override
142 public void testDestroySessionVerbose() {
143 // Verbose mode in machine interface is deactivated. This test is
144 // ignored.
145 }
146
147 @Override
148 public void testCreateSessionWithPrompt() {
149 // TODO Investigate if this case can happen in production. If yes than
150 // we need to rethinks the MI fetching and parsing.
151 }
152
153 @Override
154 public void testAddContext() {
155 // TODO This does not use mi feature.And currently the context enabling
156 // is wrong for 2.6.
157 }
158
159 @Override
160 public void testAddContextFailure() {
161 // TODO This does not use mi feature.And currently the context enabling
162 // is wrong for 2.6.
163 }
164
165 @Test
166 public void testListContext28() throws ExecutionException {
167 ((LTTngControlService)fService).setVersion("2.8.0");
168 fShell.setScenario(SCEN_LIST_CONTEXT_28);
169
170 List<String> availContexts = fService.getContextList(new NullProgressMonitor());
171 assertNotNull(availContexts);
172 assertEquals(12, availContexts.size());
173
174 Set<String> expectedContexts = new HashSet<>();
175 expectedContexts.add("pid");
176 expectedContexts.add("procname");
177 expectedContexts.add("prio");
178 expectedContexts.add("nice");
179 expectedContexts.add("vpid");
180 expectedContexts.add("tid");
181 expectedContexts.add("pthread_id");
182 expectedContexts.add("vtid");
183 expectedContexts.add("ppid");
184 expectedContexts.add("vppid");
185 expectedContexts.add("perf:cpu:cpu-cycles");
186 expectedContexts.add("perf:cpu:cycles");
187
188 assertTrue(expectedContexts.containsAll(availContexts));
189 }
190
191 @Override
192 public void testCreateSnapshotSession2_5() {
193 // not applicable for MI
194 }
195
196 /**
197 * Tests the listing of syscalls
198 */
199 @Test
200 public void testListSycallEvents() {
201 try {
202 fShell.setScenario(SCEN_SESSION_WITH_SYSCALLS);
203 ISessionInfo session = fService.getSession("mysession", new NullProgressMonitor());
204
205 // Verify Session
206 assertNotNull(session);
207 assertEquals("mysession", session.getName());
208 assertEquals("/home/user/lttng-traces/mysession-20120129-084256", session.getSessionPath());
209 assertEquals(TraceSessionState.INACTIVE, session.getSessionState());
210
211 IDomainInfo[] domains = session.getDomains();
212 assertNotNull(domains);
213 assertEquals(1, domains.length);
214
215 // Verify Kernel domain
216 assertEquals("Kernel", domains[0].getName());
217 IChannelInfo[] channels = domains[0].getChannels();
218 assertNotNull(channels);
219 assertEquals(1, channels.length);
220
221 // Verify Kernel's channel0
222 assertEquals("channel0", channels[0].getName());
223 assertEquals(4, channels[0].getNumberOfSubBuffers());
224 assertEquals("splice()", channels[0].getOutputType().getInName());
225 assertEquals(TraceChannelOutputType.SPLICE, channels[0].getOutputType());
226 assertEquals(false, channels[0].isOverwriteMode());
227 assertEquals(200, channels[0].getReadTimer());
228 assertEquals(TraceEnablement.ENABLED, channels[0].getState());
229 assertEquals(262144, channels[0].getSubBufferSize());
230 assertEquals(0, channels[0].getSwitchTimer());
231
232 // Verify event info
233 IEventInfo[] channel0Events = channels[0].getEvents();
234 assertNotNull(channel0Events);
235 assertEquals(2, channel0Events.length);
236 assertEquals("read", channel0Events[0].getName());
237 assertEquals(TraceEventType.SYSCALL, channel0Events[0].getEventType());
238 assertEquals(TraceEnablement.ENABLED, channel0Events[0].getState());
239
240 assertEquals("write", channel0Events[1].getName());
241 assertEquals(TraceEventType.SYSCALL, channel0Events[1].getEventType());
242 assertEquals(TraceEnablement.ENABLED, channel0Events[1].getState());
243 } catch (ExecutionException e) {
244 fail(e.toString());
245 }
246 }
247
248 /**
249 * Test List session for lttng 2.7.
250 *
251 * This is to make sure that it is possible to parse the output of a session
252 * create on a target with LTTng 2.7 installed.
253 *
254 *
255 */
256 @Test
257 public void testListSessionCompatibility_2_7() {
258
259 /*
260 Note the session was created with basic commands:
261 lttng create mysession
262 lttng enable-event -a -k -s mysession
263 lttng enable-channel channel0 -u -s mysession --buffers-pid
264 lttng enable-event -a -u -s mysession -c channel0 --tracepoint
265 lttng add-context -u -t vtid -t procname
266 */
267
268 try {
269 fShell.setScenario(SCEN_LIST_SESSION_2_7_COMPAT);
270 ISessionInfo session = fService.getSession("mysession", new NullProgressMonitor());
271
272 // Verify Session
273 assertNotNull(session);
274 assertEquals("mysession", session.getName());
275 assertEquals("/home/user/lttng-traces/mysession-20151020-085614", session.getSessionPath());
276 assertEquals(TraceSessionState.INACTIVE, session.getSessionState());
277
278 IDomainInfo[] domains = session.getDomains();
279 assertNotNull(domains);
280 assertEquals(2, domains.length);
281
282 // Verify Kernel domain
283 assertEquals("Kernel", domains[0].getName());
284 IChannelInfo[] channels = domains[0].getChannels();
285 assertNotNull(channels);
286 assertEquals(1, channels.length);
287
288 // Verify Kernel's channel0
289 assertEquals("channel0", channels[0].getName());
290 assertEquals(4, channels[0].getNumberOfSubBuffers());
291 assertEquals("splice()", channels[0].getOutputType().getInName());
292 assertEquals(TraceChannelOutputType.SPLICE, channels[0].getOutputType());
293 assertEquals(false, channels[0].isOverwriteMode());
294 assertEquals(200000, channels[0].getReadTimer());
295 assertEquals(TraceEnablement.ENABLED, channels[0].getState());
296 assertEquals(262144, channels[0].getSubBufferSize());
297 assertEquals(0, channels[0].getSwitchTimer());
298
299 // Verify event info
300 IEventInfo[] channel0Events = channels[0].getEvents();
301 assertNotNull(channel0Events);
302 assertEquals(2, channel0Events.length);
303 assertEquals("*", channel0Events[0].getName());
304 assertEquals(TraceEventType.SYSCALL, channel0Events[0].getEventType());
305 assertEquals(TraceEnablement.ENABLED, channel0Events[0].getState());
306
307 assertEquals("*", channel0Events[1].getName());
308 assertEquals(TraceLogLevel.TRACE_EMERG, channel0Events[1].getLogLevel());
309 assertEquals(LogLevelType.LOGLEVEL_ALL, channel0Events[1].getLogLevelType());
310 assertEquals(TraceEventType.TRACEPOINT, channel0Events[1].getEventType());
311 assertEquals(TraceEnablement.ENABLED, channel0Events[1].getState());
312
313 // Verify domain UST global
314 assertEquals("UST global", domains[1].getName());
315
316 IChannelInfo[] ustChannels = domains[1].getChannels();
317
318 // Verify UST global's channel0
319 assertEquals("channel0", ustChannels[0].getName());
320 assertEquals(4, ustChannels[0].getNumberOfSubBuffers());
321 assertEquals("mmap()", ustChannels[0].getOutputType().getInName());
322 assertEquals(TraceChannelOutputType.MMAP, ustChannels[0].getOutputType());
323 assertEquals(false, ustChannels[0].isOverwriteMode());
324 assertEquals(0, ustChannels[0].getReadTimer());
325 assertEquals(TraceEnablement.ENABLED, ustChannels[0].getState());
326 assertEquals(4096, ustChannels[0].getSubBufferSize());
327 assertEquals(0, ustChannels[0].getSwitchTimer());
328
329 // Verify event info
330 IEventInfo[] ustEvents = ustChannels[0].getEvents();
331 assertEquals(1, ustEvents.length);
332
333 assertEquals("*", ustEvents[0].getName());
334 assertEquals(TraceEventType.TRACEPOINT, ustEvents[0].getEventType());
335 assertEquals(TraceEnablement.ENABLED, ustEvents[0].getState());
336
337 } catch (ExecutionException e) {
338 fail(e.toString());
339 }
340 }
341
342 @Test
343 public void testGetSessionWithFilterExpression() throws ExecutionException {
344 // FIXME: Disable scheme validation for now until MI 3.0 is integrated
345 LTTngControlServiceMI service = new LTTngControlServiceMI(getShell(), null);
346
347 fShell.setScenario(SCEN_GET_SESSION_FILTER_EXPRESSION);
348 ISessionInfo session = service.getSession("mysession", new NullProgressMonitor());
349
350 // Verify Session
351 assertNotNull(session);
352 assertEquals("mysession", session.getName());
353 assertEquals("/home/user/lttng-traces/mysession-20120129-084256", session.getSessionPath());
354 assertEquals(TraceSessionState.ACTIVE, session.getSessionState());
355
356 IDomainInfo[] domains = session.getDomains();
357 assertNotNull(domains);
358 assertEquals(2, domains.length);
359
360 // Verify Kernel domain
361 assertEquals("Kernel", domains[0].getName());
362 IChannelInfo[] channels = domains[0].getChannels();
363 assertNotNull(channels);
364 assertEquals(1, channels.length);
365
366 // Verify Kernel's channel0
367 assertEquals("channel0", channels[0].getName());
368 assertEquals(4, channels[0].getNumberOfSubBuffers());
369 assertEquals("splice()", channels[0].getOutputType().getInName());
370 assertEquals(TraceChannelOutputType.SPLICE, channels[0].getOutputType());
371 assertEquals(false, channels[0].isOverwriteMode());
372 assertEquals(200, channels[0].getReadTimer());
373 assertEquals(TraceEnablement.ENABLED, channels[0].getState());
374 assertEquals(262144, channels[0].getSubBufferSize());
375 assertEquals(0, channels[0].getSwitchTimer());
376
377 // Verify event info
378 IEventInfo[] channel0Events = channels[0].getEvents();
379 assertNotNull(channel0Events);
380 assertEquals(1, channel0Events.length);
381 assertEquals("block_rq_remap", channel0Events[0].getName());
382 assertEquals(TraceLogLevel.TRACE_EMERG, channel0Events[0].getLogLevel());
383 assertEquals(TraceEventType.TRACEPOINT, channel0Events[0].getEventType());
384 assertEquals(TraceEnablement.ENABLED, channel0Events[0].getState());
385 assertEquals("foo > 10", channel0Events[0].getFilterExpression());
386
387 // Verify domain UST global
388 assertEquals("UST global", domains[1].getName());
389
390 IChannelInfo[] ustChannels = domains[1].getChannels();
391
392 // Verify UST global's channel0
393 assertEquals("channel0", ustChannels[0].getName());
394 assertEquals(4, ustChannels[0].getNumberOfSubBuffers());
395 assertEquals("mmap()", ustChannels[0].getOutputType().getInName());
396 assertEquals(TraceChannelOutputType.MMAP, ustChannels[0].getOutputType());
397 assertEquals(false, ustChannels[0].isOverwriteMode());
398 assertEquals(200, ustChannels[0].getReadTimer());
399 assertEquals(TraceEnablement.ENABLED, ustChannels[0].getState());
400 assertEquals(4096, ustChannels[0].getSubBufferSize());
401 assertEquals(0, ustChannels[0].getSwitchTimer());
402
403 // Verify event info
404 IEventInfo[] ustEvents = ustChannels[0].getEvents();
405 assertEquals(1, ustEvents.length);
406
407 assertEquals("ust_tests_hello:tptest_sighandler", ustEvents[0].getName());
408 assertEquals(TraceLogLevel.TRACE_DEBUG_LINE, ustEvents[0].getLogLevel());
409 assertEquals(TraceEventType.TRACEPOINT, ustEvents[0].getEventType());
410 assertEquals(TraceEnablement.DISABLED, ustEvents[0].getState());
411 assertEquals("foo > 10", ustEvents[0].getFilterExpression());
412 }
413 }
This page took 0.04173 seconds and 6 git commands to generate.