1 /*******************************************************************************
2 * Copyright (c) 2009, 2010 Ericsson
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
10 * Francois Chouinard - Initial API and implementation
11 *******************************************************************************/
13 package org
.eclipse
.linuxtools
.tmf
.tests
.request
;
16 import java
.io
.IOException
;
17 import java
.net
.URISyntaxException
;
19 import java
.util
.Vector
;
21 import junit
.framework
.TestCase
;
23 import org
.eclipse
.core
.runtime
.FileLocator
;
24 import org
.eclipse
.core
.runtime
.Path
;
25 import org
.eclipse
.linuxtools
.tmf
.component
.ITmfDataProvider
;
26 import org
.eclipse
.linuxtools
.tmf
.component
.TmfProviderManager
;
27 import org
.eclipse
.linuxtools
.tmf
.event
.TmfEvent
;
28 import org
.eclipse
.linuxtools
.tmf
.event
.TmfTimeRange
;
29 import org
.eclipse
.linuxtools
.tmf
.event
.TmfTimestamp
;
30 import org
.eclipse
.linuxtools
.tmf
.request
.TmfCoalescedDataRequest
;
31 import org
.eclipse
.linuxtools
.tmf
.request
.TmfCoalescedEventRequest
;
32 import org
.eclipse
.linuxtools
.tmf
.request
.TmfEventRequest
;
33 import org
.eclipse
.linuxtools
.tmf
.request
.TmfEventRequestStub
;
34 import org
.eclipse
.linuxtools
.tmf
.signal
.TmfSignal
;
35 import org
.eclipse
.linuxtools
.tmf
.signal
.TmfSignalHandler
;
36 import org
.eclipse
.linuxtools
.tmf
.signal
.TmfSignalManager
;
37 import org
.eclipse
.linuxtools
.tmf
.tests
.TmfCoreTestPlugin
;
38 import org
.eclipse
.linuxtools
.tmf
.trace
.TmfTraceStub
;
41 * <b><u>TmfCoalescedEventRequestTest</u></b>
43 * Test suite for the TmfCoalescedEventRequest class.
45 public class TmfCoalescedEventRequestTest
extends TestCase
{
47 // ------------------------------------------------------------------------
49 // ------------------------------------------------------------------------
51 private static TmfTimeRange range1
= new TmfTimeRange(TmfTimeRange
.Eternity
);
52 private static TmfTimeRange range2
= new TmfTimeRange(new TmfTimestamp(), TmfTimestamp
.BigCrunch
);
54 private static TmfCoalescedEventRequest
<TmfEvent
> fRequest1
;
55 private static TmfCoalescedEventRequest
<TmfEvent
> fRequest2
;
56 private static TmfCoalescedEventRequest
<TmfEvent
> fRequest3
;
57 private static TmfCoalescedEventRequest
<TmfEvent
> fRequest4
;
59 private static TmfCoalescedEventRequest
<TmfEvent
> fRequest1b
;
60 private static TmfCoalescedEventRequest
<TmfEvent
> fRequest1c
;
62 private static int fRequestCount
;
64 // ------------------------------------------------------------------------
66 // ------------------------------------------------------------------------
68 public TmfCoalescedEventRequestTest(String name
) {
73 public void setUp() throws Exception
{
75 TmfEventRequest
.reset();
76 fRequest1
= new TmfCoalescedEventRequest
<TmfEvent
>(TmfEvent
.class, range1
, 100, 200);
77 fRequest2
= new TmfCoalescedEventRequest
<TmfEvent
>(TmfEvent
.class, range2
, 100, 200);
78 fRequest3
= new TmfCoalescedEventRequest
<TmfEvent
>(TmfEvent
.class, range2
, 200, 200);
79 fRequest4
= new TmfCoalescedEventRequest
<TmfEvent
>(TmfEvent
.class, range2
, 200, 300);
81 fRequest1b
= new TmfCoalescedEventRequest
<TmfEvent
>(TmfEvent
.class, range1
, 100, 200);
82 fRequest1c
= new TmfCoalescedEventRequest
<TmfEvent
>(TmfEvent
.class, range1
, 100, 200);
84 fRequestCount
= fRequest1c
.getRequestId() + 1;
88 public void tearDown() throws Exception
{
92 private TmfCoalescedEventRequest
<TmfEvent
> setupTestRequest(final boolean[] flags
) {
94 TmfCoalescedEventRequest
<TmfEvent
> request
= new TmfCoalescedEventRequest
<TmfEvent
>(TmfEvent
.class, range1
, 100, 200) {
96 public void handleCompleted() {
97 super.handleCompleted();
101 public void handleSuccess() {
102 super.handleSuccess();
106 public void handleFailure() {
107 super.handleFailure();
111 public void handleCancel() {
112 super.handleCancel();
119 // ------------------------------------------------------------------------
121 // ------------------------------------------------------------------------
123 public void testTmfCoalescedEventRequest() {
124 TmfCoalescedEventRequest
<TmfEvent
> request
= new TmfCoalescedEventRequest
<TmfEvent
>(TmfEvent
.class);
126 assertEquals("getRequestId", fRequestCount
++, request
.getRequestId());
127 assertEquals("getDataType", TmfEvent
.class, request
.getDataType());
129 assertEquals("getRange", range1
, request
.getRange());
130 assertEquals("getNbRequestedEvents", TmfEventRequest
.ALL_DATA
, request
.getNbRequested());
132 assertFalse("isCompleted", request
.isCompleted());
133 assertFalse("isFailed", request
.isFailed());
134 assertFalse("isCancelled", request
.isCancelled());
136 assertEquals("getNbRead", 0, request
.getNbRead());
139 public void testTmfCoalescedEventRequestIndex() {
140 TmfCoalescedEventRequest
<TmfEvent
> request
= new TmfCoalescedEventRequest
<TmfEvent
>(TmfEvent
.class, range1
);
142 assertEquals("getRequestId", fRequestCount
++, request
.getRequestId());
143 assertEquals("getDataType", TmfEvent
.class, request
.getDataType());
145 assertEquals("getRange", range1
, request
.getRange());
146 assertEquals("getNbRequestedEvents", TmfEventRequest
.ALL_DATA
, request
.getNbRequested());
148 assertFalse("isCompleted", request
.isCompleted());
149 assertFalse("isFailed", request
.isFailed());
150 assertFalse("isCancelled", request
.isCancelled());
152 assertEquals("getNbRead", 0, request
.getNbRead());
155 public void testTmfCoalescedEventRequestIndexNbRequested() {
156 TmfCoalescedEventRequest
<TmfEvent
> request
= new TmfCoalescedEventRequest
<TmfEvent
>(TmfEvent
.class, range1
, 100);
158 assertEquals("getRequestId", fRequestCount
++, request
.getRequestId());
159 assertEquals("getDataType", TmfEvent
.class, request
.getDataType());
161 assertEquals("getRange", range1
, request
.getRange());
162 assertEquals("getNbRequestedEvents", 100, request
.getNbRequested());
164 assertFalse("isCompleted", request
.isCompleted());
165 assertFalse("isFailed", request
.isFailed());
166 assertFalse("isCancelled", request
.isCancelled());
168 assertEquals("getNbRead", 0, request
.getNbRead());
171 public void testTmfCoalescedEventRequestIndexNbEventsBlocksize() {
172 TmfCoalescedEventRequest
<TmfEvent
> request
= new TmfCoalescedEventRequest
<TmfEvent
>(TmfEvent
.class, range1
, 100, 200);
174 assertEquals("getRequestId", fRequestCount
++, request
.getRequestId());
175 assertEquals("getDataType", TmfEvent
.class, request
.getDataType());
177 assertEquals("getRange", range1
, request
.getRange());
178 assertEquals("getNbRequestedEvents", 100, request
.getNbRequested());
180 assertFalse("isCompleted", request
.isCompleted());
181 assertFalse("isFailed", request
.isFailed());
182 assertFalse("isCancelled", request
.isCancelled());
184 assertEquals("getNbRead", 0, request
.getNbRead());
187 // ------------------------------------------------------------------------
189 // ------------------------------------------------------------------------
191 public void testEqualsReflexivity() throws Exception
{
192 assertTrue("equals", fRequest1
.equals(fRequest1
));
193 assertTrue("equals", fRequest2
.equals(fRequest2
));
195 assertFalse("equals", fRequest1
.equals(fRequest2
));
196 assertFalse("equals", fRequest2
.equals(fRequest1
));
199 public void testEqualsSymmetry() throws Exception
{
200 assertTrue("equals", fRequest1
.equals(fRequest1b
));
201 assertTrue("equals", fRequest1b
.equals(fRequest1
));
203 assertFalse("equals", fRequest1
.equals(fRequest3
));
204 assertFalse("equals", fRequest2
.equals(fRequest3
));
205 assertFalse("equals", fRequest3
.equals(fRequest1
));
206 assertFalse("equals", fRequest3
.equals(fRequest2
));
209 public void testEqualsTransivity() throws Exception
{
210 assertTrue("equals", fRequest1
.equals(fRequest1b
));
211 assertTrue("equals", fRequest1b
.equals(fRequest1c
));
212 assertTrue("equals", fRequest1
.equals(fRequest1c
));
215 public void testEqualsNull() throws Exception
{
216 assertFalse("equals", fRequest1
.equals(null));
217 assertFalse("equals", fRequest2
.equals(null));
220 public void testEqualsSuper() throws Exception
{
221 TmfCoalescedDataRequest
<TmfEvent
> dataRequest1
= new TmfCoalescedDataRequest
<TmfEvent
>(
222 fRequest1
.getDataType(), fRequest1
.getIndex(), fRequest1
.getNbRequested());
223 TmfCoalescedDataRequest
<TmfEvent
> dataRequest2
= new TmfCoalescedDataRequest
<TmfEvent
>(
224 fRequest1
.getDataType(), fRequest1
.getIndex(), fRequest1
.getNbRequested());
225 TmfCoalescedDataRequest
<TmfEvent
> dataRequest3
= new TmfCoalescedDataRequest
<TmfEvent
>(
226 fRequest3
.getDataType(), fRequest3
.getIndex(), fRequest3
.getNbRequested());
228 assertTrue("equals", fRequest1
.equals(dataRequest2
));
229 assertTrue("equals", fRequest2
.equals(dataRequest1
));
230 assertFalse("equals", fRequest1
.equals(dataRequest3
));
231 assertFalse("equals", fRequest3
.equals(dataRequest1
));
234 // ------------------------------------------------------------------------
236 // ------------------------------------------------------------------------
238 public void testHashCode() throws Exception
{
239 assertTrue("hashCode", fRequest1
.hashCode() == fRequest1
.hashCode());
240 assertTrue("hashCode", fRequest2
.hashCode() == fRequest2
.hashCode());
241 assertTrue("hashCode", fRequest1
.hashCode() != fRequest2
.hashCode());
244 // ------------------------------------------------------------------------
246 // ------------------------------------------------------------------------
248 public void testToString() {
249 String expected1
= "[TmfCoalescedEventRequest(0,TmfEvent," + range1
+ ",100)]";
250 String expected2
= "[TmfCoalescedEventRequest(1,TmfEvent," + range2
+ ",100)]";
251 String expected3
= "[TmfCoalescedEventRequest(2,TmfEvent," + range2
+ ",200)]";
252 String expected4
= "[TmfCoalescedEventRequest(3,TmfEvent," + range2
+ ",200)]";
254 assertEquals("toString", expected1
, fRequest1
.toString());
255 assertEquals("toString", expected2
, fRequest2
.toString());
256 assertEquals("toString", expected3
, fRequest3
.toString());
257 assertEquals("toString", expected4
, fRequest4
.toString());
260 // ------------------------------------------------------------------------
262 // ------------------------------------------------------------------------
264 public void testIsCompatible() {
265 TmfCoalescedEventRequest
<TmfEvent
> coalescedRequest
= new TmfCoalescedEventRequest
<TmfEvent
>(TmfEvent
.class, range1
, 100, 200);
266 TmfEventRequest
<TmfEvent
> request1
= new TmfEventRequestStub
<TmfEvent
>(TmfEvent
.class, range1
, 100, 200);
267 TmfEventRequest
<TmfEvent
> request2
= new TmfEventRequestStub
<TmfEvent
>(TmfEvent
.class, range2
, 100, 200);
268 TmfEventRequest
<TmfEvent
> request3
= new TmfEventRequestStub
<TmfEvent
>(TmfEvent
.class, range1
, 101, 200);
270 assertTrue ("isCompatible", coalescedRequest
.isCompatible(request1
));
271 assertTrue ("isCompatible", coalescedRequest
.isCompatible(request2
));
272 assertFalse("isCompatible", coalescedRequest
.isCompatible(request3
));
275 // ------------------------------------------------------------------------
277 // ------------------------------------------------------------------------
279 public void testDone() {
282 final boolean[] crFlags
= new boolean[4];
283 TmfCoalescedEventRequest
<TmfEvent
> request
= setupTestRequest(crFlags
);
284 TmfEventRequest
<TmfEvent
> subRequest1
= new TmfEventRequestStub
<TmfEvent
>(TmfEvent
.class, range1
, 100, 200);
285 TmfEventRequest
<TmfEvent
> subRequest2
= new TmfEventRequestStub
<TmfEvent
>(TmfEvent
.class, range1
, 100, 200);
286 request
.addRequest(subRequest1
);
287 request
.addRequest(subRequest2
);
291 // Validate the coalescing request
292 assertTrue ("isCompleted", request
.isCompleted());
293 assertFalse("isFailed", request
.isFailed());
294 assertFalse("isCancelled", request
.isCancelled());
296 assertTrue ("handleCompleted", crFlags
[0]);
297 assertTrue ("handleSuccess", crFlags
[1]);
298 assertFalse("handleFailure", crFlags
[2]);
299 assertFalse("handleCancel", crFlags
[3]);
301 // Validate the first coalesced request
302 assertTrue ("isCompleted", subRequest1
.isCompleted());
303 assertFalse("isFailed", subRequest1
.isFailed());
304 assertFalse("isCancelled", subRequest1
.isCancelled());
306 // Validate the second coalesced request
307 assertTrue ("isCompleted", subRequest2
.isCompleted());
308 assertFalse("isFailed", subRequest2
.isFailed());
309 assertFalse("isCancelled", subRequest2
.isCancelled());
312 // ------------------------------------------------------------------------
314 // ------------------------------------------------------------------------
316 public void testFail() {
318 final boolean[] crFlags
= new boolean[4];
319 TmfCoalescedEventRequest
<TmfEvent
> request
= setupTestRequest(crFlags
);
320 TmfEventRequest
<TmfEvent
> subRequest1
= new TmfEventRequestStub
<TmfEvent
>(TmfEvent
.class, range1
, 100, 200);
321 TmfEventRequest
<TmfEvent
> subRequest2
= new TmfEventRequestStub
<TmfEvent
>(TmfEvent
.class, range1
, 100, 200);
322 request
.addRequest(subRequest1
);
323 request
.addRequest(subRequest2
);
327 // Validate the coalescing request
328 assertTrue ("isCompleted", request
.isCompleted());
329 assertTrue ("isFailed", request
.isFailed());
330 assertFalse("isCancelled", request
.isCancelled());
332 assertTrue ("handleCompleted", crFlags
[0]);
333 assertFalse("handleSuccess", crFlags
[1]);
334 assertTrue ("handleFailure", crFlags
[2]);
335 assertFalse("handleCancel", crFlags
[3]);
337 // Validate the first coalesced request
338 assertTrue ("isCompleted", subRequest1
.isCompleted());
339 assertTrue ("isFailed", subRequest1
.isFailed());
340 assertFalse("isCancelled", subRequest1
.isCancelled());
342 // Validate the second coalesced request
343 assertTrue ("isCompleted", subRequest2
.isCompleted());
344 assertTrue ("isFailed", subRequest2
.isFailed());
345 assertFalse("isCancelled", subRequest2
.isCancelled());
348 // ------------------------------------------------------------------------
350 // ------------------------------------------------------------------------
352 public void testCancel() {
354 final boolean[] crFlags
= new boolean[4];
355 TmfCoalescedEventRequest
<TmfEvent
> request
= setupTestRequest(crFlags
);
356 TmfEventRequest
<TmfEvent
> subRequest1
= new TmfEventRequestStub
<TmfEvent
>(TmfEvent
.class, range1
, 100, 200);
357 TmfEventRequest
<TmfEvent
> subRequest2
= new TmfEventRequestStub
<TmfEvent
>(TmfEvent
.class, range1
, 100, 200);
358 request
.addRequest(subRequest1
);
359 request
.addRequest(subRequest2
);
363 // Validate the coalescing request
364 assertTrue ("isCompleted", request
.isCompleted());
365 assertFalse("isFailed", request
.isFailed());
366 assertTrue ("isCancelled", request
.isCancelled());
368 assertTrue ("handleCompleted", crFlags
[0]);
369 assertFalse("handleSuccess", crFlags
[1]);
370 assertFalse("handleFailure", crFlags
[2]);
371 assertTrue ("handleCancel", crFlags
[3]);
373 // Validate the first coalesced request
374 assertTrue ("isCompleted", subRequest1
.isCompleted());
375 assertFalse("isFailed", subRequest1
.isFailed());
376 assertTrue ("isCancelled", subRequest1
.isCancelled());
378 // Validate the second coalesced request
379 assertTrue ("isCompleted", subRequest2
.isCompleted());
380 assertFalse("isFailed", subRequest2
.isFailed());
381 assertTrue ("isCancelled", subRequest2
.isCancelled());
384 // ------------------------------------------------------------------------
386 // ------------------------------------------------------------------------
388 // ------------------------------------------------------------------------
390 // ------------------------------------------------------------------------
392 private static final String DIRECTORY
= "testfiles";
393 private static final String TEST_STREAM
= "A-Test-10K";
394 private static final int NB_EVENTS
= 10000;
395 private static final int BLOCK_SIZE
= 100;
397 // Initialize the test trace
398 private static TmfTraceStub fTrace
= null;
399 private synchronized TmfTraceStub
setupTrace(String path
) {
400 if (fTrace
== null) {
402 URL location
= FileLocator
.find(TmfCoreTestPlugin
.getDefault().getBundle(), new Path(path
), null);
403 File test
= new File(FileLocator
.toFileURL(location
).toURI());
404 fTrace
= new TmfTraceStub(test
.getPath(), 500);
405 } catch (URISyntaxException e
) {
407 } catch (IOException e
) {
414 Vector
<TmfEvent
> requestedEvents1
;
415 Vector
<TmfEvent
> requestedEvents2
;
416 Vector
<TmfEvent
> requestedEvents3
;
418 TmfEventRequest
<TmfEvent
> request1
;
419 TmfEventRequest
<TmfEvent
> request2
;
420 TmfEventRequest
<TmfEvent
> request3
;
422 ITmfDataProvider
<TmfEvent
>[] providers
;
424 private class TmfTestTriggerSignal
extends TmfSignal
{
425 public final boolean forceCancel
;
426 public TmfTestTriggerSignal(Object source
, boolean cancel
) {
428 forceCancel
= cancel
;
433 @SuppressWarnings("unchecked")
435 public void trigger(final TmfTestTriggerSignal signal
) {
437 TmfTimeRange range
= new TmfTimeRange(TmfTimestamp
.BigBang
, TmfTimestamp
.BigCrunch
);
439 requestedEvents1
= new Vector
<TmfEvent
>();
440 request1
= new TmfEventRequest
<TmfEvent
>(TmfEvent
.class, range
, NB_EVENTS
, BLOCK_SIZE
) {
443 public void handleData(TmfEvent event
) {
444 super.handleData(event
);
445 if (!isCompleted()) {
446 requestedEvents1
.add(event
);
447 if (++nbRead
>= BLOCK_SIZE
&& signal
.forceCancel
)
453 requestedEvents2
= new Vector
<TmfEvent
>();
454 request2
= new TmfEventRequest
<TmfEvent
>(TmfEvent
.class, range
, NB_EVENTS
, BLOCK_SIZE
) {
456 public void handleData(TmfEvent event
) {
457 super.handleData(event
);
458 if (!isCompleted()) {
459 requestedEvents2
.add(event
);
464 requestedEvents3
= new Vector
<TmfEvent
>();
465 request3
= new TmfEventRequest
<TmfEvent
>(TmfEvent
.class, range
, NB_EVENTS
, BLOCK_SIZE
) {
467 public void handleData(TmfEvent event
) {
468 super.handleData(event
);
469 if (!isCompleted()) {
470 requestedEvents3
.add(event
);
475 providers
= (ITmfDataProvider
<TmfEvent
>[]) TmfProviderManager
.getProviders(TmfEvent
.class, TmfTraceStub
.class);
476 providers
[0].sendRequest(request1
);
477 providers
[0].sendRequest(request2
);
478 providers
[0].sendRequest(request3
);
481 public void testCoalescedRequest() throws Exception
{
483 fTrace
= setupTrace(DIRECTORY
+ File
.separator
+ TEST_STREAM
);
485 TmfSignalManager
.register(this);
486 TmfTestTriggerSignal signal
= new TmfTestTriggerSignal(this, false);
487 TmfSignalManager
.dispatchSignal(signal
);
489 request1
.waitForCompletion();
490 request2
.waitForCompletion();
491 request3
.waitForCompletion();
493 assertEquals("Request1: nbEvents", NB_EVENTS
, requestedEvents1
.size());
494 assertTrue ("Request1: isCompleted", request1
.isCompleted());
495 assertFalse ("Request1: isCancelled", request1
.isCancelled());
497 assertEquals("Request2: nbEvents", NB_EVENTS
, requestedEvents2
.size());
498 assertTrue ("Request2: isCompleted", request2
.isCompleted());
499 assertFalse ("Request2: isCancelled", request2
.isCancelled());
501 assertEquals("Request3: nbEvents", NB_EVENTS
, requestedEvents3
.size());
502 assertTrue ("Request3: isCompleted", request3
.isCompleted());
503 assertFalse ("Request3: isCancelled", request3
.isCancelled());
505 // Ensure that we have distinct events.
506 // Don't go overboard: we are not validating the stub!
507 for (int i
= 0; i
< NB_EVENTS
; i
++) {
508 assertEquals("Distinct events", i
+1, requestedEvents1
.get(i
).getTimestamp().getValue());
509 assertEquals("Distinct events", i
+1, requestedEvents2
.get(i
).getTimestamp().getValue());
510 assertEquals("Distinct events", i
+1, requestedEvents3
.get(i
).getTimestamp().getValue());
513 TmfSignalManager
.deregister(this);
518 public void testCancelCoalescedRequest() throws Exception
{
520 fTrace
= setupTrace(DIRECTORY
+ File
.separator
+ TEST_STREAM
);
522 TmfSignalManager
.register(this);
523 TmfTestTriggerSignal signal
= new TmfTestTriggerSignal(this, true);
524 TmfSignalManager
.dispatchSignal(signal
);
526 request1
.waitForCompletion();
527 request2
.waitForCompletion();
528 request3
.waitForCompletion();
530 assertEquals("Request1: nbEvents", BLOCK_SIZE
, requestedEvents1
.size());
531 assertTrue ("Request1: isCompleted", request1
.isCompleted());
532 assertTrue ("Request1: isCancelled", request1
.isCancelled());
534 assertEquals("Request2: nbEvents", NB_EVENTS
, requestedEvents2
.size());
535 assertTrue ("Request2: isCompleted", request2
.isCompleted());
536 assertFalse ("Request2: isCancelled", request2
.isCancelled());
538 assertEquals("Request3: nbEvents", NB_EVENTS
, requestedEvents3
.size());
539 assertTrue ("Request3: isCompleted", request3
.isCompleted());
540 assertFalse ("Request3: isCancelled", request3
.isCancelled());
542 // Ensure that we have distinct events.
543 // Don't go overboard: we are not validating the stub!
544 for (int i
= 0; i
< NB_EVENTS
; i
++) {
545 assertEquals("Distinct events", i
+1, requestedEvents2
.get(i
).getTimestamp().getValue());
546 assertEquals("Distinct events", i
+1, requestedEvents3
.get(i
).getTimestamp().getValue());
549 TmfSignalManager
.deregister(this);