ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/tck/AbstractExecutorServiceTest.java
(Generate patch)

Comparing jsr166/src/test/tck/AbstractExecutorServiceTest.java (file contents):
Revision 1.5 by dl, Fri Dec 19 20:42:44 2003 UTC vs.
Revision 1.9 by dl, Thu Dec 25 19:48:57 2003 UTC

# Line 17 | Line 17 | public class AbstractExecutorServiceTest
17          junit.textui.TestRunner.run (suite());
18      }
19      public static Test suite() {
20 <        return new TestSuite(ExecutorsTest.class);
20 >        return new TestSuite(AbstractExecutorServiceTest.class);
21      }
22  
23      /**
24       * A no-frills implementation of AbstractExecutorService, designed
25 <     * to test the submit/invoke methods only.
25 >     * to test the submit methods only.
26       */
27      static class DirectExecutorService extends AbstractExecutorService {
28          public void execute(Runnable r) { r.run(); }
# Line 34 | Line 34 | public class AbstractExecutorServiceTest
34          private volatile boolean shutdown = false;
35      }
36  
37    private static final String TEST_STRING = "a test string";
38
39    private static class StringTask implements Callable<String> {
40        public String call() { return TEST_STRING; }
41    }
42
37      /**
38       * execute of runnable runs it to completion
39       */
# Line 62 | Line 56 | public class AbstractExecutorServiceTest
56  
57  
58      /**
59 <     * execute of a callable runs it to completion
59 >     * completed submit of callable returns result
60       */
61 <    public void testExecuteCallable() {
61 >    public void testSubmitCallable() {
62          try {
63              ExecutorService e = new DirectExecutorService();
64              Future<String> future = e.submit(new StringTask());
# Line 79 | Line 73 | public class AbstractExecutorServiceTest
73          }
74      }
75  
76 +    /**
77 +     * completed submit of runnable returns successfully
78 +     */
79 +    public void testSubmitRunnable() {
80 +        try {
81 +            ExecutorService e = new DirectExecutorService();
82 +            Future<?> future = e.submit(new NoOpRunnable());
83 +            future.get();
84 +            assertTrue(future.isDone());
85 +        }
86 +        catch (ExecutionException ex) {
87 +            unexpectedException();
88 +        }
89 +        catch (InterruptedException ex) {
90 +            unexpectedException();
91 +        }
92 +    }
93  
94      /**
95 <     * execute of a privileged action runs it to completion
95 >     * completed submit of (runnable, result) returns result
96       */
97 <    public void testExecutePrivilegedAction() {
97 >    public void testSubmitRunnable2() {
98 >        try {
99 >            ExecutorService e = new DirectExecutorService();
100 >            Future<String> future = e.submit(new NoOpRunnable(), TEST_STRING);
101 >            String result = future.get();
102 >            assertSame(TEST_STRING, result);
103 >        }
104 >        catch (ExecutionException ex) {
105 >            unexpectedException();
106 >        }
107 >        catch (InterruptedException ex) {
108 >            unexpectedException();
109 >        }
110 >    }
111 >
112 >
113 >    /**
114 >     * submit of a privileged action runs it to completion
115 >     */
116 >    public void testSubmitPrivilegedAction() {
117          Policy savedPolicy = Policy.getPolicy();
118          AdjustablePolicy policy = new AdjustablePolicy();
119          policy.addPermission(new RuntimePermission("getContextClassLoader"));
# Line 111 | Line 141 | public class AbstractExecutorServiceTest
141      }
142  
143      /**
144 <     * execute of a privileged exception action runs it to completion
144 >     * submit of a privileged exception action runs it to completion
145       */
146 <    public void testExecutePrivilegedExceptionAction() {
146 >    public void testSubmitPrivilegedExceptionAction() {
147          Policy savedPolicy = Policy.getPolicy();
148          AdjustablePolicy policy = new AdjustablePolicy();
149          policy.addPermission(new RuntimePermission("getContextClassLoader"));
# Line 141 | Line 171 | public class AbstractExecutorServiceTest
171      }
172  
173      /**
174 <     * execute of a failed privileged exception action reports exception
174 >     * submit of a failed privileged exception action reports exception
175       */
176 <    public void testExecuteFailedPrivilegedExceptionAction() {
176 >    public void testSubmitFailedPrivilegedExceptionAction() {
177          Policy savedPolicy = Policy.getPolicy();
178          AdjustablePolicy policy = new AdjustablePolicy();
179          policy.addPermission(new RuntimePermission("getContextClassLoader"));
# Line 170 | Line 200 | public class AbstractExecutorServiceTest
200      }
201  
202      /**
173     * invoke of a callable runs it to completion
174     */
175    public void testInvokeCallable() {
176        try {
177            ExecutorService e = new DirectExecutorService();
178            String result = e.invoke(new StringTask());
179
180            assertSame(TEST_STRING, result);
181        }
182        catch (ExecutionException ex) {
183            unexpectedException();
184        }
185        catch (InterruptedException ex) {
186            unexpectedException();
187        }
188    }
189
190    /**
203       * execute with a null runnable throws NPE
204       */
205      public void testExecuteNullRunnable() {
# Line 206 | Line 218 | public class AbstractExecutorServiceTest
218  
219  
220      /**
221 <     * execute of a null callable throws NPE
221 >     * submit of a null callable throws NPE
222       */
223 <    public void testExecuteNullCallable() {
223 >    public void testSubmitNullCallable() {
224          try {
225              ExecutorService e = new DirectExecutorService();
226              StringTask t = null;
# Line 223 | Line 235 | public class AbstractExecutorServiceTest
235      }
236  
237      /**
238 <     * invoke of a null callable throws NPE
239 <     */
228 <    public void testInvokeNullCallable() {
229 <        try {
230 <            ExecutorService e = new DirectExecutorService();
231 <            StringTask t = null;
232 <            String result = e.invoke(t);
233 <            shouldThrow();
234 <        }
235 <        catch (NullPointerException success) {
236 <        }
237 <        catch (Exception ex) {
238 <            unexpectedException();
239 <        }
240 <    }
241 <
242 <    /**
243 <     *  execute(Executor, Runnable) throws RejectedExecutionException
244 <     *  if saturated.
238 >     * submit of Runnable throws RejectedExecutionException if
239 >     * saturated.
240       */
241      public void testExecute1() {
242          ThreadPoolExecutor p = new ThreadPoolExecutor(1,1, SHORT_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(1));
# Line 256 | Line 251 | public class AbstractExecutorServiceTest
251      }
252  
253      /**
254 <     *  execute(Executor, Callable)throws RejectedExecutionException
254 >     * Completed submit of Callable throws RejectedExecutionException
255       *  if saturated.
256       */
257      public void testExecute2() {
# Line 272 | Line 267 | public class AbstractExecutorServiceTest
267  
268  
269      /**
270 <     *  invoke(Executor, Callable) throws InterruptedException if
270 >     *  blocking on submit of Callable throws InterruptedException if
271       *  caller interrupted.
272       */
273 <    public void testInterruptedInvoke() {
273 >    public void testInterruptedSubmit() {
274          final ThreadPoolExecutor p = new ThreadPoolExecutor(1,1,SHORT_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(10));
275          Thread t = new Thread(new Runnable() {
276                  public void run() {
277                      try {
278 <                        p.invoke(new Callable<Object>() {
278 >                        p.submit(new Callable<Object>() {
279                                  public Object call() {
280                                      try {
281                                          Thread.sleep(MEDIUM_DELAY_MS);
# Line 289 | Line 284 | public class AbstractExecutorServiceTest
284                                      }
285                                      return null;
286                                  }
287 <                            });
287 >                            }).get();
288                      } catch(InterruptedException success){
289                      } catch(Exception e) {
290                          unexpectedException();
# Line 308 | Line 303 | public class AbstractExecutorServiceTest
303      }
304  
305      /**
306 <     *  invoke(Executor, Callable) throws InterruptedException if
307 <     *  callable throws exception
306 >     *  get of submit of Callable throws Exception if callable
307 >     *  interrupted
308       */
309 <    public void testInvoke5() {
309 >    public void testSubmitIE() {
310          final ThreadPoolExecutor p = new ThreadPoolExecutor(1,1,SHORT_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(10));
311  
312          final Callable c = new Callable() {
313                  public Object call() {
314                      try {
315 <                        p.invoke(new SmallCallable());
315 >                        p.submit(new SmallCallable()).get();
316                          shouldThrow();
317                      } catch(InterruptedException e){}
318                      catch(RejectedExecutionException e2){}
# Line 348 | Line 343 | public class AbstractExecutorServiceTest
343      }
344  
345      /**
346 <     *  invoke(Executor, Callable) will throw ExecutionException
347 <     *  if callable throws exception
346 >     *  completed submit of Callable throws ExecutionException if
347 >     *  callable throws exception
348       */
349 <    public void testInvoke6() {
349 >    public void testSubmitEE() {
350          ThreadPoolExecutor p = new ThreadPoolExecutor(1,1,SHORT_DELAY_MS, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(10));
351  
352          try {
# Line 363 | Line 358 | public class AbstractExecutorServiceTest
358                  };
359  
360              for(int i =0; i < 5; i++){
361 <                p.invoke(c);
361 >                p.submit(c).get();
362              }
363  
364              shouldThrow();
# Line 375 | Line 370 | public class AbstractExecutorServiceTest
370          joinPool(p);
371      }
372  
373 +    /**
374 +     * invokeAny(null) throws NPE
375 +     */
376 +    public void testInvokeAny1() {
377 +        ExecutorService e = new DirectExecutorService();
378 +        try {
379 +            e.invokeAny(null);
380 +        } catch (NullPointerException success) {
381 +        } catch(Exception ex) {
382 +            unexpectedException();
383 +        } finally {
384 +            joinPool(e);
385 +        }
386 +    }
387 +
388 +    /**
389 +     * invokeAny(empty collection) throws IAE
390 +     */
391 +    public void testInvokeAny2() {
392 +        ExecutorService e = new DirectExecutorService();
393 +        try {
394 +            e.invokeAny(new ArrayList<Callable<String>>());
395 +        } catch (IllegalArgumentException success) {
396 +        } catch(Exception ex) {
397 +            unexpectedException();
398 +        } finally {
399 +            joinPool(e);
400 +        }
401 +    }
402 +
403 +    /**
404 +     * invokeAny(c) throws NPE if c has null elements
405 +     */
406 +    public void testInvokeAny3() {
407 +        ExecutorService e = new DirectExecutorService();
408 +        try {
409 +            ArrayList<Callable<String>> l = new ArrayList<Callable<String>>();
410 +            l.add(new StringTask());
411 +            l.add(null);
412 +            e.invokeAny(l);
413 +        } catch (NullPointerException success) {
414 +        } catch(Exception ex) {
415 +            ex.printStackTrace();
416 +            unexpectedException();
417 +        } finally {
418 +            joinPool(e);
419 +        }
420 +    }
421 +
422 +    /**
423 +     * invokeAny(c) throws ExecutionException if no task completes
424 +     */
425 +    public void testInvokeAny4() {
426 +        ExecutorService e = new DirectExecutorService();
427 +        try {
428 +            ArrayList<Callable<String>> l = new ArrayList<Callable<String>>();
429 +            l.add(new NPETask());
430 +            e.invokeAny(l);
431 +        } catch(ExecutionException success) {
432 +        } catch(Exception ex) {
433 +            unexpectedException();
434 +        } finally {
435 +            joinPool(e);
436 +        }
437 +    }
438 +
439 +    /**
440 +     * invokeAny(c) returns result of some task
441 +     */
442 +    public void testInvokeAny5() {
443 +        ExecutorService e = new DirectExecutorService();
444 +        try {
445 +            ArrayList<Callable<String>> l = new ArrayList<Callable<String>>();
446 +            l.add(new StringTask());
447 +            l.add(new StringTask());
448 +            String result = e.invokeAny(l);
449 +            assertSame(TEST_STRING, result);
450 +        } catch (ExecutionException success) {
451 +        } catch(Exception ex) {
452 +            unexpectedException();
453 +        } finally {
454 +            joinPool(e);
455 +        }
456 +    }
457 +
458 +    /**
459 +     * invokeAll(null) throws NPE
460 +     */
461 +    public void testInvokeAll1() {
462 +        ExecutorService e = new DirectExecutorService();
463 +        try {
464 +            e.invokeAll(null);
465 +        } catch (NullPointerException success) {
466 +        } catch(Exception ex) {
467 +            unexpectedException();
468 +        } finally {
469 +            joinPool(e);
470 +        }
471 +    }
472 +
473 +    /**
474 +     * invokeAll(empty collection) returns empty collection
475 +     */
476 +    public void testInvokeAll2() {
477 +        ExecutorService e = new DirectExecutorService();
478 +        try {
479 +            List<Future<String>> r = e.invokeAll(new ArrayList<Callable<String>>());
480 +            assertTrue(r.isEmpty());
481 +        } catch(Exception ex) {
482 +            unexpectedException();
483 +        } finally {
484 +            joinPool(e);
485 +        }
486 +    }
487 +
488 +    /**
489 +     * invokeAll(c) throws NPE if c has null elements
490 +     */
491 +    public void testInvokeAll3() {
492 +        ExecutorService e = new DirectExecutorService();
493 +        try {
494 +            ArrayList<Callable<String>> l = new ArrayList<Callable<String>>();
495 +            l.add(new StringTask());
496 +            l.add(null);
497 +            e.invokeAll(l);
498 +        } catch (NullPointerException success) {
499 +        } catch(Exception ex) {
500 +            unexpectedException();
501 +        } finally {
502 +            joinPool(e);
503 +        }
504 +    }
505 +
506 +    /**
507 +     * get of element of invokeAll(c) throws exception on failed task
508 +     */
509 +    public void testInvokeAll4() {
510 +        ExecutorService e = new DirectExecutorService();
511 +        try {
512 +            ArrayList<Callable<String>> l = new ArrayList<Callable<String>>();
513 +            l.add(new NPETask());
514 +            List<Future<String>> result = e.invokeAll(l);
515 +            assertEquals(1, result.size());
516 +            for (Iterator<Future<String>> it = result.iterator(); it.hasNext();)
517 +                it.next().get();
518 +        } catch(ExecutionException success) {
519 +        } catch(Exception ex) {
520 +            unexpectedException();
521 +        } finally {
522 +            joinPool(e);
523 +        }
524 +    }
525 +
526 +    /**
527 +     * invokeAll(c) returns results of all completed tasks
528 +     */
529 +    public void testInvokeAll5() {
530 +        ExecutorService e = new DirectExecutorService();
531 +        try {
532 +            ArrayList<Callable<String>> l = new ArrayList<Callable<String>>();
533 +            l.add(new StringTask());
534 +            l.add(new StringTask());
535 +            List<Future<String>> result = e.invokeAll(l);
536 +            assertEquals(2, result.size());
537 +            for (Iterator<Future<String>> it = result.iterator(); it.hasNext();)
538 +                assertSame(TEST_STRING, it.next().get());
539 +        } catch (ExecutionException success) {
540 +        } catch(Exception ex) {
541 +            unexpectedException();
542 +        } finally {
543 +            joinPool(e);
544 +        }
545 +    }
546 +
547 +
548 +    /**
549 +     * timed invokeAny(null) throws NPE
550 +     */
551 +    public void testTimedInvokeAny1() {
552 +        ExecutorService e = new DirectExecutorService();
553 +        try {
554 +            e.invokeAny(null, MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS);
555 +        } catch (NullPointerException success) {
556 +        } catch(Exception ex) {
557 +            unexpectedException();
558 +        } finally {
559 +            joinPool(e);
560 +        }
561 +    }
562 +
563 +    /**
564 +     * timed invokeAny(,,null) throws NPE
565 +     */
566 +    public void testTimedInvokeAnyNullTimeUnit() {
567 +        ExecutorService e = new DirectExecutorService();
568 +        try {
569 +            ArrayList<Callable<String>> l = new ArrayList<Callable<String>>();
570 +            l.add(new StringTask());
571 +            e.invokeAny(l, MEDIUM_DELAY_MS, null);
572 +        } catch (NullPointerException success) {
573 +        } catch(Exception ex) {
574 +            unexpectedException();
575 +        } finally {
576 +            joinPool(e);
577 +        }
578 +    }
579 +
580 +    /**
581 +     * timed invokeAny(empty collection) throws IAE
582 +     */
583 +    public void testTimedInvokeAny2() {
584 +        ExecutorService e = new DirectExecutorService();
585 +        try {
586 +            e.invokeAny(new ArrayList<Callable<String>>(), MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS);
587 +        } catch (IllegalArgumentException success) {
588 +        } catch(Exception ex) {
589 +            unexpectedException();
590 +        } finally {
591 +            joinPool(e);
592 +        }
593 +    }
594 +
595 +    /**
596 +     * timed invokeAny(c) throws NPE if c has null elements
597 +     */
598 +    public void testTimedInvokeAny3() {
599 +        ExecutorService e = new DirectExecutorService();
600 +        try {
601 +            ArrayList<Callable<String>> l = new ArrayList<Callable<String>>();
602 +            l.add(new StringTask());
603 +            l.add(null);
604 +            e.invokeAny(l, MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS);
605 +        } catch (NullPointerException success) {
606 +        } catch(Exception ex) {
607 +            ex.printStackTrace();
608 +            unexpectedException();
609 +        } finally {
610 +            joinPool(e);
611 +        }
612 +    }
613 +
614 +    /**
615 +     * timed invokeAny(c) throws ExecutionException if no task completes
616 +     */
617 +    public void testTimedInvokeAny4() {
618 +        ExecutorService e = new DirectExecutorService();
619 +        try {
620 +            ArrayList<Callable<String>> l = new ArrayList<Callable<String>>();
621 +            l.add(new NPETask());
622 +            e.invokeAny(l, MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS);
623 +        } catch(ExecutionException success) {
624 +        } catch(Exception ex) {
625 +            unexpectedException();
626 +        } finally {
627 +            joinPool(e);
628 +        }
629 +    }
630 +
631 +    /**
632 +     * timed invokeAny(c) returns result of some task
633 +     */
634 +    public void testTimedInvokeAny5() {
635 +        ExecutorService e = new DirectExecutorService();
636 +        try {
637 +            ArrayList<Callable<String>> l = new ArrayList<Callable<String>>();
638 +            l.add(new StringTask());
639 +            l.add(new StringTask());
640 +            String result = e.invokeAny(l, MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS);
641 +            assertSame(TEST_STRING, result);
642 +        } catch (ExecutionException success) {
643 +        } catch(Exception ex) {
644 +            unexpectedException();
645 +        } finally {
646 +            joinPool(e);
647 +        }
648 +    }
649 +
650 +    /**
651 +     * timed invokeAll(null) throws NPE
652 +     */
653 +    public void testTimedInvokeAll1() {
654 +        ExecutorService e = new DirectExecutorService();
655 +        try {
656 +            e.invokeAll(null, MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS);
657 +        } catch (NullPointerException success) {
658 +        } catch(Exception ex) {
659 +            unexpectedException();
660 +        } finally {
661 +            joinPool(e);
662 +        }
663 +    }
664 +
665 +    /**
666 +     * timed invokeAll(,,null) throws NPE
667 +     */
668 +    public void testTimedInvokeAllNullTimeUnit() {
669 +        ExecutorService e = new DirectExecutorService();
670 +        try {
671 +            ArrayList<Callable<String>> l = new ArrayList<Callable<String>>();
672 +            l.add(new StringTask());
673 +            e.invokeAll(l, MEDIUM_DELAY_MS, null);
674 +        } catch (NullPointerException success) {
675 +        } catch(Exception ex) {
676 +            unexpectedException();
677 +        } finally {
678 +            joinPool(e);
679 +        }
680 +    }
681 +
682 +    /**
683 +     * timed invokeAll(empty collection) returns empty collection
684 +     */
685 +    public void testTimedInvokeAll2() {
686 +        ExecutorService e = new DirectExecutorService();
687 +        try {
688 +            List<Future<String>> r = e.invokeAll(new ArrayList<Callable<String>>(), MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS);
689 +            assertTrue(r.isEmpty());
690 +        } catch(Exception ex) {
691 +            unexpectedException();
692 +        } finally {
693 +            joinPool(e);
694 +        }
695 +    }
696 +
697 +    /**
698 +     * timed invokeAll(c) throws NPE if c has null elements
699 +     */
700 +    public void testTimedInvokeAll3() {
701 +        ExecutorService e = new DirectExecutorService();
702 +        try {
703 +            ArrayList<Callable<String>> l = new ArrayList<Callable<String>>();
704 +            l.add(new StringTask());
705 +            l.add(null);
706 +            e.invokeAll(l, MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS);
707 +        } catch (NullPointerException success) {
708 +        } catch(Exception ex) {
709 +            unexpectedException();
710 +        } finally {
711 +            joinPool(e);
712 +        }
713 +    }
714 +
715 +    /**
716 +     * get of element of invokeAll(c) throws exception on failed task
717 +     */
718 +    public void testTimedInvokeAll4() {
719 +        ExecutorService e = new DirectExecutorService();
720 +        try {
721 +            ArrayList<Callable<String>> l = new ArrayList<Callable<String>>();
722 +            l.add(new NPETask());
723 +            List<Future<String>> result = e.invokeAll(l, MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS);
724 +            assertEquals(1, result.size());
725 +            for (Iterator<Future<String>> it = result.iterator(); it.hasNext();)
726 +                it.next().get();
727 +        } catch(ExecutionException success) {
728 +        } catch(Exception ex) {
729 +            unexpectedException();
730 +        } finally {
731 +            joinPool(e);
732 +        }
733 +    }
734 +
735 +    /**
736 +     * timed invokeAll(c) returns results of all completed tasks
737 +     */
738 +    public void testTimedInvokeAll5() {
739 +        ExecutorService e = new DirectExecutorService();
740 +        try {
741 +            ArrayList<Callable<String>> l = new ArrayList<Callable<String>>();
742 +            l.add(new StringTask());
743 +            l.add(new StringTask());
744 +            List<Future<String>> result = e.invokeAll(l, MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS);
745 +            assertEquals(2, result.size());
746 +            for (Iterator<Future<String>> it = result.iterator(); it.hasNext();)
747 +                assertSame(TEST_STRING, it.next().get());
748 +        } catch (ExecutionException success) {
749 +        } catch(Exception ex) {
750 +            unexpectedException();
751 +        } finally {
752 +            joinPool(e);
753 +        }
754 +    }
755 +
756 +    /**
757 +     * timed invokeAll(c) cancels tasks not completed by timeout
758 +     */
759 +    public void testTimedInvokeAll6() {
760 +        ExecutorService e = new DirectExecutorService();
761 +        try {
762 +            ArrayList<Callable<String>> l = new ArrayList<Callable<String>>();
763 +            l.add(new StringTask());
764 +            l.add(Executors.callable(new LongPossiblyInterruptedRunnable(), TEST_STRING));
765 +            List<Future<String>> result = e.invokeAll(l, SHORT_DELAY_MS, TimeUnit.MILLISECONDS);
766 +            assertEquals(2, result.size());
767 +            Iterator<Future<String>> it = result.iterator();
768 +            Future<String> f1 = it.next();
769 +            Future<String> f2 = it.next();
770 +            assertTrue(f1.isDone());
771 +            assertFalse(f1.isCancelled());
772 +            assertTrue(f2.isDone());
773 +            //            assertTrue(f2.isCancelled());
774 +        } catch(Exception ex) {
775 +            unexpectedException();
776 +        } finally {
777 +            joinPool(e);
778 +        }
779 +    }
780 +
781   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines