1 /**********************************************************************
2 * Copyright (c) 2014 Ericsson
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
10 * Jonathan Rajotte - Support of machine interface
11 **********************************************************************/
13 package org
.eclipse
.tracecompass
.lttng2
.control
.ui
.tests
.service
;
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
;
21 import java
.util
.List
;
23 import org
.eclipse
.core
.commands
.ExecutionException
;
24 import org
.eclipse
.core
.runtime
.NullProgressMonitor
;
25 import org
.eclipse
.tracecompass
.internal
.lttng2
.control
.core
.model
.IChannelInfo
;
26 import org
.eclipse
.tracecompass
.internal
.lttng2
.control
.core
.model
.IDomainInfo
;
27 import org
.eclipse
.tracecompass
.internal
.lttng2
.control
.core
.model
.IEventInfo
;
28 import org
.eclipse
.tracecompass
.internal
.lttng2
.control
.core
.model
.ISessionInfo
;
29 import org
.eclipse
.tracecompass
.internal
.lttng2
.control
.core
.model
.LogLevelType
;
30 import org
.eclipse
.tracecompass
.internal
.lttng2
.control
.core
.model
.TraceChannelOutputType
;
31 import org
.eclipse
.tracecompass
.internal
.lttng2
.control
.core
.model
.TraceEnablement
;
32 import org
.eclipse
.tracecompass
.internal
.lttng2
.control
.core
.model
.TraceEventType
;
33 import org
.eclipse
.tracecompass
.internal
.lttng2
.control
.core
.model
.TraceLogLevel
;
34 import org
.eclipse
.tracecompass
.internal
.lttng2
.control
.core
.model
.TraceSessionState
;
35 import org
.eclipse
.tracecompass
.internal
.lttng2
.control
.core
.model
.impl
.SessionInfo
;
36 import org
.eclipse
.tracecompass
.internal
.lttng2
.control
.ui
.views
.service
.ILttngControlService
;
37 import org
.eclipse
.tracecompass
.internal
.lttng2
.control
.ui
.views
.service
.LTTngControlServiceConstants
;
38 import org
.eclipse
.tracecompass
.internal
.lttng2
.control
.ui
.views
.service
.LTTngControlServiceMI
;
39 import org
.junit
.Test
;
45 public class LTTngControlServiceMiTest
extends LTTngControlServiceTest
{
47 private static final String MI_TEST_STREAM
= "LTTngServiceMiTest.cfg";
49 private static final String SCEN_SESSION_WITH_SYSCALLS
= "GetSessionWithSyscalls";
50 private static final String SCEN_LIST_SESSION_2_7_COMPAT
= "ListSession2.7Compat";
53 protected ILttngControlService
getControlService() {
55 URL resource
= LTTngControlServiceMI
.class.getResource(LTTngControlServiceConstants
.MI_XSD_FILENAME
);
56 return new LTTngControlServiceMI(getShell(), resource
);
57 } catch (ExecutionException e
) {
63 public void testGetSessionNameGarbage() {
65 fShell
.setScenario(SCEN_GET_SESSION_GARBAGE_OUT
);
66 fService
.getSessionNames(new NullProgressMonitor());
67 } catch (ExecutionException e
) {
68 // Success. Parsing of garbage result in an ExecutionException
69 // generated by the XML document parser: Unable to parse the xml
75 public void testCreateLiveSession() throws ExecutionException
{
76 fShell
.setScenario(SCEN_CREATE_LIVE_SESSION
);
78 ISessionInfo params
= new SessionInfo("mysession");
80 params
.setStreamedTrace(true);
81 params
.setNetworkUrl("net://127.0.0.1");
82 ISessionInfo sessionInfo
= fService
.createSession(params
, new NullProgressMonitor());
83 assertNotNull(sessionInfo
);
84 assertEquals("mysession", sessionInfo
.getName());
85 assertEquals(TraceSessionState
.INACTIVE
, sessionInfo
.getSessionState());
86 assertTrue(sessionInfo
.isStreamedTrace());
87 assertTrue(sessionInfo
.isLive());
88 assertEquals("tcp4://127.0.0.1:5342/ [data: 5343]", sessionInfo
.getSessionPath());
89 List
<String
> names
= fService
.getSessionNames(new NullProgressMonitor());
90 assertEquals(names
.get(0), "mysession");
91 fService
.destroySession("mysession", new NullProgressMonitor());
95 protected String
getTestStream() {
96 return MI_TEST_STREAM
;
100 protected TraceLogLevel
getAllEventTraceLogLevel() {
101 return TraceLogLevel
.TRACE_DEBUG
;
105 public void testGetKernelProviderNoUstVerbose() {
106 // Verbose mode in machine interface is deactivated. This test is
111 public void testCreateSession2_1() {
112 // 2.1 is not supported by mi. This test is ignored.
116 public void testGetKernelProviderNoUst3() {
117 // Verbose mode in machine interface is deactivated. This test is
122 public void testGetKernelProviderNoKernelVerbose() {
123 // Verbose mode in machine interface is deactivated. This test is
128 public void testCreateSessionVerbose2_1() {
129 // Verbose mode in machine interface is deactivated. This test is
134 public void testDestroySessionVerbose() {
135 // Verbose mode in machine interface is deactivated. This test is
140 public void testCreateSessionWithPrompt() {
141 // TODO Investigate if this case can happen in production. If yes than
142 // we need to rethinks the MI fetching and parsing.
146 public void testAddContext() {
147 // TODO This does not use mi feature.And currently the context enabling
152 public void testAddContextFailure() {
153 // TODO This does not use mi feature.And currently the context enabling
158 public void testCreateSnapshotSession2_5() {
159 // not applicable for MI
163 * Tests the listing of syscalls
166 public void testListSycallEvents() {
168 fShell
.setScenario(SCEN_SESSION_WITH_SYSCALLS
);
169 ISessionInfo session
= fService
.getSession("mysession", new NullProgressMonitor());
172 assertNotNull(session
);
173 assertEquals("mysession", session
.getName());
174 assertEquals("/home/user/lttng-traces/mysession-20120129-084256", session
.getSessionPath());
175 assertEquals(TraceSessionState
.INACTIVE
, session
.getSessionState());
177 IDomainInfo
[] domains
= session
.getDomains();
178 assertNotNull(domains
);
179 assertEquals(1, domains
.length
);
181 // Verify Kernel domain
182 assertEquals("Kernel", domains
[0].getName());
183 IChannelInfo
[] channels
= domains
[0].getChannels();
184 assertNotNull(channels
);
185 assertEquals(1, channels
.length
);
187 // Verify Kernel's channel0
188 assertEquals("channel0", channels
[0].getName());
189 assertEquals(4, channels
[0].getNumberOfSubBuffers());
190 assertEquals("splice()", channels
[0].getOutputType().getInName());
191 assertEquals(TraceChannelOutputType
.SPLICE
, channels
[0].getOutputType());
192 assertEquals(false, channels
[0].isOverwriteMode());
193 assertEquals(200, channels
[0].getReadTimer());
194 assertEquals(TraceEnablement
.ENABLED
, channels
[0].getState());
195 assertEquals(262144, channels
[0].getSubBufferSize());
196 assertEquals(0, channels
[0].getSwitchTimer());
199 IEventInfo
[] channel0Events
= channels
[0].getEvents();
200 assertNotNull(channel0Events
);
201 assertEquals(2, channel0Events
.length
);
202 assertEquals("read", channel0Events
[0].getName());
203 assertEquals(TraceEventType
.SYSCALL
, channel0Events
[0].getEventType());
204 assertEquals(TraceEnablement
.ENABLED
, channel0Events
[0].getState());
206 assertEquals("write", channel0Events
[1].getName());
207 assertEquals(TraceEventType
.SYSCALL
, channel0Events
[1].getEventType());
208 assertEquals(TraceEnablement
.ENABLED
, channel0Events
[1].getState());
209 } catch (ExecutionException e
) {
215 * Test List session for lttng 2.7.
217 * This is to make sure that it is possible to parse the output of a session
218 * create on a target with LTTng 2.7 installed.
223 public void testListSessionCompatibility_2_7() {
226 Note the session was created with basic commands:
227 lttng create mysession
228 lttng enable-event -a -k -s mysession
229 lttng enable-channel channel0 -u -s mysession --buffers-pid
230 lttng enable-event -a -u -s mysession -c channel0 --tracepoint
231 lttng add-context -u -t vtid -t procname
235 fShell
.setScenario(SCEN_LIST_SESSION_2_7_COMPAT
);
236 ISessionInfo session
= fService
.getSession("mysession", new NullProgressMonitor());
239 assertNotNull(session
);
240 assertEquals("mysession", session
.getName());
241 assertEquals("/home/user/lttng-traces/mysession-20151020-085614", session
.getSessionPath());
242 assertEquals(TraceSessionState
.INACTIVE
, session
.getSessionState());
244 IDomainInfo
[] domains
= session
.getDomains();
245 assertNotNull(domains
);
246 assertEquals(2, domains
.length
);
248 // Verify Kernel domain
249 assertEquals("Kernel", domains
[0].getName());
250 IChannelInfo
[] channels
= domains
[0].getChannels();
251 assertNotNull(channels
);
252 assertEquals(1, channels
.length
);
254 // Verify Kernel's channel0
255 assertEquals("channel0", channels
[0].getName());
256 assertEquals(4, channels
[0].getNumberOfSubBuffers());
257 assertEquals("splice()", channels
[0].getOutputType().getInName());
258 assertEquals(TraceChannelOutputType
.SPLICE
, channels
[0].getOutputType());
259 assertEquals(false, channels
[0].isOverwriteMode());
260 assertEquals(200000, channels
[0].getReadTimer());
261 assertEquals(TraceEnablement
.ENABLED
, channels
[0].getState());
262 assertEquals(262144, channels
[0].getSubBufferSize());
263 assertEquals(0, channels
[0].getSwitchTimer());
266 IEventInfo
[] channel0Events
= channels
[0].getEvents();
267 assertNotNull(channel0Events
);
268 assertEquals(2, channel0Events
.length
);
269 assertEquals("*", channel0Events
[0].getName());
270 assertEquals(TraceEventType
.SYSCALL
, channel0Events
[0].getEventType());
271 assertEquals(TraceEnablement
.ENABLED
, channel0Events
[0].getState());
273 assertEquals("*", channel0Events
[1].getName());
274 assertEquals(TraceLogLevel
.TRACE_EMERG
, channel0Events
[1].getLogLevel());
275 assertEquals(LogLevelType
.LOGLEVEL_ALL
, channel0Events
[1].getLogLevelType());
276 assertEquals(TraceEventType
.TRACEPOINT
, channel0Events
[1].getEventType());
277 assertEquals(TraceEnablement
.ENABLED
, channel0Events
[1].getState());
279 // Verify domain UST global
280 assertEquals("UST global", domains
[1].getName());
282 IChannelInfo
[] ustChannels
= domains
[1].getChannels();
284 // Verify UST global's channel0
285 assertEquals("channel0", ustChannels
[0].getName());
286 assertEquals(4, ustChannels
[0].getNumberOfSubBuffers());
287 assertEquals("mmap()", ustChannels
[0].getOutputType().getInName());
288 assertEquals(TraceChannelOutputType
.MMAP
, ustChannels
[0].getOutputType());
289 assertEquals(false, ustChannels
[0].isOverwriteMode());
290 assertEquals(0, ustChannels
[0].getReadTimer());
291 assertEquals(TraceEnablement
.ENABLED
, ustChannels
[0].getState());
292 assertEquals(4096, ustChannels
[0].getSubBufferSize());
293 assertEquals(0, ustChannels
[0].getSwitchTimer());
296 IEventInfo
[] ustEvents
= ustChannels
[0].getEvents();
297 assertEquals(1, ustEvents
.length
);
299 assertEquals("*", ustEvents
[0].getName());
300 assertEquals(TraceEventType
.TRACEPOINT
, ustEvents
[0].getEventType());
301 assertEquals(TraceEnablement
.ENABLED
, ustEvents
[0].getState());
303 } catch (ExecutionException e
) {