tmf: Bug 477508: Fix wrong event count and ranks in TmfXmlTraceStub
[deliverable/tracecompass.git] / tmf / org.eclipse.tracecompass.tmf.core.tests / src / org / eclipse / tracecompass / tmf / core / tests / trace / TmfExperimentTest.java
CommitLineData
d18dd09b 1/*******************************************************************************
60ae41e1 2 * Copyright (c) 2009, 2014 Ericsson
9b749023 3 *
d18dd09b
ASL
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
9b749023 8 *
d18dd09b
ASL
9 * Contributors:
10 * Francois Chouinard - Initial API and implementation
0316808c 11 * Francois Chouinard - Adjusted for new Trace Model
6e1886bc 12 * Alexandre Montplaisir - Port to JUnit4
ea271da6 13 * Patrick Tasse - Updated for rank in experiment location
d18dd09b
ASL
14 *******************************************************************************/
15
2bdf0193 16package org.eclipse.tracecompass.tmf.core.tests.trace;
d18dd09b 17
6e1886bc
AM
18import static org.junit.Assert.assertEquals;
19import static org.junit.Assert.assertFalse;
07ef7847 20import static org.junit.Assert.assertNotNull;
6e1886bc
AM
21import static org.junit.Assert.assertNull;
22import static org.junit.Assert.assertTrue;
23
d18dd09b
ASL
24import java.io.File;
25import java.io.IOException;
26import java.net.URISyntaxException;
27import java.net.URL;
28import java.util.Vector;
29
d18dd09b
ASL
30import org.eclipse.core.runtime.FileLocator;
31import org.eclipse.core.runtime.Path;
5c5fa260
AM
32import org.eclipse.tracecompass.internal.tmf.core.trace.experiment.TmfExperimentContext;
33import org.eclipse.tracecompass.internal.tmf.core.trace.experiment.TmfExperimentLocation;
2bdf0193
AM
34import org.eclipse.tracecompass.tmf.core.analysis.IAnalysisModule;
35import org.eclipse.tracecompass.tmf.core.event.ITmfEvent;
36import org.eclipse.tracecompass.tmf.core.exceptions.TmfTraceException;
37import org.eclipse.tracecompass.tmf.core.request.ITmfEventRequest;
2bdf0193 38import org.eclipse.tracecompass.tmf.core.request.ITmfEventRequest.ExecutionType;
5c5fa260 39import org.eclipse.tracecompass.tmf.core.request.TmfEventRequest;
2bdf0193
AM
40import org.eclipse.tracecompass.tmf.core.signal.TmfTraceOpenedSignal;
41import org.eclipse.tracecompass.tmf.core.tests.TmfCoreTestPlugin;
42import org.eclipse.tracecompass.tmf.core.tests.shared.TmfTestTrace;
43import org.eclipse.tracecompass.tmf.core.timestamp.TmfTimeRange;
44import org.eclipse.tracecompass.tmf.core.timestamp.TmfTimestamp;
45import org.eclipse.tracecompass.tmf.core.trace.ITmfContext;
46import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
b8585c7c 47import org.eclipse.tracecompass.tmf.core.trace.TmfTraceUtils;
5c5fa260 48import org.eclipse.tracecompass.tmf.core.trace.experiment.TmfExperiment;
2bdf0193
AM
49import org.eclipse.tracecompass.tmf.core.trace.location.ITmfLocation;
50import org.eclipse.tracecompass.tmf.core.trace.location.TmfLongLocation;
51import org.eclipse.tracecompass.tmf.tests.stubs.analysis.TestExperimentAnalysis;
52import org.eclipse.tracecompass.tmf.tests.stubs.trace.TmfExperimentStub;
53import org.eclipse.tracecompass.tmf.tests.stubs.trace.TmfTraceStub;
6e1886bc
AM
54import org.junit.Before;
55import org.junit.Test;
d18dd09b
ASL
56
57/**
0316808c 58 * Test suite for the TmfExperiment class (single trace).
d18dd09b 59 */
cad06250 60@SuppressWarnings("javadoc")
6e1886bc 61public class TmfExperimentTest {
d18dd09b 62
0316808c
FC
63 // ------------------------------------------------------------------------
64 // Attributes
65 // ------------------------------------------------------------------------
66
d18dd09b
ASL
67 private static final String EXPERIMENT = "MyExperiment";
68 private static int NB_EVENTS = 10000;
0316808c 69 private static int BLOCK_SIZE = 1000;
d18dd09b 70
6e1886bc
AM
71 private static final double DELTA = 1e-15;
72
6256d8ad
AM
73 private ITmfTrace[] fTestTraces;
74 private TmfExperimentStub fExperiment;
d18dd09b
ASL
75
76 private static byte SCALE = (byte) -3;
77
78 // ------------------------------------------------------------------------
79 // Housekeeping
80 // ------------------------------------------------------------------------
81
6256d8ad 82 private synchronized ITmfTrace[] setupTrace(final String path) {
9e0640dc
FC
83 if (fTestTraces == null) {
84 fTestTraces = new ITmfTrace[1];
25e48683
FC
85 try {
86 final URL location = FileLocator.find(TmfCoreTestPlugin.getDefault().getBundle(), new Path(path), null);
87 final File test = new File(FileLocator.toFileURL(location).toURI());
ab186fbb 88 final TmfTraceStub trace = new TmfTraceStub(test.getPath(), 0, true, null);
9e0640dc 89 fTestTraces[0] = trace;
b4f71e4a
FC
90 } catch (final TmfTraceException e) {
91 e.printStackTrace();
25e48683
FC
92 } catch (final URISyntaxException e) {
93 e.printStackTrace();
94 } catch (final IOException e) {
95 e.printStackTrace();
96 }
97 }
9e0640dc 98 return fTestTraces;
d18dd09b
ASL
99 }
100
9e0640dc 101 private synchronized void setupExperiment() {
20658947 102 if (fExperiment == null) {
6256d8ad 103 fExperiment = new TmfExperimentStub(EXPERIMENT, fTestTraces, BLOCK_SIZE);
9e0640dc 104 fExperiment.getIndexer().buildIndex(0, TmfTimeRange.ETERNITY, true);
20658947 105 }
d18dd09b
ASL
106 }
107
6e1886bc
AM
108 @Before
109 public void setUp() {
9c4d52ee 110 setupTrace(TmfTestTrace.A_TEST_10K.getFullPath());
25e48683
FC
111 setupExperiment();
112 }
d18dd09b 113
d18dd09b
ASL
114 // ------------------------------------------------------------------------
115 // Constructor
116 // ------------------------------------------------------------------------
117
6e1886bc 118 @Test
9e0640dc 119 public void testSimpleTmfExperimentConstructor() {
4178260e
AM
120 TmfExperiment experiment = new TmfExperiment(ITmfEvent.class, EXPERIMENT,
121 fTestTraces, TmfExperiment.DEFAULT_INDEX_PAGE_SIZE, null);
9e0640dc
FC
122 assertEquals("GetId", EXPERIMENT, experiment.getName());
123 assertEquals("GetCacheSize", TmfExperiment.DEFAULT_INDEX_PAGE_SIZE, experiment.getCacheSize());
124 experiment.dispose();
125
4178260e
AM
126 experiment = new TmfExperiment(ITmfEvent.class, EXPERIMENT, null,
127 TmfExperiment.DEFAULT_INDEX_PAGE_SIZE, null);
9e0640dc
FC
128 experiment.dispose();
129 }
130
6e1886bc 131 @Test
9e0640dc 132 public void testNormalTmfExperimentConstructor() {
25e48683 133 assertEquals("GetId", EXPERIMENT, fExperiment.getName());
d18dd09b
ASL
134 assertEquals("GetNbEvents", NB_EVENTS, fExperiment.getNbEvents());
135
07671572
FC
136 final long nbExperimentEvents = fExperiment.getNbEvents();
137 assertEquals("GetNbEvents", NB_EVENTS, nbExperimentEvents);
138
fa62dc1d 139 final long nbTraceEvents = fExperiment.getTraces().get(0).getNbEvents();
82e04272
FC
140 assertEquals("GetNbEvents", NB_EVENTS, nbTraceEvents);
141
25e48683 142 final TmfTimeRange timeRange = fExperiment.getTimeRange();
d18dd09b
ASL
143 assertEquals("getStartTime", 1, timeRange.getStartTime().getValue());
144 assertEquals("getEndTime", NB_EVENTS, timeRange.getEndTime().getValue());
25e48683 145 }
d18dd09b 146
b3dd2736
GB
147 // ------------------------------------------------------------------------
148 // Experiment setup
149 // ------------------------------------------------------------------------
150
151 @Test
152 public void testExperimentInitialization() {
153 /*
154 * Calling default constructor, then init should be equivalent to
155 * calling the full constructor
156 */
157
4178260e 158 TmfExperimentStub experiment = new TmfExperimentStub(EXPERIMENT, fTestTraces, 5000);
b3dd2736
GB
159 experiment.getIndexer().buildIndex(0, TmfTimeRange.ETERNITY, true);
160
161 assertEquals("GetId", EXPERIMENT, fExperiment.getName());
162 assertEquals("GetNbEvents", NB_EVENTS, fExperiment.getNbEvents());
163
164 final long nbExperimentEvents = fExperiment.getNbEvents();
165 assertEquals("GetNbEvents", NB_EVENTS, nbExperimentEvents);
166
fa62dc1d 167 final long nbTraceEvents = fExperiment.getTraces().get(0).getNbEvents();
b3dd2736
GB
168 assertEquals("GetNbEvents", NB_EVENTS, nbTraceEvents);
169
170 final TmfTimeRange timeRange = fExperiment.getTimeRange();
171 assertEquals("getStartTime", 1, timeRange.getStartTime().getValue());
172 assertEquals("getEndTime", NB_EVENTS, timeRange.getEndTime().getValue());
173 }
174
9e0640dc
FC
175 // ------------------------------------------------------------------------
176 // getTimestamp
177 // ------------------------------------------------------------------------
178
6e1886bc 179 @Test
54a7a54c 180 public void testGetTimestamp() {
17324c9a
FC
181 assertEquals("getTimestamp", new TmfTimestamp( 1, (byte) -3), fExperiment.getTimestamp( 0));
182 assertEquals("getTimestamp", new TmfTimestamp( 2, (byte) -3), fExperiment.getTimestamp( 1));
183 assertEquals("getTimestamp", new TmfTimestamp( 11, (byte) -3), fExperiment.getTimestamp( 10));
184 assertEquals("getTimestamp", new TmfTimestamp( 101, (byte) -3), fExperiment.getTimestamp( 100));
185 assertEquals("getTimestamp", new TmfTimestamp( 1001, (byte) -3), fExperiment.getTimestamp(1000));
186 assertEquals("getTimestamp", new TmfTimestamp( 2001, (byte) -3), fExperiment.getTimestamp(2000));
187 assertEquals("getTimestamp", new TmfTimestamp( 2501, (byte) -3), fExperiment.getTimestamp(2500));
188 assertEquals("getTimestamp", new TmfTimestamp(10000, (byte) -3), fExperiment.getTimestamp(9999));
9e0640dc
FC
189 assertNull("getTimestamp", fExperiment.getTimestamp(10000));
190 }
191
a51b2b9f 192 // ------------------------------------------------------------------------
8a6ff07f 193 // State system, statistics and modules methods
a51b2b9f
AM
194 // ------------------------------------------------------------------------
195
6e1886bc 196 @Test
8a6ff07f 197 public void testGetAnalysisModules() {
1d83ed07
AM
198 TmfExperiment experiment = fExperiment;
199 assertNotNull(experiment);
200
8a6ff07f 201 /* There should not be any modules at this point */
1d83ed07 202 Iterable<IAnalysisModule> modules = experiment.getAnalysisModules();
ff3f02c8 203 assertFalse(modules.iterator().hasNext());
6a6adab9
GB
204
205 /* Open the experiment, the modules should be populated */
1d83ed07
AM
206 experiment.traceOpened(new TmfTraceOpenedSignal(this, experiment, null));
207 modules = experiment.getAnalysisModules();
208 Iterable<TestExperimentAnalysis> testModules = TmfTraceUtils.getAnalysisModulesOfClass(experiment, TestExperimentAnalysis.class);
6a6adab9
GB
209 assertTrue(modules.iterator().hasNext());
210 assertTrue(testModules.iterator().hasNext());
a51b2b9f
AM
211 }
212
9e0640dc
FC
213 // ------------------------------------------------------------------------
214 // seekEvent by location
215 // ------------------------------------------------------------------------
216
6e1886bc 217 @Test
54a7a54c 218 public void testSeekBadLocation() {
cb8c854e 219 ITmfContext context = fExperiment.seekEvent(new TmfLongLocation(0L));
9e0640dc
FC
220 assertNull("seekEvent", context);
221 }
222
6e1886bc 223 @Test
54a7a54c 224 public void testSeekNoTrace() {
4178260e
AM
225 TmfExperiment experiment = new TmfExperiment(ITmfEvent.class, EXPERIMENT,
226 null, TmfExperiment.DEFAULT_INDEX_PAGE_SIZE, null);
9e0640dc 227 ITmfContext context = experiment.seekEvent((TmfExperimentLocation) null);
fa62dc1d 228 validateContextRanks(context);
9e0640dc
FC
229 experiment.dispose();
230 }
231
232 // ------------------------------------------------------------------------
233 // seekEvent on ratio
234 // ------------------------------------------------------------------------
235
6e1886bc 236 @Test
54a7a54c 237 public void testSeekEventOnRatio() {
9e0640dc
FC
238 // First event
239 ITmfContext context = fExperiment.seekEvent(0.0);
240 assertEquals("Context rank", 0, context.getRank());
241 ITmfEvent event = fExperiment.parseEvent(context);
242 assertEquals("Event timestamp", 1, event.getTimestamp().getValue());
243 assertEquals("Context rank", 0, context.getRank());
244
245 // Middle event
246 int midTrace = NB_EVENTS / 2;
247 context = fExperiment.seekEvent(0.5);
248 assertEquals("Context rank", midTrace, context.getRank());
249 event = fExperiment.parseEvent(context);
250 assertEquals("Event timestamp", midTrace + 1, event.getTimestamp().getValue());
251 assertEquals("Context rank", midTrace, context.getRank());
9b749023 252
9e0640dc
FC
253 // Last event
254 context = fExperiment.seekEvent(1.0);
255 assertEquals("Context rank", NB_EVENTS, context.getRank());
256 event = fExperiment.parseEvent(context);
257 assertNull("Event timestamp", event);
258 assertEquals("Context rank", NB_EVENTS, context.getRank());
9b749023 259
9e0640dc
FC
260 // Beyond last event
261 context = fExperiment.seekEvent(1.1);
262 assertEquals("Context rank", NB_EVENTS, context.getRank());
263 event = fExperiment.parseEvent(context);
264 assertNull("Event timestamp", event);
265 assertEquals("Context rank", NB_EVENTS, context.getRank());
9b749023 266
9e0640dc
FC
267 // Negative ratio
268 context = fExperiment.seekEvent(-0.5);
269 assertEquals("Context rank", 0, context.getRank());
270 event = fExperiment.parseEvent(context);
271 assertEquals("Event timestamp", 1, event.getTimestamp().getValue());
272 assertEquals("Context rank", 0, context.getRank());
273 }
274
6e1886bc 275 @Test
54a7a54c 276 public void testGetLocationRatio() {
9e0640dc
FC
277 // First event
278 ITmfContext context = fExperiment.seekEvent((ITmfLocation) null);
279 double ratio = fExperiment.getLocationRatio(context.getLocation());
ea271da6 280 assertEquals("getLocationRatio", 0.0, ratio, DELTA);
9e0640dc
FC
281
282 // Middle event
283 context = fExperiment.seekEvent(NB_EVENTS / 2);
284 ratio = fExperiment.getLocationRatio(context.getLocation());
ea271da6 285 assertEquals("getLocationRatio", (double) (NB_EVENTS / 2) / NB_EVENTS, ratio, DELTA);
9e0640dc
FC
286
287 // Last event
288 context = fExperiment.seekEvent(NB_EVENTS - 1);
289 ratio = fExperiment.getLocationRatio(context.getLocation());
ea271da6 290 assertEquals("getLocationRatio", (double) (NB_EVENTS - 1) / NB_EVENTS, ratio, DELTA);
9e0640dc
FC
291 }
292
17324c9a 293// @SuppressWarnings("rawtypes")
54a7a54c 294// public void testGetCurrentLocation() {
9e0640dc
FC
295// ITmfContext context = fExperiment.seekEvent((ITmfLocation) null);
296// ITmfLocation location = fExperiment.getCurrentLocation();
297// assertEquals("getCurrentLocation", location, context.getLocation());
298// }
299
d18dd09b 300 // ------------------------------------------------------------------------
0316808c 301 // seekEvent on rank
d18dd09b
ASL
302 // ------------------------------------------------------------------------
303
6e1886bc 304 @Test
54a7a54c 305 public void testSeekRankOnCacheBoundary() {
0316808c 306 long cacheSize = fExperiment.getCacheSize();
9b635e61 307
0316808c
FC
308 // On lower bound, returns the first event (TS = 1)
309 ITmfContext context = fExperiment.seekEvent(0);
310 assertEquals("Context rank", 0, context.getRank());
25e48683 311
c32744d6 312 ITmfEvent event = fExperiment.getNext(context);
d18dd09b 313 assertEquals("Event timestamp", 1, event.getTimestamp().getValue());
0316808c 314 assertEquals("Context rank", 1, context.getRank());
25e48683 315
0316808c
FC
316 // Position trace at event rank [cacheSize]
317 context = fExperiment.seekEvent(cacheSize);
318 assertEquals("Context rank", cacheSize, context.getRank());
25e48683 319
c32744d6 320 event = fExperiment.getNext(context);
0316808c
FC
321 assertEquals("Event timestamp", cacheSize + 1, event.getTimestamp().getValue());
322 assertEquals("Context rank", cacheSize + 1, context.getRank());
d18dd09b 323
0316808c
FC
324 // Position trace at event rank [4 * cacheSize]
325 context = fExperiment.seekEvent(4 * cacheSize);
326 assertEquals("Context rank", 4 * cacheSize, context.getRank());
25e48683 327
c32744d6 328 event = fExperiment.getNext(context);
0316808c
FC
329 assertEquals("Event timestamp", 4 * cacheSize + 1, event.getTimestamp().getValue());
330 assertEquals("Context rank", 4 * cacheSize + 1, context.getRank());
d18dd09b
ASL
331 }
332
6e1886bc 333 @Test
54a7a54c 334 public void testSeekRankNotOnCacheBoundary() {
0316808c 335 long cacheSize = fExperiment.getCacheSize();
25e48683 336
0316808c
FC
337 // Position trace at event rank 9
338 ITmfContext context = fExperiment.seekEvent(9);
339 assertEquals("Context rank", 9, context.getRank());
25e48683 340
c32744d6 341 ITmfEvent event = fExperiment.getNext(context);
d18dd09b 342 assertEquals("Event timestamp", 10, event.getTimestamp().getValue());
0316808c 343 assertEquals("Context rank", 10, context.getRank());
d18dd09b 344
0316808c
FC
345 // Position trace at event rank [cacheSize - 1]
346 context = fExperiment.seekEvent(cacheSize - 1);
347 assertEquals("Context rank", cacheSize - 1, context.getRank());
25e48683 348
c32744d6 349 event = fExperiment.getNext(context);
0316808c
FC
350 assertEquals("Event timestamp", cacheSize, event.getTimestamp().getValue());
351 assertEquals("Context rank", cacheSize, context.getRank());
d18dd09b 352
0316808c
FC
353 // Position trace at event rank [cacheSize + 1]
354 context = fExperiment.seekEvent(cacheSize + 1);
355 assertEquals("Context rank", cacheSize + 1, context.getRank());
25e48683 356
c32744d6 357 event = fExperiment.getNext(context);
0316808c
FC
358 assertEquals("Event timestamp", cacheSize + 2, event.getTimestamp().getValue());
359 assertEquals("Context rank", cacheSize + 2, context.getRank());
d18dd09b 360
25e48683 361 // Position trace at event rank 4500
0316808c
FC
362 context = fExperiment.seekEvent(4500);
363 assertEquals("Context rank", 4500, context.getRank());
25e48683 364
c32744d6 365 event = fExperiment.getNext(context);
d18dd09b 366 assertEquals("Event timestamp", 4501, event.getTimestamp().getValue());
0316808c 367 assertEquals("Context rank", 4501, context.getRank());
d18dd09b
ASL
368 }
369
6e1886bc 370 @Test
54a7a54c 371 public void testSeekRankOutOfScope() {
25e48683 372 // Position trace at beginning
0316808c 373 ITmfContext context = fExperiment.seekEvent(-1);
9b635e61 374 assertEquals("Event rank", 0, context.getRank());
25e48683 375
c32744d6 376 ITmfEvent event = fExperiment.getNext(context);
d18dd09b 377 assertEquals("Event timestamp", 1, event.getTimestamp().getValue());
0316808c 378 assertEquals("Context rank", 1, context.getRank());
d18dd09b 379
25e48683 380 // Position trace at event passed the end
0316808c
FC
381 context = fExperiment.seekEvent(NB_EVENTS);
382 assertEquals("Context rank", NB_EVENTS, context.getRank());
383
c32744d6 384 event = fExperiment.getNext(context);
0316808c
FC
385 assertNull("Event", event);
386 assertEquals("Context rank", NB_EVENTS, context.getRank());
d18dd09b
ASL
387 }
388
389 // ------------------------------------------------------------------------
390 // seekEvent on timestamp
391 // ------------------------------------------------------------------------
392
6e1886bc 393 @Test
54a7a54c 394 public void testSeekTimestampOnCacheBoundary() {
0316808c 395 long cacheSize = fExperiment.getCacheSize();
25e48683 396
0316808c 397 // Position trace at event rank 0
065cc19b 398 ITmfContext context = fExperiment.seekEvent(new TmfTimestamp(1, SCALE));
0316808c 399 assertEquals("Context rank", 0, context.getRank());
25e48683 400
c32744d6 401 ITmfEvent event = fExperiment.getNext(context);
d18dd09b 402 assertEquals("Event timestamp", 1, event.getTimestamp().getValue());
0316808c 403 assertEquals("Context rank", 1, context.getRank());
25e48683 404
0316808c 405 // Position trace at event rank [cacheSize]
065cc19b 406 context = fExperiment.seekEvent(new TmfTimestamp(cacheSize + 1, SCALE));
0316808c 407 assertEquals("Event rank", cacheSize, context.getRank());
25e48683 408
c32744d6 409 event = fExperiment.getNext(context);
0316808c
FC
410 assertEquals("Event timestamp", cacheSize + 1, event.getTimestamp().getValue());
411 assertEquals("Context rank", cacheSize + 1, context.getRank());
d18dd09b 412
0316808c 413 // Position trace at event rank [4 * cacheSize]
065cc19b 414 context = fExperiment.seekEvent(new TmfTimestamp(4 * cacheSize + 1, SCALE));
0316808c 415 assertEquals("Context rank", 4 * cacheSize, context.getRank());
25e48683 416
c32744d6 417 event = fExperiment.getNext(context);
0316808c
FC
418 assertEquals("Event timestamp", 4 * cacheSize + 1, event.getTimestamp().getValue());
419 assertEquals("Context rank", 4 * cacheSize + 1, context.getRank());
d18dd09b
ASL
420 }
421
6e1886bc 422 @Test
54a7a54c 423 public void testSeekTimestampNotOnCacheBoundary() {
0316808c 424 // Position trace at event rank 1 (TS = 2)
065cc19b 425 ITmfContext context = fExperiment.seekEvent(new TmfTimestamp(2, SCALE));
0316808c 426 assertEquals("Context rank", 1, context.getRank());
25e48683 427
c32744d6 428 ITmfEvent event = fExperiment.getNext(context);
d18dd09b 429 assertEquals("Event timestamp", 2, event.getTimestamp().getValue());
0316808c 430 assertEquals("Context rank", 2, context.getRank());
d18dd09b 431
0316808c 432 // Position trace at event rank 9 (TS = 10)
065cc19b 433 context = fExperiment.seekEvent(new TmfTimestamp(10, SCALE));
0316808c 434 assertEquals("Context rank", 9, context.getRank());
25e48683 435
c32744d6 436 event = fExperiment.getNext(context);
d18dd09b 437 assertEquals("Event timestamp", 10, event.getTimestamp().getValue());
0316808c 438 assertEquals("Context rank", 10, context.getRank());
d18dd09b 439
0316808c 440 // Position trace at event rank 999 (TS = 1000)
065cc19b 441 context = fExperiment.seekEvent(new TmfTimestamp(1000, SCALE));
0316808c 442 assertEquals("Context rank", 999, context.getRank());
25e48683 443
c32744d6 444 event = fExperiment.getNext(context);
d18dd09b 445 assertEquals("Event timestamp", 1000, event.getTimestamp().getValue());
0316808c 446 assertEquals("Context rank", 1000, context.getRank());
d18dd09b 447
0316808c 448 // Position trace at event rank 1001 (TS = 1002)
065cc19b 449 context = fExperiment.seekEvent(new TmfTimestamp(1002, SCALE));
0316808c 450 assertEquals("Context rank", 1001, context.getRank());
25e48683 451
c32744d6 452 event = fExperiment.getNext(context);
d18dd09b 453 assertEquals("Event timestamp", 1002, event.getTimestamp().getValue());
0316808c 454 assertEquals("Context rank", 1002, context.getRank());
d18dd09b 455
0316808c 456 // Position trace at event rank 4500 (TS = 4501)
065cc19b 457 context = fExperiment.seekEvent(new TmfTimestamp(4501, SCALE));
0316808c 458 assertEquals("Context rank", 4500, context.getRank());
25e48683 459
c32744d6 460 event = fExperiment.getNext(context);
d18dd09b 461 assertEquals("Event timestamp", 4501, event.getTimestamp().getValue());
0316808c 462 assertEquals("Context rank", 4501, context.getRank());
d18dd09b
ASL
463 }
464
6e1886bc 465 @Test
54a7a54c 466 public void testSeekTimestampOutOfScope() {
25e48683 467 // Position trace at beginning
065cc19b 468 ITmfContext context = fExperiment.seekEvent(new TmfTimestamp(-1, SCALE));
d18dd09b 469 assertEquals("Event rank", 0, context.getRank());
25e48683 470
c32744d6 471 ITmfEvent event = fExperiment.getNext(context);
d18dd09b
ASL
472 assertEquals("Event timestamp", 1, event.getTimestamp().getValue());
473 assertEquals("Event rank", 1, context.getRank());
474
25e48683 475 // Position trace at event passed the end
065cc19b 476 context = fExperiment.seekEvent(new TmfTimestamp(NB_EVENTS + 1, SCALE));
c32744d6 477 event = fExperiment.getNext(context);
0316808c 478 assertNull("Event location", event);
9b635e61 479 assertEquals("Event rank", ITmfContext.UNKNOWN_RANK, context.getRank());
d18dd09b
ASL
480 }
481
482 // ------------------------------------------------------------------------
0316808c 483 // seekEvent by location (context rank is undefined)
d18dd09b
ASL
484 // ------------------------------------------------------------------------
485
6e1886bc 486 @Test
54a7a54c 487 public void testSeekLocationOnCacheBoundary() {
0316808c 488 long cacheSize = fExperiment.getCacheSize();
d18dd09b 489
0316808c
FC
490 // Position trace at event rank 0
491 ITmfContext tmpContext = fExperiment.seekEvent(0);
492 ITmfContext context = fExperiment.seekEvent(tmpContext.getLocation());
25e48683 493
c32744d6 494 ITmfEvent event = fExperiment.getNext(context);
d18dd09b 495 assertEquals("Event timestamp", 1, event.getTimestamp().getValue());
25e48683 496
c32744d6 497 event = fExperiment.getNext(context);
0316808c 498 assertEquals("Event timestamp", 2, event.getTimestamp().getValue());
d18dd09b 499
0316808c
FC
500 // Position trace at event rank 'cacheSize'
501 tmpContext = fExperiment.seekEvent(cacheSize);
502 context = fExperiment.seekEvent(tmpContext.getLocation());
25e48683 503
c32744d6 504 event = fExperiment.getNext(context);
0316808c 505 assertEquals("Event timestamp", cacheSize + 1, event.getTimestamp().getValue());
25e48683 506
c32744d6 507 event = fExperiment.getNext(context);
0316808c 508 assertEquals("Event timestamp", cacheSize + 2, event.getTimestamp().getValue());
d18dd09b 509
0316808c
FC
510 // Position trace at event rank 4 * 'cacheSize'
511 tmpContext = fExperiment.seekEvent(4 * cacheSize);
512 context = fExperiment.seekEvent(tmpContext.getLocation());
25e48683 513
c32744d6 514 event = fExperiment.getNext(context);
0316808c 515 assertEquals("Event timestamp", 4 * cacheSize + 1, event.getTimestamp().getValue());
25e48683 516
c32744d6 517 event = fExperiment.getNext(context);
0316808c 518 assertEquals("Event timestamp", 4 * cacheSize + 2, event.getTimestamp().getValue());
d18dd09b
ASL
519 }
520
6e1886bc 521 @Test
54a7a54c 522 public void testSeekLocationNotOnCacheBoundary() {
0316808c 523 long cacheSize = fExperiment.getCacheSize();
25e48683 524
0316808c
FC
525 // Position trace at event 'cacheSize' - 1
526 ITmfContext tmpContext = fExperiment.seekEvent(cacheSize - 1);
527 ITmfContext context = fExperiment.seekEvent(tmpContext.getLocation());
d18dd09b 528
c32744d6 529 ITmfEvent event = fExperiment.getNext(context);
0316808c 530 assertEquals("Event timestamp", cacheSize, event.getTimestamp().getValue());
25e48683 531
c32744d6 532 event = fExperiment.getNext(context);
0316808c 533 assertEquals("Event timestamp", cacheSize + 1, event.getTimestamp().getValue());
d18dd09b 534
0316808c
FC
535 // Position trace at event rank 2 * 'cacheSize' - 1
536 tmpContext = fExperiment.seekEvent(2 * cacheSize - 1);
537 context = fExperiment.seekEvent(tmpContext.getLocation());
538 context = fExperiment.seekEvent(2 * cacheSize - 1);
25e48683 539
c32744d6 540 event = fExperiment.getNext(context);
0316808c 541 assertEquals("Event timestamp", 2 * cacheSize, event.getTimestamp().getValue());
25e48683 542
c32744d6 543 event = fExperiment.getNext(context);
0316808c 544 assertEquals("Event timestamp", 2 * cacheSize + 1, event.getTimestamp().getValue());
d18dd09b 545
25e48683 546 // Position trace at event rank 4500
0316808c
FC
547 tmpContext = fExperiment.seekEvent(4500);
548 context = fExperiment.seekEvent(tmpContext.getLocation());
25e48683 549
c32744d6 550 event = fExperiment.getNext(context);
d18dd09b 551 assertEquals("Event timestamp", 4501, event.getTimestamp().getValue());
25e48683 552
c32744d6 553 event = fExperiment.getNext(context);
0316808c 554 assertEquals("Event timestamp", 4502, event.getTimestamp().getValue());
d18dd09b
ASL
555 }
556
6e1886bc 557 @Test
54a7a54c 558 public void testSeekLocationOutOfScope() {
25e48683 559 // Position trace at beginning
1e1bef82 560 ITmfContext context = fExperiment.seekEvent((ITmfLocation) null);
25e48683 561
c32744d6 562 ITmfEvent event = fExperiment.getNext(context);
d18dd09b 563 assertEquals("Event timestamp", 1, event.getTimestamp().getValue());
d18dd09b 564 }
25e48683 565
9b635e61 566 // ------------------------------------------------------------------------
17324c9a 567 // getNext - updates the context
9b635e61
FC
568 // ------------------------------------------------------------------------
569
54a7a54c 570 private static void validateContextRanks(ITmfContext context) {
17324c9a
FC
571 assertTrue("Experiment context type", context instanceof TmfExperimentContext);
572 TmfExperimentContext ctx = (TmfExperimentContext) context;
9b635e61 573
07ef7847 574 int nbTraces = ctx.getNbTraces();
17324c9a
FC
575
576 // expRank = sum(trace ranks) - nbTraces + 1 (if lastTraceRead != NO_TRACE)
577 long expRank = -nbTraces + ((ctx.getLastTrace() != TmfExperimentContext.NO_TRACE) ? 1 : 0);
578 for (int i = 0; i < nbTraces; i++) {
07ef7847
AM
579 ITmfContext subContext = ctx.getContext(i);
580 assertNotNull(subContext);
581 long rank = subContext.getRank();
17324c9a
FC
582 if (rank == -1) {
583 expRank = -1;
584 break;
585 }
586 expRank += rank;
587 }
588 assertEquals("Experiment context rank", expRank, ctx.getRank());
589 }
590
6e1886bc 591 @Test
54a7a54c 592 public void testGetNextAfteSeekingOnTS_1() {
9b635e61 593
17324c9a
FC
594 final long INITIAL_TS = 1;
595 final int NB_READS = 20;
596
597 // On lower bound, returns the first event (ts = 1)
065cc19b 598 final ITmfContext context = fExperiment.seekEvent(new TmfTimestamp(INITIAL_TS, SCALE));
17324c9a
FC
599
600 validateContextRanks(context);
601
602 // Read NB_EVENTS
603 ITmfEvent event;
604 for (int i = 0; i < NB_READS; i++) {
c32744d6 605 event = fExperiment.getNext(context);
17324c9a
FC
606 assertEquals("Event timestamp", INITIAL_TS + i, event.getTimestamp().getValue());
607 assertEquals("Event rank", INITIAL_TS + i, context.getRank());
9b635e61 608 }
17324c9a
FC
609
610 // Make sure we stay positioned
611 event = fExperiment.parseEvent(context);
612 assertEquals("Event timestamp", INITIAL_TS + NB_READS, event.getTimestamp().getValue());
613 assertEquals("Event rank", INITIAL_TS + NB_READS - 1, context.getRank());
614
615 validateContextRanks(context);
9b635e61
FC
616 }
617
6e1886bc 618 @Test
54a7a54c 619 public void testGetNextAfteSeekingOnTS_2() {
17324c9a
FC
620 final long INITIAL_TS = 2;
621 final int NB_READS = 20;
622
623 // On lower bound, returns the first event (ts = 2)
065cc19b 624 final ITmfContext context = fExperiment.seekEvent(new TmfTimestamp(INITIAL_TS, SCALE));
17324c9a
FC
625
626 validateContextRanks(context);
627
628 // Read NB_EVENTS
629 ITmfEvent event;
630 for (int i = 0; i < NB_READS; i++) {
631 event = fExperiment.getNext(context);
632 assertEquals("Event timestamp", INITIAL_TS + i, event.getTimestamp().getValue());
633 assertEquals("Event rank", INITIAL_TS + i, context.getRank());
634 }
635
636 // Make sure we stay positioned
637 event = fExperiment.parseEvent(context);
638 assertEquals("Event timestamp", INITIAL_TS + NB_READS, event.getTimestamp().getValue());
639 assertEquals("Event rank", INITIAL_TS + NB_READS - 1, context.getRank());
640
641 validateContextRanks(context);
642 }
643
6e1886bc 644 @Test
54a7a54c 645 public void testGetNextAfteSeekingOnTS_3() {
17324c9a
FC
646
647 final long INITIAL_TS = 500;
648 final int NB_READS = 20;
649
650 // On lower bound, returns the first event (ts = 500)
065cc19b 651 final ITmfContext context = fExperiment.seekEvent(new TmfTimestamp(INITIAL_TS, SCALE));
17324c9a
FC
652
653 validateContextRanks(context);
654
655 // Read NB_EVENTS
656 ITmfEvent event;
657 for (int i = 0; i < NB_READS; i++) {
658 event = fExperiment.getNext(context);
659 assertEquals("Event timestamp", INITIAL_TS + i, event.getTimestamp().getValue());
660 assertEquals("Event rank", INITIAL_TS + i, context.getRank());
661 }
662
663 // Make sure we stay positioned
664 event = fExperiment.parseEvent(context);
665 assertEquals("Event timestamp", INITIAL_TS + NB_READS, event.getTimestamp().getValue());
666 assertEquals("Event rank", INITIAL_TS + NB_READS - 1, context.getRank());
667
668 validateContextRanks(context);
669 }
670
6e1886bc 671 @Test
54a7a54c 672 public void testGetNextAfterSeekingOnRank_1() {
17324c9a
FC
673 final long INITIAL_RANK = 0L;
674 final int NB_READS = 20;
675
676 // On lower bound, returns the first event (rank = 0)
677 final ITmfContext context = fExperiment.seekEvent(INITIAL_RANK);
678
679 validateContextRanks(context);
680
681 // Read NB_EVENTS
682 ITmfEvent event;
683 for (int i = 0; i < NB_READS; i++) {
684 event = fExperiment.getNext(context);
685 assertEquals("Event timestamp", INITIAL_RANK + i + 1, event.getTimestamp().getValue());
686 assertEquals("Event rank", INITIAL_RANK + i + 1, context.getRank());
687 }
688
689 // Make sure we stay positioned
690 event = fExperiment.parseEvent(context);
691 assertEquals("Event timestamp", INITIAL_RANK + NB_READS + 1, event.getTimestamp().getValue());
692 assertEquals("Event rank", INITIAL_RANK + NB_READS, context.getRank());
693
694 validateContextRanks(context);
695 }
696
6e1886bc 697 @Test
54a7a54c 698 public void testGetNextAfterSeekingOnRank_2() {
17324c9a
FC
699 final long INITIAL_RANK = 1L;
700 final int NB_READS = 20;
701
702 // On lower bound, returns the first event (rank = 0)
703 final ITmfContext context = fExperiment.seekEvent(INITIAL_RANK);
704
705 validateContextRanks(context);
706
707 // Read NB_EVENTS
708 ITmfEvent event;
709 for (int i = 0; i < NB_READS; i++) {
710 event = fExperiment.getNext(context);
711 assertEquals("Event timestamp", INITIAL_RANK + i + 1, event.getTimestamp().getValue());
712 assertEquals("Event rank", INITIAL_RANK + i + 1, context.getRank());
713 }
714
715 // Make sure we stay positioned
716 event = fExperiment.parseEvent(context);
717 assertEquals("Event timestamp", INITIAL_RANK + NB_READS + 1, event.getTimestamp().getValue());
718 assertEquals("Event rank", INITIAL_RANK + NB_READS, context.getRank());
719
720 validateContextRanks(context);
721 }
722
6e1886bc 723 @Test
54a7a54c 724 public void testGetNextAfterSeekingOnRank_3() {
17324c9a
FC
725 final long INITIAL_RANK = 500L;
726 final int NB_READS = 20;
727
728 // On lower bound, returns the first event (rank = 0)
729 final ITmfContext context = fExperiment.seekEvent(INITIAL_RANK);
730
731 validateContextRanks(context);
732
733 // Read NB_EVENTS
734 ITmfEvent event;
735 for (int i = 0; i < NB_READS; i++) {
736 event = fExperiment.getNext(context);
737 assertEquals("Event timestamp", INITIAL_RANK + i + 1, event.getTimestamp().getValue());
738 assertEquals("Event rank", INITIAL_RANK + i + 1, context.getRank());
739 }
740
741 // Make sure we stay positioned
742 event = fExperiment.parseEvent(context);
743 assertEquals("Event timestamp", INITIAL_RANK + NB_READS + 1, event.getTimestamp().getValue());
744 assertEquals("Event rank", INITIAL_RANK + NB_READS, context.getRank());
745
746 validateContextRanks(context);
747 }
748
6e1886bc 749 @Test
54a7a54c 750 public void testGetNextAfterSeekingOnLocation_1() {
1e1bef82 751 final ITmfLocation INITIAL_LOC = null;
17324c9a
FC
752 final long INITIAL_TS = 1;
753 final int NB_READS = 20;
754
755 // On lower bound, returns the first event (ts = 1)
756 final ITmfContext context = fExperiment.seekEvent(INITIAL_LOC);
757
758 validateContextRanks(context);
759
760 // Read NB_EVENTS
761 ITmfEvent event;
762 for (int i = 0; i < NB_READS; i++) {
763 event = fExperiment.getNext(context);
764 assertEquals("Event timestamp", INITIAL_TS + i, event.getTimestamp().getValue());
765 assertEquals("Event rank", INITIAL_TS + i, context.getRank());
766 }
767
768 // Make sure we stay positioned
769 event = fExperiment.parseEvent(context);
770 assertEquals("Event timestamp", INITIAL_TS + NB_READS, event.getTimestamp().getValue());
771 assertEquals("Event rank", INITIAL_TS + NB_READS - 1, context.getRank());
772
773 validateContextRanks(context);
774 }
775
6e1886bc 776 @Test
54a7a54c 777 public void testGetNextAfterSeekingOnLocation_2() {
1e1bef82 778 final ITmfLocation INITIAL_LOC = fExperiment.seekEvent(1L).getLocation();
17324c9a
FC
779 final long INITIAL_TS = 2;
780 final int NB_READS = 20;
781
782 // On lower bound, returns the first event (ts = 2)
783 final ITmfContext context = fExperiment.seekEvent(INITIAL_LOC);
784
785 validateContextRanks(context);
786
787 // Read NB_EVENTS
788 ITmfEvent event;
789 for (int i = 0; i < NB_READS; i++) {
790 event = fExperiment.getNext(context);
791 assertEquals("Event timestamp", INITIAL_TS + i, event.getTimestamp().getValue());
792 }
793
794 // Make sure we stay positioned
795 event = fExperiment.parseEvent(context);
796 assertEquals("Event timestamp", INITIAL_TS + NB_READS, event.getTimestamp().getValue());
797
798 validateContextRanks(context);
799 }
800
6e1886bc 801 @Test
54a7a54c 802 public void testGetNextAfterSeekingOnLocation_3() {
1e1bef82 803 final ITmfLocation INITIAL_LOC = fExperiment.seekEvent(500L).getLocation();
17324c9a
FC
804 final long INITIAL_TS = 501;
805 final int NB_READS = 20;
806
807 // On lower bound, returns the first event (ts = 501)
808 final ITmfContext context = fExperiment.seekEvent(INITIAL_LOC);
809
810 validateContextRanks(context);
811
812 // Read NB_EVENTS
813 ITmfEvent event;
814 for (int i = 0; i < NB_READS; i++) {
815 event = fExperiment.getNext(context);
816 assertEquals("Event timestamp", INITIAL_TS + i, event.getTimestamp().getValue());
817 }
818
819 // Make sure we stay positioned
820 event = fExperiment.parseEvent(context);
821 assertEquals("Event timestamp", INITIAL_TS + NB_READS, event.getTimestamp().getValue());
822
823 validateContextRanks(context);
824 }
825
6e1886bc 826 @Test
54a7a54c 827 public void testGetNextLocation() {
17324c9a
FC
828 ITmfContext context1 = fExperiment.seekEvent(0);
829 fExperiment.getNext(context1);
d62bb185 830 ITmfLocation location = context1.getLocation();
17324c9a
FC
831 ITmfEvent event1 = fExperiment.getNext(context1);
832 ITmfContext context2 = fExperiment.seekEvent(location);
833 ITmfEvent event2 = fExperiment.getNext(context2);
834 assertEquals("Event timestamp", event1.getTimestamp().getValue(), event2.getTimestamp().getValue());
835 }
836
6e1886bc 837 @Test
54a7a54c 838 public void testGetNextEndLocation() {
17324c9a
FC
839 ITmfContext context1 = fExperiment.seekEvent(fExperiment.getNbEvents() - 1);
840 fExperiment.getNext(context1);
d62bb185 841 ITmfLocation location = context1.getLocation();
17324c9a
FC
842 ITmfContext context2 = fExperiment.seekEvent(location);
843 ITmfEvent event = fExperiment.getNext(context2);
844 assertNull("Event", event);
845 }
54a7a54c 846
d18dd09b
ASL
847 // ------------------------------------------------------------------------
848 // processRequest
849 // ------------------------------------------------------------------------
850
6e1886bc 851 @Test
54a7a54c 852 public void testProcessRequestForNbEvents() throws InterruptedException {
d18dd09b 853 final int nbEvents = 1000;
ccf2bbb4 854 final Vector<ITmfEvent> requestedEvents = new Vector<>();
d18dd09b 855
25e48683 856 final TmfTimeRange range = new TmfTimeRange(TmfTimestamp.BIG_BANG, TmfTimestamp.BIG_CRUNCH);
7184fc40 857 final TmfEventRequest request = new TmfEventRequest(ITmfEvent.class,
672a642a 858 range, 0, nbEvents, ExecutionType.FOREGROUND) {
25e48683 859 @Override
6256d8ad 860 public void handleData(final ITmfEvent event) {
25e48683
FC
861 super.handleData(event);
862 requestedEvents.add(event);
863 }
d18dd09b
ASL
864 };
865 fExperiment.sendRequest(request);
866 request.waitForCompletion();
867
868 assertEquals("nbEvents", nbEvents, requestedEvents.size());
869 assertTrue("isCompleted", request.isCompleted());
870 assertFalse("isCancelled", request.isCancelled());
871
872 // Ensure that we have distinct events.
25e48683 873 // Don't go overboard: we are not validating the stub!
20658947 874 for (int i = 0; i < nbEvents; i++) {
d18dd09b 875 assertEquals("Distinct events", i+1, requestedEvents.get(i).getTimestamp().getValue());
20658947 876 }
d18dd09b 877 }
25e48683 878
6e1886bc 879 @Test
54a7a54c 880 public void testProcessRequestForAllEvents() throws InterruptedException {
2740e05c 881 final int nbEvents = ITmfEventRequest.ALL_DATA;
ccf2bbb4 882 final Vector<ITmfEvent> requestedEvents = new Vector<>();
25e48683 883 final long nbExpectedEvents = NB_EVENTS;
d18dd09b 884
25e48683 885 final TmfTimeRange range = new TmfTimeRange(TmfTimestamp.BIG_BANG, TmfTimestamp.BIG_CRUNCH);
7184fc40 886 final TmfEventRequest request = new TmfEventRequest(ITmfEvent.class,
672a642a 887 range, 0, nbEvents, ExecutionType.FOREGROUND) {
25e48683 888 @Override
6256d8ad 889 public void handleData(final ITmfEvent event) {
25e48683
FC
890 super.handleData(event);
891 requestedEvents.add(event);
892 }
d18dd09b
ASL
893 };
894 fExperiment.sendRequest(request);
895 request.waitForCompletion();
896
897 assertEquals("nbEvents", nbExpectedEvents, requestedEvents.size());
898 assertTrue("isCompleted", request.isCompleted());
899 assertFalse("isCancelled", request.isCancelled());
900
901 // Ensure that we have distinct events.
25e48683 902 // Don't go overboard: we are not validating the stub!
20658947 903 for (int i = 0; i < nbExpectedEvents; i++) {
d18dd09b 904 assertEquals("Distinct events", i+1, requestedEvents.get(i).getTimestamp().getValue());
20658947 905 }
d18dd09b 906 }
25e48683 907
d18dd09b
ASL
908 // ------------------------------------------------------------------------
909 // cancel
910 // ------------------------------------------------------------------------
911
6e1886bc 912 @Test
54a7a54c 913 public void testCancel() throws InterruptedException {
672a642a
AM
914 final int nbEvents = NB_EVENTS;
915 final int limit = BLOCK_SIZE;
ccf2bbb4 916 final Vector<ITmfEvent> requestedEvents = new Vector<>();
d18dd09b 917
25e48683 918 final TmfTimeRange range = new TmfTimeRange(TmfTimestamp.BIG_BANG, TmfTimestamp.BIG_CRUNCH);
7184fc40 919 final TmfEventRequest request = new TmfEventRequest(ITmfEvent.class,
672a642a 920 range, 0, nbEvents, ExecutionType.FOREGROUND) {
25e48683 921 int nbRead = 0;
672a642a 922
25e48683 923 @Override
6256d8ad 924 public void handleData(final ITmfEvent event) {
25e48683
FC
925 super.handleData(event);
926 requestedEvents.add(event);
672a642a 927 if (++nbRead == limit) {
25e48683 928 cancel();
20658947 929 }
25e48683 930 }
672a642a 931
cb866e08
FC
932 @Override
933 public void handleCancel() {
672a642a 934 if (requestedEvents.size() < limit) {
25e48683 935 System.out.println("aie");
20658947 936 }
cb866e08 937 }
d18dd09b
ASL
938 };
939 fExperiment.sendRequest(request);
940 request.waitForCompletion();
941
672a642a 942 assertEquals("nbEvents", limit, requestedEvents.size());
d18dd09b
ASL
943 assertTrue("isCompleted", request.isCompleted());
944 assertTrue("isCancelled", request.isCancelled());
945 }
25e48683 946
17324c9a 947}
This page took 0.328686 seconds and 5 git commands to generate.