--- jsr166/src/test/tck/ScheduledExecutorTest.java 2017/03/28 23:21:24 1.90 +++ jsr166/src/test/tck/ScheduledExecutorTest.java 2017/05/29 22:44:27 1.94 @@ -11,6 +11,8 @@ import static java.util.concurrent.TimeU import static java.util.concurrent.TimeUnit.SECONDS; import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.concurrent.BlockingQueue; @@ -73,7 +75,7 @@ public class ScheduledExecutorTest exten Future f = p.schedule(task, timeoutMillis(), MILLISECONDS); assertSame(Boolean.TRUE, f.get()); assertTrue(millisElapsedSince(startTime) >= timeoutMillis()); - assertTrue(done.await(0L, MILLISECONDS)); + assertEquals(0L, done.getCount()); } } @@ -241,8 +243,8 @@ public class ScheduledExecutorTest exten final ScheduledThreadPoolExecutor p = new ScheduledThreadPoolExecutor(1); try (PoolCleaner cleaner = cleaner(p)) { try { - TrackedCallable callable = null; - Future f = p.schedule(callable, SHORT_DELAY_MS, MILLISECONDS); + Future f = p.schedule((Callable)null, + randomTimeout(), randomTimeUnit()); shouldThrow(); } catch (NullPointerException success) {} } @@ -257,7 +259,7 @@ public class ScheduledExecutorTest exten try { p.shutdown(); p.schedule(new NoOpRunnable(), - MEDIUM_DELAY_MS, MILLISECONDS); + randomTimeout(), randomTimeUnit()); shouldThrow(); } catch (RejectedExecutionException success) { } catch (SecurityException ok) {} @@ -273,7 +275,7 @@ public class ScheduledExecutorTest exten try { p.shutdown(); p.schedule(new NoOpCallable(), - MEDIUM_DELAY_MS, MILLISECONDS); + randomTimeout(), randomTimeUnit()); shouldThrow(); } catch (RejectedExecutionException success) { } catch (SecurityException ok) {} @@ -289,7 +291,7 @@ public class ScheduledExecutorTest exten try { p.shutdown(); p.schedule(new NoOpCallable(), - MEDIUM_DELAY_MS, MILLISECONDS); + randomTimeout(), randomTimeUnit()); shouldThrow(); } catch (RejectedExecutionException success) { } catch (SecurityException ok) {} @@ -746,11 +748,13 @@ public class ScheduledExecutorTest exten * - setContinueExistingPeriodicTasksAfterShutdownPolicy */ public void testShutdown_cancellation() throws Exception { - final int poolSize = 6; + final int poolSize = 4; final ScheduledThreadPoolExecutor p = new ScheduledThreadPoolExecutor(poolSize); final BlockingQueue q = p.getQueue(); final ThreadLocalRandom rnd = ThreadLocalRandom.current(); + final long delay = rnd.nextInt(2); + final int rounds = rnd.nextInt(1, 3); final boolean effectiveDelayedPolicy; final boolean effectivePeriodicPolicy; final boolean effectiveRemovePolicy; @@ -816,29 +820,25 @@ public class ScheduledExecutorTest exten List> periodics = new ArrayList<>(); immediates.add(p.submit(task)); - delayeds.add(p.schedule(task, 1, MILLISECONDS)); - for (int rounds : new int[] { 1, 2 }) { - periodics.add(p.scheduleAtFixedRate( - new PeriodicTask(rounds), 1, 1, MILLISECONDS)); - periodics.add(p.scheduleWithFixedDelay( - new PeriodicTask(rounds), 1, 1, MILLISECONDS)); - } + delayeds.add(p.schedule(task, delay, MILLISECONDS)); + periodics.add(p.scheduleAtFixedRate( + new PeriodicTask(rounds), delay, 1, MILLISECONDS)); + periodics.add(p.scheduleWithFixedDelay( + new PeriodicTask(rounds), delay, 1, MILLISECONDS)); await(poolBlocked); assertEquals(poolSize, ran.get()); + assertEquals(poolSize, p.getActiveCount()); assertTrue(q.isEmpty()); // Add second wave of tasks. immediates.add(p.submit(task)); - long delay_ms = effectiveDelayedPolicy ? 1 : LONG_DELAY_MS; - delayeds.add(p.schedule(task, delay_ms, MILLISECONDS)); - for (int rounds : new int[] { 1, 2 }) { - periodics.add(p.scheduleAtFixedRate( - new PeriodicTask(rounds), 1, 1, MILLISECONDS)); - periodics.add(p.scheduleWithFixedDelay( - new PeriodicTask(rounds), 1, 1, MILLISECONDS)); - } + delayeds.add(p.schedule(task, effectiveDelayedPolicy ? delay : LONG_DELAY_MS, MILLISECONDS)); + periodics.add(p.scheduleAtFixedRate( + new PeriodicTask(rounds), delay, 1, MILLISECONDS)); + periodics.add(p.scheduleWithFixedDelay( + new PeriodicTask(rounds), delay, 1, MILLISECONDS)); assertEquals(poolSize, q.size()); assertEquals(poolSize, ran.get()); @@ -868,7 +868,7 @@ public class ScheduledExecutorTest exten assertTrue(!effectiveDelayedPolicy ^ q.contains(delayeds.get(1))); assertTrue(!effectivePeriodicPolicy - ^ q.containsAll(periodics.subList(4, 8))); + ^ q.containsAll(periodics.subList(2, 4))); immediates.forEach(f -> assertFalse(f.isDone())); @@ -878,18 +878,18 @@ public class ScheduledExecutorTest exten else assertTrue(delayeds.get(1).isCancelled()); - if (testImplementationDetails) { - if (effectivePeriodicPolicy) - periodics.forEach( - f -> { - assertFalse(f.isDone()); - if (!periodicTasksContinue) - assertTrue(f.cancel(false)); - }); - else { - periodics.subList(0, 4).forEach(f -> assertFalse(f.isDone())); - periodics.subList(4, 8).forEach(f -> assertTrue(f.isCancelled())); - } + if (effectivePeriodicPolicy) + periodics.forEach( + f -> { + assertFalse(f.isDone()); + if (!periodicTasksContinue) { + assertTrue(f.cancel(false)); + assertTrue(f.isCancelled()); + } + }); + else { + periodics.subList(0, 2).forEach(f -> assertFalse(f.isDone())); + periodics.subList(2, 4).forEach(f -> assertTrue(f.isCancelled())); } unblock.countDown(); // Release all pool threads @@ -925,7 +925,7 @@ public class ScheduledExecutorTest exten assertEquals(poolSize + 1 + (effectiveDelayedPolicy ? 1 : 0) - + (periodicTasksContinue ? 4 : 0), + + (periodicTasksContinue ? 2 : 0), ran.get()); } @@ -966,7 +966,7 @@ public class ScheduledExecutorTest exten } /** - * invokeAny(null) throws NPE + * invokeAny(null) throws NullPointerException */ public void testInvokeAny1() throws Exception { final ExecutorService e = new ScheduledThreadPoolExecutor(2); @@ -979,7 +979,7 @@ public class ScheduledExecutorTest exten } /** - * invokeAny(empty collection) throws IAE + * invokeAny(empty collection) throws IllegalArgumentException */ public void testInvokeAny2() throws Exception { final ExecutorService e = new ScheduledThreadPoolExecutor(2); @@ -992,7 +992,7 @@ public class ScheduledExecutorTest exten } /** - * invokeAny(c) throws NPE if c has null elements + * invokeAny(c) throws NullPointerException if c has null elements */ public void testInvokeAny3() throws Exception { CountDownLatch latch = new CountDownLatch(1); @@ -1054,12 +1054,14 @@ public class ScheduledExecutorTest exten } /** - * invokeAll(empty collection) returns empty collection + * invokeAll(empty collection) returns empty list */ public void testInvokeAll2() throws Exception { final ExecutorService e = new ScheduledThreadPoolExecutor(2); + final Collection> emptyCollection + = Collections.emptyList(); try (PoolCleaner cleaner = cleaner(e)) { - List> r = e.invokeAll(new ArrayList>()); + List> r = e.invokeAll(emptyCollection); assertTrue(r.isEmpty()); } } @@ -1122,14 +1124,14 @@ public class ScheduledExecutorTest exten final ExecutorService e = new ScheduledThreadPoolExecutor(2); try (PoolCleaner cleaner = cleaner(e)) { try { - e.invokeAny(null, MEDIUM_DELAY_MS, MILLISECONDS); + e.invokeAny(null, randomTimeout(), randomTimeUnit()); shouldThrow(); } catch (NullPointerException success) {} } } /** - * timed invokeAny(,,null) throws NPE + * timed invokeAny(,,null) throws NullPointerException */ public void testTimedInvokeAnyNullTimeUnit() throws Exception { final ExecutorService e = new ScheduledThreadPoolExecutor(2); @@ -1137,20 +1139,22 @@ public class ScheduledExecutorTest exten List> l = new ArrayList<>(); l.add(new StringTask()); try { - e.invokeAny(l, MEDIUM_DELAY_MS, null); + e.invokeAny(l, randomTimeout(), null); shouldThrow(); } catch (NullPointerException success) {} } } /** - * timed invokeAny(empty collection) throws IAE + * timed invokeAny(empty collection) throws IllegalArgumentException */ public void testTimedInvokeAny2() throws Exception { final ExecutorService e = new ScheduledThreadPoolExecutor(2); + final Collection> emptyCollection + = Collections.emptyList(); try (PoolCleaner cleaner = cleaner(e)) { try { - e.invokeAny(new ArrayList>(), MEDIUM_DELAY_MS, MILLISECONDS); + e.invokeAny(emptyCollection, randomTimeout(), randomTimeUnit()); shouldThrow(); } catch (IllegalArgumentException success) {} } @@ -1167,7 +1171,7 @@ public class ScheduledExecutorTest exten l.add(latchAwaitingStringTask(latch)); l.add(null); try { - e.invokeAny(l, MEDIUM_DELAY_MS, MILLISECONDS); + e.invokeAny(l, randomTimeout(), randomTimeUnit()); shouldThrow(); } catch (NullPointerException success) {} latch.countDown(); @@ -1216,7 +1220,7 @@ public class ScheduledExecutorTest exten final ExecutorService e = new ScheduledThreadPoolExecutor(2); try (PoolCleaner cleaner = cleaner(e)) { try { - e.invokeAll(null, MEDIUM_DELAY_MS, MILLISECONDS); + e.invokeAll(null, randomTimeout(), randomTimeUnit()); shouldThrow(); } catch (NullPointerException success) {} } @@ -1231,20 +1235,22 @@ public class ScheduledExecutorTest exten List> l = new ArrayList<>(); l.add(new StringTask()); try { - e.invokeAll(l, MEDIUM_DELAY_MS, null); + e.invokeAll(l, randomTimeout(), null); shouldThrow(); } catch (NullPointerException success) {} } } /** - * timed invokeAll(empty collection) returns empty collection + * timed invokeAll(empty collection) returns empty list */ public void testTimedInvokeAll2() throws Exception { final ExecutorService e = new ScheduledThreadPoolExecutor(2); + final Collection> emptyCollection + = Collections.emptyList(); try (PoolCleaner cleaner = cleaner(e)) { - List> r = e.invokeAll(new ArrayList>(), - MEDIUM_DELAY_MS, MILLISECONDS); + List> r = + e.invokeAll(emptyCollection, randomTimeout(), randomTimeUnit()); assertTrue(r.isEmpty()); } } @@ -1259,7 +1265,7 @@ public class ScheduledExecutorTest exten l.add(new StringTask()); l.add(null); try { - e.invokeAll(l, MEDIUM_DELAY_MS, MILLISECONDS); + e.invokeAll(l, randomTimeout(), randomTimeUnit()); shouldThrow(); } catch (NullPointerException success) {} }