28e9eac2bef3b3c8f8983b740bfbff5dbec6ff66
[deliverable/tracecompass.git] / pcap / org.eclipse.tracecompass.tmf.pcap.ui.swtbot.tests / src / org / eclipse / tracecompass / tmf / pcap / ui / swtbot / tests / ImportAndReadPcapTest.java
1 /*******************************************************************************
2 * Copyright (c) 2014, 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 * Contributors:
10 * Matthew Khouzam - Initial API and implementation
11 *******************************************************************************/
12
13 package org.eclipse.tracecompass.tmf.pcap.ui.swtbot.tests;
14
15 import static org.junit.Assert.assertFalse;
16 import static org.junit.Assert.assertNotNull;
17 import static org.junit.Assert.fail;
18 import static org.junit.Assume.assumeTrue;
19
20 import java.io.File;
21 import java.util.ArrayList;
22 import java.util.Arrays;
23 import java.util.List;
24
25 import org.apache.log4j.ConsoleAppender;
26 import org.apache.log4j.Logger;
27 import org.apache.log4j.SimpleLayout;
28 import org.eclipse.core.resources.IProject;
29 import org.eclipse.core.resources.ResourcesPlugin;
30 import org.eclipse.core.runtime.CoreException;
31 import org.eclipse.jface.viewers.SelectionChangedEvent;
32 import org.eclipse.jface.viewers.StructuredSelection;
33 import org.eclipse.swtbot.eclipse.finder.SWTWorkbenchBot;
34 import org.eclipse.swtbot.eclipse.finder.widgets.SWTBotView;
35 import org.eclipse.swtbot.swt.finder.finders.UIThreadRunnable;
36 import org.eclipse.swtbot.swt.finder.junit.SWTBotJunit4ClassRunner;
37 import org.eclipse.swtbot.swt.finder.results.BoolResult;
38 import org.eclipse.swtbot.swt.finder.results.VoidResult;
39 import org.eclipse.swtbot.swt.finder.utils.SWTBotPreferences;
40 import org.eclipse.swtbot.swt.finder.widgets.SWTBotTree;
41 import org.eclipse.tracecompass.internal.tmf.pcap.core.trace.PcapTrace;
42 import org.eclipse.tracecompass.internal.tmf.pcap.ui.NetworkingPerspectiveFactory;
43 import org.eclipse.tracecompass.internal.tmf.pcap.ui.stream.StreamListView;
44 import org.eclipse.tracecompass.tmf.core.event.ITmfEvent;
45 import org.eclipse.tracecompass.tmf.core.signal.TmfSelectionRangeUpdatedSignal;
46 import org.eclipse.tracecompass.tmf.core.trace.ITmfContext;
47 import org.eclipse.tracecompass.tmf.pcap.core.tests.shared.PcapTmfTestTrace;
48 import org.eclipse.tracecompass.tmf.ui.editors.TmfEventsEditor;
49 import org.eclipse.tracecompass.tmf.ui.project.model.TmfOpenTraceHelper;
50 import org.eclipse.tracecompass.tmf.ui.project.model.TmfProjectRegistry;
51 import org.eclipse.tracecompass.tmf.ui.project.model.TmfTraceFolder;
52 import org.eclipse.tracecompass.tmf.ui.swtbot.tests.shared.ConditionHelpers;
53 import org.eclipse.tracecompass.tmf.ui.swtbot.tests.shared.SWTBotUtils;
54 import org.eclipse.ui.IEditorPart;
55 import org.eclipse.ui.IEditorReference;
56 import org.eclipse.ui.IViewPart;
57 import org.eclipse.ui.IViewReference;
58 import org.eclipse.ui.PlatformUI;
59 import org.eclipse.ui.WorkbenchException;
60 import org.junit.AfterClass;
61 import org.junit.BeforeClass;
62 import org.junit.Test;
63 import org.junit.runner.RunWith;
64
65 /**
66 * SWTBot Smoke test for Pcap UI.
67 *
68 * @author Matthew Khouzam
69 */
70 @RunWith(SWTBotJunit4ClassRunner.class)
71 public class ImportAndReadPcapTest {
72
73 private static final String NETWORK_PERSPECTIVE_ID = NetworkingPerspectiveFactory.ID;
74 private static final String TRACE_PROJECT_NAME = "test";
75
76 private static SWTWorkbenchBot fBot;
77 private ITmfEvent fDesired1;
78 private static PcapTmfTestTrace pttt = PcapTmfTestTrace.BENCHMARK_TRACE;
79
80 /** The Log4j logger instance. */
81 private static final Logger fLogger = Logger.getRootLogger();
82
83 /**
84 * Test Class setup
85 */
86 @BeforeClass
87 public static void init() {
88
89 SWTBotUtils.initialize();
90
91 /* set up for swtbot */
92 SWTBotPreferences.TIMEOUT = 300000; /* 300 second timeout */
93 fLogger.removeAllAppenders();
94 fLogger.addAppender(new ConsoleAppender(new SimpleLayout(), ConsoleAppender.SYSTEM_OUT));
95 fBot = new SWTWorkbenchBot();
96
97 final List<SWTBotView> openViews = fBot.views();
98 for (SWTBotView view : openViews) {
99 if (view.getTitle().equals("Welcome")) {
100 view.close();
101 fBot.waitUntil(ConditionHelpers.ViewIsClosed(view));
102 }
103 }
104 /* Switch perspectives */
105 switchNetworkPerspective();
106 /* Finish waiting for eclipse to load */
107 SWTBotUtils.waitForJobs();
108 }
109
110 /**
111 * Test Class teardown
112 */
113 @AfterClass
114 public static void terminate() {
115 fLogger.removeAllAppenders();
116 }
117
118 private static void switchNetworkPerspective() {
119 final Exception retE[] = new Exception[1];
120 if (!UIThreadRunnable.syncExec(new BoolResult() {
121 @Override
122 public Boolean run() {
123 try {
124 PlatformUI.getWorkbench().showPerspective(NETWORK_PERSPECTIVE_ID,
125 PlatformUI.getWorkbench().getActiveWorkbenchWindow());
126 } catch (WorkbenchException e) {
127 retE[0] = e;
128 return false;
129 }
130 return true;
131 }
132 })) {
133 fail(retE[0].getMessage());
134 }
135
136 }
137
138 /**
139 * Main test case
140 */
141 @Test
142 public void test() {
143 assumeTrue(pttt.exists());
144 SWTBotUtils.createProject(TRACE_PROJECT_NAME);
145 openTrace();
146 openEditor();
147 testHV(getViewPart("Histogram"));
148 testStreamView(getViewPartRef("Stream List"));
149 fBot.closeAllEditors();
150 SWTBotUtils.deleteProject(TRACE_PROJECT_NAME, fBot);
151 }
152
153 private void testStreamView(IViewReference viewPart) {
154 SWTBotView botView = new SWTBotView(viewPart, fBot);
155 StreamListView slv = (StreamListView) getViewPart("Stream List");
156 botView.setFocus();
157 SWTBotTree botTree = fBot.tree();
158 assertNotNull(botTree);
159 final TmfSelectionRangeUpdatedSignal signal = new TmfSelectionRangeUpdatedSignal(slv, fDesired1.getTimestamp());
160 slv.broadcast(signal);
161 SWTBotUtils.waitForJobs();
162 // FIXME This is a race condition:
163 // TmfEventsTable launches an async exec that may be run after the wait
164 // for jobs. This last delay catches it.
165 SWTBotUtils.delay(1000);
166
167 }
168
169 private static void openTrace() {
170 final Exception exception[] = new Exception[1];
171 exception[0] = null;
172 UIThreadRunnable.syncExec(new VoidResult() {
173 @Override
174 public void run() {
175 try {
176 IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(TRACE_PROJECT_NAME);
177 TmfTraceFolder destinationFolder = TmfProjectRegistry.getProject(project, true).getTracesFolder();
178 String absolutePath = (new File(pttt.getTrace().getPath())).getAbsolutePath();
179 TmfOpenTraceHelper.openTraceFromPath(destinationFolder, absolutePath, PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), "org.eclipse.linuxtools.tmf.pcap.core.pcaptrace");
180 } catch (CoreException e) {
181 exception[0] = e;
182 }
183 }
184 });
185 if (exception[0] != null) {
186 fail(exception[0].getMessage());
187 }
188
189 SWTBotUtils.delay(1000);
190 SWTBotUtils.waitForJobs();
191 }
192
193 private void openEditor() {
194 final List<IEditorReference> editorRefs = new ArrayList<>();
195 UIThreadRunnable.syncExec(new VoidResult() {
196 @Override
197 public void run() {
198 IEditorReference[] ieds = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getEditorReferences();
199 editorRefs.addAll(Arrays.asList(ieds));
200 }
201
202 });
203 assertFalse(editorRefs.isEmpty());
204 IEditorPart iep = null;
205 for (IEditorReference ied : editorRefs) {
206 if (ied.getTitle().equals(pttt.getTrace().getName())) {
207 iep = ied.getEditor(true);
208 break;
209 }
210 }
211 assertNotNull(iep);
212 fDesired1 = getEvent(100);
213 final TmfEventsEditor tmfEd = (TmfEventsEditor) iep;
214 UIThreadRunnable.syncExec(new VoidResult() {
215 @Override
216 public void run() {
217 tmfEd.setFocus();
218 tmfEd.selectionChanged(new SelectionChangedEvent(tmfEd, new StructuredSelection(fDesired1)));
219 }
220 });
221
222 SWTBotUtils.waitForJobs();
223 SWTBotUtils.delay(1000);
224 assertNotNull(tmfEd);
225 }
226
227 private static void testHV(IViewPart vp) {
228 assertNotNull(vp);
229 }
230
231 private static ITmfEvent getEvent(int rank) {
232 PcapTrace trace = pttt.getTrace();
233 ITmfContext ctx = trace.seekEvent(0);
234 for (int i = 0; i < rank; i++) {
235 trace.getNext(ctx);
236 }
237 ITmfEvent ret = trace.getNext(ctx);
238 trace.dispose();
239 return ret;
240 }
241
242 private static IViewPart getViewPart(final String viewTile) {
243 final IViewPart[] vps = new IViewPart[1];
244 UIThreadRunnable.syncExec(new VoidResult() {
245 @Override
246 public void run() {
247 IViewReference[] viewRefs = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getViewReferences();
248 for (IViewReference viewRef : viewRefs) {
249 IViewPart vp = viewRef.getView(true);
250 if (vp.getTitle().equals(viewTile)) {
251 vps[0] = vp;
252 return;
253 }
254 }
255 }
256 });
257
258 return vps[0];
259 }
260
261 private static IViewReference getViewPartRef(final String viewTile) {
262 final IViewReference[] vrs = new IViewReference[1];
263 UIThreadRunnable.syncExec(new VoidResult() {
264 @Override
265 public void run() {
266 IViewReference[] viewRefs = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getViewReferences();
267 for (IViewReference viewRef : viewRefs) {
268 IViewPart vp = viewRef.getView(true);
269 if (vp.getTitle().equals(viewTile)) {
270 vrs[0] = viewRef;
271 return;
272 }
273 }
274 }
275 });
276
277 return vrs[0];
278 }
279 }
This page took 0.038353 seconds and 4 git commands to generate.