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