analysis: Move plugins to their own sub-directory
[deliverable/tracecompass.git] / org.eclipse.tracecompass.tmf.core.tests / src / org / eclipse / tracecompass / tmf / core / tests / component / TmfEventProviderTest.java
CommitLineData
d18dd09b 1/*******************************************************************************
ed902a2b 2 * Copyright (c) 2009, 2014 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
6e1886bc 11 * Alexandre Montplaisir - Port to JUnit4
d18dd09b
ASL
12 *******************************************************************************/
13
2bdf0193 14package org.eclipse.tracecompass.tmf.core.tests.component;
d18dd09b 15
b5ddd705
GB
16import static org.junit.Assert.assertEquals;
17import static org.junit.Assert.assertFalse;
18import static org.junit.Assert.assertTrue;
19import static org.junit.Assert.fail;
d18dd09b 20
6e1886bc
AM
21import java.io.IOException;
22import java.util.Vector;
d18dd09b 23
2bdf0193
AM
24import org.eclipse.tracecompass.internal.tmf.core.component.TmfProviderManager;
25import org.eclipse.tracecompass.tmf.core.component.ITmfEventProvider;
26import org.eclipse.tracecompass.tmf.core.event.ITmfEvent;
27import org.eclipse.tracecompass.tmf.core.request.TmfEventRequest;
28import org.eclipse.tracecompass.tmf.core.request.ITmfEventRequest.ExecutionType;
29import org.eclipse.tracecompass.tmf.core.signal.TmfEndSynchSignal;
30import org.eclipse.tracecompass.tmf.core.signal.TmfStartSynchSignal;
31import org.eclipse.tracecompass.tmf.core.timestamp.TmfTimeRange;
32import org.eclipse.tracecompass.tmf.core.timestamp.TmfTimestamp;
33import org.eclipse.tracecompass.tmf.tests.stubs.component.TmfEventProviderStub;
34import org.eclipse.tracecompass.tmf.tests.stubs.component.TmfSyntheticEventProviderStub;
35import org.eclipse.tracecompass.tmf.tests.stubs.event.TmfSyntheticEventStub;
36import org.eclipse.tracecompass.tmf.tests.stubs.trace.TmfTraceStub;
6e1886bc
AM
37import org.junit.After;
38import org.junit.Before;
39import org.junit.Test;
d18dd09b
ASL
40
41/**
ff4ed569 42 * Test suite for the TmfEventProvider class.
d18dd09b 43 */
6e1886bc 44public class TmfEventProviderTest {
d18dd09b 45
6e1886bc
AM
46 private TmfEventProviderStub fEventProvider;
47 private TmfSyntheticEventProviderStub fSyntheticEventProvider;
d18dd09b 48
54a7a54c 49 /**
6e1886bc
AM
50 * Initialization
51 *
52 * @throws IOException
53 * If we can't find the test trace (they are committed in the
54 * tree, so it shouldn't happen).
54a7a54c 55 */
6e1886bc
AM
56 @Before
57 public void setUp() throws IOException {
cf21ffe2
FC
58 fEventProvider = new TmfEventProviderStub();
59 fSyntheticEventProvider = new TmfSyntheticEventProviderStub();
60 }
d18dd09b 61
6e1886bc
AM
62 /**
63 * Clean-up
64 */
65 @After
66 public void tearDown() {
cf21ffe2
FC
67 fEventProvider.dispose();
68 fSyntheticEventProvider.dispose();
69 }
d18dd09b 70
cf21ffe2
FC
71 // ------------------------------------------------------------------------
72 // getProviders (more a sanity check than a test)
73 // ------------------------------------------------------------------------
d18dd09b 74
54a7a54c 75 /**
6e1886bc 76 * Test getProviders
54a7a54c 77 */
6e1886bc 78 @Test
cf21ffe2 79 public void testGetProviders() {
cf21ffe2
FC
80 // There should be 2 TmfEvent providers: a TmfTraceStub and a
81 // TmfEventProviderStub
fd3f1eff 82 ITmfEventProvider[] eventProviders = TmfProviderManager.getProviders(ITmfEvent.class);
cf21ffe2 83 assertEquals("getProviders", 2, eventProviders.length);
d18dd09b 84
2771b032 85 eventProviders = TmfProviderManager.getProviders(ITmfEvent.class, TmfTraceStub.class);
cf21ffe2 86 assertEquals("getProviders", 1, eventProviders.length);
d18dd09b 87
2771b032 88 eventProviders = TmfProviderManager.getProviders(ITmfEvent.class, TmfEventProviderStub.class);
cf21ffe2 89 assertEquals("getProviders", 1, eventProviders.length);
d18dd09b 90
cf21ffe2 91 // There should be 1 TmfSyntheticEventStub provider
6256d8ad 92 eventProviders = TmfProviderManager.getProviders(TmfSyntheticEventStub.class);
cf21ffe2
FC
93 assertEquals("getProviders", 1, eventProviders.length);
94 }
d18dd09b 95
cf21ffe2
FC
96 // ------------------------------------------------------------------------
97 // getSyntheticEvent
98 // ------------------------------------------------------------------------
d18dd09b 99
54a7a54c 100 /**
6e1886bc 101 * Test getPlainEvents
54a7a54c 102 */
6e1886bc 103 @Test
cf21ffe2 104 public void testGetPlainEvents() {
cf21ffe2 105 final int NB_EVENTS = 1000;
ccf2bbb4 106 final Vector<ITmfEvent> requestedEvents = new Vector<>();
d18dd09b
ASL
107
108 // Get the TmfSyntheticEventStub provider
fd3f1eff 109 ITmfEventProvider[] eventProviders = TmfProviderManager.getProviders(ITmfEvent.class,
5419a136 110 TmfEventProviderStub.class);
fd3f1eff 111 ITmfEventProvider provider = eventProviders[0];
d18dd09b 112
a4115405 113 TmfTimeRange range = new TmfTimeRange(TmfTimestamp.BIG_BANG, TmfTimestamp.BIG_CRUNCH);
7184fc40 114 final TmfEventRequest request = new TmfEventRequest(ITmfEvent.class,
672a642a 115 range, 0, NB_EVENTS, ExecutionType.FOREGROUND) {
cf21ffe2 116 @Override
6256d8ad 117 public void handleData(ITmfEvent event) {
cf21ffe2
FC
118 super.handleData(event);
119 requestedEvents.add(event);
120 }
f9673903 121 };
cf21ffe2 122
d18dd09b 123 provider.sendRequest(request);
cb866e08 124 try {
cf21ffe2
FC
125 request.waitForCompletion();
126 assertEquals("nbEvents", NB_EVENTS, requestedEvents.size());
127 assertTrue("isCompleted", request.isCompleted());
128 assertFalse("isCancelled", request.isCancelled());
129
130 // Make that we have distinct events.
131 // Don't go overboard: we are not validating the stub!
132 for (int i = 0; i < NB_EVENTS; i++) {
133 assertEquals("Distinct events", i + 1, requestedEvents.get(i).getTimestamp().getValue());
134 }
135 } catch (InterruptedException e) {
136 fail();
137 }
138 }
139
54a7a54c 140 /**
6e1886bc 141 * Test canceling requests.
54a7a54c 142 */
6e1886bc 143 @Test
cf21ffe2 144 public void testCancelRequests() {
cf21ffe2
FC
145 final int NB_EVENTS = 1000;
146 final int NUMBER_EVENTS_BEFORE_CANCEL_REQ1 = 10;
147 final int NUMBER_EVENTS_BEFORE_CANCEL_REQ2 = 800;
148
ccf2bbb4
AM
149 final Vector<ITmfEvent> requestedEventsReq1 = new Vector<>();
150 final Vector<ITmfEvent> requestedEventsReq2 = new Vector<>();
cf21ffe2
FC
151
152 // Get the TmfSyntheticEventStub provider
fd3f1eff 153 ITmfEventProvider[] eventProviders = TmfProviderManager.getProviders(ITmfEvent.class,
5419a136 154 TmfEventProviderStub.class);
fd3f1eff 155 ITmfEventProvider provider = eventProviders[0];
cf21ffe2 156
a4115405 157 TmfTimeRange range = new TmfTimeRange(TmfTimestamp.BIG_BANG, TmfTimestamp.BIG_CRUNCH);
cf21ffe2
FC
158
159 // Create first request
7184fc40 160 final TmfEventRequest request1 = new TmfEventRequest(ITmfEvent.class,
672a642a 161 range, 0, NB_EVENTS, ExecutionType.FOREGROUND) {
cf21ffe2 162 @Override
6256d8ad 163 public void handleData(ITmfEvent event) {
cf21ffe2
FC
164 super.handleData(event);
165 requestedEventsReq1.add(event);
166
167 // cancel sub request
168 if (getNbRead() == NUMBER_EVENTS_BEFORE_CANCEL_REQ1) {
169 cancel();
170 }
171 }
172 };
173
174 // Synchronize requests
175 ((TmfEventProviderStub) provider).startSynch(new TmfStartSynchSignal(0));
176
177 // Additionally, notify provider for up-coming requests
178 provider.notifyPendingRequest(true);
179
180 // Call sendRequest, which will create a coalescing request, but it
181 // doesn't send request1 yet
182 provider.sendRequest(request1);
183
184 // Check if request1 is not running yet.
185 assertFalse("isRunning", request1.isRunning());
186
187 // Create second request
7184fc40 188 final TmfEventRequest request2 = new TmfEventRequest(ITmfEvent.class,
672a642a 189 range, 0, NB_EVENTS, ExecutionType.FOREGROUND) {
cf21ffe2 190 @Override
6256d8ad 191 public void handleData(ITmfEvent event) {
cf21ffe2 192 super.handleData(event);
c1c69938
FC
193 requestedEventsReq2.add(event);
194
195 // cancel sub request which will cancel also main request
cf21ffe2
FC
196 if (getNbRead() == NUMBER_EVENTS_BEFORE_CANCEL_REQ2) {
197 cancel();
198 }
199 }
200 };
c1c69938 201
cf21ffe2
FC
202 // Call sendRequest, which will create a coalescing request, but it
203 // doesn't send request2 yet
c1c69938
FC
204 provider.sendRequest(request2);
205
206 // Check if request1/2 is not running yet.
cf21ffe2
FC
207 assertFalse("isRunning", request1.isRunning());
208 assertFalse("isRunning", request2.isRunning());
209
210 // Send end synch signal, however requests won't be sent
c1c69938
FC
211 ((TmfEventProviderStub) provider).endSynch(new TmfEndSynchSignal(0));
212
213 // Check if request1/2 is not running yet.
cf21ffe2
FC
214 assertFalse("isRunning", request1.isRunning());
215 assertFalse("isRunning", request2.isRunning());
c1c69938 216
cf21ffe2 217 // Finally, trigger sending of requests
c1c69938 218 provider.notifyPendingRequest(false);
c1c69938 219
cf21ffe2
FC
220 try {
221
222 // Wait until requests start
223 request1.waitForStart();
224 request2.waitForStart();
c1c69938 225
d5efe032
AF
226// // Verify that the requests are running
227// assertTrue("isRunning", request1.isRunning());
228// assertTrue("isRunning", request2.isRunning());
c1c69938 229
cf21ffe2 230 request1.waitForCompletion();
c1c69938 231
d5efe032 232// // Check if request2 is still running
cf21ffe2
FC
233// assertTrue("isRunning", request2.isRunning());
234
235 // Verify result (request1)
c1c69938 236 assertEquals("nbEvents", NUMBER_EVENTS_BEFORE_CANCEL_REQ1, requestedEventsReq1.size());
cf21ffe2
FC
237 assertTrue("isCompleted", request1.isCompleted());
238 assertTrue("isCancelled", request1.isCancelled());
239
240 request2.waitForCompletion();
241
242 // Verify result (request2)
243 assertEquals("nbEvents", NUMBER_EVENTS_BEFORE_CANCEL_REQ2, requestedEventsReq2.size());
244 assertTrue("isCompleted", request2.isCompleted());
245 assertTrue("isCancelled", request2.isCancelled());
246
247 } catch (InterruptedException e) {
248 fail();
249 }
250 }
251
9b749023 252 private static void getSyntheticData(final TmfTimeRange range,
672a642a 253 final int nbEvents) throws InterruptedException {
d18dd09b 254
ccf2bbb4 255 final Vector<ITmfEvent> requestedEvents = new Vector<>();
d18dd09b
ASL
256
257 // Get the event provider
fd3f1eff 258 ITmfEventProvider[] eventProviders = TmfProviderManager
5419a136 259 .getProviders(TmfSyntheticEventStub.class);
fd3f1eff 260 ITmfEventProvider provider = eventProviders[0];
cf21ffe2 261
6256d8ad 262 final TmfEventRequest request = new TmfEventRequest(TmfSyntheticEventStub.class, range,
672a642a 263 0, nbEvents, ExecutionType.FOREGROUND) {
cf21ffe2 264 @Override
6256d8ad 265 public void handleData(ITmfEvent event) {
cf21ffe2
FC
266 super.handleData(event);
267 requestedEvents.add(event);
268 }
269 };
d18dd09b 270 provider.sendRequest(request);
d18dd09b 271
cb866e08 272 request.waitForCompletion();
9b749023 273 if (nbEvents != -1) {
cf21ffe2 274 assertEquals("nbEvents", nbEvents, requestedEvents.size());
9b749023 275 }
cf21ffe2
FC
276 assertTrue("isCompleted", request.isCompleted());
277 assertFalse("isCancelled", request.isCancelled());
278
279 // For each base event, the stub will queue 2 identical synthetic events
280 // Ensure that the events are queued properly.
281 // Don't go overboard: we are not validating the stub!
282 for (int i = 0; i < (nbEvents / 2); i++) {
283 assertEquals("Distinct events", i + 1, requestedEvents.get(2 * i + 0).getTimestamp().getValue());
284 assertEquals("Distinct events", i + 1, requestedEvents.get(2 * i + 1).getTimestamp().getValue());
285 }
286 }
287
54a7a54c 288 /**
6e1886bc 289 * Test getSyntheticEvents for equal block sizes.
54a7a54c 290 */
6e1886bc 291 @Test
cb866e08 292 public void testGetSyntheticEvents_EqualBlockSizes() {
a4115405 293 TmfTimeRange range = new TmfTimeRange(TmfTimestamp.BIG_BANG, TmfTimestamp.BIG_CRUNCH);
cf21ffe2 294 try {
672a642a 295 getSyntheticData(range, 1000);
cf21ffe2
FC
296 } catch (InterruptedException e) {
297 fail();
298 }
299 }
300
54a7a54c 301 /**
6e1886bc 302 * Test getSyntheticEvents
54a7a54c 303 */
6e1886bc 304 @Test
cf21ffe2 305 public void testGetSyntheticEvents_TimeRange() {
065cc19b
AM
306 TmfTimestamp start = new TmfTimestamp(1, (byte) -3);
307 TmfTimestamp end = new TmfTimestamp(1000, (byte) -3);
d18dd09b 308 TmfTimeRange range = new TmfTimeRange(start, end);
cf21ffe2 309 try {
672a642a 310 getSyntheticData(range, -1);
cf21ffe2
FC
311 } catch (InterruptedException e) {
312 fail();
313 }
314 }
315
496a16a7
FC
316// public void testGetSyntheticEvents_WeirdTimeRange1() {
317// TmfTimestamp start = TmfTimestamp.BigBang;
318// TmfTimestamp end = TmfTimestamp.Zero; // new TmfTimestamp(0, (byte) -3,
319// // 0);
320// TmfTimeRange range = new TmfTimeRange(start, end);
321// try {
322// getSyntheticData(range, -1, TmfSyntheticEventProviderStub.BLOCK_SIZE);
323// } catch (InterruptedException e) {
324// fail();
325// }
326// }
327
328// public void testGetSyntheticEvents_WeirdTimeRange2() {
329// TmfTimestamp start = TmfTimestamp.Zero; // new TmfTimestamp(0, (byte)
330// // -3, 0);
331// TmfTimestamp end = TmfTimestamp.BigCrunch;
332// TmfTimeRange range = new TmfTimeRange(start, end);
333// try {
334// getSyntheticData(range, -1, TmfSyntheticEventProviderStub.BLOCK_SIZE);
335// } catch (InterruptedException e) {
336// fail();
337// }
338// }
cf21ffe2 339
54a7a54c 340 /**
6e1886bc 341 * Test getProviders (more a sanity check than a test)
54a7a54c 342 */
6e1886bc 343 @Test
cf21ffe2
FC
344 public void testGetProviders2() {
345
346 // There should be 2 TmfEvent providers: a TmfTraceStub and a
347 // TmfEventProviderStub
fd3f1eff 348 ITmfEventProvider[] eventProviders = TmfProviderManager.getProviders(ITmfEvent.class);
cf21ffe2
FC
349 assertEquals("getProviders", 2, eventProviders.length);
350
2771b032 351 eventProviders = TmfProviderManager.getProviders(ITmfEvent.class, TmfTraceStub.class);
cf21ffe2
FC
352 assertEquals("getProviders", 1, eventProviders.length);
353
2771b032 354 eventProviders = TmfProviderManager.getProviders(ITmfEvent.class, TmfEventProviderStub.class);
cf21ffe2
FC
355 assertEquals("getProviders", 1, eventProviders.length);
356
357 // There should be 1 TmfSyntheticEventStub provider
6256d8ad 358 eventProviders = TmfProviderManager.getProviders(TmfSyntheticEventStub.class);
cf21ffe2
FC
359 assertEquals("getProviders", 1, eventProviders.length);
360 }
d18dd09b
ASL
361
362}
This page took 0.09558 seconds and 5 git commands to generate.