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