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