ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/tck/AbstractExecutorServiceTest.java
Revision: 1.21
Committed: Sat Nov 21 10:25:05 2009 UTC (14 years, 5 months ago) by jsr166
Branch: MAIN
Changes since 1.20: +1 -0 lines
Log Message:
improve exception handling

File Contents

# User Rev Content
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     * http://creativecommons.org/licenses/publicdomain
5 jsr166 1.16 * Other contributors include Andrew Wright, Jeffrey Hayes,
6     * Pat Fisher, Mike Judd.
7 tim 1.1 */
8    
9    
10     import junit.framework.*;
11     import java.util.*;
12     import java.util.concurrent.*;
13 jsr166 1.20 import static java.util.concurrent.TimeUnit.MILLISECONDS;
14 tim 1.1 import java.math.BigInteger;
15     import java.security.*;
16    
17 jsr166 1.18 public class AbstractExecutorServiceTest extends JSR166TestCase {
18 tim 1.1 public static void main(String[] args) {
19     junit.textui.TestRunner.run (suite());
20     }
21     public static Test suite() {
22 dl 1.6 return new TestSuite(AbstractExecutorServiceTest.class);
23 tim 1.1 }
24    
25 jsr166 1.16 /**
26 tim 1.1 * A no-frills implementation of AbstractExecutorService, designed
27 dl 1.6 * to test the submit methods only.
28 tim 1.1 */
29     static class DirectExecutorService extends AbstractExecutorService {
30     public void execute(Runnable r) { r.run(); }
31     public void shutdown() { shutdown = true; }
32 tim 1.2 public List<Runnable> shutdownNow() { shutdown = true; return Collections.EMPTY_LIST; }
33 tim 1.1 public boolean isShutdown() { return shutdown; }
34     public boolean isTerminated() { return isShutdown(); }
35     public boolean awaitTermination(long timeout, TimeUnit unit) { return isShutdown(); }
36     private volatile boolean shutdown = false;
37     }
38    
39     /**
40 dl 1.12 * execute(runnable) runs it to completion
41 tim 1.1 */
42 jsr166 1.19 public void testExecuteRunnable() throws Exception {
43     ExecutorService e = new DirectExecutorService();
44     TrackedShortRunnable task = new TrackedShortRunnable();
45     assertFalse(task.done);
46     Future<?> future = e.submit(task);
47     future.get();
48     assertTrue(task.done);
49 tim 1.1 }
50    
51    
52     /**
53 dl 1.12 * Completed submit(callable) returns result
54 tim 1.1 */
55 jsr166 1.19 public void testSubmitCallable() throws Exception {
56     ExecutorService e = new DirectExecutorService();
57     Future<String> future = e.submit(new StringTask());
58     String result = future.get();
59     assertSame(TEST_STRING, result);
60 tim 1.1 }
61    
62 dl 1.6 /**
63 dl 1.12 * Completed submit(runnable) returns successfully
64 dl 1.6 */
65 jsr166 1.19 public void testSubmitRunnable() throws Exception {
66     ExecutorService e = new DirectExecutorService();
67     Future<?> future = e.submit(new NoOpRunnable());
68     future.get();
69     assertTrue(future.isDone());
70 dl 1.6 }
71    
72     /**
73 dl 1.12 * Completed submit(runnable, result) returns result
74 dl 1.6 */
75 jsr166 1.19 public void testSubmitRunnable2() throws Exception {
76     ExecutorService e = new DirectExecutorService();
77     Future<String> future = e.submit(new NoOpRunnable(), TEST_STRING);
78     String result = future.get();
79     assertSame(TEST_STRING, result);
80 dl 1.6 }
81    
82 tim 1.1
83     /**
84 dl 1.12 * A submitted privileged action to completion
85 tim 1.1 */
86 jsr166 1.19 public void testSubmitPrivilegedAction() throws Exception {
87 dl 1.15 Policy savedPolicy = null;
88     try {
89     savedPolicy = Policy.getPolicy();
90     AdjustablePolicy policy = new AdjustablePolicy();
91     policy.addPermission(new RuntimePermission("getContextClassLoader"));
92     policy.addPermission(new RuntimePermission("setContextClassLoader"));
93     Policy.setPolicy(policy);
94 jsr166 1.17 } catch (AccessControlException ok) {
95 dl 1.15 return;
96     }
97 tim 1.1 try {
98     ExecutorService e = new DirectExecutorService();
99 dl 1.5 Future future = e.submit(Executors.callable(new PrivilegedAction() {
100 tim 1.1 public Object run() {
101     return TEST_STRING;
102 dl 1.5 }}));
103 tim 1.1
104     Object result = future.get();
105     assertSame(TEST_STRING, result);
106     }
107     finally {
108 dl 1.15 try {
109     Policy.setPolicy(savedPolicy);
110 jsr166 1.17 } catch (AccessControlException ok) {
111 dl 1.15 return;
112     }
113 tim 1.1 }
114     }
115    
116     /**
117 dl 1.12 * A submitted a privileged exception action runs to completion
118 tim 1.1 */
119 jsr166 1.19 public void testSubmitPrivilegedExceptionAction() throws Exception {
120 dl 1.15 Policy savedPolicy = null;
121     try {
122     savedPolicy = Policy.getPolicy();
123     AdjustablePolicy policy = new AdjustablePolicy();
124     policy.addPermission(new RuntimePermission("getContextClassLoader"));
125     policy.addPermission(new RuntimePermission("setContextClassLoader"));
126     Policy.setPolicy(policy);
127 jsr166 1.17 } catch (AccessControlException ok) {
128 dl 1.15 return;
129     }
130    
131 tim 1.1 try {
132     ExecutorService e = new DirectExecutorService();
133 dl 1.5 Future future = e.submit(Executors.callable(new PrivilegedExceptionAction() {
134 tim 1.1 public Object run() {
135     return TEST_STRING;
136 dl 1.5 }}));
137 tim 1.1
138     Object result = future.get();
139     assertSame(TEST_STRING, result);
140     }
141     finally {
142     Policy.setPolicy(savedPolicy);
143     }
144     }
145    
146     /**
147 dl 1.12 * A submitted failed privileged exception action reports exception
148 tim 1.1 */
149 jsr166 1.19 public void testSubmitFailedPrivilegedExceptionAction() throws Exception {
150 dl 1.15 Policy savedPolicy = null;
151     try {
152     savedPolicy = Policy.getPolicy();
153     AdjustablePolicy policy = new AdjustablePolicy();
154     policy.addPermission(new RuntimePermission("getContextClassLoader"));
155     policy.addPermission(new RuntimePermission("setContextClassLoader"));
156     Policy.setPolicy(policy);
157 jsr166 1.17 } catch (AccessControlException ok) {
158 dl 1.15 return;
159     }
160    
161 tim 1.1 try {
162     ExecutorService e = new DirectExecutorService();
163 dl 1.5 Future future = e.submit(Executors.callable(new PrivilegedExceptionAction() {
164 tim 1.1 public Object run() throws Exception {
165     throw new IndexOutOfBoundsException();
166 dl 1.5 }}));
167 tim 1.1
168 jsr166 1.19 future.get();
169 tim 1.1 shouldThrow();
170 jsr166 1.19 } catch (ExecutionException success) {
171     assertTrue(success.getCause() instanceof IndexOutOfBoundsException);
172 tim 1.1 }
173     finally {
174     Policy.setPolicy(savedPolicy);
175     }
176     }
177    
178     /**
179 dl 1.12 * execute(null runnable) throws NPE
180 tim 1.1 */
181     public void testExecuteNullRunnable() {
182     try {
183     ExecutorService e = new DirectExecutorService();
184 jsr166 1.19 e.submit((Runnable) null);
185 tim 1.1 shouldThrow();
186 jsr166 1.19 } catch (NullPointerException success) {}
187 tim 1.1 }
188    
189    
190     /**
191 dl 1.12 * submit(null callable) throws NPE
192 tim 1.1 */
193 dl 1.6 public void testSubmitNullCallable() {
194 tim 1.1 try {
195     ExecutorService e = new DirectExecutorService();
196 jsr166 1.19 e.submit((Callable) null);
197 tim 1.1 shouldThrow();
198 jsr166 1.19 } catch (NullPointerException success) {}
199 tim 1.1 }
200    
201     /**
202 dl 1.12 * submit(runnable) throws RejectedExecutionException if
203     * executor is saturated.
204 tim 1.1 */
205     public void testExecute1() {
206 jsr166 1.19 ThreadPoolExecutor p =
207     new ThreadPoolExecutor(1, 1,
208     60, TimeUnit.SECONDS,
209     new ArrayBlockingQueue<Runnable>(1));
210 tim 1.1 try {
211 jsr166 1.19 for (int i = 0; i < 2; ++i)
212 dl 1.4 p.submit(new MediumRunnable());
213 jsr166 1.19 for (int i = 0; i < 2; ++i) {
214     try {
215     p.submit(new MediumRunnable());
216     shouldThrow();
217     } catch (RejectedExecutionException success) {}
218 tim 1.1 }
219 jsr166 1.19 } finally {
220     joinPool(p);
221     }
222 tim 1.1 }
223    
224     /**
225 dl 1.12 * submit(callable) throws RejectedExecutionException
226     * if executor is saturated.
227 tim 1.1 */
228     public void testExecute2() {
229 jsr166 1.19 ThreadPoolExecutor p =
230     new ThreadPoolExecutor(1, 1,
231     60, TimeUnit.SECONDS,
232     new ArrayBlockingQueue<Runnable>(1));
233 tim 1.1 try {
234 jsr166 1.19 for (int i = 0; i < 2; ++i)
235     p.submit(new MediumRunnable());
236     for (int i = 0; i < 2; ++i) {
237     try {
238     p.submit(new SmallCallable());
239     shouldThrow();
240     } catch (RejectedExecutionException success) {}
241 tim 1.1 }
242 jsr166 1.19 } finally {
243     joinPool(p);
244     }
245 tim 1.1 }
246    
247    
248     /**
249 dl 1.12 * Blocking on submit(callable) throws InterruptedException if
250 tim 1.1 * caller interrupted.
251     */
252 jsr166 1.19 public void testInterruptedSubmit() throws InterruptedException {
253 dl 1.13 final ThreadPoolExecutor p = new ThreadPoolExecutor(1,1,60, TimeUnit.SECONDS, new ArrayBlockingQueue<Runnable>(10));
254 jsr166 1.19 Thread t = new Thread(new CheckedInterruptedRunnable() {
255     public void realRun() throws Exception {
256     p.submit(new CheckedCallable<Object>() {
257     public Object realCall()
258     throws InterruptedException {
259     Thread.sleep(SMALL_DELAY_MS);
260     return null;
261     }}).get();
262     }});
263    
264     t.start();
265     Thread.sleep(SHORT_DELAY_MS);
266     t.interrupt();
267 tim 1.1 joinPool(p);
268     }
269    
270     /**
271 jsr166 1.19 * get of submitted callable throws InterruptedException if callable
272 dl 1.6 * interrupted
273 tim 1.1 */
274 jsr166 1.19 public void testSubmitIE() throws InterruptedException {
275     final ThreadPoolExecutor p =
276     new ThreadPoolExecutor(1, 1,
277     60, TimeUnit.SECONDS,
278     new ArrayBlockingQueue<Runnable>(10));
279    
280     Thread t = new Thread(new CheckedInterruptedRunnable() {
281     public void realRun() throws Exception {
282     p.submit(new SmallCallable()).get();
283     }});
284    
285     t.start();
286     Thread.sleep(SHORT_DELAY_MS);
287     t.interrupt();
288     t.join();
289 tim 1.1 joinPool(p);
290     }
291    
292     /**
293 dl 1.12 * get of submit(callable) throws ExecutionException if callable
294     * throws exception
295 tim 1.1 */
296 jsr166 1.19 public void testSubmitEE() throws InterruptedException {
297     ThreadPoolExecutor p =
298     new ThreadPoolExecutor(1, 1,
299     60, TimeUnit.SECONDS,
300     new ArrayBlockingQueue<Runnable>(10));
301    
302     Callable c = new Callable() {
303     public Object call() { return 5/0; }};
304 tim 1.1
305     try {
306 jsr166 1.19 p.submit(c).get();
307 tim 1.1 shouldThrow();
308 jsr166 1.19 } catch (ExecutionException success) {
309     assertTrue(success.getCause() instanceof ArithmeticException);
310 tim 1.1 }
311     joinPool(p);
312 dl 1.6 }
313    
314     /**
315     * invokeAny(null) throws NPE
316     */
317 jsr166 1.19 public void testInvokeAny1()
318     throws InterruptedException, ExecutionException {
319 dl 1.6 ExecutorService e = new DirectExecutorService();
320     try {
321     e.invokeAny(null);
322 jsr166 1.19 shouldThrow();
323 dl 1.6 } catch (NullPointerException success) {
324     } finally {
325     joinPool(e);
326     }
327     }
328    
329     /**
330     * invokeAny(empty collection) throws IAE
331     */
332 jsr166 1.19 public void testInvokeAny2()
333     throws InterruptedException, ExecutionException {
334 dl 1.6 ExecutorService e = new DirectExecutorService();
335     try {
336     e.invokeAny(new ArrayList<Callable<String>>());
337 jsr166 1.19 shouldThrow();
338 dl 1.6 } catch (IllegalArgumentException success) {
339     } finally {
340     joinPool(e);
341     }
342     }
343    
344     /**
345     * invokeAny(c) throws NPE if c has null elements
346     */
347 jsr166 1.19 public void testInvokeAny3() throws Exception {
348     final CountDownLatch latch = new CountDownLatch(1);
349 dl 1.6 ExecutorService e = new DirectExecutorService();
350     try {
351 jsr166 1.19 ArrayList<Callable<Integer>> l
352     = new ArrayList<Callable<Integer>>();
353     l.add(new Callable<Integer>() {
354     public Integer call() { return 5/0; }});
355 dl 1.6 l.add(null);
356     e.invokeAny(l);
357 jsr166 1.19 shouldThrow();
358 dl 1.6 } catch (NullPointerException success) {
359     } finally {
360 jsr166 1.19 latch.countDown();
361 dl 1.6 joinPool(e);
362     }
363     }
364    
365     /**
366 dl 1.12 * invokeAny(c) throws ExecutionException if no task in c completes
367 dl 1.6 */
368 jsr166 1.19 public void testInvokeAny4() throws InterruptedException {
369 dl 1.6 ExecutorService e = new DirectExecutorService();
370     try {
371     ArrayList<Callable<String>> l = new ArrayList<Callable<String>>();
372     l.add(new NPETask());
373 dl 1.8 e.invokeAny(l);
374 jsr166 1.19 shouldThrow();
375 jsr166 1.17 } catch (ExecutionException success) {
376 jsr166 1.19 assertTrue(success.getCause() instanceof NullPointerException);
377 dl 1.6 } finally {
378     joinPool(e);
379     }
380     }
381    
382     /**
383 dl 1.12 * invokeAny(c) returns result of some task in c if at least one completes
384 dl 1.6 */
385 jsr166 1.19 public void testInvokeAny5() throws Exception {
386 dl 1.6 ExecutorService e = new DirectExecutorService();
387     try {
388     ArrayList<Callable<String>> l = new ArrayList<Callable<String>>();
389     l.add(new StringTask());
390     l.add(new StringTask());
391     String result = e.invokeAny(l);
392     assertSame(TEST_STRING, result);
393     } finally {
394     joinPool(e);
395     }
396     }
397    
398     /**
399     * invokeAll(null) throws NPE
400     */
401 jsr166 1.19 public void testInvokeAll1() throws InterruptedException {
402 dl 1.6 ExecutorService e = new DirectExecutorService();
403     try {
404     e.invokeAll(null);
405 jsr166 1.19 shouldThrow();
406 dl 1.6 } catch (NullPointerException success) {
407     } finally {
408     joinPool(e);
409     }
410     }
411    
412     /**
413     * invokeAll(empty collection) returns empty collection
414     */
415 jsr166 1.19 public void testInvokeAll2() throws InterruptedException {
416 dl 1.6 ExecutorService e = new DirectExecutorService();
417     try {
418     List<Future<String>> r = e.invokeAll(new ArrayList<Callable<String>>());
419     assertTrue(r.isEmpty());
420     } finally {
421     joinPool(e);
422     }
423     }
424    
425     /**
426     * invokeAll(c) throws NPE if c has null elements
427     */
428 jsr166 1.19 public void testInvokeAll3() throws InterruptedException {
429 dl 1.6 ExecutorService e = new DirectExecutorService();
430     try {
431     ArrayList<Callable<String>> l = new ArrayList<Callable<String>>();
432     l.add(new StringTask());
433     l.add(null);
434     e.invokeAll(l);
435 jsr166 1.19 shouldThrow();
436 dl 1.6 } catch (NullPointerException success) {
437     } finally {
438     joinPool(e);
439     }
440     }
441    
442     /**
443 dl 1.12 * get of returned element of invokeAll(c) throws exception on failed task
444 dl 1.6 */
445 jsr166 1.19 public void testInvokeAll4() throws Exception {
446 dl 1.6 ExecutorService e = new DirectExecutorService();
447     try {
448     ArrayList<Callable<String>> l = new ArrayList<Callable<String>>();
449     l.add(new NPETask());
450     List<Future<String>> result = e.invokeAll(l);
451     assertEquals(1, result.size());
452 jsr166 1.19 for (Future<String> future : result) {
453     try {
454     future.get();
455     shouldThrow();
456     } catch (ExecutionException success) {
457     Throwable cause = success.getCause();
458     assertTrue(cause instanceof NullPointerException);
459     }
460     }
461 dl 1.6 } finally {
462     joinPool(e);
463     }
464     }
465    
466     /**
467 dl 1.12 * invokeAll(c) returns results of all completed tasks in c
468 dl 1.6 */
469 jsr166 1.19 public void testInvokeAll5() throws Exception {
470 dl 1.6 ExecutorService e = new DirectExecutorService();
471     try {
472     ArrayList<Callable<String>> l = new ArrayList<Callable<String>>();
473     l.add(new StringTask());
474     l.add(new StringTask());
475     List<Future<String>> result = e.invokeAll(l);
476     assertEquals(2, result.size());
477 jsr166 1.19 for (Future<String> future : result)
478     assertSame(TEST_STRING, future.get());
479 dl 1.8 } finally {
480     joinPool(e);
481     }
482     }
483    
484    
485     /**
486     * timed invokeAny(null) throws NPE
487     */
488 jsr166 1.19 public void testTimedInvokeAny1() throws Exception {
489 dl 1.8 ExecutorService e = new DirectExecutorService();
490     try {
491 jsr166 1.20 e.invokeAny(null, MEDIUM_DELAY_MS, MILLISECONDS);
492 jsr166 1.19 shouldThrow();
493 dl 1.8 } catch (NullPointerException success) {
494     } finally {
495     joinPool(e);
496     }
497     }
498    
499     /**
500 dl 1.12 * timed invokeAny(null time unit) throws NPE
501 dl 1.8 */
502 jsr166 1.19 public void testTimedInvokeAnyNullTimeUnit() throws Exception {
503 dl 1.8 ExecutorService e = new DirectExecutorService();
504     try {
505     ArrayList<Callable<String>> l = new ArrayList<Callable<String>>();
506     l.add(new StringTask());
507     e.invokeAny(l, MEDIUM_DELAY_MS, null);
508 jsr166 1.19 shouldThrow();
509 dl 1.8 } catch (NullPointerException success) {
510     } finally {
511     joinPool(e);
512     }
513     }
514    
515     /**
516     * timed invokeAny(empty collection) throws IAE
517     */
518 jsr166 1.19 public void testTimedInvokeAny2() throws Exception {
519 dl 1.8 ExecutorService e = new DirectExecutorService();
520     try {
521 jsr166 1.20 e.invokeAny(new ArrayList<Callable<String>>(), MEDIUM_DELAY_MS, MILLISECONDS);
522 jsr166 1.19 shouldThrow();
523 dl 1.8 } catch (IllegalArgumentException success) {
524     } finally {
525     joinPool(e);
526     }
527     }
528    
529     /**
530     * timed invokeAny(c) throws NPE if c has null elements
531     */
532 jsr166 1.19 public void testTimedInvokeAny3() throws Exception {
533     final CountDownLatch latch = new CountDownLatch(1);
534 dl 1.8 ExecutorService e = new DirectExecutorService();
535     try {
536 jsr166 1.19 ArrayList<Callable<Integer>> l
537     = new ArrayList<Callable<Integer>>();
538     l.add(new Callable<Integer>() {
539     public Integer call() { return 5/0; }});
540 dl 1.8 l.add(null);
541 jsr166 1.20 e.invokeAny(l, MEDIUM_DELAY_MS, MILLISECONDS);
542 jsr166 1.19 shouldThrow();
543 dl 1.8 } catch (NullPointerException success) {
544     } finally {
545 jsr166 1.19 latch.countDown();
546 dl 1.8 joinPool(e);
547     }
548     }
549    
550     /**
551     * timed invokeAny(c) throws ExecutionException if no task completes
552     */
553 jsr166 1.19 public void testTimedInvokeAny4() throws Exception {
554 dl 1.8 ExecutorService e = new DirectExecutorService();
555     try {
556     ArrayList<Callable<String>> l = new ArrayList<Callable<String>>();
557     l.add(new NPETask());
558 jsr166 1.20 e.invokeAny(l, MEDIUM_DELAY_MS, MILLISECONDS);
559 jsr166 1.19 shouldThrow();
560 jsr166 1.17 } catch (ExecutionException success) {
561 jsr166 1.19 assertTrue(success.getCause() instanceof NullPointerException);
562 dl 1.8 } finally {
563     joinPool(e);
564     }
565     }
566    
567     /**
568 dl 1.12 * timed invokeAny(c) returns result of some task in c
569 dl 1.8 */
570 jsr166 1.19 public void testTimedInvokeAny5() throws Exception {
571 dl 1.8 ExecutorService e = new DirectExecutorService();
572     try {
573     ArrayList<Callable<String>> l = new ArrayList<Callable<String>>();
574     l.add(new StringTask());
575     l.add(new StringTask());
576 jsr166 1.20 String result = e.invokeAny(l, MEDIUM_DELAY_MS, MILLISECONDS);
577 dl 1.8 assertSame(TEST_STRING, result);
578     } finally {
579     joinPool(e);
580     }
581     }
582    
583     /**
584     * timed invokeAll(null) throws NPE
585     */
586 jsr166 1.19 public void testTimedInvokeAll1() throws InterruptedException {
587 dl 1.8 ExecutorService e = new DirectExecutorService();
588     try {
589 jsr166 1.20 e.invokeAll(null, MEDIUM_DELAY_MS, MILLISECONDS);
590 jsr166 1.19 shouldThrow();
591 dl 1.8 } catch (NullPointerException success) {
592     } finally {
593     joinPool(e);
594     }
595     }
596    
597     /**
598 dl 1.12 * timed invokeAll(null time unit) throws NPE
599 dl 1.8 */
600 jsr166 1.19 public void testTimedInvokeAllNullTimeUnit() throws InterruptedException {
601 dl 1.8 ExecutorService e = new DirectExecutorService();
602     try {
603     ArrayList<Callable<String>> l = new ArrayList<Callable<String>>();
604     l.add(new StringTask());
605     e.invokeAll(l, MEDIUM_DELAY_MS, null);
606 jsr166 1.19 shouldThrow();
607 dl 1.8 } catch (NullPointerException success) {
608     } finally {
609     joinPool(e);
610     }
611     }
612    
613     /**
614     * timed invokeAll(empty collection) returns empty collection
615     */
616 jsr166 1.19 public void testTimedInvokeAll2() throws InterruptedException {
617 dl 1.8 ExecutorService e = new DirectExecutorService();
618     try {
619 jsr166 1.20 List<Future<String>> r = e.invokeAll(new ArrayList<Callable<String>>(), MEDIUM_DELAY_MS, MILLISECONDS);
620 dl 1.8 assertTrue(r.isEmpty());
621     } finally {
622     joinPool(e);
623     }
624     }
625    
626     /**
627     * timed invokeAll(c) throws NPE if c has null elements
628     */
629 jsr166 1.19 public void testTimedInvokeAll3() throws InterruptedException {
630 dl 1.8 ExecutorService e = new DirectExecutorService();
631     try {
632     ArrayList<Callable<String>> l = new ArrayList<Callable<String>>();
633     l.add(new StringTask());
634     l.add(null);
635 jsr166 1.20 e.invokeAll(l, MEDIUM_DELAY_MS, MILLISECONDS);
636 jsr166 1.19 shouldThrow();
637 dl 1.8 } catch (NullPointerException success) {
638     } finally {
639     joinPool(e);
640     }
641     }
642    
643     /**
644 dl 1.12 * get of returned element of invokeAll(c) throws exception on failed task
645 dl 1.8 */
646 jsr166 1.19 public void testTimedInvokeAll4() throws Exception {
647 dl 1.8 ExecutorService e = new DirectExecutorService();
648     try {
649     ArrayList<Callable<String>> l = new ArrayList<Callable<String>>();
650     l.add(new NPETask());
651 jsr166 1.20 List<Future<String>> result = e.invokeAll(l, MEDIUM_DELAY_MS, MILLISECONDS);
652 dl 1.8 assertEquals(1, result.size());
653 jsr166 1.19 for (Future<String> future : result) {
654     try {
655     future.get();
656 jsr166 1.21 shouldThrow();
657 jsr166 1.19 } catch (ExecutionException success) {
658     assertTrue(success.getCause() instanceof NullPointerException);
659     }
660     }
661 dl 1.8 } finally {
662     joinPool(e);
663     }
664     }
665    
666     /**
667 dl 1.12 * timed invokeAll(c) returns results of all completed tasks in c
668 dl 1.8 */
669 jsr166 1.19 public void testTimedInvokeAll5() throws Exception {
670 dl 1.8 ExecutorService e = new DirectExecutorService();
671     try {
672     ArrayList<Callable<String>> l = new ArrayList<Callable<String>>();
673     l.add(new StringTask());
674     l.add(new StringTask());
675 jsr166 1.20 List<Future<String>> result = e.invokeAll(l, MEDIUM_DELAY_MS, MILLISECONDS);
676 dl 1.8 assertEquals(2, result.size());
677 jsr166 1.19 for (Future<String> future : result)
678     assertSame(TEST_STRING, future.get());
679 dl 1.8 } finally {
680     joinPool(e);
681     }
682     }
683    
684     /**
685 dl 1.12 * timed invokeAll cancels tasks not completed by timeout
686 dl 1.8 */
687 jsr166 1.19 public void testTimedInvokeAll6() throws InterruptedException {
688 dl 1.9 ExecutorService e = new DirectExecutorService();
689 dl 1.8 try {
690     ArrayList<Callable<String>> l = new ArrayList<Callable<String>>();
691     l.add(new StringTask());
692 dl 1.11 l.add(Executors.callable(new MediumPossiblyInterruptedRunnable(), TEST_STRING));
693     l.add(new StringTask());
694 jsr166 1.20 List<Future<String>> result = e.invokeAll(l, SMALL_DELAY_MS, MILLISECONDS);
695 dl 1.11 assertEquals(3, result.size());
696 jsr166 1.16 Iterator<Future<String>> it = result.iterator();
697 dl 1.8 Future<String> f1 = it.next();
698     Future<String> f2 = it.next();
699 dl 1.11 Future<String> f3 = it.next();
700 dl 1.8 assertTrue(f1.isDone());
701     assertFalse(f1.isCancelled());
702     assertTrue(f2.isDone());
703 dl 1.11 assertTrue(f3.isDone());
704     assertTrue(f3.isCancelled());
705 dl 1.6 } finally {
706     joinPool(e);
707     }
708 tim 1.1 }
709    
710 dl 1.3 }