2010-09-17 Francois Chouinard <fchouinard@gmail.com> Contribution for Bug325662
[deliverable/tracecompass.git] / org.eclipse.linuxtools.tmf.tests / src / org / eclipse / linuxtools / tmf / tests / trace / TmfTraceTest.java
CommitLineData
d18dd09b 1/*******************************************************************************
e31e01e8 2 * Copyright (c) 2009, 2010 Ericsson
d18dd09b
ASL
3 *
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
8 *
9 * Contributors:
10 * Francois Chouinard - Initial API and implementation
11 *******************************************************************************/
12
13package org.eclipse.linuxtools.tmf.tests.trace;
14
15import java.io.File;
e1ab8984
FC
16import java.io.IOException;
17import java.net.URISyntaxException;
18import java.net.URL;
d18dd09b
ASL
19import java.util.Vector;
20
e1ab8984
FC
21import junit.framework.TestCase;
22
23import org.eclipse.core.runtime.FileLocator;
24import org.eclipse.core.runtime.Path;
951d134a 25import org.eclipse.linuxtools.tmf.component.ITmfDataProvider;
e31e01e8 26import org.eclipse.linuxtools.tmf.component.TmfProviderManager;
d18dd09b
ASL
27import org.eclipse.linuxtools.tmf.event.TmfEvent;
28import org.eclipse.linuxtools.tmf.event.TmfTimeRange;
29import org.eclipse.linuxtools.tmf.event.TmfTimestamp;
e31e01e8 30import org.eclipse.linuxtools.tmf.request.TmfEventRequest;
e1ab8984 31import org.eclipse.linuxtools.tmf.tests.TmfCoreTestPlugin;
ff4ed569 32import org.eclipse.linuxtools.tmf.trace.ITmfContext;
54d55ced 33import org.eclipse.linuxtools.tmf.trace.TmfCheckpoint;
9f584e4c 34import org.eclipse.linuxtools.tmf.trace.TmfContext;
ff4ed569 35import org.eclipse.linuxtools.tmf.trace.TmfTrace;
d18dd09b
ASL
36import org.eclipse.linuxtools.tmf.trace.TmfTraceStub;
37
38/**
39 * <b><u>TmfTraceTest</u></b>
40 * <p>
ff4ed569 41 * Test suite for the TmfTrace class.
d18dd09b
ASL
42 */
43public class TmfTraceTest extends TestCase {
44
ff4ed569
FC
45 // ------------------------------------------------------------------------
46 // Variables
47 // ------------------------------------------------------------------------
48
d18dd09b 49 private static final String DIRECTORY = "testfiles";
85fb0e54 50 private static final String TEST_STREAM = "A-Test-10K";
ff4ed569 51 private static final int BLOCK_SIZE = 500;
e31e01e8
FC
52 private static final int NB_EVENTS = 10000;
53 private static TmfTraceStub fTrace = null;
d18dd09b
ASL
54
55 private static byte SCALE = (byte) -3;
56
e31e01e8 57 // ------------------------------------------------------------------------
d18dd09b 58 // Housekeeping
e31e01e8 59 // ------------------------------------------------------------------------
d18dd09b 60
ff4ed569
FC
61 public TmfTraceTest(String name) throws Exception {
62 super(name);
63 }
64
65 @Override
66 protected void setUp() throws Exception {
67 super.setUp();
68 fTrace = setupTrace(DIRECTORY + File.separator + TEST_STREAM);
9b635e61 69 // Dummy request to force the trace indexing
cb866e08
FC
70 TmfEventRequest<TmfEvent> request = new TmfEventRequest<TmfEvent>(TmfEvent.class) {
71 @Override
f9673903
FC
72 public void handleData(TmfEvent event) {
73 super.handleData(event);
cb866e08
FC
74 }
75 };
76 fTrace.sendRequest(request);
77 request.waitForCompletion();
ff4ed569
FC
78 }
79
80 @Override
81 protected void tearDown() throws Exception {
82 super.tearDown();
83 fTrace.dispose();
84 fTrace = null;
85 }
86
87 // ------------------------------------------------------------------------
88 // Helper functions
89 // ------------------------------------------------------------------------
90
e1ab8984
FC
91 private TmfTraceStub setupTrace(String path) {
92 if (fTrace == null) {
93 try {
cbd4ad82 94 URL location = FileLocator.find(TmfCoreTestPlugin.getDefault().getBundle(), new Path(path), null);
e1ab8984 95 File test = new File(FileLocator.toFileURL(location).toURI());
ff4ed569 96 fTrace = new TmfTraceStub(test.getPath(), BLOCK_SIZE, false);
e1ab8984
FC
97 } catch (URISyntaxException e) {
98 e.printStackTrace();
99 } catch (IOException e) {
100 e.printStackTrace();
101 }
102 }
103 return fTrace;
104 }
105
e31e01e8 106 // ------------------------------------------------------------------------
d18dd09b 107 // Constructors
e31e01e8 108 // ------------------------------------------------------------------------
d18dd09b
ASL
109
110 public void testTmfTraceDefault() throws Exception {
e1ab8984 111 TmfTraceStub trace = null;
ff4ed569 112 File testfile = null;
e1ab8984 113 try {
cbd4ad82 114 URL location = FileLocator.find(TmfCoreTestPlugin.getDefault().getBundle(), new Path(DIRECTORY + File.separator + TEST_STREAM), null);
ff4ed569
FC
115 testfile = new File(FileLocator.toFileURL(location).toURI());
116 trace = new TmfTraceStub(testfile.getPath());
e1ab8984 117 } catch (URISyntaxException e) {
ff4ed569 118 fail("URISyntaxException");
e1ab8984 119 } catch (IOException e) {
ff4ed569 120 fail("IOException");
e1ab8984 121 }
ff4ed569
FC
122 assertTrue ("Open trace", trace != null);
123 assertEquals("getType", TmfEvent.class, trace.getType());
124 assertEquals("getPath", testfile.getPath(), trace.getPath());
125 assertEquals("getName", TEST_STREAM, trace.getName());
664902f7 126 assertEquals("getCacheSize", TmfTrace.DEFAULT_INDEX_PAGE_SIZE, trace.getCacheSize());
ff4ed569
FC
127 }
128
129 public void testTmfTraceDefaultCacheSize() throws Exception {
130 TmfTraceStub trace = null;
131 File testfile = null;
132 try {
133 URL location = FileLocator.find(TmfCoreTestPlugin.getDefault().getBundle(), new Path(DIRECTORY + File.separator + TEST_STREAM), null);
134 testfile = new File(FileLocator.toFileURL(location).toURI());
135 trace = new TmfTraceStub(testfile.getPath(), 0);
136 } catch (URISyntaxException e) {
137 fail("URISyntaxException");
138 } catch (IOException e) {
139 fail("IOException");
140 }
141 assertTrue ("Open trace", trace != null);
142 assertEquals("getType", TmfEvent.class, trace.getType());
143 assertEquals("getPath", testfile.getPath(), trace.getPath());
144 assertEquals("getName", TEST_STREAM, trace.getName());
664902f7 145 assertEquals("getCacheSize", TmfTrace.DEFAULT_INDEX_PAGE_SIZE, trace.getCacheSize());
d18dd09b
ASL
146 }
147
148 public void testTmfTrace() throws Exception {
ff4ed569
FC
149 assertEquals("getType", TmfEvent.class, fTrace.getType());
150 assertEquals("getName", TEST_STREAM, fTrace.getName());
151 assertEquals("getCacheSize", BLOCK_SIZE, fTrace.getCacheSize());
152 }
153
154 public void testClone() throws Exception {
155 TmfTraceStub trace = fTrace.clone();
156 assertEquals("getType", TmfEvent.class, trace.getType());
157 assertEquals("getPath", fTrace.getPath(), trace.getPath());
158 assertEquals("getName", TEST_STREAM, trace.getName());
159 assertEquals("getCacheSize", BLOCK_SIZE, trace.getCacheSize());
160 assertEquals("getTimeRange", fTrace.getTimeRange(), trace.getTimeRange());
d18dd09b
ASL
161 }
162
ff4ed569
FC
163 // ------------------------------------------------------------------------
164 // Get/Set time range
165 // ------------------------------------------------------------------------
166
167 public void testSetTimeRange() throws Exception {
168 TmfTraceStub trace = fTrace.clone();
169
170 assertEquals("getRange-start", 1, trace.getTimeRange().getStartTime().getValue());
171 assertEquals("getRange-end", NB_EVENTS, trace.getTimeRange().getEndTime().getValue());
172 assertEquals("getStartTime", 1, trace.getStartTime().getValue());
173 assertEquals("getEndTime", NB_EVENTS, trace.getEndTime().getValue());
174
175 trace.setTimeRange(new TmfTimeRange(new TmfTimestamp(100), new TmfTimestamp(200)));
176 assertEquals("setTimeRange", 100, trace.getTimeRange().getStartTime().getValue());
177 assertEquals("setTimeRange", 200, trace.getTimeRange().getEndTime().getValue());
178 assertEquals("setTimeRange", 100, trace.getStartTime().getValue());
179 assertEquals("setTimeRange", 200, trace.getEndTime().getValue());
180 }
181
182 public void testSetStartTime() throws Exception {
183 TmfTraceStub trace = fTrace.clone();
184
185 assertEquals("getRange-start", 1, trace.getTimeRange().getStartTime().getValue());
186 assertEquals("getRange-end", NB_EVENTS, trace.getTimeRange().getEndTime().getValue());
187 assertEquals("getStartTime", 1, trace.getStartTime().getValue());
188 assertEquals("getEndTime", NB_EVENTS, trace.getEndTime().getValue());
189
190 trace.setStartTime(new TmfTimestamp(100));
191 assertEquals("setStartTime", 100, trace.getTimeRange().getStartTime().getValue());
192 assertEquals("setStartTime", NB_EVENTS, trace.getTimeRange().getEndTime().getValue());
193 assertEquals("setStartTime", 100, trace.getStartTime().getValue());
194 assertEquals("setStartTime", NB_EVENTS, trace.getEndTime().getValue());
195 }
196
197 public void testSetEndTime() throws Exception {
198 TmfTraceStub trace = fTrace.clone();
199
200 assertEquals("getRange-start", 1, trace.getTimeRange().getStartTime().getValue());
201 assertEquals("getRange-end", NB_EVENTS, trace.getTimeRange().getEndTime().getValue());
202 assertEquals("getStartTime", 1, trace.getStartTime().getValue());
203 assertEquals("getEndTime", NB_EVENTS, trace.getEndTime().getValue());
204
205 trace.setEndTime(new TmfTimestamp(100));
206 assertEquals("setEndTime", 1, trace.getTimeRange().getStartTime().getValue());
207 assertEquals("setEndTime", 100, trace.getTimeRange().getEndTime().getValue());
208 assertEquals("setEndTime", 1, trace.getStartTime().getValue());
209 assertEquals("setEndTime", 100, trace.getEndTime().getValue());
210 }
211
e31e01e8 212 // ------------------------------------------------------------------------
54d55ced 213 // Verify checkpoints
e31e01e8 214 // ------------------------------------------------------------------------
d18dd09b 215
ff4ed569
FC
216 public void testTmfTraceIndexing() throws Exception {
217 assertEquals("getCacheSize", BLOCK_SIZE, fTrace.getCacheSize());
218 assertEquals("getTraceSize", NB_EVENTS, fTrace.getNbEvents());
219 assertEquals("getRange-start", 1, fTrace.getTimeRange().getStartTime().getValue());
220 assertEquals("getRange-end", NB_EVENTS, fTrace.getTimeRange().getEndTime().getValue());
221 assertEquals("getStartTime", 1, fTrace.getStartTime().getValue());
222 assertEquals("getEndTime", NB_EVENTS, fTrace.getEndTime().getValue());
54d55ced
FC
223
224 Vector<TmfCheckpoint> checkpoints = fTrace.getCheckpoints();
225 int pageSize = fTrace.getCacheSize();
226 assertTrue("Checkpoints exist", checkpoints != null);
227
228 // Validate that each checkpoint points to the right event
229 for (int i = 0; i < checkpoints.size(); i++) {
230 TmfCheckpoint checkpoint = checkpoints.get(i);
231 TmfContext context = new TmfContext(checkpoint.getLocation(), i * pageSize);
232 TmfEvent event = fTrace.parseEvent(context);
233 assertTrue(context.getRank() == i * pageSize);
234 assertTrue((checkpoint.getTimestamp().compareTo(event.getTimestamp(), false) == 0));
235 }
236 }
237
238 // ------------------------------------------------------------------------
239 // parseEvent - make sure parseEvent doesn't update the context
240 // ------------------------------------------------------------------------
241
242 public void testParseEvent() throws Exception {
243
9b635e61
FC
244 int NB_READS = 20;
245
54d55ced
FC
246 // On lower bound, returns the first event (ts = 0)
247 TmfContext context = fTrace.seekEvent(new TmfTimestamp(0, SCALE, 0));
9b635e61 248 TmfContext svContext = new TmfContext(context);
54d55ced
FC
249
250 TmfEvent event = fTrace.parseEvent(context);
251 assertEquals("Event timestamp", 1, event.getTimestamp().getValue());
9b635e61
FC
252 assertEquals("Event rank", 0, context.getRank());
253 assertTrue("parseEvent", context.equals(svContext));
54d55ced
FC
254
255 event = fTrace.parseEvent(context);
256 assertEquals("Event timestamp", 1, event.getTimestamp().getValue());
9b635e61
FC
257 assertEquals("Event rank", 0, context.getRank());
258 assertTrue("parseEvent", context.equals(svContext));
54d55ced
FC
259
260 event = fTrace.parseEvent(context);
261 assertEquals("Event timestamp", 1, event.getTimestamp().getValue());
9b635e61
FC
262 assertEquals("Event rank", 0, context.getRank());
263 assertTrue("parseEvent", context.equals(svContext));
54d55ced 264
9b635e61
FC
265 // Position the trace at event NB_READS
266 for (int i = 1; i < NB_READS; i++) {
54d55ced
FC
267 event = fTrace.getNextEvent(context);
268 assertEquals("Event timestamp", i, event.getTimestamp().getValue());
269 }
270
9b635e61 271 svContext = new TmfContext(context);
54d55ced 272 event = fTrace.parseEvent(context);
9b635e61
FC
273 assertEquals("Event timestamp", NB_READS, event.getTimestamp().getValue());
274 assertEquals("Event rank", NB_READS -1 , context.getRank());
275 assertTrue("parseEvent", context.equals(svContext));
54d55ced
FC
276
277 event = fTrace.parseEvent(context);
9b635e61
FC
278 assertEquals("Event timestamp", NB_READS, event.getTimestamp().getValue());
279 assertEquals("Event rank", NB_READS - 1, context.getRank());
280 assertTrue("parseEvent", context.equals(svContext));
54d55ced
FC
281 }
282
283 // ------------------------------------------------------------------------
284 // getNextEvent - updates the context
285 // ------------------------------------------------------------------------
286
287 public void testGetNextEvent() throws Exception {
288
9b635e61
FC
289 int NB_READS = 20;
290
291 // On lower bound, returns the first event (ts = 1)
54d55ced 292 TmfContext context = fTrace.seekEvent(new TmfTimestamp(0, SCALE, 0));
54d55ced 293
9b635e61
FC
294 // Read NB_EVENTS
295 TmfEvent event;
296 for (int i = 0; i < NB_READS; i++) {
54d55ced 297 event = fTrace.getNextEvent(context);
9b635e61
FC
298 assertEquals("Event timestamp", i + 1, event.getTimestamp().getValue());
299 assertEquals("Event rank", i + 1, context.getRank());
54d55ced 300 }
9b635e61
FC
301
302 // Make sure we stay positioned
303 event = fTrace.parseEvent(context);
304 assertEquals("Event timestamp", NB_READS + 1, event.getTimestamp().getValue());
305 assertEquals("Event rank", NB_READS, context.getRank());
54d55ced
FC
306 }
307
308 // ------------------------------------------------------------------------
309 // seekLocation
310 // Note: seekLocation() does not reliably set the rank
311 // ------------------------------------------------------------------------
312
313 public void testSeekLocationOnCacheBoundary() throws Exception {
314
315 // Position trace at event rank 0
9f584e4c 316 TmfContext context = fTrace.seekLocation(null);
9b635e61 317 TmfEvent event = fTrace.parseEvent(context);
54d55ced 318 assertEquals("Event timestamp", 1, event.getTimestamp().getValue());
ff4ed569 319 assertEquals("Event rank", 0, context.getRank());
9b635e61
FC
320
321 context = fTrace.seekLocation(context.getLocation());
322 assertEquals("Event rank", ITmfContext.UNKNOWN_RANK, context.getRank());
323
324 event = fTrace.parseEvent(context);
54d55ced 325 assertEquals("Event timestamp", 1, event.getTimestamp().getValue());
9b635e61
FC
326 assertEquals("Event rank", ITmfContext.UNKNOWN_RANK, context.getRank());
327
328 event = fTrace.getNextEvent(context);
329 assertEquals("Event timestamp", 1, event.getTimestamp().getValue());
330 assertEquals("Event rank", ITmfContext.UNKNOWN_RANK, context.getRank());
54d55ced
FC
331
332 // Position trace at event rank 1000
333 TmfContext tmpContext = fTrace.seekEvent(new TmfTimestamp(1001, SCALE, 0));
9b635e61 334 context = fTrace.seekLocation(tmpContext.getLocation());
ff4ed569 335 assertEquals("Event rank", ITmfContext.UNKNOWN_RANK, context.getRank());
9b635e61
FC
336
337 event = fTrace.parseEvent(context);
54d55ced 338 assertEquals("Event timestamp", 1001, event.getTimestamp().getValue());
ff4ed569 339 assertEquals("Event rank", ITmfContext.UNKNOWN_RANK, context.getRank());
9b635e61
FC
340
341 event = fTrace.getNextEvent(context);
54d55ced 342 assertEquals("Event timestamp", 1001, event.getTimestamp().getValue());
ff4ed569 343 assertEquals("Event rank", ITmfContext.UNKNOWN_RANK, context.getRank());
54d55ced
FC
344
345 // Position trace at event rank 4000
346 tmpContext = fTrace.seekEvent(new TmfTimestamp(4001, SCALE, 0));
9b635e61 347 context = fTrace.seekLocation(tmpContext.getLocation());
ff4ed569 348 assertEquals("Event rank", ITmfContext.UNKNOWN_RANK, context.getRank());
9b635e61
FC
349
350 event = fTrace.parseEvent(context);
54d55ced 351 assertEquals("Event timestamp", 4001, event.getTimestamp().getValue());
ff4ed569 352 assertEquals("Event rank", ITmfContext.UNKNOWN_RANK, context.getRank());
9b635e61
FC
353
354 event = fTrace.getNextEvent(context);
54d55ced 355 assertEquals("Event timestamp", 4001, event.getTimestamp().getValue());
ff4ed569 356 assertEquals("Event rank", ITmfContext.UNKNOWN_RANK, context.getRank());
54d55ced
FC
357 }
358
359 public void testSeekLocationNotOnCacheBoundary() throws Exception {
360
361 // Position trace at event rank 9
362 TmfContext tmpContext = fTrace.seekEvent(new TmfTimestamp(10, SCALE, 0));
9b635e61 363 TmfContext context = fTrace.seekLocation(tmpContext.getLocation());
ff4ed569 364 assertEquals("Event rank", ITmfContext.UNKNOWN_RANK, context.getRank());
9b635e61
FC
365
366 TmfEvent event = fTrace.parseEvent(context);
54d55ced 367 assertEquals("Event timestamp", 10, event.getTimestamp().getValue());
ff4ed569 368 assertEquals("Event rank", ITmfContext.UNKNOWN_RANK, context.getRank());
9b635e61
FC
369
370 event = fTrace.getNextEvent(context);
54d55ced 371 assertEquals("Event timestamp", 10, event.getTimestamp().getValue());
ff4ed569 372 assertEquals("Event rank", ITmfContext.UNKNOWN_RANK, context.getRank());
54d55ced
FC
373
374 // Position trace at event rank 999
375 tmpContext = fTrace.seekEvent(new TmfTimestamp(1000, SCALE, 0));
9b635e61 376 context = fTrace.seekLocation(tmpContext.getLocation());
ff4ed569 377 assertEquals("Event rank", ITmfContext.UNKNOWN_RANK, context.getRank());
9b635e61
FC
378
379 event = fTrace.parseEvent(context);
54d55ced 380 assertEquals("Event timestamp", 1000, event.getTimestamp().getValue());
ff4ed569 381 assertEquals("Event rank", ITmfContext.UNKNOWN_RANK, context.getRank());
9b635e61
FC
382
383 event = fTrace.getNextEvent(context);
54d55ced 384 assertEquals("Event timestamp", 1000, event.getTimestamp().getValue());
ff4ed569 385 assertEquals("Event rank", ITmfContext.UNKNOWN_RANK, context.getRank());
54d55ced
FC
386
387 // Position trace at event rank 1001
388 tmpContext = fTrace.seekEvent(new TmfTimestamp(1002, SCALE, 0));
9b635e61 389 context = fTrace.seekLocation(tmpContext.getLocation());
ff4ed569 390 assertEquals("Event rank", ITmfContext.UNKNOWN_RANK, context.getRank());
9b635e61
FC
391
392 event = fTrace.parseEvent(context);
54d55ced 393 assertEquals("Event timestamp", 1002, event.getTimestamp().getValue());
ff4ed569 394 assertEquals("Event rank", ITmfContext.UNKNOWN_RANK, context.getRank());
9b635e61
FC
395
396 event = fTrace.getNextEvent(context);
54d55ced 397 assertEquals("Event timestamp", 1002, event.getTimestamp().getValue());
ff4ed569 398 assertEquals("Event rank", ITmfContext.UNKNOWN_RANK, context.getRank());
54d55ced
FC
399
400 // Position trace at event rank 4500
401 tmpContext = fTrace.seekEvent(new TmfTimestamp(4501, SCALE, 0));
9b635e61 402 context = fTrace.seekLocation(tmpContext.getLocation());
ff4ed569 403 assertEquals("Event rank", ITmfContext.UNKNOWN_RANK, context.getRank());
9b635e61
FC
404
405 event = fTrace.parseEvent(context);
54d55ced 406 assertEquals("Event timestamp", 4501, event.getTimestamp().getValue());
ff4ed569 407 assertEquals("Event rank", ITmfContext.UNKNOWN_RANK, context.getRank());
9b635e61
FC
408
409 event = fTrace.getNextEvent(context);
54d55ced 410 assertEquals("Event timestamp", 4501, event.getTimestamp().getValue());
ff4ed569 411 assertEquals("Event rank", ITmfContext.UNKNOWN_RANK, context.getRank());
54d55ced
FC
412 }
413
414 public void testSeekLocationOutOfScope() throws Exception {
415
416 // Position trace at beginning
417 TmfContext tmpContext = fTrace.seekLocation(null);
9b635e61 418 TmfContext context = fTrace.seekLocation(tmpContext.getLocation());
ff4ed569 419 assertEquals("Event rank", ITmfContext.UNKNOWN_RANK, context.getRank());
9b635e61
FC
420
421 TmfEvent event = fTrace.parseEvent(context);
54d55ced 422 assertEquals("Event timestamp", 1, event.getTimestamp().getValue());
ff4ed569 423 assertEquals("Event rank", ITmfContext.UNKNOWN_RANK, context.getRank());
9b635e61
FC
424
425 event = fTrace.getNextEvent(context);
54d55ced 426 assertEquals("Event timestamp", 1, event.getTimestamp().getValue());
ff4ed569 427 assertEquals("Event rank", ITmfContext.UNKNOWN_RANK, context.getRank());
54d55ced
FC
428
429 // Position trace at event passed the end
430 tmpContext = fTrace.seekEvent(new TmfTimestamp(NB_EVENTS + 1, SCALE, 0));
9b635e61 431 context = fTrace.seekLocation(tmpContext.getLocation());
ff4ed569 432 assertEquals("Event rank", ITmfContext.UNKNOWN_RANK, context.getRank());
9b635e61
FC
433
434 event = fTrace.parseEvent(context);
54d55ced 435 assertEquals("Event timestamp", null, event);
ff4ed569 436 assertEquals("Event rank", ITmfContext.UNKNOWN_RANK, context.getRank());
9b635e61
FC
437
438 event = fTrace.getNextEvent(context);
54d55ced 439 assertEquals("Event timestamp", null, event);
ff4ed569 440 assertEquals("Event rank", ITmfContext.UNKNOWN_RANK, context.getRank());
54d55ced
FC
441 }
442
443 // ------------------------------------------------------------------------
444 // seekEvent on timestamp
445 // ------------------------------------------------------------------------
d18dd09b 446
54d55ced
FC
447 public void testSeekEventOnTimestampOnCacheBoundary() throws Exception {
448
449 // Position trace at event rank 0
450 TmfContext context = fTrace.seekEvent(new TmfTimestamp(1, SCALE, 0));
451 assertEquals("Event rank", 0, context.getRank());
9b635e61
FC
452
453 TmfEvent event = fTrace.parseEvent(context);
54d55ced
FC
454 assertEquals("Event timestamp", 1, event.getTimestamp().getValue());
455 assertEquals("Event rank", 0, context.getRank());
9b635e61
FC
456
457 event = fTrace.getNextEvent(context);
75828b1a 458 assertEquals("Event timestamp", 1, event.getTimestamp().getValue());
e31e01e8 459 assertEquals("Event rank", 1, context.getRank());
d18dd09b 460
54d55ced
FC
461 // Position trace at event rank 1000
462 context = fTrace.seekEvent(new TmfTimestamp(1001, SCALE, 0));
463 assertEquals("Event rank", 1000, context.getRank());
9b635e61
FC
464
465 event = fTrace.parseEvent(context);
54d55ced
FC
466 assertEquals("Event timestamp", 1001, event.getTimestamp().getValue());
467 assertEquals("Event rank", 1000, context.getRank());
9b635e61
FC
468
469 event = fTrace.getNextEvent(context);
e31e01e8
FC
470 assertEquals("Event timestamp", 1001, event.getTimestamp().getValue());
471 assertEquals("Event rank", 1001, context.getRank());
d18dd09b 472
54d55ced
FC
473 // Position trace at event rank 4000
474 context = fTrace.seekEvent(new TmfTimestamp(4001, SCALE, 0));
475 assertEquals("Event rank", 4000, context.getRank());
9b635e61
FC
476
477 event = fTrace.parseEvent(context);
54d55ced
FC
478 assertEquals("Event timestamp", 4001, event.getTimestamp().getValue());
479 assertEquals("Event rank", 4000, context.getRank());
9b635e61
FC
480
481 event = fTrace.getNextEvent(context);
e31e01e8
FC
482 assertEquals("Event timestamp", 4001, event.getTimestamp().getValue());
483 assertEquals("Event rank", 4001, context.getRank());
75828b1a 484 }
d18dd09b 485
54d55ced
FC
486 public void testSeekEventOnTimestampNotOnCacheBoundary() throws Exception {
487
488 // Position trace at event rank 1
489 TmfContext context = fTrace.seekEvent(new TmfTimestamp(2, SCALE, 0));
490 assertEquals("Event rank", 1, context.getRank());
9b635e61
FC
491
492 TmfEvent event = fTrace.parseEvent(context);
54d55ced
FC
493 assertEquals("Event timestamp", 2, event.getTimestamp().getValue());
494 assertEquals("Event rank", 1, context.getRank());
9b635e61
FC
495
496 event = fTrace.getNextEvent(context);
54d55ced
FC
497 assertEquals("Event timestamp", 2, event.getTimestamp().getValue());
498 assertEquals("Event rank", 2, context.getRank());
d18dd09b 499
54d55ced 500 // Position trace at event rank 9
e31e01e8 501 context = fTrace.seekEvent(new TmfTimestamp(10, SCALE, 0));
54d55ced 502 assertEquals("Event rank", 9, context.getRank());
9b635e61
FC
503
504 event = fTrace.parseEvent(context);
54d55ced
FC
505 assertEquals("Event timestamp", 10, event.getTimestamp().getValue());
506 assertEquals("Event rank", 9, context.getRank());
9b635e61
FC
507
508 event = fTrace.getNextEvent(context);
e31e01e8
FC
509 assertEquals("Event timestamp", 10, event.getTimestamp().getValue());
510 assertEquals("Event rank", 10, context.getRank());
d18dd09b 511
54d55ced
FC
512 // Position trace at event rank 999
513 context = fTrace.seekEvent(new TmfTimestamp(1000, SCALE, 0));
514 assertEquals("Event rank", 999, context.getRank());
9b635e61
FC
515
516 event = fTrace.parseEvent(context);
54d55ced 517 assertEquals("Event timestamp", 1000, event.getTimestamp().getValue());
e31e01e8 518 assertEquals("Event rank", 999, context.getRank());
9b635e61
FC
519
520 event = fTrace.getNextEvent(context);
54d55ced
FC
521 assertEquals("Event timestamp", 1000, event.getTimestamp().getValue());
522 assertEquals("Event rank", 1000, context.getRank());
e31e01e8 523
54d55ced
FC
524 // Position trace at event rank 1001
525 context = fTrace.seekEvent(new TmfTimestamp(1002, SCALE, 0));
e31e01e8 526 assertEquals("Event rank", 1001, context.getRank());
9b635e61
FC
527
528 event = fTrace.parseEvent(context);
54d55ced
FC
529 assertEquals("Event timestamp", 1002, event.getTimestamp().getValue());
530 assertEquals("Event rank", 1001, context.getRank());
9b635e61
FC
531
532 event = fTrace.getNextEvent(context);
54d55ced
FC
533 assertEquals("Event timestamp", 1002, event.getTimestamp().getValue());
534 assertEquals("Event rank", 1002, context.getRank());
535
536 // Position trace at event rank 4500
537 context = fTrace.seekEvent(new TmfTimestamp(4501, SCALE, 0));
538 assertEquals("Event rank", 4500, context.getRank());
9b635e61
FC
539
540 event = fTrace.parseEvent(context);
54d55ced
FC
541 assertEquals("Event timestamp", 4501, event.getTimestamp().getValue());
542 assertEquals("Event rank", 4500, context.getRank());
9b635e61
FC
543
544 event = fTrace.getNextEvent(context);
54d55ced
FC
545 assertEquals("Event timestamp", 4501, event.getTimestamp().getValue());
546 assertEquals("Event rank", 4501, context.getRank());
75828b1a 547 }
d18dd09b 548
54d55ced 549 public void testSeekEventOnTimestampOutOfScope() throws Exception {
d18dd09b 550
54d55ced
FC
551 // Position trace at beginning
552 TmfContext context = fTrace.seekEvent(new TmfTimestamp(-1, SCALE, 0));
553 assertEquals("Event rank", 0, context.getRank());
9b635e61
FC
554
555 TmfEvent event = fTrace.parseEvent(context);
75828b1a 556 assertEquals("Event timestamp", 1, event.getTimestamp().getValue());
54d55ced 557 assertEquals("Event rank", 0, context.getRank());
9b635e61
FC
558
559 event = fTrace.getNextEvent(context);
54d55ced
FC
560 assertEquals("Event timestamp", 1, event.getTimestamp().getValue());
561 assertEquals("Event rank", 1, context.getRank());
75828b1a 562
54d55ced
FC
563 // Position trace at event passed the end
564 context = fTrace.seekEvent(new TmfTimestamp(NB_EVENTS + 1, SCALE, 0));
565 assertEquals("Event rank", NB_EVENTS, context.getRank());
9b635e61
FC
566
567 event = fTrace.parseEvent(context);
75828b1a 568 assertEquals("Event timestamp", null, event);
54d55ced 569 assertEquals("Event rank", NB_EVENTS, context.getRank());
9b635e61
FC
570
571 event = fTrace.getNextEvent(context);
54d55ced
FC
572 assertEquals("Event timestamp", null, event);
573 assertEquals("Event rank", NB_EVENTS, context.getRank());
d18dd09b
ASL
574 }
575
54d55ced
FC
576 // ------------------------------------------------------------------------
577 // seekEvent on rank
578 // ------------------------------------------------------------------------
579
580 public void testSeekOnRankOnCacheBoundary() throws Exception {
e31e01e8
FC
581
582 // On lower bound, returns the first event (ts = 1)
54d55ced
FC
583 TmfContext context = fTrace.seekEvent(0);
584 assertEquals("Event rank", 0, context.getRank());
9b635e61
FC
585
586 TmfEvent event = fTrace.parseEvent(context);
e31e01e8 587 assertEquals("Event timestamp", 1, event.getTimestamp().getValue());
54d55ced 588 assertEquals("Event rank", 0, context.getRank());
9b635e61
FC
589
590 event = fTrace.getNextEvent(context);
54d55ced
FC
591 assertEquals("Event timestamp", 1, event.getTimestamp().getValue());
592 assertEquals("Event rank", 1, context.getRank());
e31e01e8 593
54d55ced
FC
594 // Position trace at event rank 1000
595 context = fTrace.seekEvent(1000);
596 assertEquals("Event rank", 1000, context.getRank());
9b635e61
FC
597
598 event = fTrace.parseEvent(context);
54d55ced
FC
599 assertEquals("Event timestamp", 1001, event.getTimestamp().getValue());
600 assertEquals("Event rank", 1000, context.getRank());
9b635e61
FC
601
602 event = fTrace.getNextEvent(context);
54d55ced
FC
603 assertEquals("Event timestamp", 1001, event.getTimestamp().getValue());
604 assertEquals("Event rank", 1001, context.getRank());
e31e01e8 605
54d55ced
FC
606 // Position trace at event rank 4000
607 context = fTrace.seekEvent(4000);
608 assertEquals("Event rank", 4000, context.getRank());
9b635e61
FC
609
610 event = fTrace.parseEvent(context);
54d55ced
FC
611 assertEquals("Event timestamp", 4001, event.getTimestamp().getValue());
612 assertEquals("Event rank", 4000, context.getRank());
9b635e61
FC
613
614 event = fTrace.getNextEvent(context);
54d55ced
FC
615 assertEquals("Event timestamp", 4001, event.getTimestamp().getValue());
616 assertEquals("Event rank", 4001, context.getRank());
e31e01e8
FC
617 }
618
54d55ced 619 public void testSeekOnRankNotOnCacheBoundary() throws Exception {
d18dd09b 620
54d55ced
FC
621 // Position trace at event rank 9
622 TmfContext context = fTrace.seekEvent(9);
623 assertEquals("Event rank", 9, context.getRank());
9b635e61
FC
624
625 TmfEvent event = fTrace.parseEvent(context);
54d55ced
FC
626 assertEquals("Event timestamp", 10, event.getTimestamp().getValue());
627 assertEquals("Event rank", 9, context.getRank());
9b635e61
FC
628
629 event = fTrace.getNextEvent(context);
54d55ced
FC
630 assertEquals("Event timestamp", 10, event.getTimestamp().getValue());
631 assertEquals("Event rank", 10, context.getRank());
d18dd09b 632
54d55ced
FC
633 // Position trace at event rank 999
634 context = fTrace.seekEvent(999);
635 assertEquals("Event rank", 999, context.getRank());
9b635e61
FC
636
637 event = fTrace.parseEvent(context);
54d55ced
FC
638 assertEquals("Event timestamp", 1000, event.getTimestamp().getValue());
639 assertEquals("Event rank", 999, context.getRank());
9b635e61
FC
640
641 event = fTrace.getNextEvent(context);
54d55ced
FC
642 assertEquals("Event timestamp", 1000, event.getTimestamp().getValue());
643 assertEquals("Event rank", 1000, context.getRank());
d18dd09b 644
54d55ced
FC
645 // Position trace at event rank 1001
646 context = fTrace.seekEvent(1001);
647 assertEquals("Event rank", 1001, context.getRank());
9b635e61
FC
648
649 event = fTrace.parseEvent(context);
54d55ced
FC
650 assertEquals("Event timestamp", 1002, event.getTimestamp().getValue());
651 assertEquals("Event rank", 1001, context.getRank());
9b635e61
FC
652
653 event = fTrace.getNextEvent(context);
54d55ced
FC
654 assertEquals("Event timestamp", 1002, event.getTimestamp().getValue());
655 assertEquals("Event rank", 1002, context.getRank());
656
657 // Position trace at event rank 4500
658 context = fTrace.seekEvent(4500);
659 assertEquals("Event rank", 4500, context.getRank());
9b635e61
FC
660
661 event = fTrace.parseEvent(context);
54d55ced
FC
662 assertEquals("Event timestamp", 4501, event.getTimestamp().getValue());
663 assertEquals("Event rank", 4500, context.getRank());
9b635e61
FC
664
665 event = fTrace.getNextEvent(context);
54d55ced
FC
666 assertEquals("Event timestamp", 4501, event.getTimestamp().getValue());
667 assertEquals("Event rank", 4501, context.getRank());
d18dd09b
ASL
668 }
669
54d55ced
FC
670 public void testSeekEventOnRankOfScope() throws Exception {
671
672 // Position trace at beginning
673 TmfContext context = fTrace.seekEvent(-1);
674 assertEquals("Event rank", 0, context.getRank());
9b635e61
FC
675
676 TmfEvent event = fTrace.parseEvent(context);
54d55ced
FC
677 assertEquals("Event timestamp", 1, event.getTimestamp().getValue());
678 assertEquals("Event rank", 0, context.getRank());
9b635e61
FC
679
680 event = fTrace.getNextEvent(context);
54d55ced
FC
681 assertEquals("Event timestamp", 1, event.getTimestamp().getValue());
682 assertEquals("Event rank", 1, context.getRank());
683
684 // Position trace at event passed the end
685 context = fTrace.seekEvent(NB_EVENTS);
686 assertEquals("Event rank", NB_EVENTS, context.getRank());
9b635e61
FC
687
688 event = fTrace.parseEvent(context);
54d55ced
FC
689 assertEquals("Event timestamp", null, event);
690 assertEquals("Event rank", NB_EVENTS, context.getRank());
9b635e61
FC
691
692 event = fTrace.getNextEvent(context);
54d55ced
FC
693 assertEquals("Event timestamp", null, event);
694 assertEquals("Event rank", NB_EVENTS, context.getRank());
695 }
696
e31e01e8 697 // ------------------------------------------------------------------------
d18dd09b 698 // processRequest
e31e01e8 699 // ------------------------------------------------------------------------
d18dd09b 700
e31e01e8
FC
701 @SuppressWarnings("unchecked")
702 public void testProcessRequestForNbEvents() throws Exception {
d18dd09b
ASL
703 final int BLOCK_SIZE = 100;
704 final int NB_EVENTS = 1000;
705 final Vector<TmfEvent> requestedEvents = new Vector<TmfEvent>();
706
707 TmfTimeRange range = new TmfTimeRange(TmfTimestamp.BigBang, TmfTimestamp.BigCrunch);
e31e01e8 708 final TmfEventRequest<TmfEvent> request = new TmfEventRequest<TmfEvent>(TmfEvent.class, range, NB_EVENTS, BLOCK_SIZE) {
f9673903
FC
709 @Override
710 public void handleData(TmfEvent event) {
711 super.handleData(event);
712 requestedEvents.add(event);
713 }
d18dd09b 714 };
951d134a
FC
715 ITmfDataProvider<TmfEvent>[] providers = (ITmfDataProvider<TmfEvent>[]) TmfProviderManager.getProviders(TmfEvent.class, TmfTraceStub.class);
716 providers[0].sendRequest(request);
717 request.waitForCompletion();
d18dd09b
ASL
718
719 assertEquals("nbEvents", NB_EVENTS, requestedEvents.size());
720 assertTrue("isCompleted", request.isCompleted());
721 assertFalse("isCancelled", request.isCancelled());
722
723 // Ensure that we have distinct events.
724 // Don't go overboard: we are not validating the stub!
725 for (int i = 0; i < NB_EVENTS; i++) {
726 assertEquals("Distinct events", i+1, requestedEvents.get(i).getTimestamp().getValue());
727 }
728 }
729
e31e01e8
FC
730 @SuppressWarnings("unchecked")
731 public void testProcessRequestForAllEvents() throws Exception {
d18dd09b
ASL
732 final int BLOCK_SIZE = 1;
733 final Vector<TmfEvent> requestedEvents = new Vector<TmfEvent>();
734
735 TmfTimeRange range = new TmfTimeRange(TmfTimestamp.BigBang, TmfTimestamp.BigCrunch);
e31e01e8 736 final TmfEventRequest<TmfEvent> request = new TmfEventRequest<TmfEvent>(TmfEvent.class, range, NB_EVENTS, BLOCK_SIZE) {
f9673903
FC
737 @Override
738 public void handleData(TmfEvent event) {
739 super.handleData(event);
740 requestedEvents.add(event);
741 }
d18dd09b 742 };
951d134a
FC
743 ITmfDataProvider<TmfEvent>[] providers = (ITmfDataProvider<TmfEvent>[]) TmfProviderManager.getProviders(TmfEvent.class, TmfTraceStub.class);
744 providers[0].sendRequest(request);
745 request.waitForCompletion();
d18dd09b
ASL
746
747 assertEquals("nbEvents", NB_EVENTS, requestedEvents.size());
748 assertTrue("isCompleted", request.isCompleted());
749 assertFalse("isCancelled", request.isCancelled());
750
751 // Ensure that we have distinct events.
752 // Don't go overboard: we are not validating the stub!
753 for (int i = 0; i < NB_EVENTS; i++) {
754 assertEquals("Distinct events", i+1, requestedEvents.get(i).getTimestamp().getValue());
755 }
756 }
757
e31e01e8 758 // ------------------------------------------------------------------------
d18dd09b 759 // cancel
e31e01e8 760 // ------------------------------------------------------------------------
d18dd09b 761
e31e01e8
FC
762 @SuppressWarnings("unchecked")
763 public void testCancel() throws Exception {
d18dd09b
ASL
764 final Vector<TmfEvent> requestedEvents = new Vector<TmfEvent>();
765
766 TmfTimeRange range = new TmfTimeRange(TmfTimestamp.BigBang, TmfTimestamp.BigCrunch);
cb866e08 767 final TmfEventRequest<TmfEvent> request = new TmfEventRequest<TmfEvent>(TmfEvent.class, range, NB_EVENTS, BLOCK_SIZE) {
f9673903
FC
768 int nbRead = 0;
769 @Override
770 public void handleData(TmfEvent event) {
771 super.handleData(event);
772 requestedEvents.add(event);
773 if (++nbRead == BLOCK_SIZE)
774 cancel();
775 }
d18dd09b 776 };
951d134a
FC
777 ITmfDataProvider<TmfEvent>[] providers = (ITmfDataProvider<TmfEvent>[]) TmfProviderManager.getProviders(TmfEvent.class, TmfTraceStub.class);
778 providers[0].sendRequest(request);
779 request.waitForCompletion();
d18dd09b 780
cb866e08 781 assertEquals("nbEvents", BLOCK_SIZE, requestedEvents.size());
d18dd09b
ASL
782 assertTrue("isCompleted", request.isCompleted());
783 assertTrue("isCancelled", request.isCancelled());
784 }
e31e01e8
FC
785
786}
This page took 0.074005 seconds and 5 git commands to generate.