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