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

Comparing jsr166/src/test/tck/ForkJoinPoolTest.java (file contents):
Revision 1.43 by jsr166, Sun May 29 13:45:35 2011 UTC vs.
Revision 1.56 by jsr166, Fri Oct 2 21:52:36 2015 UTC

# Line 4 | Line 4
4   * http://creativecommons.org/publicdomain/zero/1.0/
5   */
6  
7 < import junit.framework.*;
7 > import static java.util.concurrent.TimeUnit.MILLISECONDS;
8 > import static java.util.concurrent.TimeUnit.NANOSECONDS;
9 >
10 > import java.security.PrivilegedAction;
11 > import java.security.PrivilegedExceptionAction;
12   import java.util.ArrayList;
13   import java.util.Collection;
14   import java.util.List;
11 import java.util.concurrent.Executors;
12 import java.util.concurrent.ExecutorService;
13 import java.util.concurrent.AbstractExecutorService;
14 import java.util.concurrent.CountDownLatch;
15   import java.util.concurrent.Callable;
16 < import java.util.concurrent.Future;
16 > import java.util.concurrent.CountDownLatch;
17   import java.util.concurrent.ExecutionException;
18 < import java.util.concurrent.CancellationException;
19 < import java.util.concurrent.RejectedExecutionException;
18 > import java.util.concurrent.Executors;
19 > import java.util.concurrent.ExecutorService;
20   import java.util.concurrent.ForkJoinPool;
21   import java.util.concurrent.ForkJoinTask;
22   import java.util.concurrent.ForkJoinWorkerThread;
23 + import java.util.concurrent.Future;
24   import java.util.concurrent.RecursiveTask;
25 < import java.util.concurrent.TimeUnit;
25 > import java.util.concurrent.RejectedExecutionException;
26   import java.util.concurrent.atomic.AtomicBoolean;
27   import java.util.concurrent.locks.ReentrantLock;
28 < import static java.util.concurrent.TimeUnit.MILLISECONDS;
29 < import java.security.AccessControlException;
30 < import java.security.Policy;
31 < import java.security.PrivilegedAction;
31 < import java.security.PrivilegedExceptionAction;
28 >
29 > import junit.framework.AssertionFailedError;
30 > import junit.framework.Test;
31 > import junit.framework.TestSuite;
32  
33   public class ForkJoinPoolTest extends JSR166TestCase {
34      public static void main(String[] args) {
35 <        junit.textui.TestRunner.run(suite());
35 >        main(suite(), args);
36      }
37  
38      public static Test suite() {
39          return new TestSuite(ForkJoinPoolTest.class);
40      }
41  
42 <    /**
42 >    /*
43       * Testing coverage notes:
44       *
45       * 1. shutdown and related methods are tested via super.joinPool.
# Line 107 | Line 107 | public class ForkJoinPoolTest extends JS
107      static final class FibTask extends RecursiveTask<Integer> {
108          final int number;
109          FibTask(int n) { number = n; }
110 <        public Integer compute() {
110 >        protected Integer compute() {
111              int n = number;
112              if (n <= 1)
113                  return n;
# Line 135 | Line 135 | public class ForkJoinPoolTest extends JS
135              this.locker = locker;
136              this.lock = lock;
137          }
138 <        public Integer compute() {
138 >        protected Integer compute() {
139              int n;
140              LockingFibTask f1 = null;
141              LockingFibTask f2 = null;
# Line 226 | Line 226 | public class ForkJoinPoolTest extends JS
226      }
227  
228      /**
229 +     * awaitTermination on a non-shutdown pool times out
230 +     */
231 +    public void testAwaitTermination_timesOut() throws InterruptedException {
232 +        ForkJoinPool p = new ForkJoinPool(1);
233 +        assertFalse(p.isTerminated());
234 +        assertFalse(p.awaitTermination(Long.MIN_VALUE, NANOSECONDS));
235 +        assertFalse(p.awaitTermination(Long.MIN_VALUE, MILLISECONDS));
236 +        assertFalse(p.awaitTermination(-1L, NANOSECONDS));
237 +        assertFalse(p.awaitTermination(-1L, MILLISECONDS));
238 +        assertFalse(p.awaitTermination(0L, NANOSECONDS));
239 +        assertFalse(p.awaitTermination(0L, MILLISECONDS));
240 +        long timeoutNanos = 999999L;
241 +        long startTime = System.nanoTime();
242 +        assertFalse(p.awaitTermination(timeoutNanos, NANOSECONDS));
243 +        assertTrue(System.nanoTime() - startTime >= timeoutNanos);
244 +        assertFalse(p.isTerminated());
245 +        startTime = System.nanoTime();
246 +        long timeoutMillis = timeoutMillis();
247 +        assertFalse(p.awaitTermination(timeoutMillis, MILLISECONDS));
248 +        assertTrue(millisElapsedSince(startTime) >= timeoutMillis);
249 +        assertFalse(p.isTerminated());
250 +        p.shutdown();
251 +        assertTrue(p.awaitTermination(LONG_DELAY_MS, MILLISECONDS));
252 +        assertTrue(p.isTerminated());
253 +    }
254 +
255 +    /**
256       * setUncaughtExceptionHandler changes handler for uncaught exceptions.
257       *
258       * Additionally tests: Overriding ForkJoinWorkerThread.onStart
# Line 242 | Line 269 | public class ForkJoinPoolTest extends JS
269                                            eh, false);
270          try {
271              assertSame(eh, p.getUncaughtExceptionHandler());
272 <            p.execute(new FibTask(8));
273 <            assertTrue(uehInvoked.await(MEDIUM_DELAY_MS, MILLISECONDS));
272 >            try {
273 >                p.execute(new FibTask(8));
274 >                assertTrue(uehInvoked.await(MEDIUM_DELAY_MS, MILLISECONDS));
275 >            } catch (RejectedExecutionException ok) {
276 >            }
277          } finally {
278              p.shutdownNow(); // failure might have prevented processing task
279              joinPool(p);
# Line 388 | Line 418 | public class ForkJoinPoolTest extends JS
418          ExecutorService e = new ForkJoinPool(1);
419          try {
420              final AtomicBoolean done = new AtomicBoolean(false);
421 <            CheckedRunnable task = new CheckedRunnable() {
421 >            Future<?> future = e.submit(new CheckedRunnable() {
422                  public void realRun() {
423                      done.set(true);
424 <                }};
395 <            Future<?> future = e.submit(task);
424 >                }});
425              assertNull(future.get());
426              assertNull(future.get(0, MILLISECONDS));
427              assertTrue(done.get());
# Line 452 | Line 481 | public class ForkJoinPoolTest extends JS
481       * A submitted privileged action runs to completion
482       */
483      public void testSubmitPrivilegedAction() throws Exception {
484 +        final Callable callable = Executors.callable(new PrivilegedAction() {
485 +                public Object run() { return TEST_STRING; }});
486          Runnable r = new CheckedRunnable() {
487 <            public void realRun() throws Exception {
488 <                ExecutorService e = new ForkJoinPool(1);
489 <                Future future = e.submit(Executors.callable(new PrivilegedAction() {
490 <                    public Object run() {
460 <                        return TEST_STRING;
461 <                    }}));
462 <
487 >        public void realRun() throws Exception {
488 >            ExecutorService e = new ForkJoinPool(1);
489 >            try {
490 >                Future future = e.submit(callable);
491                  assertSame(TEST_STRING, future.get());
492 <            }};
492 >            } finally {
493 >                joinPool(e);
494 >            }
495 >        }};
496  
497 <        runWithPermissions(r,
467 <                           new RuntimePermission("modifyThread"));
497 >        runWithPermissions(r, new RuntimePermission("modifyThread"));
498      }
499  
500      /**
501       * A submitted privileged exception action runs to completion
502       */
503      public void testSubmitPrivilegedExceptionAction() throws Exception {
504 +        final Callable callable =
505 +            Executors.callable(new PrivilegedExceptionAction() {
506 +                public Object run() { return TEST_STRING; }});
507          Runnable r = new CheckedRunnable() {
508 <            public void realRun() throws Exception {
509 <                ExecutorService e = new ForkJoinPool(1);
510 <                Future future = e.submit(Executors.callable(new PrivilegedExceptionAction() {
511 <                    public Object run() {
479 <                        return TEST_STRING;
480 <                    }}));
481 <
508 >        public void realRun() throws Exception {
509 >            ExecutorService e = new ForkJoinPool(1);
510 >            try {
511 >                Future future = e.submit(callable);
512                  assertSame(TEST_STRING, future.get());
513 <            }};
513 >            } finally {
514 >                joinPool(e);
515 >            }
516 >        }};
517  
518          runWithPermissions(r, new RuntimePermission("modifyThread"));
519      }
# Line 489 | Line 522 | public class ForkJoinPoolTest extends JS
522       * A submitted failed privileged exception action reports exception
523       */
524      public void testSubmitFailedPrivilegedExceptionAction() throws Exception {
525 +        final Callable callable =
526 +            Executors.callable(new PrivilegedExceptionAction() {
527 +                public Object run() { throw new IndexOutOfBoundsException(); }});
528          Runnable r = new CheckedRunnable() {
529 <            public void realRun() throws Exception {
530 <                ExecutorService e = new ForkJoinPool(1);
531 <                Future future = e.submit(Executors.callable(new PrivilegedExceptionAction() {
532 <                    public Object run() throws Exception {
497 <                        throw new IndexOutOfBoundsException();
498 <                    }}));
499 <
529 >        public void realRun() throws Exception {
530 >            ExecutorService e = new ForkJoinPool(1);
531 >            try {
532 >                Future future = e.submit(callable);
533                  try {
534                      future.get();
535                      shouldThrow();
536                  } catch (ExecutionException success) {
537                      assertTrue(success.getCause() instanceof IndexOutOfBoundsException);
538 <                }}};
538 >                }
539 >            } finally {
540 >                joinPool(e);
541 >            }
542 >        }};
543  
544          runWithPermissions(r, new RuntimePermission("modifyThread"));
545      }
# Line 572 | Line 609 | public class ForkJoinPoolTest extends JS
609          ForkJoinPool p = new ForkJoinPool(1);
610          try {
611              p.submit(new Callable() {
612 <                public Object call() {
613 <                    int i = 5/0;
577 <                    return Boolean.TRUE;
578 <                }}).get();
612 >                public Object call() { throw new ArithmeticException(); }})
613 >                .get();
614              shouldThrow();
615          } catch (ExecutionException success) {
616              assertTrue(success.getCause() instanceof ArithmeticException);
# Line 952 | Line 987 | public class ForkJoinPoolTest extends JS
987              l.add(new StringTask());
988              l.add(new StringTask());
989              List<Future<String>> futures
990 <                = e.invokeAll(l, MEDIUM_DELAY_MS, MILLISECONDS);
990 >                = e.invokeAll(l, LONG_DELAY_MS, MILLISECONDS);
991              assertEquals(2, futures.size());
992              for (Future<String> future : futures)
993                  assertSame(TEST_STRING, future.get());

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines