tmf: Use tabs in statistics view for each traces
[deliverable/tracecompass.git] / org.eclipse.linuxtools.lttng.core.tests / src / org / eclipse / linuxtools / lttng / core / tests / LttngTestPreparation.java
CommitLineData
6c13869b 1package org.eclipse.linuxtools.lttng.core.tests;
03c71d1e
ASL
2
3import java.io.File;
4import java.net.URL;
5
6import junit.framework.TestCase;
7
8import org.eclipse.core.runtime.FileLocator;
9import org.eclipse.core.runtime.Path;
5945cec9
FC
10import org.eclipse.linuxtools.internal.lttng.core.TraceDebug;
11import org.eclipse.linuxtools.internal.lttng.core.control.LttngCoreProviderFactory;
12import org.eclipse.linuxtools.internal.lttng.core.event.LttngEvent;
13import org.eclipse.linuxtools.internal.lttng.core.event.LttngSyntheticEvent;
5945cec9 14import org.eclipse.linuxtools.internal.lttng.core.event.LttngSyntheticEvent.SequenceInd;
25e48683 15import org.eclipse.linuxtools.internal.lttng.core.event.LttngTimestamp;
5945cec9
FC
16import org.eclipse.linuxtools.internal.lttng.core.state.experiment.IStateExperimentManager;
17import org.eclipse.linuxtools.internal.lttng.core.state.experiment.StateManagerFactory;
18import org.eclipse.linuxtools.internal.lttng.core.trace.LTTngTextTrace;
19import org.eclipse.linuxtools.internal.lttng.core.trace.LTTngTrace;
0c32e4c5 20import org.eclipse.linuxtools.tmf.core.event.ITmfEvent;
6c13869b 21import org.eclipse.linuxtools.tmf.core.event.TmfTimeRange;
6c13869b
FC
22import org.eclipse.linuxtools.tmf.core.request.TmfDataRequest;
23import org.eclipse.linuxtools.tmf.core.request.TmfEventRequest;
24import org.eclipse.linuxtools.tmf.core.signal.TmfExperimentSelectedSignal;
25import org.eclipse.linuxtools.tmf.core.trace.ITmfTrace;
9e0640dc 26import org.eclipse.linuxtools.tmf.core.trace.TmfExperiment;
9269df72 27import org.osgi.framework.FrameworkUtil;
03c71d1e 28
3b38ea61 29@SuppressWarnings("nls")
03c71d1e 30public abstract class LttngTestPreparation extends TestCase {
25e48683
FC
31 // ========================================================================
32 // Data
33 // ========================================================================
34 private final static String ftracepath_T1 = "traceset/trace-15316events_nolost_newformat";
35 final static String fTextTracepath_T1 = "traceset/trace-15316events_nolost_newformat.txt";
36
37 private static final Long CHECK_POINT_INTERVAL = 1000L;
38
39 final Long[] expectedEvents_T1 = new Long[20];
40 final Long[] requestIntervals_T1 = new Long[32];
41
42 static LTTngTextTrace ftextStream_T1 = null;
43 private static LTTngTrace frealStream = null;
44
0c32e4c5 45 private TmfExperiment fTestExperiment = null;
25e48683
FC
46 protected volatile int feventCount = 0;
47 protected boolean validSequence = true;
48
49 public LttngTestPreparation() {
50 super();
51 init();
52 }
53
54 public LttngTestPreparation(final String name) {
55 super(name);
56 init();
57 }
58
59 protected void init() {
60 fillInRequestIntervals();
61 fillInExpectedEvents();
62 feventCount = 0;
63 }
64
65 /**
66 * @return
67 */
0c32e4c5 68 protected TmfExperiment prepareExperimentToTest() {
25e48683
FC
69 if (fTestExperiment == null) {
70 final String expId = "testExperiment";
71 final int nbTraces = 1;
72
73 // Define traces in experiment
0c32e4c5
AM
74 final ITmfTrace[] traces = new ITmfTrace[nbTraces];
75 final ITmfTrace trace = prepareStreamToTest();
25e48683
FC
76 traces[0] = trace;
77
0c32e4c5 78 fTestExperiment = new TmfExperiment(LttngEvent.class, expId, traces, TmfExperiment.DEFAULT_BLOCK_SIZE);
25e48683
FC
79
80 // Set the current selected experiment as the test experiment
0c32e4c5 81 final TmfExperimentSelectedSignal signal = new TmfExperimentSelectedSignal(
25e48683
FC
82 this, fTestExperiment);
83 fTestExperiment.experimentSelected(signal);
84 }
85
86 return fTestExperiment;
87 }
88
89 /**
90 * @return
91 */
0c32e4c5 92 protected TmfExperiment prepareTextExperimentToTest() {
25e48683
FC
93 if (fTestExperiment == null) {
94 final String expId = "testExperiment";
95 final int nbTraces = 1;
96
97 // Define traces in experiment
0c32e4c5
AM
98 final ITmfTrace[] traces = new ITmfTrace[nbTraces];
99 final ITmfTrace trace = prepareTextStreamToTest();
25e48683
FC
100 traces[0] = trace;
101
102 // create experiment and associate traces
0c32e4c5 103 fTestExperiment = new TmfExperiment(LttngEvent.class, expId, traces);
25e48683
FC
104
105 // Set the current selected experiment as the test experiment
0c32e4c5 106 final TmfExperimentSelectedSignal signal = new TmfExperimentSelectedSignal(
25e48683
FC
107 this, fTestExperiment);
108 fTestExperiment.experimentSelected(signal);
109
110 }
111
112 return fTestExperiment;
113 }
114
115 protected LTTngTrace prepareStreamToTest() {
0c32e4c5 116 if (frealStream == null) {
25e48683
FC
117 try {
118 final URL location = FileLocator.find(FrameworkUtil.getBundle(this.getClass()), new Path(ftracepath_T1),
119 null);
120 final File testfile = new File(FileLocator.toFileURL(location).toURI());
121 final LTTngTrace tmpStream = new LTTngTrace(null, testfile.getPath(), false);
122 frealStream = tmpStream;
123 } catch (final Exception e) {
124 System.out.println("ERROR : Could not open " + ftracepath_T1);
125 frealStream = null;
126 }
0c32e4c5 127 } else {
25e48683 128 frealStream.seekEvent(0L);
0c32e4c5 129 }
25e48683
FC
130
131 return frealStream;
132 }
133
134 protected LTTngTextTrace prepareTextStreamToTest() {
0c32e4c5 135 if (ftextStream_T1 == null) {
25e48683
FC
136 try {
137 final URL location = FileLocator.find(FrameworkUtil.getBundle(this.getClass()),
138 new Path(fTextTracepath_T1), null);
139 final File testfile = new File(FileLocator.toFileURL(location).toURI());
140 final LTTngTextTrace tmpStream = new LTTngTextTrace(null, testfile.getPath());
141 ftextStream_T1 = tmpStream;
142
143 } catch (final Exception e) {
144 System.out.println("ERROR : Could not open " + fTextTracepath_T1);
145 ftextStream_T1 = null;
146 }
0c32e4c5 147 } else {
25e48683 148 ftextStream_T1.seekEvent(0);
0c32e4c5 149 }
25e48683
FC
150
151 return ftextStream_T1;
152 }
153
154 protected IStateExperimentManager prepareExperimentContext(
155 final boolean waitForRequest) {
156 // Create a new Experiment manager
157 final IStateExperimentManager expManager = StateManagerFactory
158 .getExperimentManager();
159 // Configure the interval to create check points so this can be tested
160 // with medium size files i.e. default is 50000 events
161 StateManagerFactory.setTraceCheckPointInterval(CHECK_POINT_INTERVAL);
162
163 // Lets wait for the request completion to analyse the results
164 LttngCoreProviderFactory.getEventProvider(0)
165 .setWaitForRequest(waitForRequest);
166 return expManager;
167 }
168
169 /**
170 * @param <T>
171 * @param k
172 * @param startIdx
173 * , > 0 and between 0 - 31
174 * @param endIdx
175 * , > startIdx and between 0 - 31
176 * @return
177 */
0c32e4c5 178 protected <T extends LttngEvent> TmfEventRequest prepareEventRequest(final Class<T> k, final int startIdx, final int endIdx) {
25e48683
FC
179 return prepareEventRequest(k, startIdx, endIdx, true);
180 }
181
182 /**
183 * @param <T>
184 * @param k
185 * @param startIdx
186 * , > 0 and between 0 - 31
187 * @param endIdx
188 * , > startIdx and between 0 - 31
189 * @param printFirst20
190 * , print the first expected events vs actual events
191 * @return
192 */
0c32e4c5 193 protected <T extends LttngEvent> TmfEventRequest prepareEventRequest(
25e48683
FC
194 final Class<T> k, final int startIdx, final int endIdx, final boolean printFirst20) {
195 // verify bounds
196 if (!(endIdx > startIdx && startIdx >= 0 && endIdx <= 31)) {
197 TraceDebug.debug("Event request indexes out of bounds");
198 return null;
199 }
200
201 final int DEFAULT_CHUNK = 1;
202
203 // time range
204 final TmfTimeRange trange = new TmfTimeRange(new LttngTimestamp(
205 requestIntervals_T1[startIdx]), new LttngTimestamp(
206 requestIntervals_T1[endIdx]));
207
208 // request
209 validSequence = true;
0c32e4c5 210 final TmfEventRequest request = new TmfEventRequest(k, trange, TmfDataRequest.ALL_DATA, DEFAULT_CHUNK) {
25e48683
FC
211
212 @Override
0c32e4c5 213 public void handleData(final ITmfEvent event) {
25e48683
FC
214 if (event == null) {
215 System.out
216 .println("Syntheric Event Received is null, after event: "
217 + feventCount);
218 return;
219 }
220
221 // Listen to only one variant of synthetic event to keep
222 // track of
0c32e4c5
AM
223 if (event instanceof LttngSyntheticEvent) {
224 if (((LttngSyntheticEvent) event).getSynType() != SequenceInd.BEFORE) {
25e48683 225 return;
0c32e4c5
AM
226 }
227 }
25e48683
FC
228
229 // Validating the orders of the first 20 events
230 if (printFirst20 && feventCount < 20) {
231 final long timevalue = event.getTimestamp().getValue();
232 if (timevalue != expectedEvents_T1[feventCount]) {
233 validSequence = false;
234 System.out.println("Expected Event: "
235 + expectedEvents_T1[feventCount] + " actual: "
236 + event.getTimestamp().getValue());
237 }
238 }
239
240 // increment count
241 incrementCount();
242 }
243
244 /**
245 * possibly increased by multiple request threads
246 */
247 private synchronized void incrementCount() {
248 feventCount++;
249 }
250
251 @Override
252 public void handleCompleted() {
253 // if (isCancelled() || isFailed()) {
254 // // No notification to end request handlers
255 // } else {
256 // // notify the associated end request handlers
257 // requestCompleted();
258 // }
259
260 // System.out.println("handleCompleted(request:" + startIdx + ") Number of events processed: " + feventCount);
261 }
262
263 };
264 return request;
265 }
266
267 /**
268 * @param <T>
269 * @param k
270 * @param startIdx
271 * , > 0 and between 0 - 31
272 * @param endIdx
273 * , > startIdx and between 0 - 31
274 * @param printFirst20
275 * , print the first expected events vs actual events
276 * @return
277 */
0c32e4c5 278 protected <T extends LttngEvent> TmfEventRequest prepareEventRequest2(
25e48683
FC
279 final Class<T> k, final int startIdx, final int endIdx, final boolean printFirst20) {
280 // verify bounds
281 if (!(endIdx > startIdx && startIdx >= 0 && endIdx <= 31)) {
282 TraceDebug.debug("Event request indexes out of bounds");
283 return null;
284 }
285
286 final int DEFAULT_CHUNK = 1;
287
288 // time range
289 final TmfTimeRange trange = new TmfTimeRange(new LttngTimestamp(
290 requestIntervals_T1[startIdx]), new LttngTimestamp(
291 requestIntervals_T1[endIdx]));
292
293 // request
294 validSequence = true;
0c32e4c5 295 final TmfEventRequest request = new TmfEventRequest(k, trange, TmfDataRequest.ALL_DATA, DEFAULT_CHUNK) {
25e48683
FC
296
297 @Override
0c32e4c5 298 public void handleData(final ITmfEvent event) {
25e48683
FC
299 if (event == null) {
300 System.out
301 .println("Syntheric Event Received is null, after event: "
302 + feventCount);
303 return;
304 }
305
306 // Listen to only one variant of synthetic event to keep
307 // track of
0c32e4c5
AM
308 if (event instanceof LttngSyntheticEvent) {
309 if (((LttngSyntheticEvent) event).getSynType() != SequenceInd.BEFORE) {
25e48683 310 return;
0c32e4c5
AM
311 }
312 }
25e48683
FC
313
314 // Validating the orders of the first 20 events
315 if (printFirst20 && feventCount < 20) {
316 final long timevalue = event.getTimestamp().getValue();
317 if (timevalue != expectedEvents_T1[feventCount]) {
318 validSequence = false;
319 System.out.println("Expected Event: "
320 + expectedEvents_T1[feventCount] + " actual: "
321 + event.getTimestamp().getValue());
0c32e4c5 322 } else {
25e48683
FC
323 System.out.println("Synthetic Event: " + feventCount
324 + " matched expected time");
0c32e4c5 325 }
25e48683
FC
326 }
327
328 // increment count
329 incrementCount();
330 }
331
332 /**
333 * possibly increased by multiple request threads
334 */
335 private synchronized void incrementCount() {
336 feventCount++;
337 }
338
339 @Override
340 public void handleCompleted() {
341 // if (isCancelled() || isFailed()) {
342 // // No notification to end request handlers
343 // } else {
344 // // notify the associated end request handlers
345 // requestCompleted();
346 // }
347
348 // System.out.println("handleCompleted(request:" + startIdx + ") Number of events processed: " + feventCount);
349 }
350
351 };
352 return request;
353 }
354
355 /**
356 * Validation points
357 */
358 private void fillInExpectedEvents() {
359 expectedEvents_T1[0] = 13589759412128L;
360 expectedEvents_T1[1] = 13589759419903L;
361 expectedEvents_T1[2] = 13589759422785L;
362 expectedEvents_T1[3] = 13589759425598L;
363 expectedEvents_T1[4] = 13589759430979L;
364 expectedEvents_T1[5] = 13589759433694L;
365 expectedEvents_T1[6] = 13589759436212L;
366 expectedEvents_T1[7] = 13589759438797L;
367 expectedEvents_T1[8] = 13589759441253L;
368 expectedEvents_T1[9] = 13589759444795L;
369 expectedEvents_T1[10] = 13589759447800L;
370 expectedEvents_T1[11] = 13589759450836L;
371 expectedEvents_T1[12] = 13589759453835L;
372 expectedEvents_T1[13] = 13589759459351L;
373 expectedEvents_T1[14] = 13589759464411L;
374 expectedEvents_T1[15] = 13589759467021L;
375 expectedEvents_T1[16] = 13589759469668L;
376 expectedEvents_T1[17] = 13589759474938L;
377 expectedEvents_T1[18] = 13589759477536L;
378 expectedEvents_T1[19] = 13589759480485L;
379 }
380
381 /**
382 * Intervals for trace 1, separated %500 + last event
383 */
384 private void fillInRequestIntervals() {
385 requestIntervals_T1[0] = 13589759412128L; /* check point expected */
386 requestIntervals_T1[1] = 13589763490945L; /* between check points */
387 requestIntervals_T1[2] = 13589778265041L; /* check point expected */
388 requestIntervals_T1[3] = 13589783143445L; /* between check points */
389 requestIntervals_T1[4] = 13589786300104L; /* check point expected */
390 requestIntervals_T1[5] = 13589790722564L; /* between check points */
391 requestIntervals_T1[6] = 13589796139823L; /* check point expected */
392 requestIntervals_T1[7] = 13589800400562L; /* between check points */
393 requestIntervals_T1[8] = 13589801594374L; /* check point expected */
394 requestIntervals_T1[9] = 13589802750295L; /* between check points */
395 requestIntervals_T1[10] = 13589804071157L; /* check point expected */
396 requestIntervals_T1[11] = 13589810124488L; /* between check points */
397 requestIntervals_T1[12] = 13589822493183L; /* check point expected */
398 requestIntervals_T1[13] = 13589824131273L; /* between check points */
399 requestIntervals_T1[14] = 13589825398284L; /* check point expected */
400 requestIntervals_T1[15] = 13589826664185L; /* between check points */
401 requestIntervals_T1[16] = 13589827811998L; /* check point expected */
402 requestIntervals_T1[17] = 13589828915763L; /* between check points */
403 requestIntervals_T1[18] = 13589830074220L; /* check point expected */
404 requestIntervals_T1[19] = 13589831232050L; /* between check points */
405 requestIntervals_T1[20] = 13589832394049L; /* check point expected */
406 requestIntervals_T1[21] = 13589833852883L; /* between check points */
407 requestIntervals_T1[22] = 13589839626892L; /* check point expected */
408 requestIntervals_T1[23] = 13589849509798L; /* between check points */
409 requestIntervals_T1[24] = 13589850728538L; /* check point expected */
410 requestIntervals_T1[25] = 13589851889230L; /* between check points */
411 requestIntervals_T1[26] = 13589853294800L; /* check point expected */
412 requestIntervals_T1[27] = 13589859414998L; /* between check points */
413 requestIntervals_T1[28] = 13589878046089L; /* check point expected */
414 requestIntervals_T1[29] = 13589886468603L; /* between check points */
415 requestIntervals_T1[30] = 13589902256918L; /* check point expected */
416 requestIntervals_T1[31] = 13589906758692L; /* last event in T1 */
417 }
03c71d1e
ASL
418
419}
This page took 0.051538 seconds and 5 git commands to generate.