1 package org
.eclipse
.linuxtools
.lttng
.core
.tests
;
6 import junit
.framework
.TestCase
;
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
.ITmfEvent
;
21 import org
.eclipse
.linuxtools
.tmf
.core
.event
.TmfTimeRange
;
22 import org
.eclipse
.linuxtools
.tmf
.core
.request
.TmfDataRequest
;
23 import org
.eclipse
.linuxtools
.tmf
.core
.request
.TmfEventRequest
;
24 import org
.eclipse
.linuxtools
.tmf
.core
.signal
.TmfExperimentSelectedSignal
;
25 import org
.eclipse
.linuxtools
.tmf
.core
.trace
.ITmfTrace
;
26 import org
.eclipse
.linuxtools
.tmf
.core
.trace
.TmfExperiment
;
27 import org
.osgi
.framework
.FrameworkUtil
;
29 @SuppressWarnings("nls")
30 public abstract class LttngTestPreparation
extends TestCase
{
31 // ========================================================================
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";
37 private static final Long CHECK_POINT_INTERVAL
= 1000L;
39 final Long
[] expectedEvents_T1
= new Long
[20];
40 final Long
[] requestIntervals_T1
= new Long
[32];
42 static LTTngTextTrace ftextStream_T1
= null;
43 private static LTTngTrace frealStream
= null;
45 private TmfExperiment fTestExperiment
= null;
46 protected volatile int feventCount
= 0;
47 protected boolean validSequence
= true;
49 public LttngTestPreparation() {
54 public LttngTestPreparation(final String name
) {
59 protected void init() {
60 fillInRequestIntervals();
61 fillInExpectedEvents();
68 protected TmfExperiment
prepareExperimentToTest() {
69 if (fTestExperiment
== null) {
70 final String expId
= "testExperiment";
71 final int nbTraces
= 1;
73 // Define traces in experiment
74 final ITmfTrace
[] traces
= new ITmfTrace
[nbTraces
];
75 final ITmfTrace trace
= prepareStreamToTest();
78 fTestExperiment
= new TmfExperiment(LttngEvent
.class, expId
, traces
, TmfExperiment
.DEFAULT_BLOCK_SIZE
);
80 // Set the current selected experiment as the test experiment
81 final TmfExperimentSelectedSignal signal
= new TmfExperimentSelectedSignal(
82 this, fTestExperiment
);
83 fTestExperiment
.experimentSelected(signal
);
86 return fTestExperiment
;
92 protected TmfExperiment
prepareTextExperimentToTest() {
93 if (fTestExperiment
== null) {
94 final String expId
= "testExperiment";
95 final int nbTraces
= 1;
97 // Define traces in experiment
98 final ITmfTrace
[] traces
= new ITmfTrace
[nbTraces
];
99 final ITmfTrace trace
= prepareTextStreamToTest();
102 // create experiment and associate traces
103 fTestExperiment
= new TmfExperiment(LttngEvent
.class, expId
, traces
);
105 // Set the current selected experiment as the test experiment
106 final TmfExperimentSelectedSignal signal
= new TmfExperimentSelectedSignal(
107 this, fTestExperiment
);
108 fTestExperiment
.experimentSelected(signal
);
112 return fTestExperiment
;
115 protected LTTngTrace
prepareStreamToTest() {
116 if (frealStream
== null) {
118 final URL location
= FileLocator
.find(FrameworkUtil
.getBundle(this.getClass()), new Path(ftracepath_T1
),
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
);
128 frealStream
.seekEvent(0L);
134 protected LTTngTextTrace
prepareTextStreamToTest() {
135 if (ftextStream_T1
== null) {
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
;
143 } catch (final Exception e
) {
144 System
.out
.println("ERROR : Could not open " + fTextTracepath_T1
);
145 ftextStream_T1
= null;
148 ftextStream_T1
.seekEvent(0);
151 return ftextStream_T1
;
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
);
163 // Lets wait for the request completion to analyse the results
164 LttngCoreProviderFactory
.getEventProvider(0)
165 .setWaitForRequest(waitForRequest
);
173 * , > 0 and between 0 - 31
175 * , > startIdx and between 0 - 31
178 protected <T
extends LttngEvent
> TmfEventRequest
prepareEventRequest(final Class
<T
> k
, final int startIdx
, final int endIdx
) {
179 return prepareEventRequest(k
, startIdx
, endIdx
, true);
186 * , > 0 and between 0 - 31
188 * , > startIdx and between 0 - 31
189 * @param printFirst20
190 * , print the first expected events vs actual events
193 protected <T
extends LttngEvent
> TmfEventRequest
prepareEventRequest(
194 final Class
<T
> k
, final int startIdx
, final int endIdx
, final boolean printFirst20
) {
196 if (!(endIdx
> startIdx
&& startIdx
>= 0 && endIdx
<= 31)) {
197 TraceDebug
.debug("Event request indexes out of bounds");
201 final int DEFAULT_CHUNK
= 1;
204 final TmfTimeRange trange
= new TmfTimeRange(new LttngTimestamp(
205 requestIntervals_T1
[startIdx
]), new LttngTimestamp(
206 requestIntervals_T1
[endIdx
]));
209 validSequence
= true;
210 final TmfEventRequest request
= new TmfEventRequest(k
, trange
, TmfDataRequest
.ALL_DATA
, DEFAULT_CHUNK
) {
213 public void handleData(final ITmfEvent event
) {
216 .println("Syntheric Event Received is null, after event: "
221 // Listen to only one variant of synthetic event to keep
223 if (event
instanceof LttngSyntheticEvent
) {
224 if (((LttngSyntheticEvent
) event
).getSynType() != SequenceInd
.BEFORE
) {
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());
245 * possibly increased by multiple request threads
247 private synchronized void incrementCount() {
252 public void handleCompleted() {
253 // if (isCancelled() || isFailed()) {
254 // // No notification to end request handlers
256 // // notify the associated end request handlers
257 // requestCompleted();
260 // System.out.println("handleCompleted(request:" + startIdx + ") Number of events processed: " + feventCount);
271 * , > 0 and between 0 - 31
273 * , > startIdx and between 0 - 31
274 * @param printFirst20
275 * , print the first expected events vs actual events
278 protected <T
extends LttngEvent
> TmfEventRequest
prepareEventRequest2(
279 final Class
<T
> k
, final int startIdx
, final int endIdx
, final boolean printFirst20
) {
281 if (!(endIdx
> startIdx
&& startIdx
>= 0 && endIdx
<= 31)) {
282 TraceDebug
.debug("Event request indexes out of bounds");
286 final int DEFAULT_CHUNK
= 1;
289 final TmfTimeRange trange
= new TmfTimeRange(new LttngTimestamp(
290 requestIntervals_T1
[startIdx
]), new LttngTimestamp(
291 requestIntervals_T1
[endIdx
]));
294 validSequence
= true;
295 final TmfEventRequest request
= new TmfEventRequest(k
, trange
, TmfDataRequest
.ALL_DATA
, DEFAULT_CHUNK
) {
298 public void handleData(final ITmfEvent event
) {
301 .println("Syntheric Event Received is null, after event: "
306 // Listen to only one variant of synthetic event to keep
308 if (event
instanceof LttngSyntheticEvent
) {
309 if (((LttngSyntheticEvent
) event
).getSynType() != SequenceInd
.BEFORE
) {
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());
323 System
.out
.println("Synthetic Event: " + feventCount
324 + " matched expected time");
333 * possibly increased by multiple request threads
335 private synchronized void incrementCount() {
340 public void handleCompleted() {
341 // if (isCancelled() || isFailed()) {
342 // // No notification to end request handlers
344 // // notify the associated end request handlers
345 // requestCompleted();
348 // System.out.println("handleCompleted(request:" + startIdx + ") Number of events processed: " + feventCount);
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;
382 * Intervals for trace 1, separated %500 + last event
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 */