[cvs] / jsr166 / src / test / tck / AbstractExecutorServiceTest.java Repository:
ViewVC logotype

Annotation of /jsr166/src/test/tck/AbstractExecutorServiceTest.java

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.44 - (view) (download)

1 : tim 1.1 /*
2 : dl 1.10 * Written by Doug Lea with assistance from members of JCP JSR-166
3 :     * Expert Group and released to the public domain, as explained at
4 : jsr166 1.30 * http://creativecommons.org/publicdomain/zero/1.0/
5 : jsr166 1.16 * Other contributors include Andrew Wright, Jeffrey Hayes,
6 :     * Pat Fisher, Mike Judd.
7 : tim 1.1 */
8 :    
9 : jsr166 1.35 import static java.util.concurrent.TimeUnit.MILLISECONDS;
10 :    
11 :     import java.security.PrivilegedAction;
12 :     import java.security.PrivilegedExceptionAction;
13 :     import java.util.ArrayList;
14 :     import java.util.Collections;
15 :     import java.util.List;
16 :     import java.util.concurrent.AbstractExecutorService;
17 :     import java.util.concurrent.ArrayBlockingQueue;
18 :     import java.util.concurrent.Callable;
19 : jsr166 1.38 import java.util.concurrent.CancellationException;
20 : jsr166 1.35 import java.util.concurrent.CountDownLatch;
21 :     import java.util.concurrent.ExecutionException;
22 :     import java.util.concurrent.Executors;
23 :     import java.util.concurrent.ExecutorService;
24 :     import java.util.concurrent.Future;
25 :     import java.util.concurrent.ThreadPoolExecutor;
26 :     import java.util.concurrent.TimeUnit;
27 : jsr166 1.32 import java.util.concurrent.atomic.AtomicBoolean;
28 : jsr166 1.35
29 :     import junit.framework.Test;
30 :     import junit.framework.TestSuite;
31 : tim 1.1
32 : jsr166 1.18 public class AbstractExecutorServiceTest extends JSR166TestCase {
33 : tim 1.1 public static void main(String[] args) {
34 : jsr166 1.37 main(suite(), args);
35 : tim 1.1 }
36 :     public static Test suite() {
37 : dl 1.6 return new TestSuite(AbstractExecutorServiceTest.class);
38 : tim 1.1 }
39 :    
40 : jsr166 1.16 /**
41 : tim 1.1 * A no-frills implementation of AbstractExecutorService, designed
42 : dl 1.6 * to test the submit methods only.
43 : tim 1.1 */
44 :     static class DirectExecutorService extends AbstractExecutorService {
45 :     public void execute(Runnable r) { r.run(); }
46 :     public void shutdown() { shutdown = true; }
47 : jsr166 1.26 public List<Runnable> shutdownNow() {
48 :     shutdown = true;
49 :     return Collections.EMPTY_LIST;
50 :     }
51 : tim 1.1 public boolean isShutdown() { return shutdown; }
52 :     public boolean isTerminated() { return isShutdown(); }
53 : jsr166 1.26 public boolean awaitTermination(long timeout, TimeUnit unit) {
54 :     return isShutdown();
55 :     }
56 : tim 1.1 private volatile boolean shutdown = false;
57 :     }
58 :    
59 :     /**
60 : dl 1.12 * execute(runnable) runs it to completion
61 : tim 1.1 */
62 : jsr166 1.19 public void testExecuteRunnable() throws Exception {
63 :     ExecutorService e = new DirectExecutorService();
64 : jsr166 1.32 final AtomicBoolean done = new AtomicBoolean(false);
65 : jsr166 1.34 Future<?> future = e.submit(new CheckedRunnable() {
66 : jsr166 1.32 public void realRun() {
67 :     done.set(true);
68 : jsr166 1.34 }});
69 : jsr166 1.32 assertNull(future.get());
70 :     assertNull(future.get(0, MILLISECONDS));
71 :     assertTrue(done.get());
72 :     assertTrue(future.isDone());
73 :     assertFalse(future.isCancelled());
74 : tim 1.1 }
75 :    
76 :     /**
77 : dl 1.12 * Completed submit(callable) returns result
78 : tim 1.1 */
79 : jsr166 1.19 public void testSubmitCallable() throws Exception {
80 :     ExecutorService e = new DirectExecutorService();
81 :     Future<String> future = e.submit(new StringTask());
82 :     String result = future.get();
83 :     assertSame(TEST_STRING, result);
84 : tim 1.1 }
85 :    
86 : dl 1.6 /**
87 : dl 1.12 * Completed submit(runnable) returns successfully
88 : dl 1.6 */
89 : jsr166 1.19 public void testSubmitRunnable() throws Exception {
90 :     ExecutorService e = new DirectExecutorService();
91 :     Future<?> future = e.submit(new NoOpRunnable());
92 :     future.get();
93 :     assertTrue(future.isDone());
94 : dl 1.6 }
95 :    
96 :     /**
97 : dl 1.12 * Completed submit(runnable, result) returns result
98 : dl 1.6 */
99 : jsr166 1.19 public void testSubmitRunnable2() throws Exception {
100 :     ExecutorService e = new DirectExecutorService();
101 :     Future<String> future = e.submit(new NoOpRunnable(), TEST_STRING);
102 :     String result = future.get();
103 :     assertSame(TEST_STRING, result);
104 : dl 1.6 }
105 :    
106 : tim 1.1 /**
107 : jsr166 1.23 * A submitted privileged action runs to completion
108 : tim 1.1 */
109 : jsr166 1.19 public void testSubmitPrivilegedAction() throws Exception {
110 : jsr166 1.23 Runnable r = new CheckedRunnable() {
111 :     public void realRun() throws Exception {
112 :     ExecutorService e = new DirectExecutorService();
113 :     Future future = e.submit(Executors.callable(new PrivilegedAction() {
114 : tim 1.1 public Object run() {
115 :     return TEST_STRING;
116 : dl 1.5 }}));
117 : tim 1.1
118 : jsr166 1.23 assertSame(TEST_STRING, future.get());
119 :     }};
120 :    
121 :     runWithPermissions(r,
122 :     new RuntimePermission("getClassLoader"),
123 :     new RuntimePermission("setContextClassLoader"),
124 :     new RuntimePermission("modifyThread"));
125 : tim 1.1 }
126 :    
127 :     /**
128 : jsr166 1.23 * A submitted privileged exception action runs to completion
129 : tim 1.1 */
130 : jsr166 1.19 public void testSubmitPrivilegedExceptionAction() throws Exception {
131 : jsr166 1.23 Runnable r = new CheckedRunnable() {
132 :     public void realRun() throws Exception {
133 :     ExecutorService e = new DirectExecutorService();
134 :     Future future = e.submit(Executors.callable(new PrivilegedExceptionAction() {
135 : tim 1.1 public Object run() {
136 :     return TEST_STRING;
137 : dl 1.5 }}));
138 : tim 1.1
139 : jsr166 1.23 assertSame(TEST_STRING, future.get());
140 :     }};
141 :    
142 :     runWithPermissions(r);
143 : tim 1.1 }
144 :    
145 :     /**
146 : dl 1.12 * A submitted failed privileged exception action reports exception
147 : tim 1.1 */
148 : jsr166 1.19 public void testSubmitFailedPrivilegedExceptionAction() throws Exception {
149 : jsr166 1.23 Runnable r = new CheckedRunnable() {
150 :     public void realRun() throws Exception {
151 :     ExecutorService e = new DirectExecutorService();
152 :     Future future = e.submit(Executors.callable(new PrivilegedExceptionAction() {
153 : tim 1.1 public Object run() throws Exception {
154 :     throw new IndexOutOfBoundsException();
155 : dl 1.5 }}));
156 : tim 1.1
157 : jsr166 1.23 try {
158 :     future.get();
159 :     shouldThrow();
160 :     } catch (ExecutionException success) {
161 :     assertTrue(success.getCause() instanceof IndexOutOfBoundsException);
162 :     }}};
163 :    
164 :     runWithPermissions(r);
165 : tim 1.1 }
166 :    
167 :     /**
168 : dl 1.12 * execute(null runnable) throws NPE
169 : tim 1.1 */
170 :     public void testExecuteNullRunnable() {
171 : jsr166 1.36 ExecutorService e = new DirectExecutorService();
172 : tim 1.1 try {
173 : jsr166 1.19 e.submit((Runnable) null);
174 : tim 1.1 shouldThrow();
175 : jsr166 1.19 } catch (NullPointerException success) {}
176 : tim 1.1 }
177 :    
178 :     /**
179 : dl 1.12 * submit(null callable) throws NPE
180 : tim 1.1 */
181 : dl 1.6 public void testSubmitNullCallable() {
182 : jsr166 1.36 ExecutorService e = new DirectExecutorService();
183 : tim 1.1 try {
184 : jsr166 1.19 e.submit((Callable) null);
185 : tim 1.1 shouldThrow();
186 : jsr166 1.19 } catch (NullPointerException success) {}
187 : tim 1.1 }
188 :    
189 :     /**
190 : jsr166 1.25 * submit(callable).get() throws InterruptedException if interrupted
191 : tim 1.1 */
192 : jsr166 1.19 public void testInterruptedSubmit() throws InterruptedException {
193 : jsr166 1.25 final CountDownLatch submitted = new CountDownLatch(1);
194 :     final CountDownLatch quittingTime = new CountDownLatch(1);
195 :     final Callable<Void> awaiter = new CheckedCallable<Void>() {
196 :     public Void realCall() throws InterruptedException {
197 : jsr166 1.41 assertTrue(quittingTime.await(2*LONG_DELAY_MS, MILLISECONDS));
198 : jsr166 1.25 return null;
199 :     }};
200 : jsr166 1.40 final ExecutorService p
201 :     = new ThreadPoolExecutor(1,1,60, TimeUnit.SECONDS,
202 :     new ArrayBlockingQueue<Runnable>(10));
203 : jsr166 1.41 try (PoolCleaner cleaner = cleaner(p, quittingTime)) {
204 :     Thread t = newStartedThread(new CheckedInterruptedRunnable() {
205 : jsr166 1.25 public void realRun() throws Exception {
206 :     Future<Void> future = p.submit(awaiter);
207 :     submitted.countDown();
208 :     future.get();
209 :     }});
210 : jsr166 1.41
211 :     await(submitted);
212 : jsr166 1.25 t.interrupt();
213 : jsr166 1.41 awaitTermination(t);
214 : jsr166 1.25 }
215 : tim 1.1 }
216 :    
217 :     /**
218 : jsr166 1.27 * get of submit(callable) throws ExecutionException if callable
219 :     * throws exception
220 : tim 1.1 */
221 : jsr166 1.19 public void testSubmitEE() throws InterruptedException {
222 : jsr166 1.40 final ThreadPoolExecutor p =
223 : jsr166 1.19 new ThreadPoolExecutor(1, 1,
224 :     60, TimeUnit.SECONDS,
225 :     new ArrayBlockingQueue<Runnable>(10));
226 : jsr166 1.40 try (PoolCleaner cleaner = cleaner(p)) {
227 :     Callable c = new Callable() {
228 :     public Object call() { throw new ArithmeticException(); }};
229 :     try {
230 :     p.submit(c).get();
231 :     shouldThrow();
232 :     } catch (ExecutionException success) {
233 :     assertTrue(success.getCause() instanceof ArithmeticException);
234 :     }
235 : tim 1.1 }
236 : dl 1.6 }
237 :    
238 :     /**
239 :     * invokeAny(null) throws NPE
240 :     */
241 : jsr166 1.28 public void testInvokeAny1() throws Exception {
242 : jsr166 1.40 final ExecutorService e = new DirectExecutorService();
243 :     try (PoolCleaner cleaner = cleaner(e)) {
244 :     try {
245 :     e.invokeAny(null);
246 :     shouldThrow();
247 :     } catch (NullPointerException success) {}
248 : dl 1.6 }
249 :     }
250 :    
251 :     /**
252 :     * invokeAny(empty collection) throws IAE
253 :     */
254 : jsr166 1.28 public void testInvokeAny2() throws Exception {
255 : jsr166 1.40 final ExecutorService e = new DirectExecutorService();
256 :     try (PoolCleaner cleaner = cleaner(e)) {
257 :     try {
258 :     e.invokeAny(new ArrayList<Callable<String>>());
259 :     shouldThrow();
260 :     } catch (IllegalArgumentException success) {}
261 : dl 1.6 }
262 :     }
263 :    
264 :     /**
265 :     * invokeAny(c) throws NPE if c has null elements
266 :     */
267 : jsr166 1.19 public void testInvokeAny3() throws Exception {
268 : jsr166 1.40 final ExecutorService e = new DirectExecutorService();
269 :     try (PoolCleaner cleaner = cleaner(e)) {
270 :     List<Callable<Long>> l = new ArrayList<Callable<Long>>();
271 :     l.add(new Callable<Long>() {
272 :     public Long call() { throw new ArithmeticException(); }});
273 :     l.add(null);
274 :     try {
275 :     e.invokeAny(l);
276 :     shouldThrow();
277 :     } catch (NullPointerException success) {}
278 : dl 1.6 }
279 :     }
280 :    
281 :     /**
282 : dl 1.12 * invokeAny(c) throws ExecutionException if no task in c completes
283 : dl 1.6 */
284 : jsr166 1.19 public void testInvokeAny4() throws InterruptedException {
285 : jsr166 1.40 final ExecutorService e = new DirectExecutorService();
286 :     try (PoolCleaner cleaner = cleaner(e)) {
287 :     List<Callable<String>> l = new ArrayList<Callable<String>>();
288 :     l.add(new NPETask());
289 :     try {
290 :     e.invokeAny(l);
291 :     shouldThrow();
292 :     } catch (ExecutionException success) {
293 :     assertTrue(success.getCause() instanceof NullPointerException);
294 :     }
295 : dl 1.6 }
296 :     }
297 :    
298 :     /**
299 : dl 1.12 * invokeAny(c) returns result of some task in c if at least one completes
300 : dl 1.6 */
301 : jsr166 1.19 public void testInvokeAny5() throws Exception {
302 : jsr166 1.40 final ExecutorService e = new DirectExecutorService();
303 :     try (PoolCleaner cleaner = cleaner(e)) {
304 : jsr166 1.22 List<Callable<String>> l = new ArrayList<Callable<String>>();
305 : dl 1.6 l.add(new StringTask());
306 :     l.add(new StringTask());
307 :     String result = e.invokeAny(l);
308 :     assertSame(TEST_STRING, result);
309 :     }
310 :     }
311 :    
312 :     /**
313 :     * invokeAll(null) throws NPE
314 :     */
315 : jsr166 1.19 public void testInvokeAll1() throws InterruptedException {
316 : jsr166 1.40 final ExecutorService e = new DirectExecutorService();
317 :     try (PoolCleaner cleaner = cleaner(e)) {
318 :     try {
319 :     e.invokeAll(null);
320 :     shouldThrow();
321 :     } catch (NullPointerException success) {}
322 : dl 1.6 }
323 :     }
324 :    
325 :     /**
326 :     * invokeAll(empty collection) returns empty collection
327 :     */
328 : jsr166 1.19 public void testInvokeAll2() throws InterruptedException {
329 : jsr166 1.40 final ExecutorService e = new DirectExecutorService();
330 :     try (PoolCleaner cleaner = cleaner(e)) {
331 : dl 1.6 List<Future<String>> r = e.invokeAll(new ArrayList<Callable<String>>());
332 :     assertTrue(r.isEmpty());
333 :     }
334 :     }
335 :    
336 :     /**
337 :     * invokeAll(c) throws NPE if c has null elements
338 :     */
339 : jsr166 1.19 public void testInvokeAll3() throws InterruptedException {
340 : jsr166 1.40 final ExecutorService e = new DirectExecutorService();
341 :     try (PoolCleaner cleaner = cleaner(e)) {
342 :     List<Callable<String>> l = new ArrayList<Callable<String>>();
343 :     l.add(new StringTask());
344 :     l.add(null);
345 :     try {
346 :     e.invokeAll(l);
347 :     shouldThrow();
348 :     } catch (NullPointerException success) {}
349 : dl 1.6 }
350 :     }
351 :    
352 :     /**
353 : dl 1.12 * get of returned element of invokeAll(c) throws exception on failed task
354 : dl 1.6 */
355 : jsr166 1.19 public void testInvokeAll4() throws Exception {
356 : jsr166 1.40 final ExecutorService e = new DirectExecutorService();
357 :     try (PoolCleaner cleaner = cleaner(e)) {
358 : jsr166 1.22 List<Callable<String>> l = new ArrayList<Callable<String>>();
359 : dl 1.6 l.add(new NPETask());
360 : jsr166 1.22 List<Future<String>> futures = e.invokeAll(l);
361 :     assertEquals(1, futures.size());
362 :     try {
363 :     futures.get(0).get();
364 :     shouldThrow();
365 :     } catch (ExecutionException success) {
366 :     assertTrue(success.getCause() instanceof NullPointerException);
367 : jsr166 1.19 }
368 : dl 1.6 }
369 :     }
370 :    
371 :     /**
372 : dl 1.12 * invokeAll(c) returns results of all completed tasks in c
373 : dl 1.6 */
374 : jsr166 1.19 public void testInvokeAll5() throws Exception {
375 : jsr166 1.40 final ExecutorService e = new DirectExecutorService();
376 :     try (PoolCleaner cleaner = cleaner(e)) {
377 : jsr166 1.22 List<Callable<String>> l = new ArrayList<Callable<String>>();
378 : dl 1.6 l.add(new StringTask());
379 :     l.add(new StringTask());
380 : jsr166 1.22 List<Future<String>> futures = e.invokeAll(l);
381 :     assertEquals(2, futures.size());
382 :     for (Future<String> future : futures)
383 : jsr166 1.19 assertSame(TEST_STRING, future.get());
384 : dl 1.8 }
385 :     }
386 :    
387 :     /**
388 :     * timed invokeAny(null) throws NPE
389 :     */
390 : jsr166 1.19 public void testTimedInvokeAny1() throws Exception {
391 : jsr166 1.40 final ExecutorService e = new DirectExecutorService();
392 :     try (PoolCleaner cleaner = cleaner(e)) {
393 :     try {
394 :     e.invokeAny(null, MEDIUM_DELAY_MS, MILLISECONDS);
395 :     shouldThrow();
396 :     } catch (NullPointerException success) {}
397 : dl 1.8 }
398 :     }
399 :    
400 :     /**
401 : dl 1.12 * timed invokeAny(null time unit) throws NPE
402 : dl 1.8 */
403 : jsr166 1.19 public void testTimedInvokeAnyNullTimeUnit() throws Exception {
404 : jsr166 1.40 final ExecutorService e = new DirectExecutorService();
405 :     try (PoolCleaner cleaner = cleaner(e)) {
406 :     List<Callable<String>> l = new ArrayList<Callable<String>>();
407 :     l.add(new StringTask());
408 :     try {
409 :     e.invokeAny(l, MEDIUM_DELAY_MS, null);
410 :     shouldThrow();
411 :     } catch (NullPointerException success) {}
412 : dl 1.8 }
413 :     }
414 :    
415 :     /**
416 :     * timed invokeAny(empty collection) throws IAE
417 :     */
418 : jsr166 1.19 public void testTimedInvokeAny2() throws Exception {
419 : jsr166 1.40 final ExecutorService e = new DirectExecutorService();
420 :     try (PoolCleaner cleaner = cleaner(e)) {
421 :     try {
422 :     e.invokeAny(new ArrayList<Callable<String>>(),
423 :     MEDIUM_DELAY_MS, MILLISECONDS);
424 :     shouldThrow();
425 :     } catch (IllegalArgumentException success) {}
426 : dl 1.8 }
427 :     }
428 :    
429 :     /**
430 :     * timed invokeAny(c) throws NPE if c has null elements
431 :     */
432 : jsr166 1.19 public void testTimedInvokeAny3() throws Exception {
433 : jsr166 1.40 final ExecutorService e = new DirectExecutorService();
434 :     try (PoolCleaner cleaner = cleaner(e)) {
435 :     List<Callable<Long>> l = new ArrayList<Callable<Long>>();
436 :     l.add(new Callable<Long>() {
437 :     public Long call() { throw new ArithmeticException(); }});
438 :     l.add(null);
439 :     try {
440 :     e.invokeAny(l, MEDIUM_DELAY_MS, MILLISECONDS);
441 :     shouldThrow();
442 :     } catch (NullPointerException success) {}
443 : dl 1.8 }
444 :     }
445 :    
446 :     /**
447 :     * timed invokeAny(c) throws ExecutionException if no task completes
448 :     */
449 : jsr166 1.19 public void testTimedInvokeAny4() throws Exception {
450 : jsr166 1.40 final ExecutorService e = new DirectExecutorService();
451 :     try (PoolCleaner cleaner = cleaner(e)) {
452 : jsr166 1.43 long startTime = System.nanoTime();
453 : jsr166 1.40 List<Callable<String>> l = new ArrayList<Callable<String>>();
454 :     l.add(new NPETask());
455 :     try {
456 : jsr166 1.43 e.invokeAny(l, LONG_DELAY_MS, MILLISECONDS);
457 : jsr166 1.40 shouldThrow();
458 :     } catch (ExecutionException success) {
459 :     assertTrue(success.getCause() instanceof NullPointerException);
460 :     }
461 : jsr166 1.43 assertTrue(millisElapsedSince(startTime) < LONG_DELAY_MS);
462 : dl 1.8 }
463 :     }
464 :    
465 :     /**
466 : dl 1.12 * timed invokeAny(c) returns result of some task in c
467 : dl 1.8 */
468 : jsr166 1.19 public void testTimedInvokeAny5() throws Exception {
469 : jsr166 1.40 final ExecutorService e = new DirectExecutorService();
470 :     try (PoolCleaner cleaner = cleaner(e)) {
471 : jsr166 1.44 long startTime = System.nanoTime();
472 : jsr166 1.22 List<Callable<String>> l = new ArrayList<Callable<String>>();
473 : dl 1.8 l.add(new StringTask());
474 :     l.add(new StringTask());
475 : jsr166 1.44 String result = e.invokeAny(l, LONG_DELAY_MS, MILLISECONDS);
476 : dl 1.8 assertSame(TEST_STRING, result);
477 : jsr166 1.44 assertTrue(millisElapsedSince(startTime) < LONG_DELAY_MS);
478 : dl 1.8 }
479 :     }
480 :    
481 :     /**
482 :     * timed invokeAll(null) throws NPE
483 :     */
484 : jsr166 1.19 public void testTimedInvokeAll1() throws InterruptedException {
485 : jsr166 1.40 final ExecutorService e = new DirectExecutorService();
486 :     try (PoolCleaner cleaner = cleaner(e)) {
487 :     try {
488 :     e.invokeAll(null, MEDIUM_DELAY_MS, MILLISECONDS);
489 :     shouldThrow();
490 :     } catch (NullPointerException success) {}
491 : dl 1.8 }
492 :     }
493 :    
494 :     /**
495 : dl 1.12 * timed invokeAll(null time unit) throws NPE
496 : dl 1.8 */
497 : jsr166 1.19 public void testTimedInvokeAllNullTimeUnit() throws InterruptedException {
498 : jsr166 1.40 final ExecutorService e = new DirectExecutorService();
499 :     try (PoolCleaner cleaner = cleaner(e)) {
500 :     List<Callable<String>> l = new ArrayList<Callable<String>>();
501 :     l.add(new StringTask());
502 :     try {
503 :     e.invokeAll(l, MEDIUM_DELAY_MS, null);
504 :     shouldThrow();
505 :     } catch (NullPointerException success) {}
506 : dl 1.8 }
507 :     }
508 :    
509 :     /**
510 :     * timed invokeAll(empty collection) returns empty collection
511 :     */
512 : jsr166 1.19 public void testTimedInvokeAll2() throws InterruptedException {
513 : jsr166 1.40 final ExecutorService e = new DirectExecutorService();
514 :     try (PoolCleaner cleaner = cleaner(e)) {
515 : jsr166 1.20 List<Future<String>> r = e.invokeAll(new ArrayList<Callable<String>>(), MEDIUM_DELAY_MS, MILLISECONDS);
516 : dl 1.8 assertTrue(r.isEmpty());
517 :     }
518 :     }
519 :    
520 :     /**
521 :     * timed invokeAll(c) throws NPE if c has null elements
522 :     */
523 : jsr166 1.19 public void testTimedInvokeAll3() throws InterruptedException {
524 : jsr166 1.40 final ExecutorService e = new DirectExecutorService();
525 :     try (PoolCleaner cleaner = cleaner(e)) {
526 :     List<Callable<String>> l = new ArrayList<Callable<String>>();
527 :     l.add(new StringTask());
528 :     l.add(null);
529 :     try {
530 :     e.invokeAll(l, MEDIUM_DELAY_MS, MILLISECONDS);
531 :     shouldThrow();
532 :     } catch (NullPointerException success) {}
533 : dl 1.8 }
534 :     }
535 :    
536 :     /**
537 : dl 1.12 * get of returned element of invokeAll(c) throws exception on failed task
538 : dl 1.8 */
539 : jsr166 1.19 public void testTimedInvokeAll4() throws Exception {
540 : jsr166 1.40 final ExecutorService e = new DirectExecutorService();
541 :     try (PoolCleaner cleaner = cleaner(e)) {
542 : jsr166 1.22 List<Callable<String>> l = new ArrayList<Callable<String>>();
543 : dl 1.8 l.add(new NPETask());
544 : jsr166 1.22 List<Future<String>> futures =
545 : jsr166 1.42 e.invokeAll(l, LONG_DELAY_MS, MILLISECONDS);
546 : jsr166 1.22 assertEquals(1, futures.size());
547 :     try {
548 :     futures.get(0).get();
549 :     shouldThrow();
550 :     } catch (ExecutionException success) {
551 :     assertTrue(success.getCause() instanceof NullPointerException);
552 : jsr166 1.19 }
553 : dl 1.8 }
554 :     }
555 :    
556 :     /**
557 : dl 1.12 * timed invokeAll(c) returns results of all completed tasks in c
558 : dl 1.8 */
559 : jsr166 1.19 public void testTimedInvokeAll5() throws Exception {
560 : jsr166 1.40 final ExecutorService e = new DirectExecutorService();
561 :     try (PoolCleaner cleaner = cleaner(e)) {
562 : jsr166 1.22 List<Callable<String>> l = new ArrayList<Callable<String>>();
563 : dl 1.8 l.add(new StringTask());
564 :     l.add(new StringTask());
565 : jsr166 1.22 List<Future<String>> futures =
566 : jsr166 1.38 e.invokeAll(l, LONG_DELAY_MS, MILLISECONDS);
567 : jsr166 1.22 assertEquals(2, futures.size());
568 :     for (Future<String> future : futures)
569 : jsr166 1.19 assertSame(TEST_STRING, future.get());
570 : dl 1.8 }
571 :     }
572 :    
573 :     /**
574 : dl 1.12 * timed invokeAll cancels tasks not completed by timeout
575 : dl 1.8 */
576 : jsr166 1.38 public void testTimedInvokeAll6() throws Exception {
577 : jsr166 1.40 final ExecutorService e = new DirectExecutorService();
578 :     try (PoolCleaner cleaner = cleaner(e)) {
579 : jsr166 1.39 for (long timeout = timeoutMillis();;) {
580 :     List<Callable<String>> tasks = new ArrayList<>();
581 :     tasks.add(new StringTask("0"));
582 :     tasks.add(Executors.callable(possiblyInterruptedRunnable(timeout),
583 :     TEST_STRING));
584 :     tasks.add(new StringTask("2"));
585 :     long startTime = System.nanoTime();
586 :     List<Future<String>> futures =
587 :     e.invokeAll(tasks, timeout, MILLISECONDS);
588 :     assertEquals(tasks.size(), futures.size());
589 :     assertTrue(millisElapsedSince(startTime) >= timeout);
590 :     for (Future future : futures)
591 :     assertTrue(future.isDone());
592 :     try {
593 :     assertEquals("0", futures.get(0).get());
594 :     assertEquals(TEST_STRING, futures.get(1).get());
595 :     } catch (CancellationException retryWithLongerTimeout) {
596 :     // unusual delay before starting second task
597 :     timeout *= 2;
598 :     if (timeout >= LONG_DELAY_MS / 2)
599 :     fail("expected exactly one task to be cancelled");
600 :     continue;
601 :     }
602 :     assertTrue(futures.get(2).isCancelled());
603 :     break;
604 :     }
605 : dl 1.6 }
606 : tim 1.1 }
607 :    
608 : dl 1.3 }

Doug Lea
ViewVC Help
Powered by ViewVC 1.0.8