1 /*******************************************************************************
2 * Copyright (c) 2015 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
8 *******************************************************************************/
10 package org
.eclipse
.tracecompass
.lttng2
.control
.ui
.swtbot
.tests
;
12 import static org
.junit
.Assert
.assertEquals
;
13 import static org
.junit
.Assert
.assertNotNull
;
14 import static org
.junit
.Assert
.assertTrue
;
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
.tracecompass
.tmf
.ui
.tests
.shared
.WaitUtils
;
59 import org
.eclipse
.ui
.IViewPart
;
60 import org
.junit
.After
;
61 import org
.junit
.Before
;
62 import org
.junit
.BeforeClass
;
63 import org
.junit
.Test
;
64 import org
.junit
.runner
.RunWith
;
65 import org
.osgi
.framework
.FrameworkUtil
;
68 * Test for the LTTng Control view in Trace Compass
70 * @author Bernd Hufmann
72 @RunWith(SWTBotJunit4ClassRunner
.class)
73 public class ControlViewTest
{
76 // ------------------------------------------------------------------------
78 // ------------------------------------------------------------------------
79 private static final String TEST_STREAM
= "CreateSessionTestLTTng2_8.cfg";
80 /** The initialize scenario name */
81 protected static final String INIT_SCENARIO_NAME
= "Initialize";
82 private static final String CREATE_SESSION_WITH_LTTNG_2_8_SCENARIO_NAME
= "CreateSession_2.8";
84 private static final String SESSION_NAME
= "mysession";
85 private static final String UST_CHANNEL_NAME
= ControlViewSwtBotUtil
.DEFAULT_CHANNEL_NAME
;
86 private static final String NODE_NAME
= "myNode";
87 private static final String PERSPECTIVE_ID
= "org.eclipse.tracecompass.lttng2.control.ui.swtbot.tests.perspective";
89 // ------------------------------------------------------------------------
91 // ------------------------------------------------------------------------
93 /** The Log4j logger instance. */
94 protected static final Logger fLogger
= Logger
.getRootLogger();
95 /** The workbench bot */
96 protected static SWTWorkbenchBot fBot
;
97 private IRemoteConnection fHost
= TmfRemoteConnectionFactory
.getLocalConnection();
98 /** The test remote system proxy */
99 protected @NonNull TestRemoteSystemProxy fProxy
= new TestRemoteSystemProxy(fHost
);
100 /** The trace control tree */
101 protected SWTBotTree fTree
;
102 /** The trace control root component */
103 protected ITraceControlComponent fRoot
;
104 /** The target node component */
105 protected TargetNodeComponent fNode
;
108 protected String fTestFile
;
110 // ------------------------------------------------------------------------
112 // ------------------------------------------------------------------------
118 public static void init() {
119 SWTBotUtils
.initialize();
121 Thread
.currentThread().setName("SWTBot Thread"); // for the debugger
122 /* set up for swtbot */
123 SWTBotPreferences
.TIMEOUT
= 20000; /* 20 second timeout */
124 fLogger
.addAppender(new ConsoleAppender(new SimpleLayout()));
125 fBot
= new SWTWorkbenchBot();
127 SWTBotUtils
.closeView("welcome", fBot
);
129 /* finish waiting for eclipse to load */
130 WaitUtils
.waitForJobs();
132 SWTBotUtils
.switchToPerspective(PERSPECTIVE_ID
);
136 * Open a trace in an editor
142 public void beforeTest() throws Exception
{
143 SWTBotUtils
.openView(ControlView
.ID
);
144 WaitUtils
.waitForJobs();
145 URL location
= FileLocator
.find(FrameworkUtil
.getBundle(this.getClass()), new Path("testfiles" + File
.separator
+ getTestStream()), null);
146 File testfile
= new File(FileLocator
.toFileURL(location
).toURI());
147 fTestFile
= testfile
.getAbsolutePath();
149 // Create root component
150 SWTBotView viewBot
= fBot
.viewById(ControlView
.ID
);
152 IViewPart part
= viewBot
.getViewReference().getView(true);
153 ControlView view
= (ControlView
) part
;
154 fRoot
= view
.getTraceControlRoot();
156 // Create node component
157 fNode
= new TargetNodeComponent(getNodeName(), fRoot
, fProxy
);
158 fRoot
.addChild(fNode
);
159 fTree
= viewBot
.bot().tree();
166 public void tearDown() {
167 fBot
.closeAllEditors();
169 fRoot
.removeAllChildren();
174 * Get the test stream file name to use for the test suite
176 * @return the name of the test stream file
178 protected String
getTestStream() {
183 * Get the session name
185 * @return the session name for this test
187 protected String
getSessionName() {
194 * @return the node name for the test
196 protected String
getNodeName() {
201 * Test basic trace session generation.
204 public void testTraceSessionTree() {
206 fProxy
.setTestFile(fTestFile
);
207 fProxy
.setScenario(INIT_SCENARIO_NAME
);
211 fProxy
.setScenario(CREATE_SESSION_WITH_LTTNG_2_8_SCENARIO_NAME
);
213 testEnableKernelEvent();
214 testEnableSyscalls();
215 testEnableUstChannel();
216 testEnableUstEvents();
217 testStartStopTracing(TraceSessionState
.ACTIVE
);
218 testStartStopTracing(TraceSessionState
.INACTIVE
);
219 // Import without experiment creation
220 testImport(false, true);
221 SWTBotUtils
.clearTracesFolder(fBot
, ControlViewSwtBotUtil
.DEFAULT_REMOTE_PROJECT
);
222 // Import with experiment creation (default experiment name)
223 testImport(true, true);
224 SWTBotUtils
.clearTracesFolder(fBot
, ControlViewSwtBotUtil
.DEFAULT_REMOTE_PROJECT
);
226 * Import with experiment creation, test experiment already exists and
227 * with experiment name validation
229 testImport(true, false);
230 SWTBotUtils
.clearExperimentFolder(fBot
, ControlViewSwtBotUtil
.DEFAULT_REMOTE_PROJECT
);
231 testDestroySession();
232 testDisconnectFromNode();
233 SWTBotUtils
.deleteProject(ControlViewSwtBotUtil
.DEFAULT_REMOTE_PROJECT
, fBot
);
237 * Test connect to node
239 protected void testConnectToNode() {
240 SWTBotTreeItem nodeItem
= SWTBotUtils
.getTreeItem(fBot
, fTree
, getNodeName());
242 SWTBotMenu menuBot
= nodeItem
.contextMenu(ControlViewSwtBotUtil
.CONNECT_MENU_ITEM
);
245 fBot
.waitUntil(ConditionHelpers
.IsTreeChildNodeAvailable(ControlViewSwtBotUtil
.SESSION_GROUP_NAME
, nodeItem
));
247 // Verify that node is connected
248 fBot
.waitUntil(ControlViewSwtBotUtil
.isStateChanged(fNode
, TargetNodeState
.CONNECTED
));
249 // Wait for node configuration jobs
250 WaitUtils
.waitForJobs();
251 assertEquals(TargetNodeState
.CONNECTED
, fNode
.getTargetNodeState());
255 * Test create session
257 protected void testCreateSession() {
258 SWTBotTreeItem nodeItem
= SWTBotUtils
.getTreeItem(fBot
, fTree
, getNodeName());
260 SWTBotTreeItem sessionGroupItem
= nodeItem
.getNode(ControlViewSwtBotUtil
.SESSION_GROUP_NAME
);
262 sessionGroupItem
.select();
263 SWTBotMenu menuBot
= sessionGroupItem
.contextMenu(ControlViewSwtBotUtil
.CREATE_SESSION_MENU_ITEM
);
266 SWTBotShell shell
= fBot
.shell(ControlViewSwtBotUtil
.CREATE_SESSION_DIALOG_TITLE
).activate();
268 SWTBotText sessionText
= shell
.bot().textWithLabel(ControlViewSwtBotUtil
.SESSION_NAME_LABEL
);
269 sessionText
.setText(SESSION_NAME
);
271 shell
.bot().button(ControlViewSwtBotUtil
.DIALOG_OK_BUTTON
).click();
272 WaitUtils
.waitForJobs();
274 sessionGroupItem
.expand();
276 fBot
.waitUntil(ConditionHelpers
.IsTreeChildNodeAvailable(getSessionName(), sessionGroupItem
));
277 assertEquals(1, sessionGroupItem
.getNodes().size());
279 SWTBotTreeItem sessionItem
= SWTBotUtils
.getTreeItem(fBot
, fTree
,
281 ControlViewSwtBotUtil
.SESSION_GROUP_NAME
,
283 assertEquals(getSessionName(), sessionItem
.getText());
287 * Test enable event (all kernel tracepoints) on session level
289 protected void testEnableKernelEvent() {
290 SWTBotTreeItem sessionItem
= SWTBotUtils
.getTreeItem(fBot
, fTree
,
292 ControlViewSwtBotUtil
.SESSION_GROUP_NAME
,
295 sessionItem
.select();
296 SWTBotMenu menuBot
= sessionItem
.contextMenu(ControlViewSwtBotUtil
.ENABLE_EVENT_DEFAULT_CHANNEL_MENU_ITEM
);
299 SWTBotShell shell
= fBot
.shell(ControlViewSwtBotUtil
.ENABLE_EVENT_DIALOG_TITLE
).activate();
301 shell
.bot().radioInGroup(ControlViewSwtBotUtil
.GROUP_SELECT_NAME
, ControlViewSwtBotUtil
.TRACEPOINTS_GROUP_NAME
).click();
303 SWTBotTree tracepointsTree
= shell
.bot().treeInGroup(ControlViewSwtBotUtil
.TRACEPOINTS_GROUP_NAME
);
304 SWTBotTreeItem allItem
= SWTBotUtils
.getTreeItem(fBot
, tracepointsTree
, ControlViewSwtBotUtil
.ALL_TREE_NODE
);
306 shell
.bot().button(ControlViewSwtBotUtil
.DIALOG_OK_BUTTON
).click();
307 WaitUtils
.waitForJobs();
309 fBot
.waitUntil(ConditionHelpers
.IsTreeChildNodeAvailable(ControlViewSwtBotUtil
.KERNEL_DOMAIN_NAME
, sessionItem
));
311 SWTBotTreeItem channelItem
= SWTBotUtils
.getTreeItem(fBot
, fTree
,
313 ControlViewSwtBotUtil
.SESSION_GROUP_NAME
,
315 ControlViewSwtBotUtil
.KERNEL_DOMAIN_NAME
,
316 ControlViewSwtBotUtil
.DEFAULT_CHANNEL_NAME
);
317 assertEquals(ControlViewSwtBotUtil
.DEFAULT_CHANNEL_NAME
, channelItem
.getText());
319 SWTBotTreeItem eventItem
= SWTBotUtils
.getTreeItem(fBot
, fTree
,
321 ControlViewSwtBotUtil
.SESSION_GROUP_NAME
,
323 ControlViewSwtBotUtil
.KERNEL_DOMAIN_NAME
,
324 ControlViewSwtBotUtil
.DEFAULT_CHANNEL_NAME
,
325 ControlViewSwtBotUtil
.ALL_EVENTS_NAME
);
326 assertEquals(ControlViewSwtBotUtil
.ALL_EVENTS_NAME
, eventItem
.getText());
328 SWTBotTreeItem kernelDomainItem
= SWTBotUtils
.getTreeItem(fBot
, fTree
,
330 ControlViewSwtBotUtil
.SESSION_GROUP_NAME
,
332 ControlViewSwtBotUtil
.KERNEL_DOMAIN_NAME
);
333 assertEquals(ControlViewSwtBotUtil
.KERNEL_DOMAIN_NAME
, kernelDomainItem
.getText());
337 * Test enable Event (syscall) on domain level
339 protected void testEnableSyscalls() {
340 // Case 1: Enabling all syscalls
341 SWTBotTreeItem sessionItem
= SWTBotUtils
.getTreeItem(fBot
, fTree
,
343 ControlViewSwtBotUtil
.SESSION_GROUP_NAME
,
346 sessionItem
.select();
347 SWTBotMenu menuBot
= sessionItem
.contextMenu(ControlViewSwtBotUtil
.ENABLE_EVENT_DEFAULT_CHANNEL_MENU_ITEM
);
350 SWTBotShell shell
= fBot
.shell(ControlViewSwtBotUtil
.ENABLE_EVENT_DIALOG_TITLE
).activate();
351 shell
.bot().radioInGroup(ControlViewSwtBotUtil
.GROUP_SELECT_NAME
, ControlViewSwtBotUtil
.SYSCALL_GROUP_NAME
).click();
353 SWTBotTree syscallsTree
= shell
.bot().treeInGroup(ControlViewSwtBotUtil
.SYSCALL_GROUP_NAME
);
354 SWTBotTreeItem allItem
= SWTBotUtils
.getTreeItem(fBot
, syscallsTree
, ControlViewSwtBotUtil
.ALL_TREE_NODE
);
356 shell
.bot().button(ControlViewSwtBotUtil
.DIALOG_OK_BUTTON
).click();
357 WaitUtils
.waitForJobs();
359 fBot
.waitUntil(ConditionHelpers
.IsTreeChildNodeAvailable(ControlViewSwtBotUtil
.KERNEL_DOMAIN_NAME
, sessionItem
));
361 SWTBotTreeItem kernelDomainItem
= SWTBotUtils
.getTreeItem(fBot
, fTree
,
363 ControlViewSwtBotUtil
.SESSION_GROUP_NAME
,
365 ControlViewSwtBotUtil
.KERNEL_DOMAIN_NAME
);
366 assertEquals(ControlViewSwtBotUtil
.KERNEL_DOMAIN_NAME
, kernelDomainItem
.getText());
368 SWTBotTreeItem channelItem
= SWTBotUtils
.getTreeItem(fBot
, fTree
,
370 ControlViewSwtBotUtil
.SESSION_GROUP_NAME
,
372 ControlViewSwtBotUtil
.KERNEL_DOMAIN_NAME
,
373 ControlViewSwtBotUtil
.DEFAULT_CHANNEL_NAME
);
374 assertEquals(ControlViewSwtBotUtil
.DEFAULT_CHANNEL_NAME
, channelItem
.getText());
376 SWTBotTreeItem eventItem
= SWTBotUtils
.getTreeItem(fBot
, fTree
,
378 ControlViewSwtBotUtil
.SESSION_GROUP_NAME
,
380 ControlViewSwtBotUtil
.KERNEL_DOMAIN_NAME
,
381 ControlViewSwtBotUtil
.DEFAULT_CHANNEL_NAME
,
382 ControlViewSwtBotUtil
.ALL_EVENTS_NAME
);
383 assertEquals(ControlViewSwtBotUtil
.ALL_EVENTS_NAME
, eventItem
.getText());
385 // Case 2: Enabling three syscalls (write, read, close) from the syscall tree
386 sessionItem
.select();
387 menuBot
= sessionItem
.contextMenu(ControlViewSwtBotUtil
.ENABLE_EVENT_DEFAULT_CHANNEL_MENU_ITEM
);
390 shell
= fBot
.shell(ControlViewSwtBotUtil
.ENABLE_EVENT_DIALOG_TITLE
).activate();
391 shell
.bot().radioInGroup(ControlViewSwtBotUtil
.GROUP_SELECT_NAME
, ControlViewSwtBotUtil
.SYSCALL_GROUP_NAME
).click();
392 syscallsTree
= shell
.bot().treeInGroup(ControlViewSwtBotUtil
.SYSCALL_GROUP_NAME
);
393 allItem
= SWTBotUtils
.getTreeItem(fBot
, syscallsTree
, ControlViewSwtBotUtil
.ALL_TREE_NODE
);
395 // Enable 'write' syscall
396 SWTBotTreeItem writeItem
= SWTBotUtils
.getTreeItem(fBot
, syscallsTree
, ControlViewSwtBotUtil
.ALL_TREE_NODE
, ControlViewSwtBotUtil
.SYSCALL_WRITE_EVENT
);
398 // Enable 'read' syscall
399 SWTBotTreeItem readItem
= SWTBotUtils
.getTreeItem(fBot
, syscallsTree
, ControlViewSwtBotUtil
.ALL_TREE_NODE
, ControlViewSwtBotUtil
.SYSCALL_READ_EVENT
);
401 // Enable 'close' syscall
402 SWTBotTreeItem closeItem
= SWTBotUtils
.getTreeItem(fBot
, syscallsTree
, ControlViewSwtBotUtil
.ALL_TREE_NODE
, ControlViewSwtBotUtil
.SYSCALL_CLOSE_EVENT
);
404 shell
.bot().button(ControlViewSwtBotUtil
.DIALOG_OK_BUTTON
).click();
405 WaitUtils
.waitForJobs();
407 fBot
.waitUntil(ConditionHelpers
.IsTreeChildNodeAvailable(ControlViewSwtBotUtil
.KERNEL_DOMAIN_NAME
, sessionItem
));
409 kernelDomainItem
= SWTBotUtils
.getTreeItem(fBot
, fTree
,
411 ControlViewSwtBotUtil
.SESSION_GROUP_NAME
,
413 ControlViewSwtBotUtil
.KERNEL_DOMAIN_NAME
);
414 assertEquals(ControlViewSwtBotUtil
.KERNEL_DOMAIN_NAME
, kernelDomainItem
.getText());
416 channelItem
= SWTBotUtils
.getTreeItem(fBot
, fTree
,
418 ControlViewSwtBotUtil
.SESSION_GROUP_NAME
,
420 ControlViewSwtBotUtil
.KERNEL_DOMAIN_NAME
,
421 ControlViewSwtBotUtil
.DEFAULT_CHANNEL_NAME
);
422 assertEquals(ControlViewSwtBotUtil
.DEFAULT_CHANNEL_NAME
, channelItem
.getText());
424 eventItem
= SWTBotUtils
.getTreeItem(fBot
, fTree
,
426 ControlViewSwtBotUtil
.SESSION_GROUP_NAME
,
428 ControlViewSwtBotUtil
.KERNEL_DOMAIN_NAME
,
429 ControlViewSwtBotUtil
.DEFAULT_CHANNEL_NAME
,
430 ControlViewSwtBotUtil
.SYSCALL_WRITE_EVENT
);
431 assertEquals(ControlViewSwtBotUtil
.SYSCALL_WRITE_EVENT
, eventItem
.getText());
433 eventItem
= SWTBotUtils
.getTreeItem(fBot
, fTree
,
435 ControlViewSwtBotUtil
.SESSION_GROUP_NAME
,
437 ControlViewSwtBotUtil
.KERNEL_DOMAIN_NAME
,
438 ControlViewSwtBotUtil
.DEFAULT_CHANNEL_NAME
,
439 ControlViewSwtBotUtil
.SYSCALL_READ_EVENT
);
440 assertEquals(ControlViewSwtBotUtil
.SYSCALL_READ_EVENT
, eventItem
.getText());
442 eventItem
= SWTBotUtils
.getTreeItem(fBot
, fTree
,
444 ControlViewSwtBotUtil
.SESSION_GROUP_NAME
,
446 ControlViewSwtBotUtil
.KERNEL_DOMAIN_NAME
,
447 ControlViewSwtBotUtil
.DEFAULT_CHANNEL_NAME
,
448 ControlViewSwtBotUtil
.SYSCALL_CLOSE_EVENT
);
449 assertEquals(ControlViewSwtBotUtil
.SYSCALL_CLOSE_EVENT
, eventItem
.getText());
453 * Test enable UST channel on session level (default values)
455 protected void testEnableUstChannel() {
456 SWTBotTreeItem sessionItem
= SWTBotUtils
.getTreeItem(fBot
, fTree
,
458 ControlViewSwtBotUtil
.SESSION_GROUP_NAME
,
460 sessionItem
.select();
461 SWTBotMenu menuBot
= sessionItem
.contextMenu(ControlViewSwtBotUtil
.ENABLE_CHANNEL_MENU_ITEM
);
464 SWTBotShell shell
= fBot
.shell(ControlViewSwtBotUtil
.ENABLE_CHANNEL_DIALOG_TITLE
).activate();
465 SWTBotText channelText
= shell
.bot().textWithLabel(ControlViewSwtBotUtil
.CHANNEL_NAME_LABEL
);
466 channelText
.setText(UST_CHANNEL_NAME
);
468 shell
.bot().radioInGroup(ControlViewSwtBotUtil
.UST_GROUP_NAME
, ControlViewSwtBotUtil
.DOMAIN_GROUP_NAME
).click();
469 shell
.bot().radioInGroup(ControlViewSwtBotUtil
.BUFFERTYPE_PER_UID
, ControlViewSwtBotUtil
.BUFFERTYPE_GROUP_NAME
).click();
470 shell
.bot().button(ControlViewSwtBotUtil
.DIALOG_OK_BUTTON
).click();
471 WaitUtils
.waitForJobs();
472 fBot
.waitUntil(ConditionHelpers
.IsTreeChildNodeAvailable(ControlViewSwtBotUtil
.UST_DOMAIN_NAME
, sessionItem
));
476 * Test enable event (all tracepoints) on channel level
478 protected void testEnableUstEvents() {
479 SWTBotTreeItem channelItem
= SWTBotUtils
.getTreeItem(fBot
, fTree
,
481 ControlViewSwtBotUtil
.SESSION_GROUP_NAME
,
482 getSessionName(), ControlViewSwtBotUtil
.UST_DOMAIN_NAME
,
484 assertEquals(UST_CHANNEL_NAME
, channelItem
.getText());
486 channelItem
.select();
487 SWTBotMenu menuBot
= channelItem
.contextMenu(ControlViewSwtBotUtil
.ENABLE_EVENT_MENU_ITEM
);
490 SWTBotShell shell
= fBot
.shell(ControlViewSwtBotUtil
.ENABLE_EVENT_DIALOG_TITLE
).activate();
491 SWTBotTree tracepointsTree
= shell
.bot().tree();
492 tracepointsTree
.select(ControlViewSwtBotUtil
.ALL_TREE_NODE
);
493 shell
.bot().button(ControlViewSwtBotUtil
.DIALOG_OK_BUTTON
).click();
494 WaitUtils
.waitForJobs();
496 SWTBotTreeItem eventItem
= SWTBotUtils
.getTreeItem(fBot
, fTree
,
498 ControlViewSwtBotUtil
.SESSION_GROUP_NAME
,
500 ControlViewSwtBotUtil
.UST_DOMAIN_NAME
,
502 ControlViewSwtBotUtil
.ALL_EVENTS_NAME
);
503 assertEquals(ControlViewSwtBotUtil
.ALL_EVENTS_NAME
, eventItem
.getText());
507 * Test start or stop tracing
510 * the state to change to
512 protected void testStartStopTracing(TraceSessionState state
) {
513 SWTBotTreeItem sessionItem
= SWTBotUtils
.getTreeItem(fBot
, fTree
,
515 ControlViewSwtBotUtil
.SESSION_GROUP_NAME
,
517 sessionItem
.select();
519 if (state
== TraceSessionState
.ACTIVE
) {
520 SWTBotMenu menuBot
= sessionItem
.contextMenu(ControlViewSwtBotUtil
.START_MENU_ITEM
);
522 WaitUtils
.waitForJobs();
524 SWTBotMenu menuBot
= sessionItem
.contextMenu(ControlViewSwtBotUtil
.STOP_MENU_ITEM
);
526 WaitUtils
.waitForJobs();
528 TraceSessionComponent sessionComp
= ControlViewSwtBotUtil
.getSessionComponent(fNode
, getSessionName());
530 fBot
.waitUntil(ControlViewSwtBotUtil
.isSessionStateChanged(sessionComp
, state
));
531 assertEquals(state
, sessionComp
.getSessionState());
535 * Test destroy session
537 protected void testDestroySession() {
538 SWTBotTreeItem sessionItem
= SWTBotUtils
.getTreeItem(fBot
, fTree
,
540 ControlViewSwtBotUtil
.SESSION_GROUP_NAME
,
543 sessionItem
.select();
544 SWTBotMenu menuBot
= sessionItem
.contextMenu(ControlViewSwtBotUtil
.DESTROY_MENU_ITEM
);
547 SWTBotShell shell
= fBot
.shell(ControlViewSwtBotUtil
.DESTROY_CONFIRM_DIALOG_TITLE
).activate();
548 shell
.bot().button(ControlViewSwtBotUtil
.CONFIRM_DIALOG_OK_BUTTON
).click();
549 WaitUtils
.waitForJobs();
551 SWTBotTreeItem sessionGroupItem
= SWTBotUtils
.getTreeItem(fBot
, fTree
,
552 getNodeName(), ControlViewSwtBotUtil
.SESSION_GROUP_NAME
);
554 fBot
.waitUntil(ConditionHelpers
.isTreeChildNodeRemoved(0, sessionGroupItem
));
555 assertEquals(0, sessionGroupItem
.getNodes().size());
559 * Test disconnect from node
561 protected void testDisconnectFromNode() {
562 SWTBotTreeItem nodeItem
= SWTBotUtils
.getTreeItem(fBot
, fTree
, getNodeName());
564 SWTBotMenu menuBot
= nodeItem
.contextMenu(ControlViewSwtBotUtil
.DISCONNECT_MENU_ITEM
);
566 WaitUtils
.waitForJobs();
568 // Verify that node is connected
569 fBot
.waitUntil(ControlViewSwtBotUtil
.isStateChanged(fNode
, TargetNodeState
.DISCONNECTED
));
570 assertEquals(TargetNodeState
.DISCONNECTED
, fNode
.getTargetNodeState());
571 assertEquals(0, nodeItem
.getNodes().size());
577 * @param createExperiment
578 * flag to indicate to create an experiment or not
579 * @param defaultExperiment
580 * flag to indicate to use default experiment or not
582 protected void testImport(boolean createExperiment
, boolean defaultExperiment
) {
583 SWTBotTreeItem sessionItem
= SWTBotUtils
.getTreeItem(fBot
, fTree
,
585 ControlViewSwtBotUtil
.SESSION_GROUP_NAME
,
587 sessionItem
.select();
588 TraceSessionComponent sessionComp
= ControlViewSwtBotUtil
.getSessionComponent(fNode
, getSessionName());
590 String pathString
= sessionComp
.isSnapshotSession() ? sessionComp
.getSnapshotInfo().getSnapshotPath() : sessionComp
.getSessionPath();
591 IPath path
= new Path(pathString
);
593 IWorkspace workspace
= ResourcesPlugin
.getWorkspace();
595 //get location of workspace (java.io.File)
596 File workspaceDirectory
= workspace
.getRoot().getLocation().toFile();
597 Path workspacePath
= new Path(workspaceDirectory
.toString());
599 // Only do tests if session path is in workspace
600 if (workspacePath
.isPrefixOf(path
)) {
604 // Open import wizard
605 SWTBotMenu menuBot
= sessionItem
.contextMenu(ControlViewSwtBotUtil
.IMPORT_MENU_ITEM
);
607 SWTBotShell shell
= fBot
.shell(ControlViewSwtBotUtil
.IMPORT_WIZARD_TITLE
).activate();
609 // This will create the Remote project if needed
610 closeImportWizard(shell
, ControlViewSwtBotUtil
.CANCEL_BUTTON
);
612 // Verify that remote project was created by import wizard
613 TmfProjectElement tmfProject
= verifyRemoteProject();
615 // Re-open import wizard
616 menuBot
= sessionItem
.contextMenu(ControlViewSwtBotUtil
.IMPORT_MENU_ITEM
);
618 shell
= fBot
.shell(ControlViewSwtBotUtil
.IMPORT_WIZARD_TITLE
).activate();
620 // Prepare and verify experiment handling
621 String experimentName
= prepareAndVerifyExperimentHandling(shell
.bot(), createExperiment
, defaultExperiment
, path
);
624 closeImportWizard(shell
, ControlViewSwtBotUtil
.FINISH_BUTTON
);
626 // Verify experiment folder
627 verifyExperimentFolder(createExperiment
, tmfProject
, experimentName
);
632 private static TmfProjectElement
verifyRemoteProject() {
633 IProject project
= ResourcesPlugin
.getWorkspace().getRoot().getProject(ControlViewSwtBotUtil
.DEFAULT_REMOTE_PROJECT
);
634 // verify that project was created
635 assertTrue(project
.exists());
636 TmfProjectElement tmfProject
= TmfProjectRegistry
.getProject(project
, true);
640 private static void verifyExperimentFolder(boolean createExperiment
, TmfProjectElement tmfProject
, String experimentName
) {
641 TmfExperimentFolder expFolder
= tmfProject
.getExperimentsFolder();
642 if (createExperiment
) {
643 if (experimentName
!= null) {
644 TmfExperimentElement expElement
= expFolder
.getExperiment(experimentName
);
645 assertNotNull(expElement
);
646 assertEquals(1, expElement
.getTraces().size());
649 assertTrue(expFolder
.getExperiments().size() == 0);
653 private static void generateTrace(IPath path
) {
654 File traceParent
= path
.toFile();
655 traceParent
.mkdirs();
656 LttngTraceGenerator
.generateLttngTrace(path
.append(ControlViewSwtBotUtil
.KERNEL_TRACE_NAME
).toFile());
659 private static void closeImportWizard(SWTBotShell shell
, String buttonName
) {
660 SWTBotButton button
= shell
.bot().button(buttonName
);
661 shell
.bot().waitUntil(Conditions
.widgetIsEnabled(button
));
663 fBot
.waitUntil(Conditions
.shellCloses(shell
));
664 WaitUtils
.waitForJobs();
667 private static String
prepareAndVerifyExperimentHandling(SWTBot bot
, boolean createExperiment
, boolean defaultExperiment
, IPath path
) {
668 String experimentName
= path
.lastSegment();
669 if (createExperiment
) {
670 SWTBotCheckBox checkBox
= bot
.checkBox();
672 if (!defaultExperiment
) {
673 experimentName
= verifyExperimentNameHandling(bot
, experimentName
);
676 return experimentName
;
679 private static @NonNull String
verifyExperimentNameHandling(SWTBot bot
, String aExperimentName
) {
680 String experimentName
= aExperimentName
;
682 // experiment already exists
683 checkFinishButton(bot
, false);
685 SWTBotText expText
= bot
.textInGroup(ControlViewSwtBotUtil
.OPTION_GROUP_NAME
);
687 // Invalid experiment name (only whitespaces)
688 expText
.setText(String
.valueOf(' '));
689 checkFinishButton(bot
, false);
691 // Invalid experiment name
692 expText
.setText(String
.valueOf('/'));
693 checkFinishButton(bot
, false);
695 // Set valid experiment name
696 experimentName
+= '_';
697 expText
.setText(experimentName
);
698 return experimentName
;
701 private static void checkFinishButton(SWTBot bot
, boolean isEnabled
) {
702 final SWTBotButton finishButton
= bot
.button(ControlViewSwtBotUtil
.FINISH_BUTTON
);
703 assertTrue(finishButton
.isEnabled() == isEnabled
);