8343f953748233aebf04dc32e0441ad5556d8537
[deliverable/tracecompass.git] / lttng / org.eclipse.tracecompass.lttng2.control.ui.swtbot.tests / src / org / eclipse / tracecompass / lttng2 / control / ui / swtbot / tests / ControlViewTest.java
1 /*******************************************************************************
2 * Copyright (c) 2015 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
10 package org.eclipse.tracecompass.lttng2.control.ui.swtbot.tests;
11
12 import static org.junit.Assert.assertEquals;
13 import static org.junit.Assert.assertNotNull;
14 import static org.junit.Assert.assertTrue;
15
16 import java.io.File;
17 import java.net.URL;
18
19 import org.apache.log4j.ConsoleAppender;
20 import org.apache.log4j.Logger;
21 import org.apache.log4j.SimpleLayout;
22 import org.eclipse.core.resources.IProject;
23 import org.eclipse.core.resources.IWorkspace;
24 import org.eclipse.core.resources.ResourcesPlugin;
25 import org.eclipse.core.runtime.FileLocator;
26 import org.eclipse.core.runtime.IPath;
27 import org.eclipse.core.runtime.Path;
28 import org.eclipse.jdt.annotation.NonNull;
29 import org.eclipse.remote.core.IRemoteConnection;
30 import org.eclipse.swtbot.eclipse.finder.SWTWorkbenchBot;
31 import org.eclipse.swtbot.eclipse.finder.widgets.SWTBotView;
32 import org.eclipse.swtbot.swt.finder.SWTBot;
33 import org.eclipse.swtbot.swt.finder.junit.SWTBotJunit4ClassRunner;
34 import org.eclipse.swtbot.swt.finder.utils.SWTBotPreferences;
35 import org.eclipse.swtbot.swt.finder.waits.Conditions;
36 import org.eclipse.swtbot.swt.finder.widgets.SWTBotButton;
37 import org.eclipse.swtbot.swt.finder.widgets.SWTBotCheckBox;
38 import org.eclipse.swtbot.swt.finder.widgets.SWTBotMenu;
39 import org.eclipse.swtbot.swt.finder.widgets.SWTBotShell;
40 import org.eclipse.swtbot.swt.finder.widgets.SWTBotText;
41 import org.eclipse.swtbot.swt.finder.widgets.SWTBotTree;
42 import org.eclipse.swtbot.swt.finder.widgets.SWTBotTreeItem;
43 import org.eclipse.tracecompass.ctf.core.tests.shared.LttngTraceGenerator;
44 import org.eclipse.tracecompass.internal.lttng2.control.core.model.TargetNodeState;
45 import org.eclipse.tracecompass.internal.lttng2.control.core.model.TraceSessionState;
46 import org.eclipse.tracecompass.internal.lttng2.control.stubs.service.TestRemoteSystemProxy;
47 import org.eclipse.tracecompass.internal.lttng2.control.ui.views.ControlView;
48 import org.eclipse.tracecompass.internal.lttng2.control.ui.views.model.ITraceControlComponent;
49 import org.eclipse.tracecompass.internal.lttng2.control.ui.views.model.impl.TargetNodeComponent;
50 import org.eclipse.tracecompass.internal.lttng2.control.ui.views.model.impl.TraceSessionComponent;
51 import org.eclipse.tracecompass.tmf.remote.core.proxy.TmfRemoteConnectionFactory;
52 import org.eclipse.tracecompass.tmf.ui.project.model.TmfExperimentElement;
53 import org.eclipse.tracecompass.tmf.ui.project.model.TmfExperimentFolder;
54 import org.eclipse.tracecompass.tmf.ui.project.model.TmfProjectElement;
55 import org.eclipse.tracecompass.tmf.ui.project.model.TmfProjectRegistry;
56 import org.eclipse.tracecompass.tmf.ui.swtbot.tests.shared.ConditionHelpers;
57 import org.eclipse.tracecompass.tmf.ui.swtbot.tests.shared.SWTBotUtils;
58 import org.eclipse.ui.IViewPart;
59 import org.junit.After;
60 import org.junit.Before;
61 import org.junit.BeforeClass;
62 import org.junit.Test;
63 import org.junit.runner.RunWith;
64 import org.osgi.framework.FrameworkUtil;
65
66 /**
67 * Test for the LTTng Control view in Trace Compass
68 *
69 * @author Bernd Hufmann
70 */
71 @RunWith(SWTBotJunit4ClassRunner.class)
72 public class ControlViewTest {
73
74
75 // ------------------------------------------------------------------------
76 // Constants
77 // ------------------------------------------------------------------------
78 private static final String TEST_STREAM = "CreateSessionTestLTTng2_8.cfg";
79 /** The initialize scenario name */
80 protected static final String INIT_SCENARIO_NAME = "Initialize";
81 private static final String CREATE_SESSION_WITH_LTTNG_2_8_SCENARIO_NAME = "CreateSession_2.8";
82
83 private static final String SESSION_NAME = "mysession";
84 private static final String UST_CHANNEL_NAME = ControlViewSwtBotUtil.DEFAULT_CHANNEL_NAME;
85 private static final String NODE_NAME = "myNode";
86 private static final String PERSPECTIVE_ID = "org.eclipse.tracecompass.lttng2.control.ui.swtbot.tests.perspective";
87
88 // ------------------------------------------------------------------------
89 // Test data
90 // ------------------------------------------------------------------------
91
92 /** The Log4j logger instance. */
93 protected static final Logger fLogger = Logger.getRootLogger();
94 /** The workbench bot */
95 protected static SWTWorkbenchBot fBot;
96 private IRemoteConnection fHost = TmfRemoteConnectionFactory.getLocalConnection();
97 /** The test remote system proxy */
98 protected @NonNull TestRemoteSystemProxy fProxy = new TestRemoteSystemProxy(fHost);
99 /** The trace control tree */
100 protected SWTBotTree fTree;
101 /** The trace control root component */
102 protected ITraceControlComponent fRoot;
103 /** The target node component */
104 protected TargetNodeComponent fNode;
105
106 /** The test file */
107 protected String fTestFile;
108
109 // ------------------------------------------------------------------------
110 // Housekeeping
111 // ------------------------------------------------------------------------
112
113 /**
114 * Initialization
115 */
116 @BeforeClass
117 public static void init() {
118 SWTBotUtils.initialize();
119
120 Thread.currentThread().setName("SWTBot Thread"); // for the debugger
121 /* set up for swtbot */
122 SWTBotPreferences.TIMEOUT = 20000; /* 20 second timeout */
123 fLogger.addAppender(new ConsoleAppender(new SimpleLayout()));
124 fBot = new SWTWorkbenchBot();
125
126 SWTBotUtils.closeView("welcome", fBot);
127
128 /* finish waiting for eclipse to load */
129 SWTBotUtils.waitForJobs();
130
131 SWTBotUtils.switchToPerspective(PERSPECTIVE_ID);
132 }
133
134 /**
135 * Open a trace in an editor
136 *
137 * @throws Exception
138 * if problem occurs
139 */
140 @Before
141 public void beforeTest() throws Exception {
142 SWTBotUtils.openView(ControlView.ID);
143 SWTBotUtils.waitForJobs();
144 URL location = FileLocator.find(FrameworkUtil.getBundle(this.getClass()), new Path("testfiles" + File.separator + getTestStream()), null);
145 File testfile = new File(FileLocator.toFileURL(location).toURI());
146 fTestFile = testfile.getAbsolutePath();
147
148 // Create root component
149 SWTBotView viewBot = fBot.viewById(ControlView.ID);
150 viewBot.setFocus();
151 IViewPart part = viewBot.getViewReference().getView(true);
152 ControlView view = (ControlView) part;
153 fRoot = view.getTraceControlRoot();
154
155 // Create node component
156 fNode = new TargetNodeComponent(getNodeName(), fRoot, fProxy);
157 fRoot.addChild(fNode);
158 fTree = viewBot.bot().tree();
159 }
160
161 /**
162 * Close the editor
163 */
164 @After
165 public void tearDown() {
166 fBot.closeAllEditors();
167 if (fRoot != null) {
168 fRoot.removeAllChildren();
169 }
170 }
171
172 /**
173 * Get the test stream file name to use for the test suite
174 *
175 * @return the name of the test stream file
176 */
177 protected String getTestStream() {
178 return TEST_STREAM;
179 }
180
181 /**
182 * Get the session name
183 *
184 * @return the session name for this test
185 */
186 protected String getSessionName() {
187 return SESSION_NAME;
188 }
189
190 /**
191 * Get the node name
192 *
193 * @return the node name for the test
194 */
195 protected String getNodeName() {
196 return NODE_NAME;
197 }
198
199 /**
200 * Test basic trace session generation.
201 */
202 @Test
203 public void testTraceSessionTree() {
204
205 fProxy.setTestFile(fTestFile);
206 fProxy.setScenario(INIT_SCENARIO_NAME);
207
208 testConnectToNode();
209 // Set the scenario
210 fProxy.setScenario(CREATE_SESSION_WITH_LTTNG_2_8_SCENARIO_NAME);
211 testCreateSession();
212 testEnableKernelEvent();
213 testEnableSyscalls();
214 testEnableUstChannel();
215 testEnableUstEvents();
216 testStartStopTracing(TraceSessionState.ACTIVE);
217 testStartStopTracing(TraceSessionState.INACTIVE);
218 // Import without experiment creation
219 testImport(false, true);
220 SWTBotUtils.clearTracesFolder(fBot, ControlViewSwtBotUtil.DEFAULT_REMOTE_PROJECT);
221 // Import with experiment creation (default experiment name)
222 testImport(true, true);
223 SWTBotUtils.clearTracesFolder(fBot, ControlViewSwtBotUtil.DEFAULT_REMOTE_PROJECT);
224 /*
225 * Import with experiment creation, test experiment already exists and
226 * with experiment name validation
227 */
228 testImport(true, false);
229 SWTBotUtils.clearExperimentFolder(fBot, ControlViewSwtBotUtil.DEFAULT_REMOTE_PROJECT);
230 testDestroySession();
231 testDisconnectFromNode();
232 SWTBotUtils.deleteProject(ControlViewSwtBotUtil.DEFAULT_REMOTE_PROJECT, fBot);
233 }
234
235 /**
236 * Test connect to node
237 */
238 protected void testConnectToNode() {
239 SWTBotTreeItem nodeItem = SWTBotUtils.getTreeItem(fBot, fTree, getNodeName());
240 nodeItem.select();
241 SWTBotMenu menuBot = nodeItem.contextMenu(ControlViewSwtBotUtil.CONNECT_MENU_ITEM);
242 menuBot.click();
243 SWTBotUtils.waitForJobs();
244
245 fBot.waitUntil(ConditionHelpers.IsTreeChildNodeAvailable(ControlViewSwtBotUtil.SESSION_GROUP_NAME, nodeItem));
246
247 // Verify that node is connected
248 fBot.waitUntil(ControlViewSwtBotUtil.isStateChanged(fNode, TargetNodeState.CONNECTED));
249 assertEquals(TargetNodeState.CONNECTED, fNode.getTargetNodeState());
250 }
251
252 /**
253 * Test create session
254 */
255 protected void testCreateSession() {
256 SWTBotTreeItem nodeItem = SWTBotUtils.getTreeItem(fBot, fTree, getNodeName());
257
258 SWTBotTreeItem sessionGroupItem = nodeItem.getNode(ControlViewSwtBotUtil.SESSION_GROUP_NAME);
259
260 sessionGroupItem.select();
261 SWTBotMenu menuBot = sessionGroupItem.contextMenu(ControlViewSwtBotUtil.CREATE_SESSION_MENU_ITEM);
262 menuBot.click();
263
264 SWTBotShell shell = fBot.shell(ControlViewSwtBotUtil.CREATE_SESSION_DIALOG_TITLE).activate();
265
266 SWTBotText sessionText = shell.bot().textWithLabel(ControlViewSwtBotUtil.SESSION_NAME_LABEL);
267 sessionText.setText(SESSION_NAME);
268
269 shell.bot().button(ControlViewSwtBotUtil.DIALOG_OK_BUTTON).click();
270 SWTBotUtils.waitForJobs();
271
272 sessionGroupItem.expand();
273
274 fBot.waitUntil(ConditionHelpers.IsTreeChildNodeAvailable(getSessionName(), sessionGroupItem));
275 assertEquals(1, sessionGroupItem.getNodes().size());
276
277 SWTBotTreeItem sessionItem = SWTBotUtils.getTreeItem(fBot, fTree,
278 getNodeName(),
279 ControlViewSwtBotUtil.SESSION_GROUP_NAME,
280 getSessionName());
281 assertEquals(getSessionName(), sessionItem.getText());
282 }
283
284 /**
285 * Test enable event (all kernel tracepoints) on session level
286 */
287 protected void testEnableKernelEvent() {
288 SWTBotTreeItem sessionItem = SWTBotUtils.getTreeItem(fBot, fTree,
289 getNodeName(),
290 ControlViewSwtBotUtil.SESSION_GROUP_NAME,
291 getSessionName());
292
293 sessionItem.select();
294 SWTBotMenu menuBot = sessionItem.contextMenu(ControlViewSwtBotUtil.ENABLE_EVENT_DEFAULT_CHANNEL_MENU_ITEM);
295 menuBot.click();
296
297 SWTBotShell shell = fBot.shell(ControlViewSwtBotUtil.ENABLE_EVENT_DIALOG_TITLE).activate();
298
299 shell.bot().radioInGroup(ControlViewSwtBotUtil.GROUP_SELECT_NAME, ControlViewSwtBotUtil.TRACEPOINTS_GROUP_NAME).click();
300
301 SWTBotTree tracepointsTree = shell.bot().treeInGroup(ControlViewSwtBotUtil.TRACEPOINTS_GROUP_NAME);
302 SWTBotTreeItem allItem = SWTBotUtils.getTreeItem(fBot, tracepointsTree, ControlViewSwtBotUtil.ALL_TREE_NODE);
303 allItem.check();
304 shell.bot().button(ControlViewSwtBotUtil.DIALOG_OK_BUTTON).click();
305 SWTBotUtils.waitForJobs();
306
307 fBot.waitUntil(ConditionHelpers.IsTreeChildNodeAvailable(ControlViewSwtBotUtil.KERNEL_DOMAIN_NAME, sessionItem));
308
309 SWTBotTreeItem channelItem = SWTBotUtils.getTreeItem(fBot, fTree,
310 getNodeName(),
311 ControlViewSwtBotUtil.SESSION_GROUP_NAME,
312 getSessionName(),
313 ControlViewSwtBotUtil.KERNEL_DOMAIN_NAME,
314 ControlViewSwtBotUtil.DEFAULT_CHANNEL_NAME);
315 assertEquals(ControlViewSwtBotUtil.DEFAULT_CHANNEL_NAME, channelItem.getText());
316
317 SWTBotTreeItem eventItem = SWTBotUtils.getTreeItem(fBot, fTree,
318 getNodeName(),
319 ControlViewSwtBotUtil.SESSION_GROUP_NAME,
320 getSessionName(),
321 ControlViewSwtBotUtil.KERNEL_DOMAIN_NAME,
322 ControlViewSwtBotUtil.DEFAULT_CHANNEL_NAME,
323 ControlViewSwtBotUtil.ALL_EVENTS_NAME);
324 assertEquals(ControlViewSwtBotUtil.ALL_EVENTS_NAME, eventItem.getText());
325
326 SWTBotTreeItem kernelDomainItem = SWTBotUtils.getTreeItem(fBot, fTree,
327 getNodeName(),
328 ControlViewSwtBotUtil.SESSION_GROUP_NAME,
329 getSessionName(),
330 ControlViewSwtBotUtil.KERNEL_DOMAIN_NAME);
331 assertEquals(ControlViewSwtBotUtil.KERNEL_DOMAIN_NAME, kernelDomainItem.getText());
332 }
333
334 /**
335 * Test enable Event (syscall) on domain level
336 */
337 protected void testEnableSyscalls() {
338 // Case 1: Enabling all syscalls
339 SWTBotTreeItem sessionItem = SWTBotUtils.getTreeItem(fBot, fTree,
340 getNodeName(),
341 ControlViewSwtBotUtil.SESSION_GROUP_NAME,
342 getSessionName());
343
344 sessionItem.select();
345 SWTBotMenu menuBot = sessionItem.contextMenu(ControlViewSwtBotUtil.ENABLE_EVENT_DEFAULT_CHANNEL_MENU_ITEM);
346 menuBot.click();
347
348 SWTBotShell shell = fBot.shell(ControlViewSwtBotUtil.ENABLE_EVENT_DIALOG_TITLE).activate();
349 shell.bot().radioInGroup(ControlViewSwtBotUtil.GROUP_SELECT_NAME, ControlViewSwtBotUtil.SYSCALL_GROUP_NAME).click();
350
351 SWTBotTree syscallsTree = shell.bot().treeInGroup(ControlViewSwtBotUtil.SYSCALL_GROUP_NAME);
352 SWTBotTreeItem allItem = SWTBotUtils.getTreeItem(fBot, syscallsTree, ControlViewSwtBotUtil.ALL_TREE_NODE);
353 allItem.check();
354 shell.bot().button(ControlViewSwtBotUtil.DIALOG_OK_BUTTON).click();
355 SWTBotUtils.waitForJobs();
356
357 fBot.waitUntil(ConditionHelpers.IsTreeChildNodeAvailable(ControlViewSwtBotUtil.KERNEL_DOMAIN_NAME, sessionItem));
358
359 SWTBotTreeItem kernelDomainItem = SWTBotUtils.getTreeItem(fBot, fTree,
360 getNodeName(),
361 ControlViewSwtBotUtil.SESSION_GROUP_NAME,
362 getSessionName(),
363 ControlViewSwtBotUtil.KERNEL_DOMAIN_NAME);
364 assertEquals(ControlViewSwtBotUtil.KERNEL_DOMAIN_NAME, kernelDomainItem.getText());
365
366 SWTBotTreeItem channelItem = SWTBotUtils.getTreeItem(fBot, fTree,
367 getNodeName(),
368 ControlViewSwtBotUtil.SESSION_GROUP_NAME,
369 getSessionName(),
370 ControlViewSwtBotUtil.KERNEL_DOMAIN_NAME,
371 ControlViewSwtBotUtil.DEFAULT_CHANNEL_NAME);
372 assertEquals(ControlViewSwtBotUtil.DEFAULT_CHANNEL_NAME, channelItem.getText());
373
374 SWTBotTreeItem eventItem = SWTBotUtils.getTreeItem(fBot, fTree,
375 getNodeName(),
376 ControlViewSwtBotUtil.SESSION_GROUP_NAME,
377 getSessionName(),
378 ControlViewSwtBotUtil.KERNEL_DOMAIN_NAME,
379 ControlViewSwtBotUtil.DEFAULT_CHANNEL_NAME,
380 ControlViewSwtBotUtil.ALL_EVENTS_NAME);
381 assertEquals(ControlViewSwtBotUtil.ALL_EVENTS_NAME, eventItem.getText());
382
383 // Case 2: Enabling three syscalls (write, read, close) from the syscall tree
384 sessionItem.select();
385 menuBot = sessionItem.contextMenu(ControlViewSwtBotUtil.ENABLE_EVENT_DEFAULT_CHANNEL_MENU_ITEM);
386 menuBot.click();
387
388 shell = fBot.shell(ControlViewSwtBotUtil.ENABLE_EVENT_DIALOG_TITLE).activate();
389 shell.bot().radioInGroup(ControlViewSwtBotUtil.GROUP_SELECT_NAME, ControlViewSwtBotUtil.SYSCALL_GROUP_NAME).click();
390 syscallsTree = shell.bot().treeInGroup(ControlViewSwtBotUtil.SYSCALL_GROUP_NAME);
391 allItem = SWTBotUtils.getTreeItem(fBot, syscallsTree, ControlViewSwtBotUtil.ALL_TREE_NODE);
392 allItem.expand();
393 // Enable 'write' syscall
394 SWTBotTreeItem writeItem = SWTBotUtils.getTreeItem(fBot, syscallsTree, ControlViewSwtBotUtil.ALL_TREE_NODE, ControlViewSwtBotUtil.SYSCALL_WRITE_EVENT);
395 writeItem.check();
396 // Enable 'read' syscall
397 SWTBotTreeItem readItem = SWTBotUtils.getTreeItem(fBot, syscallsTree, ControlViewSwtBotUtil.ALL_TREE_NODE, ControlViewSwtBotUtil.SYSCALL_READ_EVENT);
398 readItem.check();
399 // Enable 'close' syscall
400 SWTBotTreeItem closeItem = SWTBotUtils.getTreeItem(fBot, syscallsTree, ControlViewSwtBotUtil.ALL_TREE_NODE, ControlViewSwtBotUtil.SYSCALL_CLOSE_EVENT);
401 closeItem.check();
402 shell.bot().button(ControlViewSwtBotUtil.DIALOG_OK_BUTTON).click();
403 SWTBotUtils.waitForJobs();
404
405 fBot.waitUntil(ConditionHelpers.IsTreeChildNodeAvailable(ControlViewSwtBotUtil.KERNEL_DOMAIN_NAME, sessionItem));
406
407 kernelDomainItem = SWTBotUtils.getTreeItem(fBot, fTree,
408 getNodeName(),
409 ControlViewSwtBotUtil.SESSION_GROUP_NAME,
410 getSessionName(),
411 ControlViewSwtBotUtil.KERNEL_DOMAIN_NAME);
412 assertEquals(ControlViewSwtBotUtil.KERNEL_DOMAIN_NAME, kernelDomainItem.getText());
413
414 channelItem = SWTBotUtils.getTreeItem(fBot, fTree,
415 getNodeName(),
416 ControlViewSwtBotUtil.SESSION_GROUP_NAME,
417 getSessionName(),
418 ControlViewSwtBotUtil.KERNEL_DOMAIN_NAME,
419 ControlViewSwtBotUtil.DEFAULT_CHANNEL_NAME);
420 assertEquals(ControlViewSwtBotUtil.DEFAULT_CHANNEL_NAME, channelItem.getText());
421
422 eventItem = SWTBotUtils.getTreeItem(fBot, fTree,
423 getNodeName(),
424 ControlViewSwtBotUtil.SESSION_GROUP_NAME,
425 getSessionName(),
426 ControlViewSwtBotUtil.KERNEL_DOMAIN_NAME,
427 ControlViewSwtBotUtil.DEFAULT_CHANNEL_NAME,
428 ControlViewSwtBotUtil.SYSCALL_WRITE_EVENT);
429 assertEquals(ControlViewSwtBotUtil.SYSCALL_WRITE_EVENT, eventItem.getText());
430
431 eventItem = SWTBotUtils.getTreeItem(fBot, fTree,
432 getNodeName(),
433 ControlViewSwtBotUtil.SESSION_GROUP_NAME,
434 getSessionName(),
435 ControlViewSwtBotUtil.KERNEL_DOMAIN_NAME,
436 ControlViewSwtBotUtil.DEFAULT_CHANNEL_NAME,
437 ControlViewSwtBotUtil.SYSCALL_READ_EVENT);
438 assertEquals(ControlViewSwtBotUtil.SYSCALL_READ_EVENT, eventItem.getText());
439
440 eventItem = SWTBotUtils.getTreeItem(fBot, fTree,
441 getNodeName(),
442 ControlViewSwtBotUtil.SESSION_GROUP_NAME,
443 getSessionName(),
444 ControlViewSwtBotUtil.KERNEL_DOMAIN_NAME,
445 ControlViewSwtBotUtil.DEFAULT_CHANNEL_NAME,
446 ControlViewSwtBotUtil.SYSCALL_CLOSE_EVENT);
447 assertEquals(ControlViewSwtBotUtil.SYSCALL_CLOSE_EVENT, eventItem.getText());
448 }
449
450 /**
451 * Test enable UST channel on session level (default values)
452 */
453 protected void testEnableUstChannel() {
454 SWTBotTreeItem sessionItem = SWTBotUtils.getTreeItem(fBot, fTree,
455 getNodeName(),
456 ControlViewSwtBotUtil.SESSION_GROUP_NAME,
457 getSessionName());
458 sessionItem.select();
459 SWTBotMenu menuBot = sessionItem.contextMenu(ControlViewSwtBotUtil.ENABLE_CHANNEL_MENU_ITEM);
460 menuBot.click();
461
462 SWTBotShell shell = fBot.shell(ControlViewSwtBotUtil.ENABLE_CHANNEL_DIALOG_TITLE).activate();
463 SWTBotText channelText = shell.bot().textWithLabel(ControlViewSwtBotUtil.CHANNEL_NAME_LABEL);
464 channelText.setText(UST_CHANNEL_NAME);
465
466 shell.bot().radioInGroup(ControlViewSwtBotUtil.UST_GROUP_NAME, ControlViewSwtBotUtil.DOMAIN_GROUP_NAME).click();
467 shell.bot().radioInGroup(ControlViewSwtBotUtil.BUFFERTYPE_PER_UID, ControlViewSwtBotUtil.BUFFERTYPE_GROUP_NAME).click();
468 shell.bot().button(ControlViewSwtBotUtil.DIALOG_OK_BUTTON).click();
469 SWTBotUtils.waitForJobs();
470 fBot.waitUntil(ConditionHelpers.IsTreeChildNodeAvailable(ControlViewSwtBotUtil.UST_DOMAIN_NAME, sessionItem));
471 }
472
473 /**
474 * Test enable event (all tracepoints) on channel level
475 */
476 protected void testEnableUstEvents() {
477 SWTBotTreeItem channelItem = SWTBotUtils.getTreeItem(fBot, fTree,
478 getNodeName(),
479 ControlViewSwtBotUtil.SESSION_GROUP_NAME,
480 getSessionName(), ControlViewSwtBotUtil.UST_DOMAIN_NAME,
481 UST_CHANNEL_NAME);
482 assertEquals(UST_CHANNEL_NAME, channelItem.getText());
483
484 channelItem.select();
485 SWTBotMenu menuBot = channelItem.contextMenu(ControlViewSwtBotUtil.ENABLE_EVENT_MENU_ITEM);
486 menuBot.click();
487
488 SWTBotShell shell = fBot.shell(ControlViewSwtBotUtil.ENABLE_EVENT_DIALOG_TITLE).activate();
489 SWTBotTree tracepointsTree = shell.bot().tree();
490 tracepointsTree.select(ControlViewSwtBotUtil.ALL_TREE_NODE);
491 shell.bot().button(ControlViewSwtBotUtil.DIALOG_OK_BUTTON).click();
492 SWTBotUtils.waitForJobs();
493
494 SWTBotTreeItem eventItem = SWTBotUtils.getTreeItem(fBot, fTree,
495 getNodeName(),
496 ControlViewSwtBotUtil.SESSION_GROUP_NAME,
497 getSessionName(),
498 ControlViewSwtBotUtil.UST_DOMAIN_NAME,
499 UST_CHANNEL_NAME,
500 ControlViewSwtBotUtil.ALL_EVENTS_NAME);
501 assertEquals(ControlViewSwtBotUtil.ALL_EVENTS_NAME, eventItem.getText());
502 }
503
504 /**
505 * Test start or stop tracing
506 *
507 * @param state
508 * the state to change to
509 */
510 protected void testStartStopTracing(TraceSessionState state) {
511 SWTBotTreeItem sessionItem = SWTBotUtils.getTreeItem(fBot, fTree,
512 getNodeName(),
513 ControlViewSwtBotUtil.SESSION_GROUP_NAME,
514 getSessionName());
515 sessionItem.select();
516
517 if (state == TraceSessionState.ACTIVE) {
518 SWTBotMenu menuBot = sessionItem.contextMenu(ControlViewSwtBotUtil.START_MENU_ITEM);
519 menuBot.click();
520 SWTBotUtils.waitForJobs();
521 } else {
522 SWTBotMenu menuBot = sessionItem.contextMenu(ControlViewSwtBotUtil.STOP_MENU_ITEM);
523 menuBot.click();
524 SWTBotUtils.waitForJobs();
525 }
526 TraceSessionComponent sessionComp = ControlViewSwtBotUtil.getSessionComponent(fNode, getSessionName());
527
528 fBot.waitUntil(ControlViewSwtBotUtil.isSessionStateChanged(sessionComp, state));
529 assertEquals(state, sessionComp.getSessionState());
530 }
531
532 /**
533 * Test destroy session
534 */
535 protected void testDestroySession() {
536 SWTBotTreeItem sessionItem = SWTBotUtils.getTreeItem(fBot, fTree,
537 getNodeName(),
538 ControlViewSwtBotUtil.SESSION_GROUP_NAME,
539 getSessionName());
540
541 sessionItem.select();
542 SWTBotMenu menuBot = sessionItem.contextMenu(ControlViewSwtBotUtil.DESTROY_MENU_ITEM);
543 menuBot.click();
544
545 SWTBotShell shell = fBot.shell(ControlViewSwtBotUtil.DESTROY_CONFIRM_DIALOG_TITLE).activate();
546 shell.bot().button(ControlViewSwtBotUtil.CONFIRM_DIALOG_OK_BUTTON).click();
547 SWTBotUtils.waitForJobs();
548
549 SWTBotTreeItem sessionGroupItem = SWTBotUtils.getTreeItem(fBot, fTree,
550 getNodeName(), ControlViewSwtBotUtil.SESSION_GROUP_NAME);
551
552 fBot.waitUntil(ConditionHelpers.isTreeChildNodeRemoved(0, sessionGroupItem));
553 assertEquals(0, sessionGroupItem.getNodes().size());
554 }
555
556 /**
557 * Test disconnect from node
558 */
559 protected void testDisconnectFromNode() {
560 SWTBotTreeItem nodeItem = SWTBotUtils.getTreeItem(fBot, fTree, getNodeName());
561 nodeItem.select();
562 SWTBotMenu menuBot = nodeItem.contextMenu(ControlViewSwtBotUtil.DISCONNECT_MENU_ITEM);
563 menuBot.click();
564 SWTBotUtils.waitForJobs();
565
566 // Verify that node is connected
567 fBot.waitUntil(ControlViewSwtBotUtil.isStateChanged(fNode, TargetNodeState.DISCONNECTED));
568 assertEquals(TargetNodeState.DISCONNECTED, fNode.getTargetNodeState());
569 assertEquals(0, nodeItem.getNodes().size());
570 }
571
572 /**
573 * Test import
574 *
575 * @param createExperiment
576 * flag to indicate to create an experiment or not
577 * @param defaultExperiment
578 * flag to indicate to use default experiment or not
579 */
580 protected void testImport(boolean createExperiment, boolean defaultExperiment) {
581 SWTBotTreeItem sessionItem = SWTBotUtils.getTreeItem(fBot, fTree,
582 getNodeName(),
583 ControlViewSwtBotUtil.SESSION_GROUP_NAME,
584 getSessionName());
585 sessionItem.select();
586 TraceSessionComponent sessionComp = ControlViewSwtBotUtil.getSessionComponent(fNode, getSessionName());
587
588 String pathString = sessionComp.isSnapshotSession() ? sessionComp.getSnapshotInfo().getSnapshotPath() : sessionComp.getSessionPath();
589 IPath path = new Path(pathString);
590
591 IWorkspace workspace = ResourcesPlugin.getWorkspace();
592
593 //get location of workspace (java.io.File)
594 File workspaceDirectory = workspace.getRoot().getLocation().toFile();
595 Path workspacePath = new Path(workspaceDirectory.toString());
596
597 // Only do tests if session path is in workspace
598 if (workspacePath.isPrefixOf(path)) {
599
600 generateTrace(path);
601
602 // Open import wizard
603 SWTBotMenu menuBot = sessionItem.contextMenu(ControlViewSwtBotUtil.IMPORT_MENU_ITEM);
604 menuBot.click();
605 SWTBotShell shell = fBot.shell(ControlViewSwtBotUtil.IMPORT_WIZARD_TITLE).activate();
606
607 // This will create the Remote project if needed
608 closeImportWizard(shell, ControlViewSwtBotUtil.CANCEL_BUTTON);
609
610 // Verify that remote project was created by import wizard
611 TmfProjectElement tmfProject = verifyRemoteProject();
612
613 // Re-open import wizard
614 menuBot = sessionItem.contextMenu(ControlViewSwtBotUtil.IMPORT_MENU_ITEM);
615 menuBot.click();
616 shell = fBot.shell(ControlViewSwtBotUtil.IMPORT_WIZARD_TITLE).activate();
617
618 // Prepare and verify experiment handling
619 String experimentName = prepareAndVerifyExperimentHandling(shell.bot(), createExperiment, defaultExperiment, path);
620
621 // Finish and import
622 closeImportWizard(shell, ControlViewSwtBotUtil.FINISH_BUTTON);
623
624 // Verify experiment folder
625 verifyExperimentFolder(createExperiment, tmfProject, experimentName);
626 }
627 }
628
629
630 private static TmfProjectElement verifyRemoteProject() {
631 IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(ControlViewSwtBotUtil.DEFAULT_REMOTE_PROJECT);
632 // verify that project was created
633 assertTrue(project.exists());
634 TmfProjectElement tmfProject = TmfProjectRegistry.getProject(project, true);
635 return tmfProject;
636 }
637
638 private static void verifyExperimentFolder(boolean createExperiment, TmfProjectElement tmfProject, String experimentName) {
639 TmfExperimentFolder expFolder = tmfProject.getExperimentsFolder();
640 if (createExperiment) {
641 if (experimentName != null) {
642 TmfExperimentElement expElement = expFolder.getExperiment(experimentName);
643 assertNotNull(expElement);
644 assertEquals(1, expElement.getTraces().size());
645 }
646 } else {
647 assertTrue(expFolder.getExperiments().size() == 0);
648 }
649 }
650
651 private static void generateTrace(IPath path) {
652 File traceParent = path.toFile();
653 traceParent.mkdirs();
654 LttngTraceGenerator.generateLttngTrace(path.append(ControlViewSwtBotUtil.KERNEL_TRACE_NAME).toFile());
655 }
656
657 private static void closeImportWizard(SWTBotShell shell, String buttonName) {
658 SWTBotButton button = shell.bot().button(buttonName);
659 shell.bot().waitUntil(Conditions.widgetIsEnabled(button));
660 button.click();
661 fBot.waitUntil(Conditions.shellCloses(shell));
662 SWTBotUtils.waitForJobs();
663 }
664
665 private static String prepareAndVerifyExperimentHandling(SWTBot bot, boolean createExperiment, boolean defaultExperiment, IPath path) {
666 String experimentName = path.lastSegment();
667 if (createExperiment) {
668 SWTBotCheckBox checkBox = bot.checkBox();
669 checkBox.click();
670 if (!defaultExperiment) {
671 experimentName = verifyExperimentNameHandling(bot, experimentName);
672 }
673 }
674 return experimentName;
675 }
676
677 private static @NonNull String verifyExperimentNameHandling(SWTBot bot, String aExperimentName) {
678 String experimentName = aExperimentName;
679
680 // experiment already exists
681 checkFinishButton(bot, false);
682
683 SWTBotText expText = bot.textInGroup(ControlViewSwtBotUtil.OPTION_GROUP_NAME);
684
685 // Invalid experiment name (only whitespaces)
686 expText.setText(String.valueOf(' '));
687 checkFinishButton(bot, false);
688
689 // Invalid experiment name
690 expText.setText(String.valueOf('/'));
691 checkFinishButton(bot, false);
692
693 // Set valid experiment name
694 experimentName += '_';
695 expText.setText(experimentName);
696 return experimentName;
697 }
698
699 private static void checkFinishButton(SWTBot bot, boolean isEnabled) {
700 final SWTBotButton finishButton = bot.button(ControlViewSwtBotUtil.FINISH_BUTTON);
701 assertTrue(finishButton.isEnabled() == isEnabled);
702 }
703
704 }
This page took 0.056526 seconds and 4 git commands to generate.