1 /*******************************************************************************
2 * Copyright (c) 2009, 2015 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 * Alexandre Montplaisir - Port to JUnit4
12 *******************************************************************************/
14 package org
.eclipse
.tracecompass
.tmf
.core
.tests
.request
;
16 import static org
.junit
.Assert
.assertEquals
;
17 import static org
.junit
.Assert
.assertFalse
;
18 import static org
.junit
.Assert
.assertNotNull
;
19 import static org
.junit
.Assert
.assertSame
;
20 import static org
.junit
.Assert
.assertTrue
;
22 import java
.util
.concurrent
.TimeUnit
;
24 import org
.eclipse
.tracecompass
.tmf
.core
.event
.ITmfEvent
;
25 import org
.eclipse
.tracecompass
.tmf
.core
.request
.ITmfEventRequest
;
26 import org
.eclipse
.tracecompass
.tmf
.core
.request
.ITmfEventRequest
.ExecutionType
;
27 import org
.eclipse
.tracecompass
.tmf
.core
.request
.TmfEventRequest
;
28 import org
.eclipse
.tracecompass
.tmf
.core
.timestamp
.TmfTimeRange
;
29 import org
.eclipse
.tracecompass
.tmf
.core
.timestamp
.TmfTimestamp
;
30 import org
.eclipse
.tracecompass
.tmf
.tests
.stubs
.request
.TmfEventRequestStub
;
31 import org
.junit
.Before
;
32 import org
.junit
.Rule
;
33 import org
.junit
.Test
;
34 import org
.junit
.rules
.TestRule
;
35 import org
.junit
.rules
.Timeout
;
38 * Test suite for the TmfEventRequest class.
40 @SuppressWarnings("javadoc")
41 public class TmfEventRequestTest
{
44 public TestRule globalTimeout
= new Timeout(20, TimeUnit
.SECONDS
);
46 // ------------------------------------------------------------------------
48 // ------------------------------------------------------------------------
50 private static TmfTimeRange range1
= TmfTimeRange
.ETERNITY
;
51 private static TmfTimeRange range2
= new TmfTimeRange(TmfTimestamp
.fromSeconds(0), TmfTimestamp
.BIG_CRUNCH
);
53 private static TmfEventRequest fRequest1
;
54 private static TmfEventRequest fRequest2
;
55 private static TmfEventRequest fRequest3
;
56 private static TmfEventRequest fRequest4
;
57 private static TmfEventRequest fRequest5
;
59 // ------------------------------------------------------------------------
61 // ------------------------------------------------------------------------
65 fRequest1
= new TmfEventRequestStub(ITmfEvent
.class, range1
, 100, 200);
66 fRequest2
= new TmfEventRequestStub(ITmfEvent
.class, range2
, 100, 200);
67 fRequest3
= new TmfEventRequestStub(ITmfEvent
.class, range2
, 200, 200);
68 fRequest4
= new TmfEventRequestStub(ITmfEvent
.class, range2
, 200, 300);
69 fRequest5
= new TmfEventRequestStub(ITmfEvent
.class, range2
, 200, 300, ExecutionType
.FOREGROUND
, 1);
72 private static TmfEventRequest
setupTestRequest(final boolean[] flags
) {
74 TmfEventRequest request
= new TmfEventRequestStub(ITmfEvent
.class, TmfTimeRange
.ETERNITY
, 100, 200) {
76 public void handleCompleted() {
77 super.handleCompleted();
82 public void handleSuccess() {
83 super.handleSuccess();
88 public void handleFailure() {
89 super.handleFailure();
94 public void handleCancel() {
102 // ------------------------------------------------------------------------
104 // ------------------------------------------------------------------------
107 public void testTmfEventRequest() {
108 TmfEventRequest request
= new TmfEventRequestStub(ITmfEvent
.class);
110 assertEquals("getDataType", ITmfEvent
.class, request
.getDataType());
112 assertEquals("StartTime", TmfTimestamp
.BIG_BANG
, request
.getRange().getStartTime());
113 assertEquals("EndTime", TmfTimestamp
.BIG_CRUNCH
, request
.getRange().getEndTime());
115 assertEquals("getRange", TmfTimeRange
.ETERNITY
, request
.getRange());
116 assertSame("getRange", TmfTimeRange
.ETERNITY
, request
.getRange());
118 assertEquals("getIndex", 0, request
.getIndex());
119 assertEquals("getNbRequestedEvents", ITmfEventRequest
.ALL_DATA
, request
.getNbRequested());
121 assertFalse("isCompleted", request
.isCompleted());
122 assertFalse("isFailed", request
.isFailed());
123 assertFalse("isCancelled", request
.isCancelled());
125 assertEquals("getNbRead", 0, request
.getNbRead());
126 assertEquals("getDependencyLevel", 0, request
.getDependencyLevel());
130 public void testTmfEventRequestTimeRange() {
131 TmfTimeRange range
= new TmfTimeRange(TmfTimestamp
.fromSeconds(0), TmfTimestamp
.BIG_CRUNCH
);
132 TmfEventRequest request
= new TmfEventRequestStub(ITmfEvent
.class, range
);
134 assertEquals("getDataType", ITmfEvent
.class, request
.getDataType());
136 assertEquals("StartTime", TmfTimestamp
.fromSeconds(0), request
.getRange().getStartTime());
137 assertEquals("EndTime", TmfTimestamp
.BIG_CRUNCH
, request
.getRange().getEndTime());
139 assertEquals("getIndex", 0, request
.getIndex());
140 assertEquals("getNbRequestedEvents", ITmfEventRequest
.ALL_DATA
, request
.getNbRequested());
142 assertFalse("isCompleted", request
.isCompleted());
143 assertFalse("isFailed", request
.isFailed());
144 assertFalse("isCancelled", request
.isCancelled());
146 assertEquals("getNbRead", 0, request
.getNbRead());
147 assertEquals("getDependencyLevel", 0, request
.getDependencyLevel());
151 public void testTmfEventRequestTimeRangeNbRequested() {
152 TmfTimeRange range
= new TmfTimeRange(TmfTimestamp
.fromSeconds(0), TmfTimestamp
.BIG_CRUNCH
);
153 TmfEventRequest request
= new TmfEventRequestStub(ITmfEvent
.class, range
, 100);
155 assertEquals("getDataType", ITmfEvent
.class, request
.getDataType());
157 assertEquals("StartTime", TmfTimestamp
.fromSeconds(0), request
.getRange().getStartTime());
158 assertEquals("EndTime", TmfTimestamp
.BIG_CRUNCH
, request
.getRange().getEndTime());
160 assertEquals("getIndex", 0, request
.getIndex());
161 assertEquals("getNbRequestedEvents", 100, request
.getNbRequested());
163 assertFalse("isCompleted", request
.isCompleted());
164 assertFalse("isFailed", request
.isFailed());
165 assertFalse("isCancelled", request
.isCancelled());
167 assertEquals("getNbRead", 0, request
.getNbRead());
168 assertEquals("getDependencyLevel", 0, request
.getDependencyLevel());
172 public void testTmfEventRequestTimeRangeNbRequestedBlocksize() {
173 TmfTimeRange range
= new TmfTimeRange(TmfTimestamp
.fromSeconds(0), TmfTimestamp
.BIG_CRUNCH
);
174 TmfEventRequest request
= new TmfEventRequestStub(ITmfEvent
.class, range
, 100, 200);
176 assertEquals("getDataType", ITmfEvent
.class, request
.getDataType());
178 assertEquals("StartTime", TmfTimestamp
.fromSeconds(0), request
.getRange().getStartTime());
179 assertEquals("EndTime", TmfTimestamp
.BIG_CRUNCH
, request
.getRange().getEndTime());
181 assertEquals("getIndex", 0, request
.getIndex());
182 assertEquals("getNbRequestedEvents", 100, request
.getNbRequested());
184 assertFalse("isCompleted", request
.isCompleted());
185 assertFalse("isFailed", request
.isFailed());
186 assertFalse("isCancelled", request
.isCancelled());
188 assertEquals("getNbRead", 0, request
.getNbRead());
189 assertEquals("getDependencyLevel", 0, request
.getDependencyLevel());
193 public void testTmfEventRequestWithDependencyLevel() {
194 TmfTimeRange range
= new TmfTimeRange(TmfTimestamp
.fromSeconds(0), TmfTimestamp
.BIG_CRUNCH
);
195 TmfEventRequest request
= new TmfEventRequestStub(ITmfEvent
.class, range
, 100, 200, ExecutionType
.FOREGROUND
, 1);
197 assertEquals("getDataType", ITmfEvent
.class, request
.getDataType());
199 assertEquals("StartTime", TmfTimestamp
.fromSeconds(0), request
.getRange().getStartTime());
200 assertEquals("EndTime", TmfTimestamp
.BIG_CRUNCH
, request
.getRange().getEndTime());
202 assertEquals("getIndex", 0, request
.getIndex());
203 assertEquals("getNbRequestedEvents", 100, request
.getNbRequested());
205 assertFalse("isCompleted", request
.isCompleted());
206 assertFalse("isFailed", request
.isFailed());
207 assertFalse("isCancelled", request
.isCancelled());
209 assertEquals("getNbRead", 0, request
.getNbRead());
210 assertEquals("getDependencyLevel", 1, request
.getDependencyLevel());
213 // ------------------------------------------------------------------------
215 // ------------------------------------------------------------------------
218 public void testEquals() {
220 * No two different requests should be "equal", even if they used the
221 * same constructor parameters.
223 assertTrue(fRequest1
.equals(fRequest1
));
224 assertFalse(fRequest1
.equals(fRequest2
));
225 assertFalse(fRequest1
.equals(fRequest3
));
226 assertFalse(fRequest1
.equals(fRequest4
));
229 * Request with different dependency level, but otherwise identical, are
232 assertFalse(fRequest4
.equals(fRequest5
));
235 // ------------------------------------------------------------------------
237 // ------------------------------------------------------------------------
240 public void testToString() {
241 String expected1
= "[TmfEventRequestStub(" + fRequest1
.getRequestId() + ",ITmfEvent,FOREGROUND," + range1
+ ",0,100,0)]";
242 String expected2
= "[TmfEventRequestStub(" + fRequest2
.getRequestId() + ",ITmfEvent,FOREGROUND," + range2
+ ",0,100,0)]";
243 String expected3
= "[TmfEventRequestStub(" + fRequest3
.getRequestId() + ",ITmfEvent,FOREGROUND," + range2
+ ",0,200,0)]";
244 String expected4
= "[TmfEventRequestStub(" + fRequest4
.getRequestId() + ",ITmfEvent,FOREGROUND," + range2
+ ",0,200,0)]";
245 String expected5
= "[TmfEventRequestStub(" + fRequest5
.getRequestId() + ",ITmfEvent,FOREGROUND," + range2
+ ",0,200,1)]";
247 assertEquals("toString", expected1
, fRequest1
.toString());
248 assertEquals("toString", expected2
, fRequest2
.toString());
249 assertEquals("toString", expected3
, fRequest3
.toString());
250 assertEquals("toString", expected4
, fRequest4
.toString());
251 assertEquals("toString", expected5
, fRequest5
.toString());
254 // ------------------------------------------------------------------------
256 // ------------------------------------------------------------------------
259 public void testDone() {
260 final boolean[] flags
= new boolean[4];
261 TmfEventRequest request
= setupTestRequest(flags
);
264 assertTrue("isCompleted", request
.isCompleted());
265 assertFalse("isFailed", request
.isFailed());
266 assertFalse("isCancelled", request
.isCancelled());
268 assertTrue("handleCompleted", flags
[0]);
269 assertTrue("handleSuccess", flags
[1]);
270 assertFalse("handleFailure", flags
[2]);
271 assertFalse("handleCancel", flags
[3]);
274 // ------------------------------------------------------------------------
276 // ------------------------------------------------------------------------
279 public void testFail() {
280 final boolean[] flags
= new boolean[4];
281 TmfEventRequest request
= setupTestRequest(flags
);
282 request
.fail(new IllegalArgumentException("Bad argument"));
284 final Throwable failCause
= request
.getFailureCause();
285 assertTrue("isCompleted", request
.isCompleted());
286 assertTrue("isFailed", request
.isFailed());
287 assertFalse("isCancelled", request
.isCancelled());
288 assertNotNull("Cause of failure", failCause
);
289 assertEquals("Cause of failure message", "Bad argument", failCause
.getMessage());
291 assertTrue("handleCompleted", flags
[0]);
292 assertFalse("handleSuccess", flags
[1]);
293 assertTrue("handleFailure", flags
[2]);
294 assertFalse("handleCancel", flags
[3]);
297 // ------------------------------------------------------------------------
299 // ------------------------------------------------------------------------
302 public void testCancel() {
303 final boolean[] flags
= new boolean[4];
304 TmfEventRequest request
= setupTestRequest(flags
);
307 assertTrue("isCompleted", request
.isCompleted());
308 assertFalse("isFailed", request
.isFailed());
309 assertTrue("isCancelled", request
.isCancelled());
311 assertTrue("handleCompleted", flags
[0]);
312 assertFalse("handleSuccess", flags
[1]);
313 assertFalse("handleFailure", flags
[2]);
314 assertTrue("handleCancel", flags
[3]);
317 // ------------------------------------------------------------------------
319 // ------------------------------------------------------------------------
322 * Test calling waitForStart() after the request has already been started.
323 * It should not block.
326 public void testWaitForStartAfterStart() throws InterruptedException
{
327 final boolean[] flags
= new boolean[4];
328 TmfEventRequest request
= setupTestRequest(flags
);
331 request
.waitForStart();
334 assertTrue("isCompleted", request
.isCompleted());
335 assertFalse("isFailed", request
.isFailed());
336 assertFalse("isCancelled", request
.isCancelled());
338 assertTrue("handleCompleted", flags
[0]);
339 assertTrue("handleSuccess", flags
[1]);
340 assertFalse("handleFailure", flags
[2]);
341 assertFalse("handleCancel", flags
[3]);
345 * Test calling waitForStart() after the request has ended. It should not
349 public void testWaitForStartAfterDone() throws InterruptedException
{
350 final boolean[] flags
= new boolean[4];
351 TmfEventRequest request
= setupTestRequest(flags
);
355 request
.waitForStart();
357 assertTrue("isCompleted", request
.isCompleted());
358 assertFalse("isFailed", request
.isFailed());
359 assertFalse("isCancelled", request
.isCancelled());
361 assertTrue("handleCompleted", flags
[0]);
362 assertTrue("handleSuccess", flags
[1]);
363 assertFalse("handleFailure", flags
[2]);
364 assertFalse("handleCancel", flags
[3]);
368 * Test calling waitForStart() after the request has beend cancelled. It
372 public void testWaitForStartAfterCancel() throws InterruptedException
{
373 final boolean[] flags
= new boolean[4];
374 TmfEventRequest request
= setupTestRequest(flags
);
378 request
.waitForStart();
380 assertTrue("isCompleted", request
.isCompleted());
381 assertFalse("isFailed", request
.isFailed());
382 assertTrue("isCancelled", request
.isCancelled());
384 assertTrue("handleCompleted", flags
[0]);
385 assertFalse("handleSuccess", flags
[1]);
386 assertFalse("handleFailure", flags
[2]);
387 assertTrue("handleCancel", flags
[3]);
391 * Test calling waitForStart() before the request is started. It should not
395 public void testWaitForStartBeforeStart() throws InterruptedException
{
396 final boolean[] flags
= new boolean[4];
397 TmfEventRequest request
= setupTestRequest(flags
);
398 Thread t
= new Thread() {
402 request
.waitForStart();
403 } catch (InterruptedException e
) {
408 t
.setPriority(Thread
.MAX_PRIORITY
);
414 assertTrue("isCompleted", request
.isCompleted());
415 assertFalse("isFailed", request
.isFailed());
416 assertFalse("isCancelled", request
.isCancelled());
418 assertTrue("handleCompleted", flags
[0]);
419 assertTrue("handleSuccess", flags
[1]);
420 assertFalse("handleFailure", flags
[2]);
421 assertFalse("handleCancel", flags
[3]);