TMF: Add support of experiment types to events editor
[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
b3dd2736
GB
142 // ------------------------------------------------------------------------
143 // Experiment setup
144 // ------------------------------------------------------------------------
145
146 @Test
147 public void testExperimentInitialization() {
148 /*
149 * Calling default constructor, then init should be equivalent to
150 * calling the full constructor
151 */
152
153 TmfExperimentStub experiment = new TmfExperimentStub();
154 experiment.initExperiment(ITmfEvent.class, EXPERIMENT, fTestTraces, 5000, null);
155 experiment.getIndexer().buildIndex(0, TmfTimeRange.ETERNITY, true);
156
157 assertEquals("GetId", EXPERIMENT, fExperiment.getName());
158 assertEquals("GetNbEvents", NB_EVENTS, fExperiment.getNbEvents());
159
160 final long nbExperimentEvents = fExperiment.getNbEvents();
161 assertEquals("GetNbEvents", NB_EVENTS, nbExperimentEvents);
162
163 final long nbTraceEvents = fExperiment.getTraces()[0].getNbEvents();
164 assertEquals("GetNbEvents", NB_EVENTS, nbTraceEvents);
165
166 final TmfTimeRange timeRange = fExperiment.getTimeRange();
167 assertEquals("getStartTime", 1, timeRange.getStartTime().getValue());
168 assertEquals("getEndTime", NB_EVENTS, timeRange.getEndTime().getValue());
169 }
170
9e0640dc
FC
171 // ------------------------------------------------------------------------
172 // getTimestamp
173 // ------------------------------------------------------------------------
174
6e1886bc 175 @Test
54a7a54c 176 public void testGetTimestamp() {
17324c9a
FC
177 assertEquals("getTimestamp", new TmfTimestamp( 1, (byte) -3), fExperiment.getTimestamp( 0));
178 assertEquals("getTimestamp", new TmfTimestamp( 2, (byte) -3), fExperiment.getTimestamp( 1));
179 assertEquals("getTimestamp", new TmfTimestamp( 11, (byte) -3), fExperiment.getTimestamp( 10));
180 assertEquals("getTimestamp", new TmfTimestamp( 101, (byte) -3), fExperiment.getTimestamp( 100));
181 assertEquals("getTimestamp", new TmfTimestamp( 1001, (byte) -3), fExperiment.getTimestamp(1000));
182 assertEquals("getTimestamp", new TmfTimestamp( 2001, (byte) -3), fExperiment.getTimestamp(2000));
183 assertEquals("getTimestamp", new TmfTimestamp( 2501, (byte) -3), fExperiment.getTimestamp(2500));
184 assertEquals("getTimestamp", new TmfTimestamp(10000, (byte) -3), fExperiment.getTimestamp(9999));
9e0640dc
FC
185 assertNull("getTimestamp", fExperiment.getTimestamp(10000));
186 }
187
188 // ------------------------------------------------------------------------
189 // Bookmarks file handling
190 // ------------------------------------------------------------------------
191
6e1886bc 192 @Test
54a7a54c 193 public void testBookmarks() {
9e0640dc 194 assertNull("GetBookmarksFile", fExperiment.getBookmarksFile());
9e0640dc
FC
195 IFile bookmarks = (IFile) fTestTraces[0].getResource();
196 fExperiment.setBookmarksFile(bookmarks);
197 assertEquals("GetBookmarksFile", bookmarks, fExperiment.getBookmarksFile());
198 }
199
a51b2b9f 200 // ------------------------------------------------------------------------
8a6ff07f 201 // State system, statistics and modules methods
a51b2b9f
AM
202 // ------------------------------------------------------------------------
203
6e1886bc 204 @Test
8a6ff07f
GB
205 public void testGetAnalysisModules() {
206 /* There should not be any modules at this point */
ff3f02c8
AM
207 Iterable<IAnalysisModule> modules = fExperiment.getAnalysisModules();
208 assertFalse(modules.iterator().hasNext());
a51b2b9f
AM
209 }
210
9e0640dc
FC
211 // ------------------------------------------------------------------------
212 // seekEvent by location
213 // ------------------------------------------------------------------------
214
6e1886bc 215 @Test
54a7a54c 216 public void testSeekBadLocation() {
cb8c854e 217 ITmfContext context = fExperiment.seekEvent(new TmfLongLocation(0L));
9e0640dc
FC
218 assertNull("seekEvent", context);
219 }
220
6e1886bc 221 @Test
54a7a54c 222 public void testSeekNoTrace() {
2771b032 223 TmfExperiment experiment = new TmfExperiment(ITmfEvent.class, EXPERIMENT, null);
9e0640dc
FC
224 ITmfContext context = experiment.seekEvent((TmfExperimentLocation) null);
225 assertNull("seekEvent", context);
226 experiment.dispose();
227 }
228
229 // ------------------------------------------------------------------------
230 // seekEvent on ratio
231 // ------------------------------------------------------------------------
232
6e1886bc 233 @Test
54a7a54c 234 public void testSeekEventOnRatio() {
9e0640dc
FC
235 // First event
236 ITmfContext context = fExperiment.seekEvent(0.0);
237 assertEquals("Context rank", 0, context.getRank());
238 ITmfEvent event = fExperiment.parseEvent(context);
239 assertEquals("Event timestamp", 1, event.getTimestamp().getValue());
240 assertEquals("Context rank", 0, context.getRank());
241
242 // Middle event
243 int midTrace = NB_EVENTS / 2;
244 context = fExperiment.seekEvent(0.5);
245 assertEquals("Context rank", midTrace, context.getRank());
246 event = fExperiment.parseEvent(context);
247 assertEquals("Event timestamp", midTrace + 1, event.getTimestamp().getValue());
248 assertEquals("Context rank", midTrace, context.getRank());
9b749023 249
9e0640dc
FC
250 // Last event
251 context = fExperiment.seekEvent(1.0);
252 assertEquals("Context rank", NB_EVENTS, context.getRank());
253 event = fExperiment.parseEvent(context);
254 assertNull("Event timestamp", event);
255 assertEquals("Context rank", NB_EVENTS, context.getRank());
9b749023 256
9e0640dc
FC
257 // Beyond last event
258 context = fExperiment.seekEvent(1.1);
259 assertEquals("Context rank", NB_EVENTS, context.getRank());
260 event = fExperiment.parseEvent(context);
261 assertNull("Event timestamp", event);
262 assertEquals("Context rank", NB_EVENTS, context.getRank());
9b749023 263
9e0640dc
FC
264 // Negative ratio
265 context = fExperiment.seekEvent(-0.5);
266 assertEquals("Context rank", 0, context.getRank());
267 event = fExperiment.parseEvent(context);
268 assertEquals("Event timestamp", 1, event.getTimestamp().getValue());
269 assertEquals("Context rank", 0, context.getRank());
270 }
271
6e1886bc 272 @Test
54a7a54c 273 public void testGetLocationRatio() {
9e0640dc
FC
274 // First event
275 ITmfContext context = fExperiment.seekEvent((ITmfLocation) null);
276 double ratio = fExperiment.getLocationRatio(context.getLocation());
ea271da6 277 assertEquals("getLocationRatio", 0.0, ratio, DELTA);
9e0640dc
FC
278
279 // Middle event
280 context = fExperiment.seekEvent(NB_EVENTS / 2);
281 ratio = fExperiment.getLocationRatio(context.getLocation());
ea271da6 282 assertEquals("getLocationRatio", (double) (NB_EVENTS / 2) / NB_EVENTS, ratio, DELTA);
9e0640dc
FC
283
284 // Last event
285 context = fExperiment.seekEvent(NB_EVENTS - 1);
286 ratio = fExperiment.getLocationRatio(context.getLocation());
ea271da6 287 assertEquals("getLocationRatio", (double) (NB_EVENTS - 1) / NB_EVENTS, ratio, DELTA);
9e0640dc
FC
288 }
289
17324c9a 290// @SuppressWarnings("rawtypes")
54a7a54c 291// public void testGetCurrentLocation() {
9e0640dc
FC
292// ITmfContext context = fExperiment.seekEvent((ITmfLocation) null);
293// ITmfLocation location = fExperiment.getCurrentLocation();
294// assertEquals("getCurrentLocation", location, context.getLocation());
295// }
296
d18dd09b 297 // ------------------------------------------------------------------------
0316808c 298 // seekEvent on rank
d18dd09b
ASL
299 // ------------------------------------------------------------------------
300
6e1886bc 301 @Test
54a7a54c 302 public void testSeekRankOnCacheBoundary() {
0316808c 303 long cacheSize = fExperiment.getCacheSize();
9b635e61 304
0316808c
FC
305 // On lower bound, returns the first event (TS = 1)
306 ITmfContext context = fExperiment.seekEvent(0);
307 assertEquals("Context rank", 0, context.getRank());
25e48683 308
c32744d6 309 ITmfEvent event = fExperiment.getNext(context);
d18dd09b 310 assertEquals("Event timestamp", 1, event.getTimestamp().getValue());
0316808c 311 assertEquals("Context rank", 1, context.getRank());
25e48683 312
0316808c
FC
313 // Position trace at event rank [cacheSize]
314 context = fExperiment.seekEvent(cacheSize);
315 assertEquals("Context rank", cacheSize, context.getRank());
25e48683 316
c32744d6 317 event = fExperiment.getNext(context);
0316808c
FC
318 assertEquals("Event timestamp", cacheSize + 1, event.getTimestamp().getValue());
319 assertEquals("Context rank", cacheSize + 1, context.getRank());
d18dd09b 320
0316808c
FC
321 // Position trace at event rank [4 * cacheSize]
322 context = fExperiment.seekEvent(4 * cacheSize);
323 assertEquals("Context rank", 4 * cacheSize, context.getRank());
25e48683 324
c32744d6 325 event = fExperiment.getNext(context);
0316808c
FC
326 assertEquals("Event timestamp", 4 * cacheSize + 1, event.getTimestamp().getValue());
327 assertEquals("Context rank", 4 * cacheSize + 1, context.getRank());
d18dd09b
ASL
328 }
329
6e1886bc 330 @Test
54a7a54c 331 public void testSeekRankNotOnCacheBoundary() {
0316808c 332 long cacheSize = fExperiment.getCacheSize();
25e48683 333
0316808c
FC
334 // Position trace at event rank 9
335 ITmfContext context = fExperiment.seekEvent(9);
336 assertEquals("Context rank", 9, context.getRank());
25e48683 337
c32744d6 338 ITmfEvent event = fExperiment.getNext(context);
d18dd09b 339 assertEquals("Event timestamp", 10, event.getTimestamp().getValue());
0316808c 340 assertEquals("Context rank", 10, context.getRank());
d18dd09b 341
0316808c
FC
342 // Position trace at event rank [cacheSize - 1]
343 context = fExperiment.seekEvent(cacheSize - 1);
344 assertEquals("Context rank", cacheSize - 1, context.getRank());
25e48683 345
c32744d6 346 event = fExperiment.getNext(context);
0316808c
FC
347 assertEquals("Event timestamp", cacheSize, event.getTimestamp().getValue());
348 assertEquals("Context rank", cacheSize, context.getRank());
d18dd09b 349
0316808c
FC
350 // Position trace at event rank [cacheSize + 1]
351 context = fExperiment.seekEvent(cacheSize + 1);
352 assertEquals("Context rank", cacheSize + 1, context.getRank());
25e48683 353
c32744d6 354 event = fExperiment.getNext(context);
0316808c
FC
355 assertEquals("Event timestamp", cacheSize + 2, event.getTimestamp().getValue());
356 assertEquals("Context rank", cacheSize + 2, context.getRank());
d18dd09b 357
25e48683 358 // Position trace at event rank 4500
0316808c
FC
359 context = fExperiment.seekEvent(4500);
360 assertEquals("Context rank", 4500, context.getRank());
25e48683 361
c32744d6 362 event = fExperiment.getNext(context);
d18dd09b 363 assertEquals("Event timestamp", 4501, event.getTimestamp().getValue());
0316808c 364 assertEquals("Context rank", 4501, context.getRank());
d18dd09b
ASL
365 }
366
6e1886bc 367 @Test
54a7a54c 368 public void testSeekRankOutOfScope() {
25e48683 369 // Position trace at beginning
0316808c 370 ITmfContext context = fExperiment.seekEvent(-1);
9b635e61 371 assertEquals("Event rank", 0, context.getRank());
25e48683 372
c32744d6 373 ITmfEvent event = fExperiment.getNext(context);
d18dd09b 374 assertEquals("Event timestamp", 1, event.getTimestamp().getValue());
0316808c 375 assertEquals("Context rank", 1, context.getRank());
d18dd09b 376
25e48683 377 // Position trace at event passed the end
0316808c
FC
378 context = fExperiment.seekEvent(NB_EVENTS);
379 assertEquals("Context rank", NB_EVENTS, context.getRank());
380
c32744d6 381 event = fExperiment.getNext(context);
0316808c
FC
382 assertNull("Event", event);
383 assertEquals("Context rank", NB_EVENTS, context.getRank());
d18dd09b
ASL
384 }
385
386 // ------------------------------------------------------------------------
387 // seekEvent on timestamp
388 // ------------------------------------------------------------------------
389
6e1886bc 390 @Test
54a7a54c 391 public void testSeekTimestampOnCacheBoundary() {
0316808c 392 long cacheSize = fExperiment.getCacheSize();
25e48683 393
0316808c
FC
394 // Position trace at event rank 0
395 ITmfContext context = fExperiment.seekEvent(new TmfTimestamp(1, SCALE, 0));
396 assertEquals("Context rank", 0, context.getRank());
25e48683 397
c32744d6 398 ITmfEvent event = fExperiment.getNext(context);
d18dd09b 399 assertEquals("Event timestamp", 1, event.getTimestamp().getValue());
0316808c 400 assertEquals("Context rank", 1, context.getRank());
25e48683 401
0316808c
FC
402 // Position trace at event rank [cacheSize]
403 context = fExperiment.seekEvent(new TmfTimestamp(cacheSize + 1, SCALE, 0));
404 assertEquals("Event rank", cacheSize, context.getRank());
25e48683 405
c32744d6 406 event = fExperiment.getNext(context);
0316808c
FC
407 assertEquals("Event timestamp", cacheSize + 1, event.getTimestamp().getValue());
408 assertEquals("Context rank", cacheSize + 1, context.getRank());
d18dd09b 409
0316808c
FC
410 // Position trace at event rank [4 * cacheSize]
411 context = fExperiment.seekEvent(new TmfTimestamp(4 * cacheSize + 1, SCALE, 0));
412 assertEquals("Context rank", 4 * cacheSize, context.getRank());
25e48683 413
c32744d6 414 event = fExperiment.getNext(context);
0316808c
FC
415 assertEquals("Event timestamp", 4 * cacheSize + 1, event.getTimestamp().getValue());
416 assertEquals("Context rank", 4 * cacheSize + 1, context.getRank());
d18dd09b
ASL
417 }
418
6e1886bc 419 @Test
54a7a54c 420 public void testSeekTimestampNotOnCacheBoundary() {
0316808c
FC
421 // Position trace at event rank 1 (TS = 2)
422 ITmfContext context = fExperiment.seekEvent(new TmfTimestamp(2, SCALE, 0));
423 assertEquals("Context rank", 1, context.getRank());
25e48683 424
c32744d6 425 ITmfEvent event = fExperiment.getNext(context);
d18dd09b 426 assertEquals("Event timestamp", 2, event.getTimestamp().getValue());
0316808c 427 assertEquals("Context rank", 2, context.getRank());
d18dd09b 428
0316808c 429 // Position trace at event rank 9 (TS = 10)
25e48683 430 context = fExperiment.seekEvent(new TmfTimestamp(10, SCALE, 0));
0316808c 431 assertEquals("Context rank", 9, context.getRank());
25e48683 432
c32744d6 433 event = fExperiment.getNext(context);
d18dd09b 434 assertEquals("Event timestamp", 10, event.getTimestamp().getValue());
0316808c 435 assertEquals("Context rank", 10, context.getRank());
d18dd09b 436
0316808c 437 // Position trace at event rank 999 (TS = 1000)
d18dd09b 438 context = fExperiment.seekEvent(new TmfTimestamp(1000, SCALE, 0));
0316808c 439 assertEquals("Context rank", 999, context.getRank());
25e48683 440
c32744d6 441 event = fExperiment.getNext(context);
d18dd09b 442 assertEquals("Event timestamp", 1000, event.getTimestamp().getValue());
0316808c 443 assertEquals("Context rank", 1000, context.getRank());
d18dd09b 444
0316808c 445 // Position trace at event rank 1001 (TS = 1002)
d18dd09b 446 context = fExperiment.seekEvent(new TmfTimestamp(1002, SCALE, 0));
0316808c 447 assertEquals("Context rank", 1001, context.getRank());
25e48683 448
c32744d6 449 event = fExperiment.getNext(context);
d18dd09b 450 assertEquals("Event timestamp", 1002, event.getTimestamp().getValue());
0316808c 451 assertEquals("Context rank", 1002, context.getRank());
d18dd09b 452
0316808c 453 // Position trace at event rank 4500 (TS = 4501)
d18dd09b 454 context = fExperiment.seekEvent(new TmfTimestamp(4501, SCALE, 0));
0316808c 455 assertEquals("Context rank", 4500, context.getRank());
25e48683 456
c32744d6 457 event = fExperiment.getNext(context);
d18dd09b 458 assertEquals("Event timestamp", 4501, event.getTimestamp().getValue());
0316808c 459 assertEquals("Context rank", 4501, context.getRank());
d18dd09b
ASL
460 }
461
6e1886bc 462 @Test
54a7a54c 463 public void testSeekTimestampOutOfScope() {
25e48683 464 // Position trace at beginning
0316808c 465 ITmfContext context = fExperiment.seekEvent(new TmfTimestamp(-1, SCALE, 0));
d18dd09b 466 assertEquals("Event rank", 0, context.getRank());
25e48683 467
c32744d6 468 ITmfEvent event = fExperiment.getNext(context);
d18dd09b
ASL
469 assertEquals("Event timestamp", 1, event.getTimestamp().getValue());
470 assertEquals("Event rank", 1, context.getRank());
471
25e48683 472 // Position trace at event passed the end
d18dd09b 473 context = fExperiment.seekEvent(new TmfTimestamp(NB_EVENTS + 1, SCALE, 0));
c32744d6 474 event = fExperiment.getNext(context);
0316808c 475 assertNull("Event location", event);
9b635e61 476 assertEquals("Event rank", ITmfContext.UNKNOWN_RANK, context.getRank());
d18dd09b
ASL
477 }
478
479 // ------------------------------------------------------------------------
0316808c 480 // seekEvent by location (context rank is undefined)
d18dd09b
ASL
481 // ------------------------------------------------------------------------
482
6e1886bc 483 @Test
54a7a54c 484 public void testSeekLocationOnCacheBoundary() {
0316808c 485 long cacheSize = fExperiment.getCacheSize();
d18dd09b 486
0316808c
FC
487 // Position trace at event rank 0
488 ITmfContext tmpContext = fExperiment.seekEvent(0);
489 ITmfContext context = fExperiment.seekEvent(tmpContext.getLocation());
25e48683 490
c32744d6 491 ITmfEvent event = fExperiment.getNext(context);
d18dd09b 492 assertEquals("Event timestamp", 1, event.getTimestamp().getValue());
25e48683 493
c32744d6 494 event = fExperiment.getNext(context);
0316808c 495 assertEquals("Event timestamp", 2, event.getTimestamp().getValue());
d18dd09b 496
0316808c
FC
497 // Position trace at event rank 'cacheSize'
498 tmpContext = fExperiment.seekEvent(cacheSize);
499 context = fExperiment.seekEvent(tmpContext.getLocation());
25e48683 500
c32744d6 501 event = fExperiment.getNext(context);
0316808c 502 assertEquals("Event timestamp", cacheSize + 1, event.getTimestamp().getValue());
25e48683 503
c32744d6 504 event = fExperiment.getNext(context);
0316808c 505 assertEquals("Event timestamp", cacheSize + 2, event.getTimestamp().getValue());
d18dd09b 506
0316808c
FC
507 // Position trace at event rank 4 * 'cacheSize'
508 tmpContext = fExperiment.seekEvent(4 * cacheSize);
509 context = fExperiment.seekEvent(tmpContext.getLocation());
25e48683 510
c32744d6 511 event = fExperiment.getNext(context);
0316808c 512 assertEquals("Event timestamp", 4 * cacheSize + 1, event.getTimestamp().getValue());
25e48683 513
c32744d6 514 event = fExperiment.getNext(context);
0316808c 515 assertEquals("Event timestamp", 4 * cacheSize + 2, event.getTimestamp().getValue());
d18dd09b
ASL
516 }
517
6e1886bc 518 @Test
54a7a54c 519 public void testSeekLocationNotOnCacheBoundary() {
0316808c 520 long cacheSize = fExperiment.getCacheSize();
25e48683 521
0316808c
FC
522 // Position trace at event 'cacheSize' - 1
523 ITmfContext tmpContext = fExperiment.seekEvent(cacheSize - 1);
524 ITmfContext context = fExperiment.seekEvent(tmpContext.getLocation());
d18dd09b 525
c32744d6 526 ITmfEvent event = fExperiment.getNext(context);
0316808c 527 assertEquals("Event timestamp", cacheSize, event.getTimestamp().getValue());
25e48683 528
c32744d6 529 event = fExperiment.getNext(context);
0316808c 530 assertEquals("Event timestamp", cacheSize + 1, event.getTimestamp().getValue());
d18dd09b 531
0316808c
FC
532 // Position trace at event rank 2 * 'cacheSize' - 1
533 tmpContext = fExperiment.seekEvent(2 * cacheSize - 1);
534 context = fExperiment.seekEvent(tmpContext.getLocation());
535 context = fExperiment.seekEvent(2 * cacheSize - 1);
25e48683 536
c32744d6 537 event = fExperiment.getNext(context);
0316808c 538 assertEquals("Event timestamp", 2 * cacheSize, event.getTimestamp().getValue());
25e48683 539
c32744d6 540 event = fExperiment.getNext(context);
0316808c 541 assertEquals("Event timestamp", 2 * cacheSize + 1, event.getTimestamp().getValue());
d18dd09b 542
25e48683 543 // Position trace at event rank 4500
0316808c
FC
544 tmpContext = fExperiment.seekEvent(4500);
545 context = fExperiment.seekEvent(tmpContext.getLocation());
25e48683 546
c32744d6 547 event = fExperiment.getNext(context);
d18dd09b 548 assertEquals("Event timestamp", 4501, event.getTimestamp().getValue());
25e48683 549
c32744d6 550 event = fExperiment.getNext(context);
0316808c 551 assertEquals("Event timestamp", 4502, event.getTimestamp().getValue());
d18dd09b
ASL
552 }
553
6e1886bc 554 @Test
54a7a54c 555 public void testSeekLocationOutOfScope() {
25e48683 556 // Position trace at beginning
1e1bef82 557 ITmfContext context = fExperiment.seekEvent((ITmfLocation) null);
25e48683 558
c32744d6 559 ITmfEvent event = fExperiment.getNext(context);
d18dd09b 560 assertEquals("Event timestamp", 1, event.getTimestamp().getValue());
d18dd09b 561 }
25e48683 562
9b635e61 563 // ------------------------------------------------------------------------
17324c9a 564 // getNext - updates the context
9b635e61
FC
565 // ------------------------------------------------------------------------
566
54a7a54c 567 private static void validateContextRanks(ITmfContext context) {
17324c9a
FC
568 assertTrue("Experiment context type", context instanceof TmfExperimentContext);
569 TmfExperimentContext ctx = (TmfExperimentContext) context;
9b635e61 570
17324c9a
FC
571 int nbTraces = ctx.getContexts().length;
572
573 // expRank = sum(trace ranks) - nbTraces + 1 (if lastTraceRead != NO_TRACE)
574 long expRank = -nbTraces + ((ctx.getLastTrace() != TmfExperimentContext.NO_TRACE) ? 1 : 0);
575 for (int i = 0; i < nbTraces; i++) {
576 long rank = ctx.getContexts()[i].getRank();
577 if (rank == -1) {
578 expRank = -1;
579 break;
580 }
581 expRank += rank;
582 }
583 assertEquals("Experiment context rank", expRank, ctx.getRank());
584 }
585
6e1886bc 586 @Test
54a7a54c 587 public void testGetNextAfteSeekingOnTS_1() {
9b635e61 588
17324c9a
FC
589 final long INITIAL_TS = 1;
590 final int NB_READS = 20;
591
592 // On lower bound, returns the first event (ts = 1)
593 final ITmfContext context = fExperiment.seekEvent(new TmfTimestamp(INITIAL_TS, SCALE, 0));
594
595 validateContextRanks(context);
596
597 // Read NB_EVENTS
598 ITmfEvent event;
599 for (int i = 0; i < NB_READS; i++) {
c32744d6 600 event = fExperiment.getNext(context);
17324c9a
FC
601 assertEquals("Event timestamp", INITIAL_TS + i, event.getTimestamp().getValue());
602 assertEquals("Event rank", INITIAL_TS + i, context.getRank());
9b635e61 603 }
17324c9a
FC
604
605 // Make sure we stay positioned
606 event = fExperiment.parseEvent(context);
607 assertEquals("Event timestamp", INITIAL_TS + NB_READS, event.getTimestamp().getValue());
608 assertEquals("Event rank", INITIAL_TS + NB_READS - 1, context.getRank());
609
610 validateContextRanks(context);
9b635e61
FC
611 }
612
6e1886bc 613 @Test
54a7a54c 614 public void testGetNextAfteSeekingOnTS_2() {
17324c9a
FC
615 final long INITIAL_TS = 2;
616 final int NB_READS = 20;
617
618 // On lower bound, returns the first event (ts = 2)
619 final ITmfContext context = fExperiment.seekEvent(new TmfTimestamp(INITIAL_TS, SCALE, 0));
620
621 validateContextRanks(context);
622
623 // Read NB_EVENTS
624 ITmfEvent event;
625 for (int i = 0; i < NB_READS; i++) {
626 event = fExperiment.getNext(context);
627 assertEquals("Event timestamp", INITIAL_TS + i, event.getTimestamp().getValue());
628 assertEquals("Event rank", INITIAL_TS + i, context.getRank());
629 }
630
631 // Make sure we stay positioned
632 event = fExperiment.parseEvent(context);
633 assertEquals("Event timestamp", INITIAL_TS + NB_READS, event.getTimestamp().getValue());
634 assertEquals("Event rank", INITIAL_TS + NB_READS - 1, context.getRank());
635
636 validateContextRanks(context);
637 }
638
6e1886bc 639 @Test
54a7a54c 640 public void testGetNextAfteSeekingOnTS_3() {
17324c9a
FC
641
642 final long INITIAL_TS = 500;
643 final int NB_READS = 20;
644
645 // On lower bound, returns the first event (ts = 500)
646 final ITmfContext context = fExperiment.seekEvent(new TmfTimestamp(INITIAL_TS, SCALE, 0));
647
648 validateContextRanks(context);
649
650 // Read NB_EVENTS
651 ITmfEvent event;
652 for (int i = 0; i < NB_READS; i++) {
653 event = fExperiment.getNext(context);
654 assertEquals("Event timestamp", INITIAL_TS + i, event.getTimestamp().getValue());
655 assertEquals("Event rank", INITIAL_TS + i, context.getRank());
656 }
657
658 // Make sure we stay positioned
659 event = fExperiment.parseEvent(context);
660 assertEquals("Event timestamp", INITIAL_TS + NB_READS, event.getTimestamp().getValue());
661 assertEquals("Event rank", INITIAL_TS + NB_READS - 1, context.getRank());
662
663 validateContextRanks(context);
664 }
665
6e1886bc 666 @Test
54a7a54c 667 public void testGetNextAfterSeekingOnRank_1() {
17324c9a
FC
668 final long INITIAL_RANK = 0L;
669 final int NB_READS = 20;
670
671 // On lower bound, returns the first event (rank = 0)
672 final ITmfContext context = fExperiment.seekEvent(INITIAL_RANK);
673
674 validateContextRanks(context);
675
676 // Read NB_EVENTS
677 ITmfEvent event;
678 for (int i = 0; i < NB_READS; i++) {
679 event = fExperiment.getNext(context);
680 assertEquals("Event timestamp", INITIAL_RANK + i + 1, event.getTimestamp().getValue());
681 assertEquals("Event rank", INITIAL_RANK + i + 1, context.getRank());
682 }
683
684 // Make sure we stay positioned
685 event = fExperiment.parseEvent(context);
686 assertEquals("Event timestamp", INITIAL_RANK + NB_READS + 1, event.getTimestamp().getValue());
687 assertEquals("Event rank", INITIAL_RANK + NB_READS, context.getRank());
688
689 validateContextRanks(context);
690 }
691
6e1886bc 692 @Test
54a7a54c 693 public void testGetNextAfterSeekingOnRank_2() {
17324c9a
FC
694 final long INITIAL_RANK = 1L;
695 final int NB_READS = 20;
696
697 // On lower bound, returns the first event (rank = 0)
698 final ITmfContext context = fExperiment.seekEvent(INITIAL_RANK);
699
700 validateContextRanks(context);
701
702 // Read NB_EVENTS
703 ITmfEvent event;
704 for (int i = 0; i < NB_READS; i++) {
705 event = fExperiment.getNext(context);
706 assertEquals("Event timestamp", INITIAL_RANK + i + 1, event.getTimestamp().getValue());
707 assertEquals("Event rank", INITIAL_RANK + i + 1, context.getRank());
708 }
709
710 // Make sure we stay positioned
711 event = fExperiment.parseEvent(context);
712 assertEquals("Event timestamp", INITIAL_RANK + NB_READS + 1, event.getTimestamp().getValue());
713 assertEquals("Event rank", INITIAL_RANK + NB_READS, context.getRank());
714
715 validateContextRanks(context);
716 }
717
6e1886bc 718 @Test
54a7a54c 719 public void testGetNextAfterSeekingOnRank_3() {
17324c9a
FC
720 final long INITIAL_RANK = 500L;
721 final int NB_READS = 20;
722
723 // On lower bound, returns the first event (rank = 0)
724 final ITmfContext context = fExperiment.seekEvent(INITIAL_RANK);
725
726 validateContextRanks(context);
727
728 // Read NB_EVENTS
729 ITmfEvent event;
730 for (int i = 0; i < NB_READS; i++) {
731 event = fExperiment.getNext(context);
732 assertEquals("Event timestamp", INITIAL_RANK + i + 1, event.getTimestamp().getValue());
733 assertEquals("Event rank", INITIAL_RANK + i + 1, context.getRank());
734 }
735
736 // Make sure we stay positioned
737 event = fExperiment.parseEvent(context);
738 assertEquals("Event timestamp", INITIAL_RANK + NB_READS + 1, event.getTimestamp().getValue());
739 assertEquals("Event rank", INITIAL_RANK + NB_READS, context.getRank());
740
741 validateContextRanks(context);
742 }
743
6e1886bc 744 @Test
54a7a54c 745 public void testGetNextAfterSeekingOnLocation_1() {
1e1bef82 746 final ITmfLocation INITIAL_LOC = null;
17324c9a
FC
747 final long INITIAL_TS = 1;
748 final int NB_READS = 20;
749
750 // On lower bound, returns the first event (ts = 1)
751 final ITmfContext context = fExperiment.seekEvent(INITIAL_LOC);
752
753 validateContextRanks(context);
754
755 // Read NB_EVENTS
756 ITmfEvent event;
757 for (int i = 0; i < NB_READS; i++) {
758 event = fExperiment.getNext(context);
759 assertEquals("Event timestamp", INITIAL_TS + i, event.getTimestamp().getValue());
760 assertEquals("Event rank", INITIAL_TS + i, context.getRank());
761 }
762
763 // Make sure we stay positioned
764 event = fExperiment.parseEvent(context);
765 assertEquals("Event timestamp", INITIAL_TS + NB_READS, event.getTimestamp().getValue());
766 assertEquals("Event rank", INITIAL_TS + NB_READS - 1, context.getRank());
767
768 validateContextRanks(context);
769 }
770
6e1886bc 771 @Test
54a7a54c 772 public void testGetNextAfterSeekingOnLocation_2() {
1e1bef82 773 final ITmfLocation INITIAL_LOC = fExperiment.seekEvent(1L).getLocation();
17324c9a
FC
774 final long INITIAL_TS = 2;
775 final int NB_READS = 20;
776
777 // On lower bound, returns the first event (ts = 2)
778 final ITmfContext context = fExperiment.seekEvent(INITIAL_LOC);
779
780 validateContextRanks(context);
781
782 // Read NB_EVENTS
783 ITmfEvent event;
784 for (int i = 0; i < NB_READS; i++) {
785 event = fExperiment.getNext(context);
786 assertEquals("Event timestamp", INITIAL_TS + i, event.getTimestamp().getValue());
787 }
788
789 // Make sure we stay positioned
790 event = fExperiment.parseEvent(context);
791 assertEquals("Event timestamp", INITIAL_TS + NB_READS, event.getTimestamp().getValue());
792
793 validateContextRanks(context);
794 }
795
6e1886bc 796 @Test
54a7a54c 797 public void testGetNextAfterSeekingOnLocation_3() {
1e1bef82 798 final ITmfLocation INITIAL_LOC = fExperiment.seekEvent(500L).getLocation();
17324c9a
FC
799 final long INITIAL_TS = 501;
800 final int NB_READS = 20;
801
802 // On lower bound, returns the first event (ts = 501)
803 final ITmfContext context = fExperiment.seekEvent(INITIAL_LOC);
804
805 validateContextRanks(context);
806
807 // Read NB_EVENTS
808 ITmfEvent event;
809 for (int i = 0; i < NB_READS; i++) {
810 event = fExperiment.getNext(context);
811 assertEquals("Event timestamp", INITIAL_TS + i, event.getTimestamp().getValue());
812 }
813
814 // Make sure we stay positioned
815 event = fExperiment.parseEvent(context);
816 assertEquals("Event timestamp", INITIAL_TS + NB_READS, event.getTimestamp().getValue());
817
818 validateContextRanks(context);
819 }
820
6e1886bc 821 @Test
54a7a54c 822 public void testGetNextLocation() {
17324c9a
FC
823 ITmfContext context1 = fExperiment.seekEvent(0);
824 fExperiment.getNext(context1);
d62bb185 825 ITmfLocation location = context1.getLocation();
17324c9a
FC
826 ITmfEvent event1 = fExperiment.getNext(context1);
827 ITmfContext context2 = fExperiment.seekEvent(location);
828 ITmfEvent event2 = fExperiment.getNext(context2);
829 assertEquals("Event timestamp", event1.getTimestamp().getValue(), event2.getTimestamp().getValue());
830 }
831
6e1886bc 832 @Test
54a7a54c 833 public void testGetNextEndLocation() {
17324c9a
FC
834 ITmfContext context1 = fExperiment.seekEvent(fExperiment.getNbEvents() - 1);
835 fExperiment.getNext(context1);
d62bb185 836 ITmfLocation location = context1.getLocation();
17324c9a
FC
837 ITmfContext context2 = fExperiment.seekEvent(location);
838 ITmfEvent event = fExperiment.getNext(context2);
839 assertNull("Event", event);
840 }
54a7a54c 841
d18dd09b
ASL
842 // ------------------------------------------------------------------------
843 // processRequest
844 // ------------------------------------------------------------------------
845
6e1886bc 846 @Test
54a7a54c 847 public void testProcessRequestForNbEvents() throws InterruptedException {
d18dd09b 848 final int nbEvents = 1000;
ccf2bbb4 849 final Vector<ITmfEvent> requestedEvents = new Vector<>();
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", nbEvents, 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 < nbEvents; i++) {
d18dd09b 870 assertEquals("Distinct events", i+1, requestedEvents.get(i).getTimestamp().getValue());
20658947 871 }
d18dd09b 872 }
25e48683 873
6e1886bc 874 @Test
54a7a54c 875 public void testProcessRequestForAllEvents() throws InterruptedException {
2740e05c 876 final int nbEvents = ITmfEventRequest.ALL_DATA;
ccf2bbb4 877 final Vector<ITmfEvent> requestedEvents = new Vector<>();
25e48683 878 final long nbExpectedEvents = NB_EVENTS;
d18dd09b 879
25e48683 880 final TmfTimeRange range = new TmfTimeRange(TmfTimestamp.BIG_BANG, TmfTimestamp.BIG_CRUNCH);
7184fc40 881 final TmfEventRequest request = new TmfEventRequest(ITmfEvent.class,
672a642a 882 range, 0, nbEvents, ExecutionType.FOREGROUND) {
25e48683 883 @Override
6256d8ad 884 public void handleData(final ITmfEvent event) {
25e48683
FC
885 super.handleData(event);
886 requestedEvents.add(event);
887 }
d18dd09b
ASL
888 };
889 fExperiment.sendRequest(request);
890 request.waitForCompletion();
891
892 assertEquals("nbEvents", nbExpectedEvents, requestedEvents.size());
893 assertTrue("isCompleted", request.isCompleted());
894 assertFalse("isCancelled", request.isCancelled());
895
896 // Ensure that we have distinct events.
25e48683 897 // Don't go overboard: we are not validating the stub!
20658947 898 for (int i = 0; i < nbExpectedEvents; i++) {
d18dd09b 899 assertEquals("Distinct events", i+1, requestedEvents.get(i).getTimestamp().getValue());
20658947 900 }
d18dd09b 901 }
25e48683 902
d18dd09b
ASL
903 // ------------------------------------------------------------------------
904 // cancel
905 // ------------------------------------------------------------------------
906
6e1886bc 907 @Test
54a7a54c 908 public void testCancel() throws InterruptedException {
672a642a
AM
909 final int nbEvents = NB_EVENTS;
910 final int limit = BLOCK_SIZE;
ccf2bbb4 911 final Vector<ITmfEvent> requestedEvents = new Vector<>();
d18dd09b 912
25e48683 913 final TmfTimeRange range = new TmfTimeRange(TmfTimestamp.BIG_BANG, TmfTimestamp.BIG_CRUNCH);
7184fc40 914 final TmfEventRequest request = new TmfEventRequest(ITmfEvent.class,
672a642a 915 range, 0, nbEvents, ExecutionType.FOREGROUND) {
25e48683 916 int nbRead = 0;
672a642a 917
25e48683 918 @Override
6256d8ad 919 public void handleData(final ITmfEvent event) {
25e48683
FC
920 super.handleData(event);
921 requestedEvents.add(event);
672a642a 922 if (++nbRead == limit) {
25e48683 923 cancel();
20658947 924 }
25e48683 925 }
672a642a 926
cb866e08
FC
927 @Override
928 public void handleCancel() {
672a642a 929 if (requestedEvents.size() < limit) {
25e48683 930 System.out.println("aie");
20658947 931 }
cb866e08 932 }
d18dd09b
ASL
933 };
934 fExperiment.sendRequest(request);
935 request.waitForCompletion();
936
672a642a 937 assertEquals("nbEvents", limit, requestedEvents.size());
d18dd09b
ASL
938 assertTrue("isCompleted", request.isCompleted());
939 assertTrue("isCancelled", request.isCancelled());
940 }
25e48683 941
17324c9a 942}
This page took 0.135921 seconds and 5 git commands to generate.