Commit | Line | Data |
---|---|---|
d18dd09b ASL |
1 | /******************************************************************************* |
2 | * Copyright (c) 2009, 2010 Ericsson | |
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 | ||
6c13869b | 13 | package org.eclipse.linuxtools.tmf.core.tests.experiment; |
d18dd09b ASL |
14 | |
15 | import java.io.File; | |
16 | import java.io.IOException; | |
17 | import java.net.URISyntaxException; | |
18 | import java.net.URL; | |
19 | import java.util.Vector; | |
20 | ||
21 | import junit.framework.TestCase; | |
22 | ||
23 | import org.eclipse.core.runtime.FileLocator; | |
24 | import org.eclipse.core.runtime.Path; | |
72f1e62a | 25 | import org.eclipse.linuxtools.tmf.core.event.ITmfEvent; |
6c13869b FC |
26 | import org.eclipse.linuxtools.tmf.core.event.TmfEvent; |
27 | import org.eclipse.linuxtools.tmf.core.event.TmfTimeRange; | |
28 | import org.eclipse.linuxtools.tmf.core.event.TmfTimestamp; | |
b4f71e4a | 29 | import org.eclipse.linuxtools.tmf.core.exceptions.TmfTraceException; |
6c13869b FC |
30 | import org.eclipse.linuxtools.tmf.core.experiment.TmfExperiment; |
31 | import org.eclipse.linuxtools.tmf.core.experiment.TmfExperimentContext; | |
32 | import org.eclipse.linuxtools.tmf.core.request.TmfEventRequest; | |
33 | import org.eclipse.linuxtools.tmf.core.tests.TmfCoreTestPlugin; | |
34 | import org.eclipse.linuxtools.tmf.core.trace.ITmfContext; | |
35 | import org.eclipse.linuxtools.tmf.core.trace.ITmfTrace; | |
36 | import org.eclipse.linuxtools.tmf.core.trace.TmfCheckpoint; | |
37 | import org.eclipse.linuxtools.tmf.core.trace.TmfContext; | |
4918b8f2 | 38 | import org.eclipse.linuxtools.tmf.tests.stubs.trace.TmfTraceStub; |
d18dd09b ASL |
39 | |
40 | /** | |
41 | * <b><u>TmfExperimentTest</u></b> | |
42 | * <p> | |
43 | * TODO: Implement me. Please. | |
44 | */ | |
3b38ea61 | 45 | @SuppressWarnings("nls") |
d18dd09b ASL |
46 | public class TmfExperimentTest extends TestCase { |
47 | ||
48 | private static final String DIRECTORY = "testfiles"; | |
49 | private static final String TEST_STREAM = "A-Test-10K"; | |
50 | private static final String EXPERIMENT = "MyExperiment"; | |
51 | private static int NB_EVENTS = 10000; | |
52 | private static int fDefaultBlockSize = 1000; | |
53 | ||
f4c52cea | 54 | private static ITmfTrace<?>[] fTraces; |
d18dd09b ASL |
55 | private static TmfExperiment<TmfEvent> fExperiment; |
56 | ||
57 | private static byte SCALE = (byte) -3; | |
58 | ||
59 | // ------------------------------------------------------------------------ | |
60 | // Housekeeping | |
61 | // ------------------------------------------------------------------------ | |
62 | ||
25e48683 FC |
63 | private synchronized static ITmfTrace<?>[] setupTrace(final String path) { |
64 | if (fTraces == null) { | |
65 | fTraces = new ITmfTrace[1]; | |
66 | try { | |
67 | final URL location = FileLocator.find(TmfCoreTestPlugin.getDefault().getBundle(), new Path(path), null); | |
68 | final File test = new File(FileLocator.toFileURL(location).toURI()); | |
20658947 | 69 | final TmfTraceStub trace = new TmfTraceStub(test.getPath(), 0, true); |
25e48683 | 70 | fTraces[0] = trace; |
b4f71e4a FC |
71 | } catch (final TmfTraceException e) { |
72 | e.printStackTrace(); | |
25e48683 FC |
73 | } catch (final URISyntaxException e) { |
74 | e.printStackTrace(); | |
75 | } catch (final IOException e) { | |
76 | e.printStackTrace(); | |
77 | } | |
78 | } | |
79 | return fTraces; | |
d18dd09b ASL |
80 | } |
81 | ||
f4c52cea | 82 | @SuppressWarnings("unchecked") |
cb866e08 | 83 | private synchronized static void setupExperiment() { |
20658947 | 84 | if (fExperiment == null) { |
25e48683 | 85 | fExperiment = new TmfExperiment<TmfEvent>(TmfEvent.class, EXPERIMENT, (ITmfTrace<TmfEvent>[]) fTraces, TmfTimestamp.ZERO, 1000, true); |
20658947 | 86 | } |
d18dd09b ASL |
87 | } |
88 | ||
25e48683 FC |
89 | public TmfExperimentTest(final String name) throws Exception { |
90 | super(name); | |
91 | } | |
d18dd09b | 92 | |
25e48683 FC |
93 | @Override |
94 | protected void setUp() throws Exception { | |
95 | super.setUp(); | |
96 | setupTrace(DIRECTORY + File.separator + TEST_STREAM); | |
97 | setupExperiment(); | |
98 | } | |
d18dd09b | 99 | |
25e48683 FC |
100 | @Override |
101 | protected void tearDown() throws Exception { | |
102 | super.tearDown(); | |
103 | } | |
d18dd09b ASL |
104 | |
105 | // ------------------------------------------------------------------------ | |
106 | // Constructor | |
107 | // ------------------------------------------------------------------------ | |
108 | ||
25e48683 | 109 | public void testBasicTmfExperimentConstructor() { |
cb866e08 | 110 | |
25e48683 | 111 | assertEquals("GetId", EXPERIMENT, fExperiment.getName()); |
a4115405 | 112 | assertEquals("GetEpoch", TmfTimestamp.ZERO, fExperiment.getEpoch()); |
d18dd09b ASL |
113 | assertEquals("GetNbEvents", NB_EVENTS, fExperiment.getNbEvents()); |
114 | ||
25e48683 | 115 | final long nbTraceEvents = fExperiment.getTraces()[0].getNbEvents(); |
82e04272 FC |
116 | assertEquals("GetNbEvents", NB_EVENTS, nbTraceEvents); |
117 | ||
25e48683 | 118 | final TmfTimeRange timeRange = fExperiment.getTimeRange(); |
d18dd09b ASL |
119 | assertEquals("getStartTime", 1, timeRange.getStartTime().getValue()); |
120 | assertEquals("getEndTime", NB_EVENTS, timeRange.getEndTime().getValue()); | |
25e48683 | 121 | } |
d18dd09b ASL |
122 | |
123 | // ------------------------------------------------------------------------ | |
124 | // Verify checkpoints | |
d18dd09b ASL |
125 | // ------------------------------------------------------------------------ |
126 | ||
127 | public void testValidateCheckpoints() throws Exception { | |
128 | ||
25e48683 | 129 | final Vector<TmfCheckpoint> checkpoints = fExperiment.getCheckpoints(); |
20658947 | 130 | final int pageSize = fExperiment.getCacheSize(); |
25e48683 FC |
131 | assertTrue("Checkpoints exist", checkpoints != null); |
132 | ||
133 | // Validate that each checkpoint points to the right event | |
134 | for (int i = 0; i < checkpoints.size(); i++) { | |
135 | final TmfCheckpoint checkpoint = checkpoints.get(i); | |
7e6347b0 | 136 | final TmfExperimentContext context = fExperiment.seekEvent(checkpoint.getLocation()); |
25e48683 FC |
137 | final ITmfEvent event = fExperiment.parseEvent(context); |
138 | assertEquals("Event rank", i * pageSize, context.getRank()); | |
139 | assertTrue("Timestamp", (checkpoint.getTimestamp().compareTo(event.getTimestamp(), false) == 0)); | |
140 | } | |
d18dd09b ASL |
141 | } |
142 | ||
d18dd09b ASL |
143 | // ------------------------------------------------------------------------ |
144 | // seekLocation | |
d18dd09b ASL |
145 | // ------------------------------------------------------------------------ |
146 | ||
147 | public void testSeekLocationOnCacheBoundary() throws Exception { | |
148 | ||
25e48683 | 149 | // Position trace at event rank 0 |
7e6347b0 | 150 | TmfContext context = fExperiment.seekEvent(0); |
9b635e61 FC |
151 | assertEquals("Event rank", 0, context.getRank()); |
152 | ||
72f1e62a | 153 | ITmfEvent event = fExperiment.parseEvent(context); |
d18dd09b | 154 | assertEquals("Event timestamp", 1, event.getTimestamp().getValue()); |
9b635e61 | 155 | assertEquals("Event rank", 0, context.getRank()); |
25e48683 | 156 | |
b4f71e4a | 157 | event = fExperiment.readNextEvent(context); |
d18dd09b | 158 | assertEquals("Event timestamp", 1, event.getTimestamp().getValue()); |
9b635e61 | 159 | assertEquals("Event rank", 1, context.getRank()); |
25e48683 | 160 | |
b4f71e4a | 161 | event = fExperiment.readNextEvent(context); |
9b635e61 FC |
162 | assertEquals("Event timestamp", 2, event.getTimestamp().getValue()); |
163 | assertEquals("Event rank", 2, context.getRank()); | |
d18dd09b | 164 | |
25e48683 | 165 | // Position trace at event rank 1000 |
d18dd09b | 166 | TmfContext tmpContext = fExperiment.seekEvent(new TmfTimestamp(1001, SCALE, 0)); |
7e6347b0 | 167 | context = fExperiment.seekEvent(tmpContext.getLocation()); |
9b635e61 | 168 | assertEquals("Event rank", 1000, context.getRank()); |
25e48683 | 169 | |
9b635e61 | 170 | event = fExperiment.parseEvent(context); |
d18dd09b | 171 | assertEquals("Event timestamp", 1001, event.getTimestamp().getValue()); |
9b635e61 | 172 | assertEquals("Event rank", 1000, context.getRank()); |
25e48683 | 173 | |
b4f71e4a | 174 | event = fExperiment.readNextEvent(context); |
d18dd09b | 175 | assertEquals("Event timestamp", 1001, event.getTimestamp().getValue()); |
9b635e61 | 176 | assertEquals("Event rank", 1001, context.getRank()); |
25e48683 | 177 | |
b4f71e4a | 178 | event = fExperiment.readNextEvent(context); |
9b635e61 FC |
179 | assertEquals("Event timestamp", 1002, event.getTimestamp().getValue()); |
180 | assertEquals("Event rank", 1002, context.getRank()); | |
d18dd09b | 181 | |
25e48683 | 182 | // Position trace at event rank 4000 |
d18dd09b | 183 | tmpContext = fExperiment.seekEvent(new TmfTimestamp(4001, SCALE, 0)); |
7e6347b0 | 184 | context = fExperiment.seekEvent(tmpContext.getLocation()); |
9b635e61 | 185 | assertEquals("Event rank", 4000, context.getRank()); |
25e48683 | 186 | |
9b635e61 | 187 | event = fExperiment.parseEvent(context); |
d18dd09b | 188 | assertEquals("Event timestamp", 4001, event.getTimestamp().getValue()); |
9b635e61 | 189 | assertEquals("Event rank", 4000, context.getRank()); |
25e48683 | 190 | |
b4f71e4a | 191 | event = fExperiment.readNextEvent(context); |
d18dd09b | 192 | assertEquals("Event timestamp", 4001, event.getTimestamp().getValue()); |
9b635e61 | 193 | assertEquals("Event rank", 4001, context.getRank()); |
25e48683 | 194 | |
b4f71e4a | 195 | event = fExperiment.readNextEvent(context); |
9b635e61 FC |
196 | assertEquals("Event timestamp", 4002, event.getTimestamp().getValue()); |
197 | assertEquals("Event rank", 4002, context.getRank()); | |
d18dd09b ASL |
198 | } |
199 | ||
200 | public void testSeekLocationNotOnCacheBoundary() throws Exception { | |
201 | ||
25e48683 FC |
202 | // Position trace at event rank 9 |
203 | TmfContext tmpContext = fExperiment.seekEvent(new TmfTimestamp(10, SCALE, 0)); | |
7e6347b0 | 204 | TmfContext context = fExperiment.seekEvent(tmpContext.getLocation()); |
9b635e61 | 205 | assertEquals("Event rank", 9, context.getRank()); |
25e48683 | 206 | |
72f1e62a | 207 | ITmfEvent event = fExperiment.parseEvent(context); |
d18dd09b | 208 | assertEquals("Event timestamp", 10, event.getTimestamp().getValue()); |
9b635e61 | 209 | assertEquals("Event rank", 9, context.getRank()); |
25e48683 | 210 | |
b4f71e4a | 211 | event = fExperiment.readNextEvent(context); |
d18dd09b | 212 | assertEquals("Event timestamp", 10, event.getTimestamp().getValue()); |
9b635e61 | 213 | assertEquals("Event rank", 10, context.getRank()); |
d18dd09b | 214 | |
25e48683 | 215 | // Position trace at event rank 999 |
d18dd09b | 216 | tmpContext = fExperiment.seekEvent(new TmfTimestamp(1000, SCALE, 0)); |
7e6347b0 | 217 | context = fExperiment.seekEvent(tmpContext.getLocation()); |
9b635e61 | 218 | assertEquals("Event rank", 999, context.getRank()); |
25e48683 | 219 | |
9b635e61 | 220 | event = fExperiment.parseEvent(context); |
d18dd09b | 221 | assertEquals("Event timestamp", 1000, event.getTimestamp().getValue()); |
9b635e61 | 222 | assertEquals("Event rank", 999, context.getRank()); |
25e48683 | 223 | |
b4f71e4a | 224 | event = fExperiment.readNextEvent(context); |
d18dd09b | 225 | assertEquals("Event timestamp", 1000, event.getTimestamp().getValue()); |
9b635e61 | 226 | assertEquals("Event rank", 1000, context.getRank()); |
d18dd09b | 227 | |
25e48683 | 228 | // Position trace at event rank 1001 |
d18dd09b | 229 | tmpContext = fExperiment.seekEvent(new TmfTimestamp(1002, SCALE, 0)); |
7e6347b0 | 230 | context = fExperiment.seekEvent(tmpContext.getLocation()); |
9b635e61 | 231 | assertEquals("Event rank", 1001, context.getRank()); |
25e48683 | 232 | |
9b635e61 | 233 | event = fExperiment.parseEvent(context); |
d18dd09b | 234 | assertEquals("Event timestamp", 1002, event.getTimestamp().getValue()); |
9b635e61 | 235 | assertEquals("Event rank", 1001, context.getRank()); |
25e48683 | 236 | |
b4f71e4a | 237 | event = fExperiment.readNextEvent(context); |
d18dd09b | 238 | assertEquals("Event timestamp", 1002, event.getTimestamp().getValue()); |
9b635e61 | 239 | assertEquals("Event rank", 1002, context.getRank()); |
d18dd09b | 240 | |
25e48683 | 241 | // Position trace at event rank 4500 |
d18dd09b | 242 | tmpContext = fExperiment.seekEvent(new TmfTimestamp(4501, SCALE, 0)); |
7e6347b0 | 243 | context = fExperiment.seekEvent(tmpContext.getLocation()); |
9b635e61 | 244 | assertEquals("Event rank", 4500, context.getRank()); |
25e48683 | 245 | |
9b635e61 | 246 | event = fExperiment.parseEvent(context); |
d18dd09b | 247 | assertEquals("Event timestamp", 4501, event.getTimestamp().getValue()); |
9b635e61 | 248 | assertEquals("Event rank", 4500, context.getRank()); |
25e48683 | 249 | |
b4f71e4a | 250 | event = fExperiment.readNextEvent(context); |
d18dd09b | 251 | assertEquals("Event timestamp", 4501, event.getTimestamp().getValue()); |
9b635e61 | 252 | assertEquals("Event rank", 4501, context.getRank()); |
d18dd09b ASL |
253 | } |
254 | ||
255 | public void testSeekLocationOutOfScope() throws Exception { | |
256 | ||
25e48683 | 257 | // Position trace at beginning |
7e6347b0 FC |
258 | TmfContext tmpContext = fExperiment.seekEvent(0); |
259 | final TmfContext context = fExperiment.seekEvent(tmpContext.getLocation()); | |
9b635e61 | 260 | assertEquals("Event rank", 0, context.getRank()); |
25e48683 | 261 | |
72f1e62a | 262 | ITmfEvent event = fExperiment.parseEvent(context); |
d18dd09b | 263 | assertEquals("Event timestamp", 1, event.getTimestamp().getValue()); |
9b635e61 | 264 | assertEquals("Event rank", 0, context.getRank()); |
25e48683 | 265 | |
b4f71e4a | 266 | event = fExperiment.readNextEvent(context); |
d18dd09b | 267 | assertEquals("Event timestamp", 1, event.getTimestamp().getValue()); |
9b635e61 | 268 | assertEquals("Event rank", 1, context.getRank()); |
d18dd09b | 269 | |
25e48683 | 270 | // Position trace at event passed the end |
d18dd09b | 271 | tmpContext = fExperiment.seekEvent(new TmfTimestamp(NB_EVENTS + 1, SCALE, 0)); |
9b635e61 FC |
272 | assertEquals("Event location", null, tmpContext.getLocation()); |
273 | assertEquals("Event rank", ITmfContext.UNKNOWN_RANK, tmpContext.getRank()); | |
d18dd09b ASL |
274 | } |
275 | ||
276 | // ------------------------------------------------------------------------ | |
277 | // seekEvent on timestamp | |
278 | // ------------------------------------------------------------------------ | |
279 | ||
280 | public void testSeekEventOnTimestampOnCacheBoundary() throws Exception { | |
281 | ||
25e48683 FC |
282 | // Position trace at event rank 0 |
283 | TmfContext context = fExperiment.seekEvent(new TmfTimestamp(1, SCALE, 0)); | |
d18dd09b | 284 | assertEquals("Event rank", 0, context.getRank()); |
25e48683 | 285 | |
72f1e62a | 286 | ITmfEvent event = fExperiment.parseEvent(context); |
d18dd09b ASL |
287 | assertEquals("Event timestamp", 1, event.getTimestamp().getValue()); |
288 | assertEquals("Event rank", 0, context.getRank()); | |
25e48683 | 289 | |
b4f71e4a | 290 | event = fExperiment.readNextEvent(context); |
d18dd09b ASL |
291 | assertEquals("Event timestamp", 1, event.getTimestamp().getValue()); |
292 | assertEquals("Event rank", 1, context.getRank()); | |
293 | ||
25e48683 | 294 | // Position trace at event rank 1000 |
d18dd09b ASL |
295 | context = fExperiment.seekEvent(new TmfTimestamp(1001, SCALE, 0)); |
296 | assertEquals("Event rank", 1000, context.getRank()); | |
25e48683 | 297 | |
9b635e61 | 298 | event = fExperiment.parseEvent(context); |
d18dd09b ASL |
299 | assertEquals("Event timestamp", 1001, event.getTimestamp().getValue()); |
300 | assertEquals("Event rank", 1000, context.getRank()); | |
25e48683 | 301 | |
b4f71e4a | 302 | event = fExperiment.readNextEvent(context); |
d18dd09b ASL |
303 | assertEquals("Event timestamp", 1001, event.getTimestamp().getValue()); |
304 | assertEquals("Event rank", 1001, context.getRank()); | |
305 | ||
25e48683 | 306 | // Position trace at event rank 4000 |
d18dd09b ASL |
307 | context = fExperiment.seekEvent(new TmfTimestamp(4001, SCALE, 0)); |
308 | assertEquals("Event rank", 4000, context.getRank()); | |
25e48683 | 309 | |
9b635e61 | 310 | event = fExperiment.parseEvent(context); |
d18dd09b ASL |
311 | assertEquals("Event timestamp", 4001, event.getTimestamp().getValue()); |
312 | assertEquals("Event rank", 4000, context.getRank()); | |
25e48683 | 313 | |
b4f71e4a | 314 | event = fExperiment.readNextEvent(context); |
d18dd09b ASL |
315 | assertEquals("Event timestamp", 4001, event.getTimestamp().getValue()); |
316 | assertEquals("Event rank", 4001, context.getRank()); | |
317 | } | |
318 | ||
319 | public void testSeekEventOnTimestampNotOnCacheBoundary() throws Exception { | |
320 | ||
25e48683 FC |
321 | // Position trace at event rank 1 |
322 | TmfContext context = fExperiment.seekEvent(new TmfTimestamp(2, SCALE, 0)); | |
d18dd09b | 323 | assertEquals("Event rank", 1, context.getRank()); |
25e48683 | 324 | |
72f1e62a | 325 | ITmfEvent event = fExperiment.parseEvent(context); |
d18dd09b ASL |
326 | assertEquals("Event timestamp", 2, event.getTimestamp().getValue()); |
327 | assertEquals("Event rank", 1, context.getRank()); | |
25e48683 | 328 | |
b4f71e4a | 329 | event = fExperiment.readNextEvent(context); |
d18dd09b ASL |
330 | assertEquals("Event timestamp", 2, event.getTimestamp().getValue()); |
331 | assertEquals("Event rank", 2, context.getRank()); | |
332 | ||
25e48683 FC |
333 | // Position trace at event rank 9 |
334 | context = fExperiment.seekEvent(new TmfTimestamp(10, SCALE, 0)); | |
d18dd09b | 335 | assertEquals("Event rank", 9, context.getRank()); |
25e48683 | 336 | |
9b635e61 | 337 | event = fExperiment.parseEvent(context); |
d18dd09b ASL |
338 | assertEquals("Event timestamp", 10, event.getTimestamp().getValue()); |
339 | assertEquals("Event rank", 9, context.getRank()); | |
25e48683 | 340 | |
b4f71e4a | 341 | event = fExperiment.readNextEvent(context); |
d18dd09b ASL |
342 | assertEquals("Event timestamp", 10, event.getTimestamp().getValue()); |
343 | assertEquals("Event rank", 10, context.getRank()); | |
344 | ||
25e48683 | 345 | // Position trace at event rank 999 |
d18dd09b ASL |
346 | context = fExperiment.seekEvent(new TmfTimestamp(1000, SCALE, 0)); |
347 | assertEquals("Event rank", 999, context.getRank()); | |
25e48683 | 348 | |
9b635e61 | 349 | event = fExperiment.parseEvent(context); |
d18dd09b ASL |
350 | assertEquals("Event timestamp", 1000, event.getTimestamp().getValue()); |
351 | assertEquals("Event rank", 999, context.getRank()); | |
25e48683 | 352 | |
b4f71e4a | 353 | event = fExperiment.readNextEvent(context); |
d18dd09b ASL |
354 | assertEquals("Event timestamp", 1000, event.getTimestamp().getValue()); |
355 | assertEquals("Event rank", 1000, context.getRank()); | |
356 | ||
25e48683 | 357 | // Position trace at event rank 1001 |
d18dd09b ASL |
358 | context = fExperiment.seekEvent(new TmfTimestamp(1002, SCALE, 0)); |
359 | assertEquals("Event rank", 1001, context.getRank()); | |
25e48683 | 360 | |
9b635e61 | 361 | event = fExperiment.parseEvent(context); |
d18dd09b ASL |
362 | assertEquals("Event timestamp", 1002, event.getTimestamp().getValue()); |
363 | assertEquals("Event rank", 1001, context.getRank()); | |
25e48683 | 364 | |
b4f71e4a | 365 | event = fExperiment.readNextEvent(context); |
d18dd09b ASL |
366 | assertEquals("Event timestamp", 1002, event.getTimestamp().getValue()); |
367 | assertEquals("Event rank", 1002, context.getRank()); | |
368 | ||
25e48683 | 369 | // Position trace at event rank 4500 |
d18dd09b ASL |
370 | context = fExperiment.seekEvent(new TmfTimestamp(4501, SCALE, 0)); |
371 | assertEquals("Event rank", 4500, context.getRank()); | |
25e48683 | 372 | |
9b635e61 | 373 | event = fExperiment.parseEvent(context); |
d18dd09b ASL |
374 | assertEquals("Event timestamp", 4501, event.getTimestamp().getValue()); |
375 | assertEquals("Event rank", 4500, context.getRank()); | |
25e48683 | 376 | |
b4f71e4a | 377 | event = fExperiment.readNextEvent(context); |
d18dd09b ASL |
378 | assertEquals("Event timestamp", 4501, event.getTimestamp().getValue()); |
379 | assertEquals("Event rank", 4501, context.getRank()); | |
380 | } | |
381 | ||
382 | public void testSeekEventOnTimestampoutOfScope() throws Exception { | |
383 | ||
25e48683 FC |
384 | // Position trace at beginning |
385 | TmfContext context = fExperiment.seekEvent(new TmfTimestamp(-1, SCALE, 0)); | |
d18dd09b | 386 | assertEquals("Event rank", 0, context.getRank()); |
25e48683 | 387 | |
72f1e62a | 388 | ITmfEvent event = fExperiment.parseEvent(context); |
d18dd09b ASL |
389 | assertEquals("Event timestamp", 1, event.getTimestamp().getValue()); |
390 | assertEquals("Event rank", 0, context.getRank()); | |
25e48683 | 391 | |
b4f71e4a | 392 | event = fExperiment.readNextEvent(context); |
d18dd09b ASL |
393 | assertEquals("Event timestamp", 1, event.getTimestamp().getValue()); |
394 | assertEquals("Event rank", 1, context.getRank()); | |
395 | ||
25e48683 | 396 | // Position trace at event passed the end |
d18dd09b | 397 | context = fExperiment.seekEvent(new TmfTimestamp(NB_EVENTS + 1, SCALE, 0)); |
9b635e61 FC |
398 | assertEquals("Event location", null, context.getLocation()); |
399 | assertEquals("Event rank", ITmfContext.UNKNOWN_RANK, context.getRank()); | |
d18dd09b ASL |
400 | } |
401 | ||
402 | // ------------------------------------------------------------------------ | |
403 | // seekEvent on rank | |
404 | // ------------------------------------------------------------------------ | |
405 | ||
406 | public void testSeekOnRankOnCacheBoundary() throws Exception { | |
407 | ||
25e48683 FC |
408 | // On lower bound, returns the first event (ts = 1) |
409 | TmfContext context = fExperiment.seekEvent(0); | |
d18dd09b | 410 | assertEquals("Event rank", 0, context.getRank()); |
25e48683 | 411 | |
72f1e62a | 412 | ITmfEvent event = fExperiment.parseEvent(context); |
d18dd09b ASL |
413 | assertEquals("Event timestamp", 1, event.getTimestamp().getValue()); |
414 | assertEquals("Event rank", 0, context.getRank()); | |
25e48683 | 415 | |
b4f71e4a | 416 | event = fExperiment.readNextEvent(context); |
d18dd09b ASL |
417 | assertEquals("Event timestamp", 1, event.getTimestamp().getValue()); |
418 | assertEquals("Event rank", 1, context.getRank()); | |
419 | ||
25e48683 | 420 | // Position trace at event rank 1000 |
d18dd09b ASL |
421 | context = fExperiment.seekEvent(1000); |
422 | assertEquals("Event rank", 1000, context.getRank()); | |
25e48683 | 423 | |
9b635e61 | 424 | event = fExperiment.parseEvent(context); |
d18dd09b ASL |
425 | assertEquals("Event timestamp", 1001, event.getTimestamp().getValue()); |
426 | assertEquals("Event rank", 1000, context.getRank()); | |
25e48683 | 427 | |
b4f71e4a | 428 | event = fExperiment.readNextEvent(context); |
d18dd09b ASL |
429 | assertEquals("Event timestamp", 1001, event.getTimestamp().getValue()); |
430 | assertEquals("Event rank", 1001, context.getRank()); | |
431 | ||
25e48683 | 432 | // Position trace at event rank 4000 |
d18dd09b ASL |
433 | context = fExperiment.seekEvent(4000); |
434 | assertEquals("Event rank", 4000, context.getRank()); | |
25e48683 | 435 | |
9b635e61 | 436 | event = fExperiment.parseEvent(context); |
d18dd09b ASL |
437 | assertEquals("Event timestamp", 4001, event.getTimestamp().getValue()); |
438 | assertEquals("Event rank", 4000, context.getRank()); | |
25e48683 | 439 | |
b4f71e4a | 440 | event = fExperiment.readNextEvent(context); |
d18dd09b ASL |
441 | assertEquals("Event timestamp", 4001, event.getTimestamp().getValue()); |
442 | assertEquals("Event rank", 4001, context.getRank()); | |
443 | } | |
444 | ||
445 | public void testSeekOnRankNotOnCacheBoundary() throws Exception { | |
446 | ||
25e48683 FC |
447 | // Position trace at event rank 9 |
448 | TmfContext context = fExperiment.seekEvent(9); | |
d18dd09b | 449 | assertEquals("Event rank", 9, context.getRank()); |
25e48683 | 450 | |
72f1e62a | 451 | ITmfEvent event = fExperiment.parseEvent(context); |
d18dd09b ASL |
452 | assertEquals("Event timestamp", 10, event.getTimestamp().getValue()); |
453 | assertEquals("Event rank", 9, context.getRank()); | |
25e48683 | 454 | |
b4f71e4a | 455 | event = fExperiment.readNextEvent(context); |
d18dd09b ASL |
456 | assertEquals("Event timestamp", 10, event.getTimestamp().getValue()); |
457 | assertEquals("Event rank", 10, context.getRank()); | |
458 | ||
25e48683 | 459 | // Position trace at event rank 999 |
d18dd09b ASL |
460 | context = fExperiment.seekEvent(999); |
461 | assertEquals("Event rank", 999, context.getRank()); | |
25e48683 | 462 | |
9b635e61 | 463 | event = fExperiment.parseEvent(context); |
d18dd09b ASL |
464 | assertEquals("Event timestamp", 1000, event.getTimestamp().getValue()); |
465 | assertEquals("Event rank", 999, context.getRank()); | |
25e48683 | 466 | |
b4f71e4a | 467 | event = fExperiment.readNextEvent(context); |
d18dd09b ASL |
468 | assertEquals("Event timestamp", 1000, event.getTimestamp().getValue()); |
469 | assertEquals("Event rank", 1000, context.getRank()); | |
470 | ||
25e48683 | 471 | // Position trace at event rank 1001 |
d18dd09b ASL |
472 | context = fExperiment.seekEvent(1001); |
473 | assertEquals("Event rank", 1001, context.getRank()); | |
25e48683 | 474 | |
9b635e61 | 475 | event = fExperiment.parseEvent(context); |
d18dd09b ASL |
476 | assertEquals("Event timestamp", 1002, event.getTimestamp().getValue()); |
477 | assertEquals("Event rank", 1001, context.getRank()); | |
25e48683 | 478 | |
b4f71e4a | 479 | event = fExperiment.readNextEvent(context); |
d18dd09b ASL |
480 | assertEquals("Event timestamp", 1002, event.getTimestamp().getValue()); |
481 | assertEquals("Event rank", 1002, context.getRank()); | |
482 | ||
25e48683 | 483 | // Position trace at event rank 4500 |
d18dd09b ASL |
484 | context = fExperiment.seekEvent(4500); |
485 | assertEquals("Event rank", 4500, context.getRank()); | |
25e48683 | 486 | |
9b635e61 | 487 | event = fExperiment.parseEvent(context); |
d18dd09b ASL |
488 | assertEquals("Event timestamp", 4501, event.getTimestamp().getValue()); |
489 | assertEquals("Event rank", 4500, context.getRank()); | |
25e48683 | 490 | |
b4f71e4a | 491 | event = fExperiment.readNextEvent(context); |
d18dd09b ASL |
492 | assertEquals("Event timestamp", 4501, event.getTimestamp().getValue()); |
493 | assertEquals("Event rank", 4501, context.getRank()); | |
494 | } | |
495 | ||
9b635e61 | 496 | public void testSeekEventOnRankOutOfScope() throws Exception { |
d18dd09b | 497 | |
25e48683 FC |
498 | // Position trace at beginning |
499 | TmfContext context = fExperiment.seekEvent(-1); | |
d18dd09b | 500 | assertEquals("Event rank", 0, context.getRank()); |
25e48683 | 501 | |
72f1e62a | 502 | ITmfEvent event = fExperiment.parseEvent(context); |
d18dd09b ASL |
503 | assertEquals("Event timestamp", 1, event.getTimestamp().getValue()); |
504 | assertEquals("Event rank", 0, context.getRank()); | |
25e48683 | 505 | |
b4f71e4a | 506 | event = fExperiment.readNextEvent(context); |
d18dd09b ASL |
507 | assertEquals("Event timestamp", 1, event.getTimestamp().getValue()); |
508 | assertEquals("Event rank", 1, context.getRank()); | |
509 | ||
25e48683 | 510 | // Position trace at event passed the end |
d18dd09b | 511 | context = fExperiment.seekEvent(NB_EVENTS); |
9b635e61 FC |
512 | assertEquals("Event location", null, context.getLocation()); |
513 | assertEquals("Event rank", ITmfContext.UNKNOWN_RANK, context.getRank()); | |
d18dd09b | 514 | } |
25e48683 | 515 | |
9b635e61 FC |
516 | // ------------------------------------------------------------------------ |
517 | // parseEvent - make sure parseEvent doesn't update the context | |
518 | // Note: This test is essentially the same as the one from TmfTraceTest | |
519 | // ------------------------------------------------------------------------ | |
520 | ||
521 | public void testParseEvent() throws Exception { | |
522 | ||
25e48683 | 523 | final int NB_READS = 20; |
9b635e61 | 524 | |
25e48683 FC |
525 | // On lower bound, returns the first event (ts = 1) |
526 | final TmfContext context = fExperiment.seekEvent(new TmfTimestamp(0, SCALE, 0)); | |
9b635e61 | 527 | |
25e48683 FC |
528 | // Read NB_EVENTS |
529 | ITmfEvent event = null;; | |
9b635e61 | 530 | for (int i = 0; i < NB_READS; i++) { |
b4f71e4a | 531 | event = fExperiment.readNextEvent(context); |
9b635e61 FC |
532 | assertEquals("Event timestamp", i + 1, event.getTimestamp().getValue()); |
533 | assertEquals("Event rank", i + 1, context.getRank()); | |
534 | } | |
535 | ||
536 | // Make sure we stay positioned | |
537 | event = fExperiment.parseEvent(context); | |
538 | assertEquals("Event timestamp", NB_READS + 1, event.getTimestamp().getValue()); | |
539 | assertEquals("Event rank", NB_READS, context.getRank()); | |
540 | } | |
541 | ||
542 | // ------------------------------------------------------------------------ | |
543 | // getNextEvent - updates the context | |
544 | // ------------------------------------------------------------------------ | |
545 | ||
546 | public void testGetNextEvent() throws Exception { | |
547 | ||
25e48683 FC |
548 | // On lower bound, returns the first event (ts = 0) |
549 | final TmfContext context = fExperiment.seekEvent(new TmfTimestamp(0, SCALE, 0)); | |
b4f71e4a | 550 | ITmfEvent event = fExperiment.readNextEvent(context); |
9b635e61 FC |
551 | assertEquals("Event timestamp", 1, event.getTimestamp().getValue()); |
552 | ||
553 | for (int i = 2; i < 20; i++) { | |
b4f71e4a | 554 | event = fExperiment.readNextEvent(context); |
9b635e61 FC |
555 | assertEquals("Event timestamp", i, event.getTimestamp().getValue()); |
556 | } | |
557 | } | |
558 | ||
d18dd09b ASL |
559 | // ------------------------------------------------------------------------ |
560 | // processRequest | |
561 | // ------------------------------------------------------------------------ | |
562 | ||
563 | public void testProcessRequestForNbEvents() throws Exception { | |
cb866e08 | 564 | |
25e48683 | 565 | final int blockSize = 100; |
d18dd09b ASL |
566 | final int nbEvents = 1000; |
567 | final Vector<TmfEvent> requestedEvents = new Vector<TmfEvent>(); | |
568 | ||
25e48683 | 569 | final TmfTimeRange range = new TmfTimeRange(TmfTimestamp.BIG_BANG, TmfTimestamp.BIG_CRUNCH); |
d18dd09b ASL |
570 | final TmfEventRequest<TmfEvent> request = new TmfEventRequest<TmfEvent>(TmfEvent.class, range, nbEvents, blockSize) { |
571 | @Override | |
25e48683 FC |
572 | public void handleData(final TmfEvent event) { |
573 | super.handleData(event); | |
f9673903 | 574 | requestedEvents.add(event); |
d18dd09b ASL |
575 | } |
576 | }; | |
577 | fExperiment.sendRequest(request); | |
578 | request.waitForCompletion(); | |
579 | ||
580 | assertEquals("nbEvents", nbEvents, requestedEvents.size()); | |
581 | assertTrue("isCompleted", request.isCompleted()); | |
582 | assertFalse("isCancelled", request.isCancelled()); | |
583 | ||
584 | // Ensure that we have distinct events. | |
25e48683 | 585 | // Don't go overboard: we are not validating the stub! |
20658947 | 586 | for (int i = 0; i < nbEvents; i++) { |
d18dd09b | 587 | assertEquals("Distinct events", i+1, requestedEvents.get(i).getTimestamp().getValue()); |
20658947 | 588 | } |
d18dd09b | 589 | } |
25e48683 | 590 | |
d18dd09b | 591 | public void testProcessRequestForNbEvents2() throws Exception { |
cb866e08 | 592 | |
25e48683 | 593 | final int blockSize = 2 * NB_EVENTS; |
d18dd09b ASL |
594 | final int nbEvents = 1000; |
595 | final Vector<TmfEvent> requestedEvents = new Vector<TmfEvent>(); | |
596 | ||
25e48683 | 597 | final TmfTimeRange range = new TmfTimeRange(TmfTimestamp.BIG_BANG, TmfTimestamp.BIG_CRUNCH); |
d18dd09b | 598 | final TmfEventRequest<TmfEvent> request = new TmfEventRequest<TmfEvent>(TmfEvent.class, range, nbEvents, blockSize) { |
25e48683 FC |
599 | @Override |
600 | public void handleData(final TmfEvent event) { | |
601 | super.handleData(event); | |
602 | requestedEvents.add(event); | |
603 | } | |
d18dd09b ASL |
604 | }; |
605 | fExperiment.sendRequest(request); | |
606 | request.waitForCompletion(); | |
607 | ||
608 | assertEquals("nbEvents", nbEvents, requestedEvents.size()); | |
609 | assertTrue("isCompleted", request.isCompleted()); | |
610 | assertFalse("isCancelled", request.isCancelled()); | |
611 | ||
612 | // Ensure that we have distinct events. | |
25e48683 | 613 | // Don't go overboard: we are not validating the stub! |
20658947 | 614 | for (int i = 0; i < nbEvents; i++) { |
d18dd09b | 615 | assertEquals("Distinct events", i+1, requestedEvents.get(i).getTimestamp().getValue()); |
20658947 | 616 | } |
d18dd09b | 617 | } |
25e48683 | 618 | |
d18dd09b | 619 | public void testProcessRequestForAllEvents() throws Exception { |
cb866e08 | 620 | |
25e48683 | 621 | final int nbEvents = TmfEventRequest.ALL_DATA; |
d18dd09b ASL |
622 | final int blockSize = 1; |
623 | final Vector<TmfEvent> requestedEvents = new Vector<TmfEvent>(); | |
25e48683 | 624 | final long nbExpectedEvents = NB_EVENTS; |
d18dd09b | 625 | |
25e48683 | 626 | final TmfTimeRange range = new TmfTimeRange(TmfTimestamp.BIG_BANG, TmfTimestamp.BIG_CRUNCH); |
d18dd09b | 627 | final TmfEventRequest<TmfEvent> request = new TmfEventRequest<TmfEvent>(TmfEvent.class, range, nbEvents, blockSize) { |
25e48683 FC |
628 | @Override |
629 | public void handleData(final TmfEvent event) { | |
630 | super.handleData(event); | |
631 | requestedEvents.add(event); | |
632 | } | |
d18dd09b ASL |
633 | }; |
634 | fExperiment.sendRequest(request); | |
635 | request.waitForCompletion(); | |
636 | ||
637 | assertEquals("nbEvents", nbExpectedEvents, requestedEvents.size()); | |
638 | assertTrue("isCompleted", request.isCompleted()); | |
639 | assertFalse("isCancelled", request.isCancelled()); | |
640 | ||
641 | // Ensure that we have distinct events. | |
25e48683 | 642 | // Don't go overboard: we are not validating the stub! |
20658947 | 643 | for (int i = 0; i < nbExpectedEvents; i++) { |
d18dd09b | 644 | assertEquals("Distinct events", i+1, requestedEvents.get(i).getTimestamp().getValue()); |
20658947 | 645 | } |
d18dd09b | 646 | } |
25e48683 | 647 | |
d18dd09b ASL |
648 | // ------------------------------------------------------------------------ |
649 | // cancel | |
650 | // ------------------------------------------------------------------------ | |
651 | ||
652 | public void testCancel() throws Exception { | |
cb866e08 | 653 | |
25e48683 | 654 | final int nbEvents = NB_EVENTS; |
cb866e08 | 655 | final int blockSize = fDefaultBlockSize; |
d18dd09b ASL |
656 | final Vector<TmfEvent> requestedEvents = new Vector<TmfEvent>(); |
657 | ||
25e48683 | 658 | final TmfTimeRange range = new TmfTimeRange(TmfTimestamp.BIG_BANG, TmfTimestamp.BIG_CRUNCH); |
d18dd09b | 659 | final TmfEventRequest<TmfEvent> request = new TmfEventRequest<TmfEvent>(TmfEvent.class, range, nbEvents, blockSize) { |
25e48683 FC |
660 | int nbRead = 0; |
661 | @Override | |
662 | public void handleData(final TmfEvent event) { | |
663 | super.handleData(event); | |
664 | requestedEvents.add(event); | |
20658947 | 665 | if (++nbRead == blockSize) { |
25e48683 | 666 | cancel(); |
20658947 | 667 | } |
25e48683 | 668 | } |
cb866e08 FC |
669 | @Override |
670 | public void handleCancel() { | |
20658947 | 671 | if (requestedEvents.size() < blockSize) { |
25e48683 | 672 | System.out.println("aie"); |
20658947 | 673 | } |
cb866e08 | 674 | } |
d18dd09b ASL |
675 | }; |
676 | fExperiment.sendRequest(request); | |
677 | request.waitForCompletion(); | |
678 | ||
679 | assertEquals("nbEvents", blockSize, requestedEvents.size()); | |
680 | assertTrue("isCompleted", request.isCompleted()); | |
681 | assertTrue("isCancelled", request.isCancelled()); | |
682 | } | |
25e48683 | 683 | |
d18dd09b ASL |
684 | // ------------------------------------------------------------------------ |
685 | // getRank | |
686 | // ------------------------------------------------------------------------ | |
687 | ||
25e48683 FC |
688 | // public void testGetRank() throws Exception { |
689 | // | |
690 | // assertEquals("getRank", 0, fExperiment.getRank(new TmfTimestamp())); | |
691 | // assertEquals("getRank", 0, fExperiment.getRank(new TmfTimestamp( 1, (byte) -3))); | |
692 | // assertEquals("getRank", 10, fExperiment.getRank(new TmfTimestamp( 11, (byte) -3))); | |
693 | // assertEquals("getRank", 100, fExperiment.getRank(new TmfTimestamp( 101, (byte) -3))); | |
694 | // assertEquals("getRank", 1000, fExperiment.getRank(new TmfTimestamp(1001, (byte) -3))); | |
695 | // assertEquals("getRank", 2000, fExperiment.getRank(new TmfTimestamp(2001, (byte) -3))); | |
696 | // assertEquals("getRank", 2500, fExperiment.getRank(new TmfTimestamp(2501, (byte) -3))); | |
697 | // } | |
d18dd09b ASL |
698 | |
699 | // ------------------------------------------------------------------------ | |
700 | // getTimestamp | |
701 | // ------------------------------------------------------------------------ | |
702 | ||
703 | public void testGetTimestamp() throws Exception { | |
cb866e08 | 704 | |
25e48683 | 705 | assertTrue("getTimestamp", fExperiment.getTimestamp( 0).equals(new TmfTimestamp( 1, (byte) -3))); |
d18dd09b ASL |
706 | assertTrue("getTimestamp", fExperiment.getTimestamp( 10).equals(new TmfTimestamp( 11, (byte) -3))); |
707 | assertTrue("getTimestamp", fExperiment.getTimestamp( 100).equals(new TmfTimestamp( 101, (byte) -3))); | |
708 | assertTrue("getTimestamp", fExperiment.getTimestamp(1000).equals(new TmfTimestamp(1001, (byte) -3))); | |
709 | assertTrue("getTimestamp", fExperiment.getTimestamp(2000).equals(new TmfTimestamp(2001, (byte) -3))); | |
710 | assertTrue("getTimestamp", fExperiment.getTimestamp(2500).equals(new TmfTimestamp(2501, (byte) -3))); | |
711 | } | |
712 | ||
713 | } |