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