[CTF] fix support for traces with per-event contexts
[deliverable/tracecompass.git] / org.eclipse.linuxtools.tmf.core.tests / src / org / eclipse / linuxtools / tmf / core / tests / component / TmfEventProviderTest.java
CommitLineData
d18dd09b
ASL
1/*******************************************************************************
2 * Copyright (c) 2009, 2010 Ericsson
9b749023 3 *
d18dd09b
ASL
4 * All rights reserved. This program and the accompanying materials are
5 * made available under the terms of the Eclipse Public License v1.0 which
6 * accompanies this distribution, and is available at
7 * http://www.eclipse.org/legal/epl-v10.html
9b749023 8 *
d18dd09b
ASL
9 * Contributors:
10 * Francois Chouinard - Initial API and implementation
11 *******************************************************************************/
12
6c13869b 13package org.eclipse.linuxtools.tmf.core.tests.component;
d18dd09b 14
d18dd09b
ASL
15import java.util.Vector;
16
17import junit.framework.TestCase;
18
8fd82db5 19import org.eclipse.linuxtools.internal.tmf.core.component.TmfProviderManager;
8584dc20 20import org.eclipse.linuxtools.tmf.core.component.ITmfEventProvider;
6256d8ad 21import org.eclipse.linuxtools.tmf.core.event.ITmfEvent;
6c13869b
FC
22import org.eclipse.linuxtools.tmf.core.event.TmfEvent;
23import org.eclipse.linuxtools.tmf.core.event.TmfTimeRange;
24import org.eclipse.linuxtools.tmf.core.event.TmfTimestamp;
25import org.eclipse.linuxtools.tmf.core.request.TmfEventRequest;
26import org.eclipse.linuxtools.tmf.core.signal.TmfEndSynchSignal;
27import org.eclipse.linuxtools.tmf.core.signal.TmfStartSynchSignal;
4918b8f2
FC
28import org.eclipse.linuxtools.tmf.tests.stubs.component.TmfEventProviderStub;
29import org.eclipse.linuxtools.tmf.tests.stubs.component.TmfSyntheticEventProviderStub;
30import org.eclipse.linuxtools.tmf.tests.stubs.event.TmfSyntheticEventStub;
31import org.eclipse.linuxtools.tmf.tests.stubs.trace.TmfTraceStub;
d18dd09b
ASL
32
33/**
34 * <b><u>TmfClientTest</u></b>
35 * <p>
ff4ed569 36 * Test suite for the TmfEventProvider class.
d18dd09b 37 */
2d223a34 38@SuppressWarnings({ "nls" })
d18dd09b
ASL
39public class TmfEventProviderTest extends TestCase {
40
cf21ffe2
FC
41 TmfEventProviderStub fEventProvider;
42 TmfSyntheticEventProviderStub fSyntheticEventProvider;
d18dd09b 43
54a7a54c
FC
44 /**
45 * @param name the test anme
46 */
9b749023 47 public TmfEventProviderTest(String name) {
cf21ffe2
FC
48 super(name);
49 }
d18dd09b 50
cf21ffe2
FC
51 @Override
52 protected void setUp() throws Exception {
53 super.setUp();
54 fEventProvider = new TmfEventProviderStub();
55 fSyntheticEventProvider = new TmfSyntheticEventProviderStub();
56 }
d18dd09b 57
cf21ffe2
FC
58 @Override
59 protected void tearDown() throws Exception {
60 super.tearDown();
61 fEventProvider.dispose();
62 fSyntheticEventProvider.dispose();
63 }
d18dd09b 64
cf21ffe2
FC
65 // ------------------------------------------------------------------------
66 // getProviders (more a sanity check than a test)
67 // ------------------------------------------------------------------------
d18dd09b 68
54a7a54c
FC
69 /**
70 *
71 */
cf21ffe2 72 public void testGetProviders() {
d18dd09b 73
cf21ffe2
FC
74 // There should be 2 TmfEvent providers: a TmfTraceStub and a
75 // TmfEventProviderStub
8584dc20 76 ITmfEventProvider[] eventProviders = TmfProviderManager.getProviders(TmfEvent.class);
cf21ffe2 77 assertEquals("getProviders", 2, eventProviders.length);
d18dd09b 78
6256d8ad 79 eventProviders = TmfProviderManager.getProviders(TmfEvent.class, TmfTraceStub.class);
cf21ffe2 80 assertEquals("getProviders", 1, eventProviders.length);
d18dd09b 81
6256d8ad 82 eventProviders = TmfProviderManager.getProviders(TmfEvent.class, TmfEventProviderStub.class);
cf21ffe2 83 assertEquals("getProviders", 1, eventProviders.length);
d18dd09b 84
cf21ffe2 85 // There should be 1 TmfSyntheticEventStub provider
6256d8ad 86 eventProviders = TmfProviderManager.getProviders(TmfSyntheticEventStub.class);
cf21ffe2
FC
87 assertEquals("getProviders", 1, eventProviders.length);
88 }
d18dd09b 89
cf21ffe2
FC
90 // ------------------------------------------------------------------------
91 // getSyntheticEvent
92 // ------------------------------------------------------------------------
d18dd09b 93
54a7a54c
FC
94 /**
95 *
96 */
cf21ffe2 97 public void testGetPlainEvents() {
d18dd09b
ASL
98
99 final int BLOCK_SIZE = 100;
cf21ffe2 100 final int NB_EVENTS = 1000;
6256d8ad 101 final Vector<ITmfEvent> requestedEvents = new Vector<ITmfEvent>();
d18dd09b
ASL
102
103 // Get the TmfSyntheticEventStub provider
8584dc20
FC
104 ITmfEventProvider[] eventProviders = TmfProviderManager.getProviders(TmfEvent.class, TmfEventProviderStub.class);
105 ITmfEventProvider provider = eventProviders[0];
d18dd09b 106
a4115405 107 TmfTimeRange range = new TmfTimeRange(TmfTimestamp.BIG_BANG, TmfTimestamp.BIG_CRUNCH);
6256d8ad 108 final TmfEventRequest request = new TmfEventRequest(TmfEvent.class, range, NB_EVENTS, BLOCK_SIZE) {
cf21ffe2 109 @Override
8584dc20 110 @SuppressWarnings("deprecation")
6256d8ad 111 public void handleData(ITmfEvent event) {
cf21ffe2
FC
112 super.handleData(event);
113 requestedEvents.add(event);
114 }
f9673903 115 };
cf21ffe2 116
d18dd09b 117 provider.sendRequest(request);
cb866e08 118 try {
cf21ffe2
FC
119 request.waitForCompletion();
120 assertEquals("nbEvents", NB_EVENTS, requestedEvents.size());
121 assertTrue("isCompleted", request.isCompleted());
122 assertFalse("isCancelled", request.isCancelled());
123
124 // Make that we have distinct events.
125 // Don't go overboard: we are not validating the stub!
126 for (int i = 0; i < NB_EVENTS; i++) {
127 assertEquals("Distinct events", i + 1, requestedEvents.get(i).getTimestamp().getValue());
128 }
129 } catch (InterruptedException e) {
130 fail();
131 }
132 }
133
54a7a54c
FC
134 /**
135 *
136 */
cf21ffe2
FC
137 public void testCancelRequests() {
138
139 final int BLOCK_SIZE = 100;
140 final int NB_EVENTS = 1000;
141 final int NUMBER_EVENTS_BEFORE_CANCEL_REQ1 = 10;
142 final int NUMBER_EVENTS_BEFORE_CANCEL_REQ2 = 800;
143
6256d8ad
AM
144 final Vector<ITmfEvent> requestedEventsReq1 = new Vector<ITmfEvent>();
145 final Vector<ITmfEvent> requestedEventsReq2 = new Vector<ITmfEvent>();
cf21ffe2
FC
146
147 // Get the TmfSyntheticEventStub provider
8584dc20
FC
148 ITmfEventProvider[] eventProviders = TmfProviderManager.getProviders(TmfEvent.class, TmfEventProviderStub.class);
149 ITmfEventProvider provider = eventProviders[0];
cf21ffe2 150
a4115405 151 TmfTimeRange range = new TmfTimeRange(TmfTimestamp.BIG_BANG, TmfTimestamp.BIG_CRUNCH);
cf21ffe2
FC
152
153 // Create first request
6256d8ad 154 final TmfEventRequest request1 = new TmfEventRequest(TmfEvent.class, range, NB_EVENTS, BLOCK_SIZE) {
cf21ffe2 155 @Override
8584dc20 156 @SuppressWarnings("deprecation")
6256d8ad 157 public void handleData(ITmfEvent event) {
cf21ffe2
FC
158 super.handleData(event);
159 requestedEventsReq1.add(event);
160
161 // cancel sub request
162 if (getNbRead() == NUMBER_EVENTS_BEFORE_CANCEL_REQ1) {
163 cancel();
164 }
165 }
166 };
167
168 // Synchronize requests
169 ((TmfEventProviderStub) provider).startSynch(new TmfStartSynchSignal(0));
170
171 // Additionally, notify provider for up-coming requests
172 provider.notifyPendingRequest(true);
173
174 // Call sendRequest, which will create a coalescing request, but it
175 // doesn't send request1 yet
176 provider.sendRequest(request1);
177
178 // Check if request1 is not running yet.
179 assertFalse("isRunning", request1.isRunning());
180
181 // Create second request
6256d8ad 182 final TmfEventRequest request2 = new TmfEventRequest(TmfEvent.class, range, NB_EVENTS, BLOCK_SIZE) {
cf21ffe2 183 @Override
8584dc20 184 @SuppressWarnings("deprecation")
6256d8ad 185 public void handleData(ITmfEvent event) {
cf21ffe2 186 super.handleData(event);
c1c69938
FC
187 requestedEventsReq2.add(event);
188
189 // cancel sub request which will cancel also main request
cf21ffe2
FC
190 if (getNbRead() == NUMBER_EVENTS_BEFORE_CANCEL_REQ2) {
191 cancel();
192 }
193 }
194 };
c1c69938 195
cf21ffe2
FC
196 // Call sendRequest, which will create a coalescing request, but it
197 // doesn't send request2 yet
c1c69938
FC
198 provider.sendRequest(request2);
199
200 // Check if request1/2 is not running yet.
cf21ffe2
FC
201 assertFalse("isRunning", request1.isRunning());
202 assertFalse("isRunning", request2.isRunning());
203
204 // Send end synch signal, however requests won't be sent
c1c69938
FC
205 ((TmfEventProviderStub) provider).endSynch(new TmfEndSynchSignal(0));
206
207 // Check if request1/2 is not running yet.
cf21ffe2
FC
208 assertFalse("isRunning", request1.isRunning());
209 assertFalse("isRunning", request2.isRunning());
c1c69938 210
cf21ffe2 211 // Finally, trigger sending of requests
c1c69938 212 provider.notifyPendingRequest(false);
c1c69938 213
cf21ffe2
FC
214 try {
215
216 // Wait until requests start
217 request1.waitForStart();
218 request2.waitForStart();
c1c69938 219
cf21ffe2
FC
220// // Verify that the requests are running
221// assertTrue("isRunning", request1.isRunning());
222// assertTrue("isRunning", request2.isRunning());
c1c69938 223
cf21ffe2 224 request1.waitForCompletion();
c1c69938 225
cf21ffe2
FC
226// // Check if request2 is still running
227// assertTrue("isRunning", request2.isRunning());
228
229 // Verify result (request1)
c1c69938 230 assertEquals("nbEvents", NUMBER_EVENTS_BEFORE_CANCEL_REQ1, requestedEventsReq1.size());
cf21ffe2
FC
231 assertTrue("isCompleted", request1.isCompleted());
232 assertTrue("isCancelled", request1.isCancelled());
233
234 request2.waitForCompletion();
235
236 // Verify result (request2)
237 assertEquals("nbEvents", NUMBER_EVENTS_BEFORE_CANCEL_REQ2, requestedEventsReq2.size());
238 assertTrue("isCompleted", request2.isCompleted());
239 assertTrue("isCancelled", request2.isCancelled());
240
241 } catch (InterruptedException e) {
242 fail();
243 }
244 }
245
9b749023
AM
246 private static void getSyntheticData(final TmfTimeRange range,
247 final int nbEvents, final int blockSize) throws InterruptedException {
d18dd09b 248
6256d8ad 249 final Vector<ITmfEvent> requestedEvents = new Vector<ITmfEvent>();
d18dd09b
ASL
250
251 // Get the event provider
8584dc20
FC
252 ITmfEventProvider[] eventProviders = TmfProviderManager.getProviders(TmfSyntheticEventStub.class);
253 ITmfEventProvider provider = eventProviders[0];
cf21ffe2 254
6256d8ad 255 final TmfEventRequest request = new TmfEventRequest(TmfSyntheticEventStub.class, range,
cf21ffe2
FC
256 nbEvents, blockSize) {
257 @Override
8584dc20 258 @SuppressWarnings("deprecation")
6256d8ad 259 public void handleData(ITmfEvent event) {
cf21ffe2
FC
260 super.handleData(event);
261 requestedEvents.add(event);
262 }
263 };
d18dd09b 264 provider.sendRequest(request);
d18dd09b 265
cb866e08 266 request.waitForCompletion();
9b749023 267 if (nbEvents != -1) {
cf21ffe2 268 assertEquals("nbEvents", nbEvents, requestedEvents.size());
9b749023 269 }
cf21ffe2
FC
270 assertTrue("isCompleted", request.isCompleted());
271 assertFalse("isCancelled", request.isCancelled());
272
273 // For each base event, the stub will queue 2 identical synthetic events
274 // Ensure that the events are queued properly.
275 // Don't go overboard: we are not validating the stub!
276 for (int i = 0; i < (nbEvents / 2); i++) {
277 assertEquals("Distinct events", i + 1, requestedEvents.get(2 * i + 0).getTimestamp().getValue());
278 assertEquals("Distinct events", i + 1, requestedEvents.get(2 * i + 1).getTimestamp().getValue());
279 }
280 }
281
54a7a54c
FC
282 /**
283 *
284 */
cf21ffe2
FC
285 // The following tests are the same but for the size of the requested blocks
286 // with regards to the size of the TmfSyntheticEventProviderStub block
cb866e08 287 public void testGetSyntheticEvents_EqualBlockSizes() {
a4115405 288 TmfTimeRange range = new TmfTimeRange(TmfTimestamp.BIG_BANG, TmfTimestamp.BIG_CRUNCH);
cf21ffe2
FC
289 try {
290 getSyntheticData(range, 1000, TmfSyntheticEventProviderStub.BLOCK_SIZE);
291 } catch (InterruptedException e) {
292 fail();
293 }
294 }
295
54a7a54c
FC
296 /**
297 *
298 */
cf21ffe2 299 public void testGetSyntheticEvents_SmallerBlock() {
a4115405 300 TmfTimeRange range = new TmfTimeRange(TmfTimestamp.BIG_BANG, TmfTimestamp.BIG_CRUNCH);
cf21ffe2
FC
301 try {
302 getSyntheticData(range, 1000, TmfSyntheticEventProviderStub.BLOCK_SIZE / 2);
303 } catch (InterruptedException e) {
304 fail();
305 }
306 }
307
54a7a54c
FC
308 /**
309 *
310 */
cf21ffe2 311 public void testGetSyntheticEvents_LargerBlock() {
a4115405 312 TmfTimeRange range = new TmfTimeRange(TmfTimestamp.BIG_BANG, TmfTimestamp.BIG_CRUNCH);
cf21ffe2
FC
313 try {
314 getSyntheticData(range, 1000, TmfSyntheticEventProviderStub.BLOCK_SIZE * 2);
315 } catch (InterruptedException e) {
316 fail();
317 }
318 }
319
54a7a54c
FC
320 /**
321 *
322 */
cf21ffe2
FC
323 public void testGetSyntheticEvents_TimeRange() {
324 TmfTimestamp start = new TmfTimestamp(1, (byte) -3, 0);
325 TmfTimestamp end = new TmfTimestamp(1000, (byte) -3, 0);
d18dd09b 326 TmfTimeRange range = new TmfTimeRange(start, end);
cf21ffe2
FC
327 try {
328 getSyntheticData(range, -1, TmfSyntheticEventProviderStub.BLOCK_SIZE);
329 } catch (InterruptedException e) {
330 fail();
331 }
332 }
333
496a16a7
FC
334// public void testGetSyntheticEvents_WeirdTimeRange1() {
335// TmfTimestamp start = TmfTimestamp.BigBang;
336// TmfTimestamp end = TmfTimestamp.Zero; // new TmfTimestamp(0, (byte) -3,
337// // 0);
338// TmfTimeRange range = new TmfTimeRange(start, end);
339// try {
340// getSyntheticData(range, -1, TmfSyntheticEventProviderStub.BLOCK_SIZE);
341// } catch (InterruptedException e) {
342// fail();
343// }
344// }
345
346// public void testGetSyntheticEvents_WeirdTimeRange2() {
347// TmfTimestamp start = TmfTimestamp.Zero; // new TmfTimestamp(0, (byte)
348// // -3, 0);
349// TmfTimestamp end = TmfTimestamp.BigCrunch;
350// TmfTimeRange range = new TmfTimeRange(start, end);
351// try {
352// getSyntheticData(range, -1, TmfSyntheticEventProviderStub.BLOCK_SIZE);
353// } catch (InterruptedException e) {
354// fail();
355// }
356// }
cf21ffe2
FC
357
358 // ------------------------------------------------------------------------
359 // getProviders (more a sanity check than a test)
360 // ------------------------------------------------------------------------
361
54a7a54c
FC
362 /**
363 *
364 */
cf21ffe2
FC
365 public void testGetProviders2() {
366
367 // There should be 2 TmfEvent providers: a TmfTraceStub and a
368 // TmfEventProviderStub
8584dc20 369 ITmfEventProvider[] eventProviders = TmfProviderManager.getProviders(TmfEvent.class);
cf21ffe2
FC
370 assertEquals("getProviders", 2, eventProviders.length);
371
6256d8ad 372 eventProviders = TmfProviderManager.getProviders(TmfEvent.class, TmfTraceStub.class);
cf21ffe2
FC
373 assertEquals("getProviders", 1, eventProviders.length);
374
6256d8ad 375 eventProviders = TmfProviderManager.getProviders(TmfEvent.class, TmfEventProviderStub.class);
cf21ffe2
FC
376 assertEquals("getProviders", 1, eventProviders.length);
377
378 // There should be 1 TmfSyntheticEventStub provider
6256d8ad 379 eventProviders = TmfProviderManager.getProviders(TmfSyntheticEventStub.class);
cf21ffe2
FC
380 assertEquals("getProviders", 1, eventProviders.length);
381 }
d18dd09b
ASL
382
383}
This page took 0.059119 seconds and 5 git commands to generate.