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