pcap: Remove AutoCloseable from PcapTrace
[deliverable/tracecompass.git] / pcap / org.eclipse.tracecompass.tmf.pcap.ui.swtbot.tests / src / org / eclipse / tracecompass / tmf / pcap / ui / swtbot / tests / ImportAndReadPcapTest.java
CommitLineData
0be56baa 1/*******************************************************************************
ed902a2b 2 * Copyright (c) 2014, 2015 Ericsson
0be56baa
MK
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
2bdf0193 13package org.eclipse.tracecompass.tmf.pcap.ui.swtbot.tests;
0be56baa
MK
14
15import static org.junit.Assert.assertFalse;
16import static org.junit.Assert.assertNotNull;
17import static org.junit.Assert.fail;
18import static org.junit.Assume.assumeTrue;
19
20import java.io.File;
21import java.util.ArrayList;
22import java.util.Arrays;
23import java.util.List;
24
25import org.apache.log4j.ConsoleAppender;
26import org.apache.log4j.Logger;
27import org.apache.log4j.SimpleLayout;
28import org.eclipse.core.resources.IProject;
29import org.eclipse.core.resources.ResourcesPlugin;
30import org.eclipse.core.runtime.CoreException;
31import org.eclipse.jface.viewers.SelectionChangedEvent;
32import org.eclipse.jface.viewers.StructuredSelection;
0be56baa
MK
33import org.eclipse.swtbot.eclipse.finder.SWTWorkbenchBot;
34import org.eclipse.swtbot.eclipse.finder.widgets.SWTBotView;
35import org.eclipse.swtbot.swt.finder.finders.UIThreadRunnable;
36import org.eclipse.swtbot.swt.finder.junit.SWTBotJunit4ClassRunner;
37import org.eclipse.swtbot.swt.finder.results.BoolResult;
38import org.eclipse.swtbot.swt.finder.results.VoidResult;
39import org.eclipse.swtbot.swt.finder.utils.SWTBotPreferences;
40import org.eclipse.swtbot.swt.finder.widgets.SWTBotTree;
2bdf0193
AM
41import org.eclipse.tracecompass.internal.tmf.pcap.core.trace.PcapTrace;
42import org.eclipse.tracecompass.internal.tmf.pcap.ui.NetworkingPerspectiveFactory;
43import org.eclipse.tracecompass.internal.tmf.pcap.ui.stream.StreamListView;
44import org.eclipse.tracecompass.tmf.core.event.ITmfEvent;
97c71024 45import org.eclipse.tracecompass.tmf.core.signal.TmfSelectionRangeUpdatedSignal;
2bdf0193
AM
46import org.eclipse.tracecompass.tmf.core.trace.ITmfContext;
47import org.eclipse.tracecompass.tmf.pcap.core.tests.shared.PcapTmfTestTrace;
48import org.eclipse.tracecompass.tmf.ui.editors.TmfEventsEditor;
49import org.eclipse.tracecompass.tmf.ui.project.model.TmfOpenTraceHelper;
50import org.eclipse.tracecompass.tmf.ui.project.model.TmfProjectRegistry;
51import org.eclipse.tracecompass.tmf.ui.project.model.TmfTraceFolder;
fa24d78b
AM
52import org.eclipse.tracecompass.tmf.ui.swtbot.tests.shared.ConditionHelpers;
53import org.eclipse.tracecompass.tmf.ui.swtbot.tests.shared.SWTBotUtils;
0be56baa
MK
54import org.eclipse.ui.IEditorPart;
55import org.eclipse.ui.IEditorReference;
56import org.eclipse.ui.IViewPart;
57import org.eclipse.ui.IViewReference;
58import org.eclipse.ui.PlatformUI;
59import org.eclipse.ui.WorkbenchException;
f10c30a0 60import org.junit.AfterClass;
0be56baa
MK
61import org.junit.BeforeClass;
62import org.junit.Test;
63import org.junit.runner.RunWith;
64
65/**
66 * SWTBot Smoke test for Pcap UI.
67 *
68 * @author Matthew Khouzam
69 */
70@RunWith(SWTBotJunit4ClassRunner.class)
71public 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
fa24d78b 89 SWTBotUtils.failIfUIThread();
0be56baa
MK
90
91 /* set up for swtbot */
92 SWTBotPreferences.TIMEOUT = 300000; /* 300 second timeout */
f10c30a0 93 fLogger.removeAllAppenders();
0be56baa
MK
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 */
fa24d78b 107 SWTBotUtils.waitForJobs();
0be56baa
MK
108 }
109
f10c30a0
MK
110 /**
111 * Test Class teardown
112 */
113 @AfterClass
114 public static void terminate() {
115 fLogger.removeAllAppenders();
116 }
117
0be56baa
MK
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());
fa24d78b 144 SWTBotUtils.createProject(TRACE_PROJECT_NAME);
0be56baa
MK
145 openTrace();
146 openEditor();
147 testHV(getViewPart("Histogram"));
148 testStreamView(getViewPartRef("Stream List"));
149 fBot.closeAllEditors();
fa24d78b 150 SWTBotUtils.deleteProject(TRACE_PROJECT_NAME, fBot);
0be56baa
MK
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);
97c71024 159 final TmfSelectionRangeUpdatedSignal signal = new TmfSelectionRangeUpdatedSignal(slv, fDesired1.getTimestamp());
0be56baa 160 slv.broadcast(signal);
fa24d78b 161 SWTBotUtils.waitForJobs();
0be56baa
MK
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.
fa24d78b 165 SWTBotUtils.delay(1000);
0be56baa
MK
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
fa24d78b
AM
189 SWTBotUtils.delay(1000);
190 SWTBotUtils.waitForJobs();
0be56baa
MK
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
fa24d78b
AM
222 SWTBotUtils.waitForJobs();
223 SWTBotUtils.delay(1000);
0be56baa
MK
224 assertNotNull(tmfEd);
225 }
226
227 private static void testHV(IViewPart vp) {
228 assertNotNull(vp);
229 }
230
231 private static ITmfEvent getEvent(int rank) {
61cf93ec
AM
232 PcapTrace trace = pttt.getTrace();
233 ITmfContext ctx = trace.seekEvent(0);
234 for (int i = 0; i < rank; i++) {
235 trace.getNext(ctx);
0be56baa 236 }
61cf93ec
AM
237 ITmfEvent ret = trace.getNext(ctx);
238 trace.dispose();
239 return ret;
0be56baa
MK
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.058278 seconds and 5 git commands to generate.