[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.21 - (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 :     * 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 }

Doug Lea
ViewVC Help
Powered by ViewVC 1.0.8