Commit | Line | Data |
---|---|---|
d18dd09b | 1 | /******************************************************************************* |
61759503 | 2 | * Copyright (c) 2009, 2013 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 |
850a3ae2 | 13 | * Patrick Tasse - Fix for concurrency |
d18dd09b ASL |
14 | *******************************************************************************/ |
15 | ||
9e0640dc | 16 | package org.eclipse.linuxtools.tmf.core.tests.trace; |
d18dd09b | 17 | |
6e1886bc AM |
18 | import static org.junit.Assert.assertEquals; |
19 | import static org.junit.Assert.assertFalse; | |
20 | import static org.junit.Assert.assertNull; | |
21 | import static org.junit.Assert.assertTrue; | |
22 | ||
d18dd09b ASL |
23 | import java.io.File; |
24 | import java.io.IOException; | |
25 | import java.net.URISyntaxException; | |
26 | import java.net.URL; | |
27 | import java.util.Vector; | |
28 | ||
d18dd09b ASL |
29 | import org.eclipse.core.runtime.FileLocator; |
30 | import org.eclipse.core.runtime.Path; | |
17324c9a | 31 | import org.eclipse.linuxtools.internal.tmf.core.trace.TmfExperimentContext; |
72f1e62a | 32 | import org.eclipse.linuxtools.tmf.core.event.ITmfEvent; |
b4f71e4a | 33 | import org.eclipse.linuxtools.tmf.core.exceptions.TmfTraceException; |
9b749023 | 34 | import org.eclipse.linuxtools.tmf.core.request.TmfDataRequest; |
6c13869b | 35 | import org.eclipse.linuxtools.tmf.core.request.TmfEventRequest; |
7184fc40 | 36 | import org.eclipse.linuxtools.tmf.core.request.ITmfDataRequest.ExecutionType; |
6c13869b | 37 | import org.eclipse.linuxtools.tmf.core.tests.TmfCoreTestPlugin; |
3bd46eef AM |
38 | import org.eclipse.linuxtools.tmf.core.timestamp.ITmfTimestamp; |
39 | import org.eclipse.linuxtools.tmf.core.timestamp.TmfTimeRange; | |
40 | import org.eclipse.linuxtools.tmf.core.timestamp.TmfTimestamp; | |
6c13869b | 41 | import org.eclipse.linuxtools.tmf.core.trace.ITmfContext; |
0316808c | 42 | import org.eclipse.linuxtools.tmf.core.trace.ITmfLocation; |
6c13869b | 43 | import org.eclipse.linuxtools.tmf.core.trace.ITmfTrace; |
9e0640dc | 44 | import org.eclipse.linuxtools.tmf.tests.stubs.trace.TmfExperimentStub; |
4918b8f2 | 45 | import org.eclipse.linuxtools.tmf.tests.stubs.trace.TmfTraceStub; |
850a3ae2 PT |
46 | import org.junit.AfterClass; |
47 | import org.junit.BeforeClass; | |
6e1886bc | 48 | import org.junit.Test; |
d18dd09b ASL |
49 | |
50 | /** | |
0316808c | 51 | * Test suite for the TmfExperiment class (multiple traces). |
d18dd09b | 52 | */ |
cad06250 | 53 | @SuppressWarnings("javadoc") |
6e1886bc | 54 | public class TmfMultiTraceExperimentTest { |
d18dd09b | 55 | |
0316808c FC |
56 | // ------------------------------------------------------------------------ |
57 | // Attributes | |
58 | // ------------------------------------------------------------------------ | |
6e1886bc | 59 | |
66262ad8 | 60 | private static final long DEFAULT_INITIAL_OFFSET_VALUE = (1L * 100 * 1000 * 1000); // .1sec |
d18dd09b ASL |
61 | private static final String DIRECTORY = "testfiles"; |
62 | private static final String TEST_STREAM1 = "O-Test-10K"; | |
63 | private static final String TEST_STREAM2 = "E-Test-10K"; | |
64 | private static final String EXPERIMENT = "MyExperiment"; | |
65 | private static int NB_EVENTS = 20000; | |
9b635e61 | 66 | private static int BLOCK_SIZE = 1000; |
d18dd09b | 67 | |
6256d8ad | 68 | private static TmfExperimentStub fExperiment; |
d18dd09b ASL |
69 | |
70 | private static byte SCALE = (byte) -3; | |
71 | ||
72 | // ------------------------------------------------------------------------ | |
73 | // Housekeeping | |
74 | // ------------------------------------------------------------------------ | |
75 | ||
850a3ae2 PT |
76 | @BeforeClass |
77 | public static void setUp() { | |
78 | ITmfTrace[] traces = setupTraces(); | |
79 | fExperiment = new TmfExperimentStub(EXPERIMENT, traces, BLOCK_SIZE); | |
80 | fExperiment.getIndexer().buildIndex(0, TmfTimeRange.ETERNITY, true); | |
6e1886bc AM |
81 | } |
82 | ||
850a3ae2 PT |
83 | @AfterClass |
84 | public static void tearDown() { | |
85 | fExperiment.dispose(); | |
86 | } | |
87 | ||
88 | private static ITmfTrace[] setupTraces() { | |
89 | final String path1 = DIRECTORY + File.separator + TEST_STREAM1; | |
90 | final String path2 = DIRECTORY + File.separator + TEST_STREAM2; | |
91 | try { | |
92 | ITmfTrace[] traces = new ITmfTrace[2]; | |
93 | ||
94 | URL location = FileLocator.find(TmfCoreTestPlugin.getDefault().getBundle(), new Path(path1), null); | |
95 | File test = new File(FileLocator.toFileURL(location).toURI()); | |
96 | final TmfTraceStub trace1 = new TmfTraceStub(test.getPath(), 0, true); | |
97 | traces[0] = trace1; | |
98 | ||
99 | location = FileLocator.find(TmfCoreTestPlugin.getDefault().getBundle(), new Path(path2), null); | |
100 | test = new File(FileLocator.toFileURL(location).toURI()); | |
101 | final TmfTraceStub trace2 = new TmfTraceStub(test.getPath(), 0, true); | |
102 | traces[1] = trace2; | |
103 | ||
104 | return traces; | |
105 | } catch (final TmfTraceException e) { | |
106 | e.printStackTrace(); | |
107 | } catch (final URISyntaxException e) { | |
108 | e.printStackTrace(); | |
109 | } catch (final IOException e) { | |
110 | e.printStackTrace(); | |
25e48683 | 111 | } |
850a3ae2 | 112 | return new ITmfTrace[0]; |
d18dd09b ASL |
113 | } |
114 | ||
d18dd09b ASL |
115 | // ------------------------------------------------------------------------ |
116 | // Constructor | |
117 | // ------------------------------------------------------------------------ | |
118 | ||
6e1886bc | 119 | @Test |
25e48683 | 120 | public void testBasicTmfExperimentConstructor() { |
25e48683 | 121 | assertEquals("GetId", EXPERIMENT, fExperiment.getName()); |
d18dd09b ASL |
122 | assertEquals("GetNbEvents", NB_EVENTS, fExperiment.getNbEvents()); |
123 | ||
25e48683 | 124 | final TmfTimeRange timeRange = fExperiment.getTimeRange(); |
d18dd09b ASL |
125 | assertEquals("getStartTime", 1, timeRange.getStartTime().getValue()); |
126 | assertEquals("getEndTime", NB_EVENTS, timeRange.getEndTime().getValue()); | |
66262ad8 | 127 | |
850a3ae2 | 128 | TmfTimestamp initRange = new TmfTimestamp(DEFAULT_INITIAL_OFFSET_VALUE, ITmfTimestamp.NANOSECOND_SCALE); |
66262ad8 | 129 | assertEquals("getInitialRangeOffset", initRange, fExperiment.getInitialRangeOffset()); |
25e48683 | 130 | } |
d18dd09b | 131 | |
d18dd09b | 132 | // ------------------------------------------------------------------------ |
0316808c | 133 | // seekEvent on rank |
d18dd09b ASL |
134 | // ------------------------------------------------------------------------ |
135 | ||
6e1886bc | 136 | @Test |
54a7a54c | 137 | public void testSeekRankOnCacheBoundary() { |
0316808c | 138 | long cacheSize = fExperiment.getCacheSize(); |
9b635e61 | 139 | |
0316808c FC |
140 | // On lower bound, returns the first event (TS = 1) |
141 | ITmfContext context = fExperiment.seekEvent(0); | |
142 | assertEquals("Context rank", 0, context.getRank()); | |
25e48683 | 143 | |
c32744d6 | 144 | ITmfEvent event = fExperiment.getNext(context); |
d18dd09b | 145 | assertEquals("Event timestamp", 1, event.getTimestamp().getValue()); |
0316808c | 146 | assertEquals("Context rank", 1, context.getRank()); |
25e48683 | 147 | |
0316808c FC |
148 | // Position trace at event rank [cacheSize] |
149 | context = fExperiment.seekEvent(cacheSize); | |
150 | assertEquals("Context rank", cacheSize, context.getRank()); | |
25e48683 | 151 | |
c32744d6 | 152 | event = fExperiment.getNext(context); |
0316808c FC |
153 | assertEquals("Event timestamp", cacheSize + 1, event.getTimestamp().getValue()); |
154 | assertEquals("Context rank", cacheSize + 1, context.getRank()); | |
d18dd09b | 155 | |
0316808c FC |
156 | // Position trace at event rank [4 * cacheSize] |
157 | context = fExperiment.seekEvent(4 * cacheSize); | |
158 | assertEquals("Context rank", 4 * cacheSize, context.getRank()); | |
25e48683 | 159 | |
c32744d6 | 160 | event = fExperiment.getNext(context); |
0316808c FC |
161 | assertEquals("Event timestamp", 4 * cacheSize + 1, event.getTimestamp().getValue()); |
162 | assertEquals("Context rank", 4 * cacheSize + 1, context.getRank()); | |
d18dd09b ASL |
163 | } |
164 | ||
6e1886bc | 165 | @Test |
54a7a54c | 166 | public void testSeekRankNotOnCacheBoundary() { |
0316808c | 167 | long cacheSize = fExperiment.getCacheSize(); |
25e48683 | 168 | |
0316808c FC |
169 | // Position trace at event rank 9 |
170 | ITmfContext context = fExperiment.seekEvent(9); | |
171 | assertEquals("Context rank", 9, context.getRank()); | |
25e48683 | 172 | |
c32744d6 | 173 | ITmfEvent event = fExperiment.getNext(context); |
d18dd09b | 174 | assertEquals("Event timestamp", 10, event.getTimestamp().getValue()); |
0316808c | 175 | assertEquals("Context rank", 10, context.getRank()); |
d18dd09b | 176 | |
0316808c FC |
177 | // Position trace at event rank [cacheSize - 1] |
178 | context = fExperiment.seekEvent(cacheSize - 1); | |
179 | assertEquals("Context rank", cacheSize - 1, context.getRank()); | |
25e48683 | 180 | |
c32744d6 | 181 | event = fExperiment.getNext(context); |
0316808c FC |
182 | assertEquals("Event timestamp", cacheSize, event.getTimestamp().getValue()); |
183 | assertEquals("Context rank", cacheSize, context.getRank()); | |
d18dd09b | 184 | |
0316808c FC |
185 | // Position trace at event rank [cacheSize + 1] |
186 | context = fExperiment.seekEvent(cacheSize + 1); | |
187 | assertEquals("Context rank", cacheSize + 1, context.getRank()); | |
25e48683 | 188 | |
c32744d6 | 189 | event = fExperiment.getNext(context); |
0316808c FC |
190 | assertEquals("Event timestamp", cacheSize + 2, event.getTimestamp().getValue()); |
191 | assertEquals("Context rank", cacheSize + 2, context.getRank()); | |
d18dd09b | 192 | |
25e48683 | 193 | // Position trace at event rank 4500 |
0316808c FC |
194 | context = fExperiment.seekEvent(4500); |
195 | assertEquals("Context rank", 4500, context.getRank()); | |
25e48683 | 196 | |
c32744d6 | 197 | event = fExperiment.getNext(context); |
d18dd09b | 198 | assertEquals("Event timestamp", 4501, event.getTimestamp().getValue()); |
0316808c | 199 | assertEquals("Context rank", 4501, context.getRank()); |
d18dd09b ASL |
200 | } |
201 | ||
6e1886bc | 202 | @Test |
54a7a54c | 203 | public void testSeekRankOutOfScope() { |
25e48683 | 204 | // Position trace at beginning |
0316808c | 205 | ITmfContext context = fExperiment.seekEvent(-1); |
d18dd09b | 206 | assertEquals("Event rank", 0, context.getRank()); |
25e48683 | 207 | |
c32744d6 | 208 | ITmfEvent event = fExperiment.getNext(context); |
d18dd09b | 209 | assertEquals("Event timestamp", 1, event.getTimestamp().getValue()); |
0316808c | 210 | assertEquals("Context rank", 1, context.getRank()); |
d18dd09b | 211 | |
25e48683 | 212 | // Position trace at event passed the end |
0316808c FC |
213 | context = fExperiment.seekEvent(NB_EVENTS); |
214 | assertEquals("Context rank", NB_EVENTS, context.getRank()); | |
215 | ||
c32744d6 | 216 | event = fExperiment.getNext(context); |
0316808c FC |
217 | assertNull("Event", event); |
218 | assertEquals("Context rank", NB_EVENTS, context.getRank()); | |
d18dd09b ASL |
219 | } |
220 | ||
25e48683 FC |
221 | // ------------------------------------------------------------------------ |
222 | // seekEvent on timestamp | |
223 | // ------------------------------------------------------------------------ | |
224 | ||
6e1886bc | 225 | @Test |
54a7a54c | 226 | public void testSeekTimestampOnCacheBoundary() { |
0316808c | 227 | long cacheSize = fExperiment.getCacheSize(); |
25e48683 | 228 | |
0316808c FC |
229 | // Position trace at event rank 0 |
230 | ITmfContext context = fExperiment.seekEvent(new TmfTimestamp(1, SCALE, 0)); | |
231 | assertEquals("Context rank", 0, context.getRank()); | |
25e48683 | 232 | |
c32744d6 | 233 | ITmfEvent event = fExperiment.getNext(context); |
25e48683 | 234 | assertEquals("Event timestamp", 1, event.getTimestamp().getValue()); |
0316808c | 235 | assertEquals("Context rank", 1, context.getRank()); |
25e48683 | 236 | |
0316808c FC |
237 | // Position trace at event rank [cacheSize] |
238 | context = fExperiment.seekEvent(new TmfTimestamp(cacheSize + 1, SCALE, 0)); | |
239 | assertEquals("Event rank", cacheSize, context.getRank()); | |
25e48683 | 240 | |
c32744d6 | 241 | event = fExperiment.getNext(context); |
0316808c FC |
242 | assertEquals("Event timestamp", cacheSize + 1, event.getTimestamp().getValue()); |
243 | assertEquals("Context rank", cacheSize + 1, context.getRank()); | |
25e48683 | 244 | |
0316808c FC |
245 | // Position trace at event rank [4 * cacheSize] |
246 | context = fExperiment.seekEvent(new TmfTimestamp(4 * cacheSize + 1, SCALE, 0)); | |
247 | assertEquals("Context rank", 4 * cacheSize, context.getRank()); | |
25e48683 | 248 | |
c32744d6 | 249 | event = fExperiment.getNext(context); |
0316808c FC |
250 | assertEquals("Event timestamp", 4 * cacheSize + 1, event.getTimestamp().getValue()); |
251 | assertEquals("Context rank", 4 * cacheSize + 1, context.getRank()); | |
25e48683 FC |
252 | } |
253 | ||
6e1886bc | 254 | @Test |
54a7a54c | 255 | public void testSeekTimestampNotOnCacheBoundary() { |
0316808c FC |
256 | // Position trace at event rank 1 (TS = 2) |
257 | ITmfContext context = fExperiment.seekEvent(new TmfTimestamp(2, SCALE, 0)); | |
258 | assertEquals("Context rank", 1, context.getRank()); | |
25e48683 | 259 | |
c32744d6 | 260 | ITmfEvent event = fExperiment.getNext(context); |
25e48683 | 261 | assertEquals("Event timestamp", 2, event.getTimestamp().getValue()); |
0316808c | 262 | assertEquals("Context rank", 2, context.getRank()); |
25e48683 | 263 | |
0316808c | 264 | // Position trace at event rank 9 (TS = 10) |
25e48683 | 265 | context = fExperiment.seekEvent(new TmfTimestamp(10, SCALE, 0)); |
0316808c | 266 | assertEquals("Context rank", 9, context.getRank()); |
25e48683 | 267 | |
c32744d6 | 268 | event = fExperiment.getNext(context); |
25e48683 | 269 | assertEquals("Event timestamp", 10, event.getTimestamp().getValue()); |
0316808c | 270 | assertEquals("Context rank", 10, context.getRank()); |
25e48683 | 271 | |
0316808c | 272 | // Position trace at event rank 999 (TS = 1000) |
25e48683 | 273 | context = fExperiment.seekEvent(new TmfTimestamp(1000, SCALE, 0)); |
0316808c | 274 | assertEquals("Context rank", 999, context.getRank()); |
25e48683 | 275 | |
c32744d6 | 276 | event = fExperiment.getNext(context); |
25e48683 | 277 | assertEquals("Event timestamp", 1000, event.getTimestamp().getValue()); |
0316808c | 278 | assertEquals("Context rank", 1000, context.getRank()); |
25e48683 | 279 | |
0316808c | 280 | // Position trace at event rank 1001 (TS = 1002) |
25e48683 | 281 | context = fExperiment.seekEvent(new TmfTimestamp(1002, SCALE, 0)); |
0316808c | 282 | assertEquals("Context rank", 1001, context.getRank()); |
25e48683 | 283 | |
c32744d6 | 284 | event = fExperiment.getNext(context); |
25e48683 | 285 | assertEquals("Event timestamp", 1002, event.getTimestamp().getValue()); |
0316808c | 286 | assertEquals("Context rank", 1002, context.getRank()); |
25e48683 | 287 | |
0316808c | 288 | // Position trace at event rank 4500 (TS = 4501) |
25e48683 | 289 | context = fExperiment.seekEvent(new TmfTimestamp(4501, SCALE, 0)); |
0316808c | 290 | assertEquals("Context rank", 4500, context.getRank()); |
25e48683 | 291 | |
c32744d6 | 292 | event = fExperiment.getNext(context); |
25e48683 | 293 | assertEquals("Event timestamp", 4501, event.getTimestamp().getValue()); |
0316808c | 294 | assertEquals("Context rank", 4501, context.getRank()); |
25e48683 FC |
295 | } |
296 | ||
6e1886bc | 297 | @Test |
54a7a54c | 298 | public void testSeekTimestampOutOfScope() { |
25e48683 | 299 | // Position trace at beginning |
0316808c | 300 | ITmfContext context = fExperiment.seekEvent(new TmfTimestamp(-1, SCALE, 0)); |
25e48683 FC |
301 | assertEquals("Event rank", 0, context.getRank()); |
302 | ||
c32744d6 | 303 | ITmfEvent event = fExperiment.getNext(context); |
25e48683 FC |
304 | assertEquals("Event timestamp", 1, event.getTimestamp().getValue()); |
305 | assertEquals("Event rank", 1, context.getRank()); | |
306 | ||
307 | // Position trace at event passed the end | |
308 | context = fExperiment.seekEvent(new TmfTimestamp(NB_EVENTS + 1, SCALE, 0)); | |
c32744d6 | 309 | event = fExperiment.getNext(context); |
0316808c | 310 | assertNull("Event location", event); |
9b635e61 | 311 | assertEquals("Event rank", ITmfContext.UNKNOWN_RANK, context.getRank()); |
25e48683 FC |
312 | } |
313 | ||
314 | // ------------------------------------------------------------------------ | |
0316808c | 315 | // seekEvent by location (context rank is undefined) |
25e48683 FC |
316 | // ------------------------------------------------------------------------ |
317 | ||
6e1886bc | 318 | @Test |
54a7a54c | 319 | public void testSeekLocationOnCacheBoundary() { |
0316808c | 320 | long cacheSize = fExperiment.getCacheSize(); |
25e48683 | 321 | |
0316808c FC |
322 | // Position trace at event rank 0 |
323 | ITmfContext tmpContext = fExperiment.seekEvent(0); | |
324 | ITmfContext context = fExperiment.seekEvent(tmpContext.getLocation()); | |
25e48683 | 325 | |
c32744d6 | 326 | ITmfEvent event = fExperiment.getNext(context); |
25e48683 | 327 | assertEquals("Event timestamp", 1, event.getTimestamp().getValue()); |
25e48683 | 328 | |
c32744d6 | 329 | event = fExperiment.getNext(context); |
0316808c | 330 | assertEquals("Event timestamp", 2, event.getTimestamp().getValue()); |
25e48683 | 331 | |
0316808c FC |
332 | // Position trace at event rank 'cacheSize' |
333 | tmpContext = fExperiment.seekEvent(cacheSize); | |
334 | context = fExperiment.seekEvent(tmpContext.getLocation()); | |
25e48683 | 335 | |
c32744d6 | 336 | event = fExperiment.getNext(context); |
0316808c | 337 | assertEquals("Event timestamp", cacheSize + 1, event.getTimestamp().getValue()); |
25e48683 | 338 | |
c32744d6 | 339 | event = fExperiment.getNext(context); |
0316808c | 340 | assertEquals("Event timestamp", cacheSize + 2, event.getTimestamp().getValue()); |
25e48683 | 341 | |
0316808c FC |
342 | // Position trace at event rank 4 * 'cacheSize' |
343 | tmpContext = fExperiment.seekEvent(4 * cacheSize); | |
344 | context = fExperiment.seekEvent(tmpContext.getLocation()); | |
25e48683 | 345 | |
c32744d6 | 346 | event = fExperiment.getNext(context); |
0316808c | 347 | assertEquals("Event timestamp", 4 * cacheSize + 1, event.getTimestamp().getValue()); |
25e48683 | 348 | |
c32744d6 | 349 | event = fExperiment.getNext(context); |
0316808c | 350 | assertEquals("Event timestamp", 4 * cacheSize + 2, event.getTimestamp().getValue()); |
25e48683 FC |
351 | } |
352 | ||
6e1886bc | 353 | @Test |
54a7a54c | 354 | public void testSeekLocationNotOnCacheBoundary() { |
0316808c | 355 | long cacheSize = fExperiment.getCacheSize(); |
25e48683 | 356 | |
0316808c FC |
357 | // Position trace at event 'cacheSize' - 1 |
358 | ITmfContext tmpContext = fExperiment.seekEvent(cacheSize - 1); | |
359 | ITmfContext context = fExperiment.seekEvent(tmpContext.getLocation()); | |
25e48683 | 360 | |
c32744d6 | 361 | ITmfEvent event = fExperiment.getNext(context); |
0316808c | 362 | assertEquals("Event timestamp", cacheSize, event.getTimestamp().getValue()); |
25e48683 | 363 | |
c32744d6 | 364 | event = fExperiment.getNext(context); |
0316808c | 365 | assertEquals("Event timestamp", cacheSize + 1, event.getTimestamp().getValue()); |
25e48683 | 366 | |
0316808c FC |
367 | // Position trace at event rank 2 * 'cacheSize' - 1 |
368 | tmpContext = fExperiment.seekEvent(2 * cacheSize - 1); | |
369 | context = fExperiment.seekEvent(tmpContext.getLocation()); | |
370 | context = fExperiment.seekEvent(2 * cacheSize - 1); | |
25e48683 | 371 | |
c32744d6 | 372 | event = fExperiment.getNext(context); |
0316808c | 373 | assertEquals("Event timestamp", 2 * cacheSize, event.getTimestamp().getValue()); |
25e48683 | 374 | |
c32744d6 | 375 | event = fExperiment.getNext(context); |
0316808c | 376 | assertEquals("Event timestamp", 2 * cacheSize + 1, event.getTimestamp().getValue()); |
25e48683 FC |
377 | |
378 | // Position trace at event rank 4500 | |
0316808c FC |
379 | tmpContext = fExperiment.seekEvent(4500); |
380 | context = fExperiment.seekEvent(tmpContext.getLocation()); | |
25e48683 | 381 | |
c32744d6 | 382 | event = fExperiment.getNext(context); |
25e48683 | 383 | assertEquals("Event timestamp", 4501, event.getTimestamp().getValue()); |
25e48683 | 384 | |
c32744d6 | 385 | event = fExperiment.getNext(context); |
0316808c | 386 | assertEquals("Event timestamp", 4502, event.getTimestamp().getValue()); |
25e48683 FC |
387 | } |
388 | ||
6e1886bc | 389 | @Test |
54a7a54c | 390 | public void testSeekLocationOutOfScope() { |
25e48683 | 391 | // Position trace at beginning |
1e1bef82 | 392 | ITmfContext context = fExperiment.seekEvent((ITmfLocation) null); |
25e48683 | 393 | |
c32744d6 | 394 | ITmfEvent event = fExperiment.getNext(context); |
25e48683 | 395 | assertEquals("Event timestamp", 1, event.getTimestamp().getValue()); |
25e48683 | 396 | } |
d18dd09b | 397 | |
9b635e61 | 398 | // ------------------------------------------------------------------------ |
17324c9a | 399 | // getNext - updates the context |
9b635e61 | 400 | // ------------------------------------------------------------------------ |
d18dd09b | 401 | |
54a7a54c | 402 | private static void validateContextRanks(ITmfContext context) { |
17324c9a FC |
403 | assertTrue("Experiment context type", context instanceof TmfExperimentContext); |
404 | TmfExperimentContext ctx = (TmfExperimentContext) context; | |
9b635e61 | 405 | |
17324c9a FC |
406 | int nbTraces = ctx.getContexts().length; |
407 | ||
408 | // expRank = sum(trace ranks) - nbTraces + 1 (if lastTraceRead != NO_TRACE) | |
409 | long expRank = -nbTraces + ((ctx.getLastTrace() != TmfExperimentContext.NO_TRACE) ? 1 : 0); | |
410 | for (int i = 0; i < nbTraces; i++) { | |
411 | long rank = ctx.getContexts()[i].getRank(); | |
412 | if (rank == -1) { | |
413 | expRank = -1; | |
414 | break; | |
415 | } | |
416 | expRank += rank; | |
417 | } | |
418 | assertEquals("Experiment context rank", expRank, ctx.getRank()); | |
419 | } | |
420 | ||
6e1886bc | 421 | @Test |
54a7a54c | 422 | public void testGetNextAfteSeekingOnTS_1() { |
17324c9a FC |
423 | final long INITIAL_TS = 1; |
424 | final int NB_READS = 20; | |
425 | ||
426 | // On lower bound, returns the first event (ts = 1) | |
427 | final ITmfContext context = fExperiment.seekEvent(new TmfTimestamp(INITIAL_TS, SCALE, 0)); | |
428 | ||
429 | validateContextRanks(context); | |
430 | ||
431 | // Read NB_EVENTS | |
432 | ITmfEvent event; | |
433 | for (int i = 0; i < NB_READS; i++) { | |
434 | event = fExperiment.getNext(context); | |
435 | assertEquals("Event timestamp", INITIAL_TS + i, event.getTimestamp().getValue()); | |
436 | assertEquals("Event rank", INITIAL_TS + i, context.getRank()); | |
437 | } | |
438 | ||
439 | // Make sure we stay positioned | |
440 | event = fExperiment.parseEvent(context); | |
441 | assertEquals("Event timestamp", INITIAL_TS + NB_READS, event.getTimestamp().getValue()); | |
442 | assertEquals("Event rank", INITIAL_TS + NB_READS - 1, context.getRank()); | |
443 | ||
444 | validateContextRanks(context); | |
445 | } | |
446 | ||
6e1886bc | 447 | @Test |
54a7a54c | 448 | public void testGetNextAfteSeekingOnTS_2() { |
17324c9a FC |
449 | final long INITIAL_TS = 2; |
450 | final int NB_READS = 20; | |
451 | ||
452 | // On lower bound, returns the first event (ts = 2) | |
453 | final ITmfContext context = fExperiment.seekEvent(new TmfTimestamp(INITIAL_TS, SCALE, 0)); | |
454 | ||
455 | validateContextRanks(context); | |
456 | ||
457 | // Read NB_EVENTS | |
458 | ITmfEvent event; | |
459 | for (int i = 0; i < NB_READS; i++) { | |
460 | event = fExperiment.getNext(context); | |
461 | assertEquals("Event timestamp", INITIAL_TS + i, event.getTimestamp().getValue()); | |
462 | assertEquals("Event rank", INITIAL_TS + i, context.getRank()); | |
463 | } | |
464 | ||
465 | // Make sure we stay positioned | |
466 | event = fExperiment.parseEvent(context); | |
467 | assertEquals("Event timestamp", INITIAL_TS + NB_READS, event.getTimestamp().getValue()); | |
468 | assertEquals("Event rank", INITIAL_TS + NB_READS - 1, context.getRank()); | |
469 | ||
470 | validateContextRanks(context); | |
471 | } | |
472 | ||
6e1886bc | 473 | @Test |
54a7a54c | 474 | public void testGetNextAfteSeekingOnTS_3() { |
17324c9a FC |
475 | final long INITIAL_TS = 500; |
476 | final int NB_READS = 20; | |
477 | ||
478 | // On lower bound, returns the first event (ts = 500) | |
479 | final ITmfContext context = fExperiment.seekEvent(new TmfTimestamp(INITIAL_TS, SCALE, 0)); | |
480 | ||
481 | validateContextRanks(context); | |
482 | ||
483 | // Read NB_EVENTS | |
484 | ITmfEvent event; | |
485 | for (int i = 0; i < NB_READS; i++) { | |
486 | event = fExperiment.getNext(context); | |
487 | assertEquals("Event timestamp", INITIAL_TS + i, event.getTimestamp().getValue()); | |
488 | assertEquals("Event rank", INITIAL_TS + i, context.getRank()); | |
489 | } | |
490 | ||
491 | // Make sure we stay positioned | |
492 | event = fExperiment.parseEvent(context); | |
493 | assertEquals("Event timestamp", INITIAL_TS + NB_READS, event.getTimestamp().getValue()); | |
494 | assertEquals("Event rank", INITIAL_TS + NB_READS - 1, context.getRank()); | |
495 | ||
496 | validateContextRanks(context); | |
497 | } | |
498 | ||
6e1886bc | 499 | @Test |
54a7a54c | 500 | public void testGetNextAfterSeekingOnRank_1() { |
17324c9a FC |
501 | final long INITIAL_RANK = 0L; |
502 | final int NB_READS = 20; | |
503 | ||
504 | // On lower bound, returns the first event (rank = 0) | |
505 | final ITmfContext context = fExperiment.seekEvent(INITIAL_RANK); | |
506 | ||
507 | validateContextRanks(context); | |
508 | ||
509 | // Read NB_EVENTS | |
510 | ITmfEvent event; | |
511 | for (int i = 0; i < NB_READS; i++) { | |
512 | event = fExperiment.getNext(context); | |
513 | assertEquals("Event timestamp", INITIAL_RANK + i + 1, event.getTimestamp().getValue()); | |
514 | assertEquals("Event rank", INITIAL_RANK + i + 1, context.getRank()); | |
515 | } | |
516 | ||
517 | // Make sure we stay positioned | |
518 | event = fExperiment.parseEvent(context); | |
519 | assertEquals("Event timestamp", INITIAL_RANK + NB_READS + 1, event.getTimestamp().getValue()); | |
520 | assertEquals("Event rank", INITIAL_RANK + NB_READS, context.getRank()); | |
521 | ||
522 | validateContextRanks(context); | |
523 | } | |
524 | ||
6e1886bc | 525 | @Test |
54a7a54c | 526 | public void testGetNextAfterSeekingOnRank_2() { |
17324c9a FC |
527 | final long INITIAL_RANK = 1L; |
528 | final int NB_READS = 20; | |
529 | ||
530 | // On lower bound, returns the first event (rank = 0) | |
531 | final ITmfContext context = fExperiment.seekEvent(INITIAL_RANK); | |
d18dd09b | 532 | |
17324c9a FC |
533 | validateContextRanks(context); |
534 | ||
535 | // Read NB_EVENTS | |
536 | ITmfEvent event; | |
537 | for (int i = 0; i < NB_READS; i++) { | |
c32744d6 | 538 | event = fExperiment.getNext(context); |
17324c9a FC |
539 | assertEquals("Event timestamp", INITIAL_RANK + i + 1, event.getTimestamp().getValue()); |
540 | assertEquals("Event rank", INITIAL_RANK + i + 1, context.getRank()); | |
9b635e61 | 541 | } |
17324c9a FC |
542 | |
543 | // Make sure we stay positioned | |
544 | event = fExperiment.parseEvent(context); | |
545 | assertEquals("Event timestamp", INITIAL_RANK + NB_READS + 1, event.getTimestamp().getValue()); | |
546 | assertEquals("Event rank", INITIAL_RANK + NB_READS, context.getRank()); | |
547 | ||
548 | validateContextRanks(context); | |
549 | } | |
550 | ||
6e1886bc | 551 | @Test |
54a7a54c | 552 | public void testGetNextAfterSeekingOnRank_3() { |
17324c9a FC |
553 | final long INITIAL_RANK = 500L; |
554 | final int NB_READS = 20; | |
555 | ||
556 | // On lower bound, returns the first event (rank = 0) | |
557 | final ITmfContext context = fExperiment.seekEvent(INITIAL_RANK); | |
558 | ||
559 | validateContextRanks(context); | |
560 | ||
561 | // Read NB_EVENTS | |
562 | ITmfEvent event; | |
563 | for (int i = 0; i < NB_READS; i++) { | |
564 | event = fExperiment.getNext(context); | |
565 | assertEquals("Event timestamp", INITIAL_RANK + i + 1, event.getTimestamp().getValue()); | |
566 | assertEquals("Event rank", INITIAL_RANK + i + 1, context.getRank()); | |
567 | } | |
568 | ||
569 | // Make sure we stay positioned | |
570 | event = fExperiment.parseEvent(context); | |
571 | assertEquals("Event timestamp", INITIAL_RANK + NB_READS + 1, event.getTimestamp().getValue()); | |
572 | assertEquals("Event rank", INITIAL_RANK + NB_READS, context.getRank()); | |
573 | ||
574 | validateContextRanks(context); | |
575 | } | |
576 | ||
6e1886bc | 577 | @Test |
54a7a54c | 578 | public void testGetNextAfterSeekingOnLocation_1() { |
1e1bef82 | 579 | final ITmfLocation INITIAL_LOC = null; |
17324c9a FC |
580 | final long INITIAL_TS = 1; |
581 | final int NB_READS = 20; | |
582 | ||
583 | // On lower bound, returns the first event (ts = 1) | |
584 | final ITmfContext context = fExperiment.seekEvent(INITIAL_LOC); | |
585 | ||
586 | validateContextRanks(context); | |
587 | ||
588 | // Read NB_EVENTS | |
589 | ITmfEvent event; | |
590 | for (int i = 0; i < NB_READS; i++) { | |
591 | event = fExperiment.getNext(context); | |
592 | assertEquals("Event timestamp", INITIAL_TS + i, event.getTimestamp().getValue()); | |
593 | assertEquals("Event rank", INITIAL_TS + i, context.getRank()); | |
594 | } | |
595 | ||
596 | // Make sure we stay positioned | |
597 | event = fExperiment.parseEvent(context); | |
598 | assertEquals("Event timestamp", INITIAL_TS + NB_READS, event.getTimestamp().getValue()); | |
599 | assertEquals("Event rank", INITIAL_TS + NB_READS - 1, context.getRank()); | |
600 | ||
601 | validateContextRanks(context); | |
602 | } | |
603 | ||
6e1886bc | 604 | @Test |
54a7a54c | 605 | public void testGetNextAfterSeekingOnLocation_2() { |
1e1bef82 | 606 | final ITmfLocation INITIAL_LOC = fExperiment.seekEvent(1L).getLocation(); |
17324c9a FC |
607 | final long INITIAL_TS = 2; |
608 | final int NB_READS = 20; | |
609 | ||
610 | // On lower bound, returns the first event (ts = 2) | |
611 | final ITmfContext context = fExperiment.seekEvent(INITIAL_LOC); | |
612 | ||
613 | validateContextRanks(context); | |
614 | ||
615 | // Read NB_EVENTS | |
616 | ITmfEvent event; | |
617 | for (int i = 0; i < NB_READS; i++) { | |
618 | event = fExperiment.getNext(context); | |
619 | assertEquals("Event timestamp", INITIAL_TS + i, event.getTimestamp().getValue()); | |
620 | } | |
621 | ||
622 | // Make sure we stay positioned | |
623 | event = fExperiment.parseEvent(context); | |
624 | assertEquals("Event timestamp", INITIAL_TS + NB_READS, event.getTimestamp().getValue()); | |
625 | ||
626 | validateContextRanks(context); | |
627 | } | |
628 | ||
6e1886bc | 629 | @Test |
54a7a54c | 630 | public void testGetNextAfterSeekingOnLocation_3() { |
1e1bef82 | 631 | final ITmfLocation INITIAL_LOC = fExperiment.seekEvent(500L).getLocation(); |
17324c9a FC |
632 | final long INITIAL_TS = 501; |
633 | final int NB_READS = 20; | |
634 | ||
635 | // On lower bound, returns the first event (ts = 501) | |
636 | final ITmfContext context = fExperiment.seekEvent(INITIAL_LOC); | |
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 | } | |
646 | ||
647 | // Make sure we stay positioned | |
648 | event = fExperiment.parseEvent(context); | |
649 | assertEquals("Event timestamp", INITIAL_TS + NB_READS, event.getTimestamp().getValue()); | |
650 | ||
651 | validateContextRanks(context); | |
652 | } | |
653 | ||
6e1886bc | 654 | @Test |
54a7a54c | 655 | public void testGetNextLocation() { |
17324c9a FC |
656 | ITmfContext context1 = fExperiment.seekEvent(0); |
657 | fExperiment.getNext(context1); | |
d62bb185 | 658 | ITmfLocation location = context1.getLocation(); |
17324c9a FC |
659 | ITmfEvent event1 = fExperiment.getNext(context1); |
660 | ITmfContext context2 = fExperiment.seekEvent(location); | |
661 | ITmfEvent event2 = fExperiment.getNext(context2); | |
662 | assertEquals("Event timestamp", event1.getTimestamp().getValue(), event2.getTimestamp().getValue()); | |
663 | } | |
664 | ||
6e1886bc | 665 | @Test |
54a7a54c | 666 | public void testGetNextEndLocation() { |
17324c9a FC |
667 | ITmfContext context1 = fExperiment.seekEvent(fExperiment.getNbEvents() - 1); |
668 | fExperiment.getNext(context1); | |
d62bb185 | 669 | ITmfLocation location = context1.getLocation(); |
17324c9a FC |
670 | ITmfContext context2 = fExperiment.seekEvent(location); |
671 | ITmfEvent event = fExperiment.getNext(context2); | |
672 | assertNull("Event", event); | |
d18dd09b | 673 | } |
9b635e61 | 674 | |
d18dd09b ASL |
675 | // ------------------------------------------------------------------------ |
676 | // processRequest | |
677 | // ------------------------------------------------------------------------ | |
678 | ||
6e1886bc | 679 | @Test |
54a7a54c | 680 | public void testProcessRequestForNbEvents() throws InterruptedException { |
d18dd09b | 681 | final int nbEvents = 1000; |
6256d8ad | 682 | final Vector<ITmfEvent> requestedEvents = new Vector<ITmfEvent>(); |
d18dd09b | 683 | |
25e48683 | 684 | final TmfTimeRange range = new TmfTimeRange(TmfTimestamp.BIG_BANG, TmfTimestamp.BIG_CRUNCH); |
7184fc40 | 685 | final TmfEventRequest request = new TmfEventRequest(ITmfEvent.class, |
672a642a | 686 | range, 0, nbEvents, ExecutionType.FOREGROUND) { |
25e48683 | 687 | @Override |
6256d8ad | 688 | public void handleData(final ITmfEvent event) { |
25e48683 FC |
689 | super.handleData(event); |
690 | requestedEvents.add(event); | |
691 | } | |
d18dd09b ASL |
692 | }; |
693 | fExperiment.sendRequest(request); | |
694 | request.waitForCompletion(); | |
695 | ||
696 | assertEquals("nbEvents", nbEvents, requestedEvents.size()); | |
697 | assertTrue("isCompleted", request.isCompleted()); | |
698 | assertFalse("isCancelled", request.isCancelled()); | |
699 | ||
700 | // Ensure that we have distinct events. | |
25e48683 | 701 | // Don't go overboard: we are not validating the stub! |
20658947 | 702 | for (int i = 0; i < nbEvents; i++) { |
d18dd09b | 703 | assertEquals("Distinct events", i+1, requestedEvents.get(i).getTimestamp().getValue()); |
20658947 | 704 | } |
d18dd09b | 705 | } |
25e48683 | 706 | |
6e1886bc | 707 | @Test |
54a7a54c | 708 | public void testProcessRequestForAllEvents() throws InterruptedException { |
9b749023 | 709 | final int nbEvents = TmfDataRequest.ALL_DATA; |
6256d8ad | 710 | final Vector<ITmfEvent> requestedEvents = new Vector<ITmfEvent>(); |
25e48683 | 711 | final long nbExpectedEvents = NB_EVENTS; |
d18dd09b | 712 | |
25e48683 | 713 | final TmfTimeRange range = new TmfTimeRange(TmfTimestamp.BIG_BANG, TmfTimestamp.BIG_CRUNCH); |
7184fc40 | 714 | final TmfEventRequest request = new TmfEventRequest(ITmfEvent.class, |
672a642a | 715 | range, 0, nbEvents, ExecutionType.FOREGROUND) { |
25e48683 | 716 | @Override |
6256d8ad | 717 | public void handleData(final ITmfEvent event) { |
25e48683 FC |
718 | super.handleData(event); |
719 | requestedEvents.add(event); | |
720 | } | |
d18dd09b ASL |
721 | }; |
722 | fExperiment.sendRequest(request); | |
723 | request.waitForCompletion(); | |
724 | ||
9b635e61 | 725 | assertEquals("nbEvents", nbExpectedEvents, requestedEvents.size()); |
d18dd09b ASL |
726 | assertTrue("isCompleted", request.isCompleted()); |
727 | assertFalse("isCancelled", request.isCancelled()); | |
728 | ||
729 | // Ensure that we have distinct events. | |
25e48683 | 730 | // Don't go overboard: we are not validating the stub! |
20658947 | 731 | for (int i = 0; i < nbExpectedEvents; i++) { |
d18dd09b | 732 | assertEquals("Distinct events", i+1, requestedEvents.get(i).getTimestamp().getValue()); |
20658947 | 733 | } |
d18dd09b | 734 | } |
25e48683 | 735 | |
d18dd09b ASL |
736 | // ------------------------------------------------------------------------ |
737 | // cancel | |
738 | // ------------------------------------------------------------------------ | |
739 | ||
6e1886bc | 740 | @Test |
54a7a54c | 741 | public void testCancel() throws InterruptedException { |
25e48683 | 742 | final int nbEvents = NB_EVENTS; |
672a642a | 743 | final int limit = BLOCK_SIZE; |
6256d8ad | 744 | final Vector<ITmfEvent> requestedEvents = new Vector<ITmfEvent>(); |
d18dd09b | 745 | |
25e48683 | 746 | final TmfTimeRange range = new TmfTimeRange(TmfTimestamp.BIG_BANG, TmfTimestamp.BIG_CRUNCH); |
7184fc40 | 747 | final TmfEventRequest request = new TmfEventRequest(ITmfEvent.class, |
672a642a | 748 | range, 0, nbEvents, ExecutionType.FOREGROUND) { |
25e48683 | 749 | int nbRead = 0; |
672a642a | 750 | |
25e48683 | 751 | @Override |
6256d8ad | 752 | public void handleData(final ITmfEvent event) { |
25e48683 FC |
753 | super.handleData(event); |
754 | requestedEvents.add(event); | |
672a642a | 755 | if (++nbRead == limit) { |
25e48683 | 756 | cancel(); |
20658947 | 757 | } |
25e48683 | 758 | } |
d18dd09b ASL |
759 | }; |
760 | fExperiment.sendRequest(request); | |
761 | request.waitForCompletion(); | |
762 | ||
672a642a | 763 | assertEquals("nbEvents", limit, requestedEvents.size()); |
d18dd09b ASL |
764 | assertTrue("isCompleted", request.isCompleted()); |
765 | assertTrue("isCancelled", request.isCancelled()); | |
766 | } | |
25e48683 | 767 | |
d18dd09b ASL |
768 | // ------------------------------------------------------------------------ |
769 | // getTimestamp | |
770 | // ------------------------------------------------------------------------ | |
771 | ||
6e1886bc | 772 | @Test |
54a7a54c | 773 | public void testGetTimestamp() { |
17324c9a FC |
774 | assertEquals("getTimestamp", new TmfTimestamp( 1, (byte) -3), fExperiment.getTimestamp( 0)); |
775 | assertEquals("getTimestamp", new TmfTimestamp( 2, (byte) -3), fExperiment.getTimestamp( 1)); | |
776 | assertEquals("getTimestamp", new TmfTimestamp( 11, (byte) -3), fExperiment.getTimestamp( 10)); | |
777 | assertEquals("getTimestamp", new TmfTimestamp( 101, (byte) -3), fExperiment.getTimestamp( 100)); | |
778 | assertEquals("getTimestamp", new TmfTimestamp( 1001, (byte) -3), fExperiment.getTimestamp( 1000)); | |
779 | assertEquals("getTimestamp", new TmfTimestamp( 2001, (byte) -3), fExperiment.getTimestamp( 2000)); | |
780 | assertEquals("getTimestamp", new TmfTimestamp( 2501, (byte) -3), fExperiment.getTimestamp( 2500)); | |
781 | assertEquals("getTimestamp", new TmfTimestamp(10000, (byte) -3), fExperiment.getTimestamp( 9999)); | |
782 | assertEquals("getTimestamp", new TmfTimestamp(20000, (byte) -3), fExperiment.getTimestamp(19999)); | |
783 | assertNull("getTimestamp", fExperiment.getTimestamp(20000)); | |
d18dd09b ASL |
784 | } |
785 | ||
66262ad8 BH |
786 | // ------------------------------------------------------------------------ |
787 | // getInitialRangeOffset, getCurrentRange, getCurrentTime | |
788 | // ------------------------------------------------------------------------ | |
2771b032 | 789 | |
6e1886bc | 790 | @Test |
66262ad8 | 791 | public void testDefaultCurrentTimeValues() { |
850a3ae2 PT |
792 | ITmfTrace[] traces = setupTraces(); |
793 | TmfExperimentStub exp = new TmfExperimentStub(EXPERIMENT, traces, BLOCK_SIZE); | |
66262ad8 BH |
794 | |
795 | // verify initial values | |
796 | TmfTimestamp initRange = new TmfTimestamp(DEFAULT_INITIAL_OFFSET_VALUE, ITmfTimestamp.NANOSECOND_SCALE); | |
797 | assertEquals("getInitialRangeOffset", initRange, exp.getInitialRangeOffset()); | |
850a3ae2 PT |
798 | |
799 | exp.dispose(); | |
800 | } | |
801 | ||
802 | @Test | |
803 | public void testInitialRangeOffset() { | |
804 | ITmfTrace[] traces = setupTraces(); | |
805 | ((TmfTraceStub) traces[0]).setInitialRangeOffset(new TmfTimestamp(5, ITmfTimestamp.MILLISECOND_SCALE)); | |
806 | ((TmfTraceStub) traces[1]).setInitialRangeOffset(new TmfTimestamp(2, ITmfTimestamp.MILLISECOND_SCALE)); | |
807 | TmfExperimentStub exp = new TmfExperimentStub(EXPERIMENT, traces, BLOCK_SIZE); | |
808 | ||
809 | TmfTimestamp initRange = new TmfTimestamp(2, ITmfTimestamp.MILLISECOND_SCALE); | |
810 | assertEquals("getInitialRangeOffset", initRange, exp.getInitialRangeOffset()); | |
811 | ||
812 | exp.dispose(); | |
66262ad8 | 813 | } |
6e1886bc | 814 | |
17324c9a | 815 | } |