--- jsr166/src/test/tck/ForkJoinPoolTest.java 2010/08/25 00:07:03 1.21 +++ jsr166/src/test/tck/ForkJoinPoolTest.java 2015/10/02 21:52:36 1.56 @@ -1,40 +1,45 @@ /* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at - * http://creativecommons.org/licenses/publicdomain + * http://creativecommons.org/publicdomain/zero/1.0/ */ +import static java.util.concurrent.TimeUnit.MILLISECONDS; +import static java.util.concurrent.TimeUnit.NANOSECONDS; -import junit.framework.*; -import java.util.*; -import java.util.concurrent.Executor; -import java.util.concurrent.Executors; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.AbstractExecutorService; -import java.util.concurrent.CountDownLatch; +import java.security.PrivilegedAction; +import java.security.PrivilegedExceptionAction; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; import java.util.concurrent.Callable; -import java.util.concurrent.Future; +import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutionException; -import java.util.concurrent.CancellationException; -import java.util.concurrent.RejectedExecutionException; +import java.util.concurrent.Executors; +import java.util.concurrent.ExecutorService; import java.util.concurrent.ForkJoinPool; import java.util.concurrent.ForkJoinTask; import java.util.concurrent.ForkJoinWorkerThread; -import java.util.concurrent.RecursiveAction; +import java.util.concurrent.Future; import java.util.concurrent.RecursiveTask; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.locks.*; -import java.security.*; +import java.util.concurrent.RejectedExecutionException; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.locks.ReentrantLock; + +import junit.framework.AssertionFailedError; +import junit.framework.Test; +import junit.framework.TestSuite; public class ForkJoinPoolTest extends JSR166TestCase { public static void main(String[] args) { - junit.textui.TestRunner.run(suite()); + main(suite(), args); } + public static Test suite() { return new TestSuite(ForkJoinPoolTest.class); } - /** + /* * Testing coverage notes: * * 1. shutdown and related methods are tested via super.joinPool. @@ -102,7 +107,7 @@ public class ForkJoinPoolTest extends JS static final class FibTask extends RecursiveTask { final int number; FibTask(int n) { number = n; } - public Integer compute() { + protected Integer compute() { int n = number; if (n <= 1) return n; @@ -130,7 +135,7 @@ public class ForkJoinPoolTest extends JS this.locker = locker; this.lock = lock; } - public Integer compute() { + protected Integer compute() { int n; LockingFibTask f1 = null; LockingFibTask f2 = null; @@ -156,17 +161,15 @@ public class ForkJoinPoolTest extends JS * tasks, and quiescent running state. */ public void testDefaultInitialState() { - ForkJoinPool p = null; + ForkJoinPool p = new ForkJoinPool(1); try { - p = new ForkJoinPool(1); - assertTrue(p.getFactory() == - ForkJoinPool.defaultForkJoinWorkerThreadFactory); - assertTrue(p.isQuiescent()); + assertSame(ForkJoinPool.defaultForkJoinWorkerThreadFactory, + p.getFactory()); assertFalse(p.getAsyncMode()); - assertTrue(p.getActiveThreadCount() == 0); - assertTrue(p.getStealCount() == 0); - assertTrue(p.getQueuedTaskCount() == 0); - assertTrue(p.getQueuedSubmissionCount() == 0); + assertEquals(0, p.getActiveThreadCount()); + assertEquals(0, p.getStealCount()); + assertEquals(0, p.getQueuedTaskCount()); + assertEquals(0, p.getQueuedSubmissionCount()); assertFalse(p.hasQueuedSubmissions()); assertFalse(p.isShutdown()); assertFalse(p.isTerminating()); @@ -196,15 +199,13 @@ public class ForkJoinPoolTest extends JS } catch (NullPointerException success) {} } - /** * getParallelism returns size set in constructor */ public void testGetParallelism() { - ForkJoinPool p = null; + ForkJoinPool p = new ForkJoinPool(1); try { - p = new ForkJoinPool(1); - assertTrue(p.getParallelism() == 1); + assertEquals(1, p.getParallelism()); } finally { joinPool(p); } @@ -214,61 +215,107 @@ public class ForkJoinPoolTest extends JS * getPoolSize returns number of started workers. */ public void testGetPoolSize() { - ForkJoinPool p = null; + ForkJoinPool p = new ForkJoinPool(1); try { - p = new ForkJoinPool(1); - assertTrue(p.getActiveThreadCount() == 0); + assertEquals(0, p.getActiveThreadCount()); Future future = p.submit(new StringTask()); - assertTrue(p.getPoolSize() == 1); - + assertEquals(1, p.getPoolSize()); } finally { joinPool(p); } } /** + * awaitTermination on a non-shutdown pool times out + */ + public void testAwaitTermination_timesOut() throws InterruptedException { + ForkJoinPool p = new ForkJoinPool(1); + assertFalse(p.isTerminated()); + assertFalse(p.awaitTermination(Long.MIN_VALUE, NANOSECONDS)); + assertFalse(p.awaitTermination(Long.MIN_VALUE, MILLISECONDS)); + assertFalse(p.awaitTermination(-1L, NANOSECONDS)); + assertFalse(p.awaitTermination(-1L, MILLISECONDS)); + assertFalse(p.awaitTermination(0L, NANOSECONDS)); + assertFalse(p.awaitTermination(0L, MILLISECONDS)); + long timeoutNanos = 999999L; + long startTime = System.nanoTime(); + assertFalse(p.awaitTermination(timeoutNanos, NANOSECONDS)); + assertTrue(System.nanoTime() - startTime >= timeoutNanos); + assertFalse(p.isTerminated()); + startTime = System.nanoTime(); + long timeoutMillis = timeoutMillis(); + assertFalse(p.awaitTermination(timeoutMillis, MILLISECONDS)); + assertTrue(millisElapsedSince(startTime) >= timeoutMillis); + assertFalse(p.isTerminated()); + p.shutdown(); + assertTrue(p.awaitTermination(LONG_DELAY_MS, MILLISECONDS)); + assertTrue(p.isTerminated()); + } + + /** * setUncaughtExceptionHandler changes handler for uncaught exceptions. * * Additionally tests: Overriding ForkJoinWorkerThread.onStart * performs its defined action */ public void testSetUncaughtExceptionHandler() throws InterruptedException { - ForkJoinPool p = null; - try { - MyHandler eh = new MyHandler(); - p = new ForkJoinPool(1, new FailingThreadFactory(), eh, false); - assert(eh == p.getUncaughtExceptionHandler()); - p.execute(new FailingTask()); - Thread.sleep(MEDIUM_DELAY_MS); - assertTrue(eh.catches > 0); + final CountDownLatch uehInvoked = new CountDownLatch(1); + final Thread.UncaughtExceptionHandler eh = + new Thread.UncaughtExceptionHandler() { + public void uncaughtException(Thread t, Throwable e) { + uehInvoked.countDown(); + }}; + ForkJoinPool p = new ForkJoinPool(1, new FailingThreadFactory(), + eh, false); + try { + assertSame(eh, p.getUncaughtExceptionHandler()); + try { + p.execute(new FibTask(8)); + assertTrue(uehInvoked.await(MEDIUM_DELAY_MS, MILLISECONDS)); + } catch (RejectedExecutionException ok) { + } } finally { - p.shutdownNow(); + p.shutdownNow(); // failure might have prevented processing task joinPool(p); } } /** - * After invoking a single task, isQuiescent is true, - * queues are empty, threads are not active, and - * construction parameters continue to hold + * After invoking a single task, isQuiescent eventually becomes + * true, at which time queues are empty, threads are not active, + * the task has completed successfully, and construction + * parameters continue to hold */ - public void testisQuiescent() throws InterruptedException { - ForkJoinPool p = null; + public void testIsQuiescent() throws Exception { + ForkJoinPool p = new ForkJoinPool(2); try { - p = new ForkJoinPool(2); - p.invoke(new FibTask(20)); - assertTrue(p.getFactory() == - ForkJoinPool.defaultForkJoinWorkerThreadFactory); - Thread.sleep(MEDIUM_DELAY_MS); + assertTrue(p.isQuiescent()); + long startTime = System.nanoTime(); + FibTask f = new FibTask(20); + p.invoke(f); + assertSame(ForkJoinPool.defaultForkJoinWorkerThreadFactory, + p.getFactory()); + while (! p.isQuiescent()) { + if (millisElapsedSince(startTime) > LONG_DELAY_MS) + throw new AssertionFailedError("timed out"); + assertFalse(p.getAsyncMode()); + assertFalse(p.isShutdown()); + assertFalse(p.isTerminating()); + assertFalse(p.isTerminated()); + Thread.yield(); + } + assertTrue(p.isQuiescent()); assertFalse(p.getAsyncMode()); - assertTrue(p.getActiveThreadCount() == 0); - assertTrue(p.getQueuedTaskCount() == 0); - assertTrue(p.getQueuedSubmissionCount() == 0); + assertEquals(0, p.getActiveThreadCount()); + assertEquals(0, p.getQueuedTaskCount()); + assertEquals(0, p.getQueuedSubmissionCount()); assertFalse(p.hasQueuedSubmissions()); assertFalse(p.isShutdown()); assertFalse(p.isTerminating()); assertFalse(p.isTerminated()); + assertTrue(f.isDone()); + assertEquals(6765, (int) f.get()); } finally { joinPool(p); } @@ -278,12 +325,10 @@ public class ForkJoinPoolTest extends JS * Completed submit(ForkJoinTask) returns result */ public void testSubmitForkJoinTask() throws Throwable { - ForkJoinPool p = null; + ForkJoinPool p = new ForkJoinPool(1); try { - p = new ForkJoinPool(1); ForkJoinTask f = p.submit(new FibTask(8)); - int r = f.get(); - assertTrue(r == 21); + assertEquals(21, (int) f.get()); } finally { joinPool(p); } @@ -293,14 +338,14 @@ public class ForkJoinPoolTest extends JS * A task submitted after shutdown is rejected */ public void testSubmitAfterShutdown() { - ForkJoinPool p = null; + ForkJoinPool p = new ForkJoinPool(1); try { - p = new ForkJoinPool(1); p.shutdown(); assertTrue(p.isShutdown()); - ForkJoinTask f = p.submit(new FibTask(8)); - shouldThrow(); - } catch (RejectedExecutionException success) { + try { + ForkJoinTask f = p.submit(new FibTask(8)); + shouldThrow(); + } catch (RejectedExecutionException success) {} } finally { joinPool(p); } @@ -310,15 +355,13 @@ public class ForkJoinPoolTest extends JS * Pool maintains parallelism when using ManagedBlocker */ public void testBlockingForkJoinTask() throws Throwable { - ForkJoinPool p = null; + ForkJoinPool p = new ForkJoinPool(4); try { - p = new ForkJoinPool(4); ReentrantLock lock = new ReentrantLock(); ManagedLocker locker = new ManagedLocker(lock); - ForkJoinTask f = new LockingFibTask(30, locker, lock); + ForkJoinTask f = new LockingFibTask(20, locker, lock); p.execute(f); - int r = f.get(); - assertTrue(r == 832040); + assertEquals(6765, (int) f.get()); } finally { p.shutdownNow(); // don't wait out shutdown } @@ -328,16 +371,17 @@ public class ForkJoinPoolTest extends JS * pollSubmission returns unexecuted submitted task, if present */ public void testPollSubmission() { - SubFJP p = null; + final CountDownLatch done = new CountDownLatch(1); + SubFJP p = new SubFJP(); try { - p = new SubFJP(); - ForkJoinTask a = p.submit(new MediumRunnable()); - ForkJoinTask b = p.submit(new MediumRunnable()); - ForkJoinTask c = p.submit(new MediumRunnable()); + ForkJoinTask a = p.submit(awaiter(done)); + ForkJoinTask b = p.submit(awaiter(done)); + ForkJoinTask c = p.submit(awaiter(done)); ForkJoinTask r = p.pollSubmission(); assertTrue(r == a || r == b || r == c); assertFalse(r.isDone()); } finally { + done.countDown(); joinPool(p); } } @@ -346,12 +390,12 @@ public class ForkJoinPoolTest extends JS * drainTasksTo transfers unexecuted submitted tasks, if present */ public void testDrainTasksTo() { - SubFJP p = null; + final CountDownLatch done = new CountDownLatch(1); + SubFJP p = new SubFJP(); try { - p = new SubFJP(); - ForkJoinTask a = p.submit(new MediumRunnable()); - ForkJoinTask b = p.submit(new MediumRunnable()); - ForkJoinTask c = p.submit(new MediumRunnable()); + ForkJoinTask a = p.submit(awaiter(done)); + ForkJoinTask b = p.submit(awaiter(done)); + ForkJoinTask c = p.submit(awaiter(done)); ArrayList al = new ArrayList(); p.drainTasksTo(al); assertTrue(al.size() > 0); @@ -360,11 +404,11 @@ public class ForkJoinPoolTest extends JS assertFalse(r.isDone()); } } finally { + done.countDown(); joinPool(p); } } - // FJ Versions of AbstractExecutorService tests /** @@ -372,22 +416,35 @@ public class ForkJoinPoolTest extends JS */ public void testExecuteRunnable() throws Throwable { ExecutorService e = new ForkJoinPool(1); - TrackedShortRunnable task = new TrackedShortRunnable(); - assertFalse(task.done); - Future future = e.submit(task); - future.get(); - assertTrue(task.done); + try { + final AtomicBoolean done = new AtomicBoolean(false); + Future future = e.submit(new CheckedRunnable() { + public void realRun() { + done.set(true); + }}); + assertNull(future.get()); + assertNull(future.get(0, MILLISECONDS)); + assertTrue(done.get()); + assertTrue(future.isDone()); + assertFalse(future.isCancelled()); + } finally { + joinPool(e); + } } - /** * Completed submit(callable) returns result */ public void testSubmitCallable() throws Throwable { ExecutorService e = new ForkJoinPool(1); - Future future = e.submit(new StringTask()); - String result = future.get(); - assertSame(TEST_STRING, result); + try { + Future future = e.submit(new StringTask()); + assertSame(TEST_STRING, future.get()); + assertTrue(future.isDone()); + assertFalse(future.isCancelled()); + } finally { + joinPool(e); + } } /** @@ -395,9 +452,14 @@ public class ForkJoinPoolTest extends JS */ public void testSubmitRunnable() throws Throwable { ExecutorService e = new ForkJoinPool(1); - Future future = e.submit(new NoOpRunnable()); - future.get(); - assertTrue(future.isDone()); + try { + Future future = e.submit(new NoOpRunnable()); + assertNull(future.get()); + assertTrue(future.isDone()); + assertFalse(future.isCancelled()); + } finally { + joinPool(e); + } } /** @@ -405,154 +467,138 @@ public class ForkJoinPoolTest extends JS */ public void testSubmitRunnable2() throws Throwable { ExecutorService e = new ForkJoinPool(1); - Future future = e.submit(new NoOpRunnable(), TEST_STRING); - String result = future.get(); - assertSame(TEST_STRING, result); + try { + Future future = e.submit(new NoOpRunnable(), TEST_STRING); + assertSame(TEST_STRING, future.get()); + assertTrue(future.isDone()); + assertFalse(future.isCancelled()); + } finally { + joinPool(e); + } } - /** - * A submitted privileged action to completion + * A submitted privileged action runs to completion */ - public void testSubmitPrivilegedAction() throws Throwable { - Policy savedPolicy = null; - try { - savedPolicy = Policy.getPolicy(); - AdjustablePolicy policy = new AdjustablePolicy(); - policy.addPermission(new RuntimePermission("getContextClassLoader")); - policy.addPermission(new RuntimePermission("setContextClassLoader")); - Policy.setPolicy(policy); - } catch (AccessControlException ok) { - return; - } - try { + public void testSubmitPrivilegedAction() throws Exception { + final Callable callable = Executors.callable(new PrivilegedAction() { + public Object run() { return TEST_STRING; }}); + Runnable r = new CheckedRunnable() { + public void realRun() throws Exception { ExecutorService e = new ForkJoinPool(1); - Future future = e.submit(Executors.callable(new PrivilegedAction() { - public Object run() { - return TEST_STRING; - }})); + try { + Future future = e.submit(callable); + assertSame(TEST_STRING, future.get()); + } finally { + joinPool(e); + } + }}; - Object result = future.get(); - assertSame(TEST_STRING, result); - } - finally { - Policy.setPolicy(savedPolicy); - } + runWithPermissions(r, new RuntimePermission("modifyThread")); } /** - * A submitted a privileged exception action runs to completion + * A submitted privileged exception action runs to completion */ - public void testSubmitPrivilegedExceptionAction() throws Throwable { - Policy savedPolicy = null; - try { - savedPolicy = Policy.getPolicy(); - AdjustablePolicy policy = new AdjustablePolicy(); - policy.addPermission(new RuntimePermission("getContextClassLoader")); - policy.addPermission(new RuntimePermission("setContextClassLoader")); - Policy.setPolicy(policy); - } catch (AccessControlException ok) { - return; - } - - try { + public void testSubmitPrivilegedExceptionAction() throws Exception { + final Callable callable = + Executors.callable(new PrivilegedExceptionAction() { + public Object run() { return TEST_STRING; }}); + Runnable r = new CheckedRunnable() { + public void realRun() throws Exception { ExecutorService e = new ForkJoinPool(1); - Future future = e.submit(Executors.callable(new PrivilegedExceptionAction() { - public Object run() { - return TEST_STRING; - }})); + try { + Future future = e.submit(callable); + assertSame(TEST_STRING, future.get()); + } finally { + joinPool(e); + } + }}; - Object result = future.get(); - assertSame(TEST_STRING, result); - } - finally { - Policy.setPolicy(savedPolicy); - } + runWithPermissions(r, new RuntimePermission("modifyThread")); } /** * A submitted failed privileged exception action reports exception */ - public void testSubmitFailedPrivilegedExceptionAction() throws Throwable { - Policy savedPolicy = null; - try { - savedPolicy = Policy.getPolicy(); - AdjustablePolicy policy = new AdjustablePolicy(); - policy.addPermission(new RuntimePermission("getContextClassLoader")); - policy.addPermission(new RuntimePermission("setContextClassLoader")); - Policy.setPolicy(policy); - } catch (AccessControlException ok) { - return; - } - - - try { + public void testSubmitFailedPrivilegedExceptionAction() throws Exception { + final Callable callable = + Executors.callable(new PrivilegedExceptionAction() { + public Object run() { throw new IndexOutOfBoundsException(); }}); + Runnable r = new CheckedRunnable() { + public void realRun() throws Exception { ExecutorService e = new ForkJoinPool(1); - Future future = e.submit(Executors.callable(new PrivilegedExceptionAction() { - public Object run() throws Exception { - throw new IndexOutOfBoundsException(); - }})); + try { + Future future = e.submit(callable); + try { + future.get(); + shouldThrow(); + } catch (ExecutionException success) { + assertTrue(success.getCause() instanceof IndexOutOfBoundsException); + } + } finally { + joinPool(e); + } + }}; - Object result = future.get(); - shouldThrow(); - } catch (ExecutionException success) { - assertTrue(success.getCause() instanceof IndexOutOfBoundsException); - } finally { - Policy.setPolicy(savedPolicy); - } + runWithPermissions(r, new RuntimePermission("modifyThread")); } /** * execute(null runnable) throws NullPointerException */ public void testExecuteNullRunnable() { + ExecutorService e = new ForkJoinPool(1); try { - ExecutorService e = new ForkJoinPool(1); - TrackedShortRunnable task = null; - Future future = e.submit(task); + Future future = e.submit((Runnable) null); shouldThrow(); - } catch (NullPointerException success) {} + } catch (NullPointerException success) { + } finally { + joinPool(e); + } } - /** * submit(null callable) throws NullPointerException */ public void testSubmitNullCallable() { + ExecutorService e = new ForkJoinPool(1); try { - ExecutorService e = new ForkJoinPool(1); - StringTask t = null; - Future future = e.submit(t); + Future future = e.submit((Callable) null); shouldThrow(); - } catch (NullPointerException success) {} + } catch (NullPointerException success) { + } finally { + joinPool(e); + } } - /** - * Blocking on submit(callable) throws InterruptedException if - * caller interrupted. + * submit(callable).get() throws InterruptedException if interrupted */ public void testInterruptedSubmit() throws InterruptedException { - final ForkJoinPool p = new ForkJoinPool(1); - - Thread t = new Thread(new CheckedInterruptedRunnable() { - public void realRun() throws Throwable { - p.submit(new CheckedCallable() { - public Object realCall() throws Throwable { - try { - Thread.sleep(MEDIUM_DELAY_MS); - } catch (InterruptedException ok) { - } - return null; - }}).get(); - }}); - - t.start(); - Thread.sleep(SHORT_DELAY_MS); - t.interrupt(); - t.join(); - p.shutdownNow(); - joinPool(p); + final CountDownLatch submitted = new CountDownLatch(1); + final CountDownLatch quittingTime = new CountDownLatch(1); + final ExecutorService p = new ForkJoinPool(1); + final Callable awaiter = new CheckedCallable() { + public Void realCall() throws InterruptedException { + assertTrue(quittingTime.await(MEDIUM_DELAY_MS, MILLISECONDS)); + return null; + }}; + try { + Thread t = new Thread(new CheckedInterruptedRunnable() { + public void realRun() throws Exception { + Future future = p.submit(awaiter); + submitted.countDown(); + future.get(); + }}); + t.start(); + assertTrue(submitted.await(MEDIUM_DELAY_MS, MILLISECONDS)); + t.interrupt(); + t.join(); + } finally { + quittingTime.countDown(); + joinPool(p); + } } /** @@ -563,16 +609,14 @@ public class ForkJoinPoolTest extends JS ForkJoinPool p = new ForkJoinPool(1); try { p.submit(new Callable() { - public Object call() { - int i = 5/0; - return Boolean.TRUE; - }}).get(); + public Object call() { throw new ArithmeticException(); }}) + .get(); shouldThrow(); } catch (ExecutionException success) { assertTrue(success.getCause() instanceof ArithmeticException); + } finally { + joinPool(p); } - - joinPool(p); } /** @@ -754,14 +798,13 @@ public class ForkJoinPoolTest extends JS } } - /** * timed invokeAny(null) throws NullPointerException */ public void testTimedInvokeAny1() throws Throwable { ExecutorService e = new ForkJoinPool(1); try { - e.invokeAny(null, MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS); + e.invokeAny(null, MEDIUM_DELAY_MS, MILLISECONDS); shouldThrow(); } catch (NullPointerException success) { } finally { @@ -792,7 +835,7 @@ public class ForkJoinPoolTest extends JS ExecutorService e = new ForkJoinPool(1); try { e.invokeAny(new ArrayList>(), - MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS); + MEDIUM_DELAY_MS, MILLISECONDS); shouldThrow(); } catch (IllegalArgumentException success) { } finally { @@ -810,7 +853,7 @@ public class ForkJoinPoolTest extends JS l.add(latchAwaitingStringTask(latch)); l.add(null); try { - e.invokeAny(l, MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS); + e.invokeAny(l, MEDIUM_DELAY_MS, MILLISECONDS); shouldThrow(); } catch (NullPointerException success) { } finally { @@ -827,7 +870,7 @@ public class ForkJoinPoolTest extends JS List> l = new ArrayList>(); l.add(new NPETask()); try { - e.invokeAny(l, MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS); + e.invokeAny(l, MEDIUM_DELAY_MS, MILLISECONDS); shouldThrow(); } catch (ExecutionException success) { assertTrue(success.getCause() instanceof NullPointerException); @@ -845,7 +888,7 @@ public class ForkJoinPoolTest extends JS List> l = new ArrayList>(); l.add(new StringTask()); l.add(new StringTask()); - String result = e.invokeAny(l, MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS); + String result = e.invokeAny(l, MEDIUM_DELAY_MS, MILLISECONDS); assertSame(TEST_STRING, result); } finally { joinPool(e); @@ -858,7 +901,7 @@ public class ForkJoinPoolTest extends JS public void testTimedInvokeAll1() throws Throwable { ExecutorService e = new ForkJoinPool(1); try { - e.invokeAll(null, MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS); + e.invokeAll(null, MEDIUM_DELAY_MS, MILLISECONDS); shouldThrow(); } catch (NullPointerException success) { } finally { @@ -890,7 +933,7 @@ public class ForkJoinPoolTest extends JS try { List> r = e.invokeAll(new ArrayList>(), - MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS); + MEDIUM_DELAY_MS, MILLISECONDS); assertTrue(r.isEmpty()); } finally { joinPool(e); @@ -906,7 +949,7 @@ public class ForkJoinPoolTest extends JS l.add(new StringTask()); l.add(null); try { - e.invokeAll(l, MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS); + e.invokeAll(l, MEDIUM_DELAY_MS, MILLISECONDS); shouldThrow(); } catch (NullPointerException success) { } finally { @@ -922,7 +965,7 @@ public class ForkJoinPoolTest extends JS List> l = new ArrayList>(); l.add(new NPETask()); List> futures - = e.invokeAll(l, MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS); + = e.invokeAll(l, MEDIUM_DELAY_MS, MILLISECONDS); assertEquals(1, futures.size()); try { futures.get(0).get(); @@ -944,7 +987,7 @@ public class ForkJoinPoolTest extends JS l.add(new StringTask()); l.add(new StringTask()); List> futures - = e.invokeAll(l, MEDIUM_DELAY_MS, TimeUnit.MILLISECONDS); + = e.invokeAll(l, LONG_DELAY_MS, MILLISECONDS); assertEquals(2, futures.size()); for (Future future : futures) assertSame(TEST_STRING, future.get());