control: Bug 480217: Update MI XSD file for LTTng 2.7 targets
[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.List;
22
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;
40
41 /**
42 * @author ejorajo
43 *
44 */
45 public class LTTngControlServiceMiTest extends LTTngControlServiceTest {
46
47 private static final String MI_TEST_STREAM = "LTTngServiceMiTest.cfg";
48
49 private static final String SCEN_SESSION_WITH_SYSCALLS = "GetSessionWithSyscalls";
50 private static final String SCEN_LIST_SESSION_2_7_COMPAT = "ListSession2.7Compat";
51
52 @Override
53 protected ILttngControlService getControlService() {
54 try {
55 URL resource = LTTngControlServiceMI.class.getResource(LTTngControlServiceConstants.MI_XSD_FILENAME);
56 return new LTTngControlServiceMI(getShell(), resource);
57 } catch (ExecutionException e) {
58 return null;
59 }
60 }
61
62 @Override
63 public void testGetSessionNameGarbage() {
64 try {
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
70 // document.
71 }
72 }
73
74 @Override
75 public void testCreateLiveSession() throws ExecutionException {
76 fShell.setScenario(SCEN_CREATE_LIVE_SESSION);
77
78 ISessionInfo params = new SessionInfo("mysession");
79 params.setLive(true);
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());
92 }
93
94 @Override
95 protected String getTestStream() {
96 return MI_TEST_STREAM;
97 }
98
99 @Override
100 protected TraceLogLevel getAllEventTraceLogLevel() {
101 return TraceLogLevel.TRACE_DEBUG;
102 }
103
104 @Override
105 public void testGetKernelProviderNoUstVerbose() {
106 // Verbose mode in machine interface is deactivated. This test is
107 // ignored.
108 }
109
110 @Override
111 public void testCreateSession2_1() {
112 // 2.1 is not supported by mi. This test is ignored.
113 }
114
115 @Override
116 public void testGetKernelProviderNoUst3() {
117 // Verbose mode in machine interface is deactivated. This test is
118 // ignored.
119 }
120
121 @Override
122 public void testGetKernelProviderNoKernelVerbose() {
123 // Verbose mode in machine interface is deactivated. This test is
124 // ignored.
125 }
126
127 @Override
128 public void testCreateSessionVerbose2_1() {
129 // Verbose mode in machine interface is deactivated. This test is
130 // ignored.
131 }
132
133 @Override
134 public void testDestroySessionVerbose() {
135 // Verbose mode in machine interface is deactivated. This test is
136 // ignored.
137 }
138
139 @Override
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.
143 }
144
145 @Override
146 public void testAddContext() {
147 // TODO This does not use mi feature.And currently the context enabling
148 // is wrong for 2.6.
149 }
150
151 @Override
152 public void testAddContextFailure() {
153 // TODO This does not use mi feature.And currently the context enabling
154 // is wrong for 2.6.
155 }
156
157 @Override
158 public void testCreateSnapshotSession2_5() {
159 // not applicable for MI
160 }
161
162 /**
163 * Tests the listing of syscalls
164 */
165 @Test
166 public void testListSycallEvents() {
167 try {
168 fShell.setScenario(SCEN_SESSION_WITH_SYSCALLS);
169 ISessionInfo session = fService.getSession("mysession", new NullProgressMonitor());
170
171 // Verify Session
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());
176
177 IDomainInfo[] domains = session.getDomains();
178 assertNotNull(domains);
179 assertEquals(1, domains.length);
180
181 // Verify Kernel domain
182 assertEquals("Kernel", domains[0].getName());
183 IChannelInfo[] channels = domains[0].getChannels();
184 assertNotNull(channels);
185 assertEquals(1, channels.length);
186
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());
197
198 // Verify event info
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());
205
206 assertEquals("write", channel0Events[1].getName());
207 assertEquals(TraceEventType.SYSCALL, channel0Events[1].getEventType());
208 assertEquals(TraceEnablement.ENABLED, channel0Events[1].getState());
209 } catch (ExecutionException e) {
210 fail(e.toString());
211 }
212 }
213
214 /**
215 * Test List session for lttng 2.7.
216 *
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.
219 *
220 *
221 */
222 @Test
223 public void testListSessionCompatibility_2_7() {
224
225 /*
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
232 */
233
234 try {
235 fShell.setScenario(SCEN_LIST_SESSION_2_7_COMPAT);
236 ISessionInfo session = fService.getSession("mysession", new NullProgressMonitor());
237
238 // Verify Session
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());
243
244 IDomainInfo[] domains = session.getDomains();
245 assertNotNull(domains);
246 assertEquals(2, domains.length);
247
248 // Verify Kernel domain
249 assertEquals("Kernel", domains[0].getName());
250 IChannelInfo[] channels = domains[0].getChannels();
251 assertNotNull(channels);
252 assertEquals(1, channels.length);
253
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());
264
265 // Verify event info
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());
272
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());
278
279 // Verify domain UST global
280 assertEquals("UST global", domains[1].getName());
281
282 IChannelInfo[] ustChannels = domains[1].getChannels();
283
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());
294
295 // Verify event info
296 IEventInfo[] ustEvents = ustChannels[0].getEvents();
297 assertEquals(1, ustEvents.length);
298
299 assertEquals("*", ustEvents[0].getName());
300 assertEquals(TraceEventType.TRACEPOINT, ustEvents[0].getEventType());
301 assertEquals(TraceEnablement.ENABLED, ustEvents[0].getState());
302
303 } catch (ExecutionException e) {
304 fail(e.toString());
305 }
306 }
307 }
This page took 0.039104 seconds and 6 git commands to generate.