18f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle/* 28f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Written by Doug Lea with assistance from members of JCP JSR-166 38f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Expert Group and released to the public domain, as explained at 48f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * http://creativecommons.org/publicdomain/zero/1.0/ 58f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Other contributors include Andrew Wright, Jeffrey Hayes, 68f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Pat Fisher, Mike Judd. 78f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 88f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 98f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravlepackage jsr166; 108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravleimport static java.util.concurrent.TimeUnit.MILLISECONDS; 128e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath 138e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamathimport java.util.ArrayList; 148e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamathimport java.util.List; 158e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamathimport java.util.concurrent.BlockingQueue; 168e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamathimport java.util.concurrent.Callable; 178e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamathimport java.util.concurrent.CountDownLatch; 188e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamathimport java.util.concurrent.ExecutionException; 198e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamathimport java.util.concurrent.Executors; 208e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamathimport java.util.concurrent.ExecutorService; 218e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamathimport java.util.concurrent.Future; 228e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamathimport java.util.concurrent.RejectedExecutionException; 238e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamathimport java.util.concurrent.ScheduledFuture; 248e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamathimport java.util.concurrent.ScheduledThreadPoolExecutor; 258e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamathimport java.util.concurrent.ThreadFactory; 268e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamathimport java.util.concurrent.ThreadPoolExecutor; 278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravleimport java.util.concurrent.atomic.AtomicInteger; 288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 298e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamathimport junit.framework.Test; 308e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamathimport junit.framework.TestSuite; 318e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath 328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravlepublic class ScheduledExecutorTest extends JSR166TestCase { 338e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath // android-note: Removed because the CTS runner does a bad job of 348e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath // retrying tests that have suite() declarations. 358e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath // 368e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath // public static void main(String[] args) { 378e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath // main(suite(), args); 388e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath // } 398e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath // public static Test suite() { 408e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath // return new TestSuite(...); 418e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath // } 428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * execute successfully executes a runnable 458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testExecute() throws InterruptedException { 478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ScheduledThreadPoolExecutor p = new ScheduledThreadPoolExecutor(1); 488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final CountDownLatch done = new CountDownLatch(1); 498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final Runnable task = new CheckedRunnable() { 508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void realRun() { 518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle done.countDown(); 528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle p.execute(task); 558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(done.await(SMALL_DELAY_MS, MILLISECONDS)); 568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(p); 588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * delayed schedule of callable successfully executes after delay 638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testSchedule1() throws Exception { 658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ScheduledThreadPoolExecutor p = new ScheduledThreadPoolExecutor(1); 668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final long startTime = System.nanoTime(); 678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final CountDownLatch done = new CountDownLatch(1); 688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Callable task = new CheckedCallable<Boolean>() { 708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public Boolean realCall() { 718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle done.countDown(); 728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(millisElapsedSince(startTime) >= timeoutMillis()); 738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle return Boolean.TRUE; 748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Future f = p.schedule(task, timeoutMillis(), MILLISECONDS); 768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(Boolean.TRUE, f.get()); 778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(millisElapsedSince(startTime) >= timeoutMillis()); 788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(done.await(0L, MILLISECONDS)); 798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(p); 818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * delayed schedule of runnable successfully executes after delay 868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testSchedule3() throws Exception { 888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ScheduledThreadPoolExecutor p = new ScheduledThreadPoolExecutor(1); 898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final long startTime = System.nanoTime(); 908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final CountDownLatch done = new CountDownLatch(1); 918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Runnable task = new CheckedRunnable() { 938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void realRun() { 948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle done.countDown(); 958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(millisElapsedSince(startTime) >= timeoutMillis()); 968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Future f = p.schedule(task, timeoutMillis(), MILLISECONDS); 988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle await(done); 998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertNull(f.get(LONG_DELAY_MS, MILLISECONDS)); 1008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(millisElapsedSince(startTime) >= timeoutMillis()); 1018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 1028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(p); 1038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 1048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 1058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 1068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 1078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * scheduleAtFixedRate executes runnable after given initial delay 1088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 1098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testSchedule4() throws Exception { 1108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ScheduledThreadPoolExecutor p = new ScheduledThreadPoolExecutor(1); 1118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final long startTime = System.nanoTime(); 1128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final CountDownLatch done = new CountDownLatch(1); 1138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 1148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Runnable task = new CheckedRunnable() { 1158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void realRun() { 1168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle done.countDown(); 1178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(millisElapsedSince(startTime) >= timeoutMillis()); 1188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 1198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ScheduledFuture f = 1208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle p.scheduleAtFixedRate(task, timeoutMillis(), 1218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle LONG_DELAY_MS, MILLISECONDS); 1228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle await(done); 1238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(millisElapsedSince(startTime) >= timeoutMillis()); 1248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle f.cancel(true); 1258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 1268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(p); 1278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 1288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 1298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 1308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 1318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * scheduleWithFixedDelay executes runnable after given initial delay 1328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 1338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testSchedule5() throws Exception { 1348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ScheduledThreadPoolExecutor p = new ScheduledThreadPoolExecutor(1); 1358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final long startTime = System.nanoTime(); 1368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final CountDownLatch done = new CountDownLatch(1); 1378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 1388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Runnable task = new CheckedRunnable() { 1398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void realRun() { 1408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle done.countDown(); 1418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(millisElapsedSince(startTime) >= timeoutMillis()); 1428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 1438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ScheduledFuture f = 1448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle p.scheduleWithFixedDelay(task, timeoutMillis(), 1458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle LONG_DELAY_MS, MILLISECONDS); 1468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle await(done); 1478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(millisElapsedSince(startTime) >= timeoutMillis()); 1488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle f.cancel(true); 1498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 1508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(p); 1518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 1528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 1538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 1548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle static class RunnableCounter implements Runnable { 1558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle AtomicInteger count = new AtomicInteger(0); 1568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void run() { count.getAndIncrement(); } 1578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 1588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 1598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 1608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * scheduleAtFixedRate executes series of tasks at given rate 1618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 1628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testFixedRateSequence() throws InterruptedException { 1638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ScheduledThreadPoolExecutor p = new ScheduledThreadPoolExecutor(1); 1648e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath try { 1658e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath for (int delay = 1; delay <= LONG_DELAY_MS; delay *= 3) { 1668e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath long startTime = System.nanoTime(); 1678e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath int cycles = 10; 1688e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath final CountDownLatch done = new CountDownLatch(cycles); 1698e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath Runnable task = new CheckedRunnable() { 1708e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath public void realRun() { done.countDown(); }}; 1718e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath ScheduledFuture h = 1728e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath p.scheduleAtFixedRate(task, 0, delay, MILLISECONDS); 1738e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath done.await(); 1748e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath h.cancel(true); 1758e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath double normalizedTime = 1768e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath (double) millisElapsedSince(startTime) / delay; 1778e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath if (normalizedTime >= cycles - 1 && 1788e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath normalizedTime <= cycles) 1798e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath return; 1808e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath } 1818e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath throw new AssertionError("unexpected execution rate"); 1828e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath } finally { 1838e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath joinPool(p); 1848e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath } 1858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 1868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 1878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 1888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * scheduleWithFixedDelay executes series of tasks with given period 1898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 1908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testFixedDelaySequence() throws InterruptedException { 1918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ScheduledThreadPoolExecutor p = new ScheduledThreadPoolExecutor(1); 1928e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath try { 1938e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath for (int delay = 1; delay <= LONG_DELAY_MS; delay *= 3) { 1948e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath long startTime = System.nanoTime(); 1958e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath int cycles = 10; 1968e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath final CountDownLatch done = new CountDownLatch(cycles); 1978e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath Runnable task = new CheckedRunnable() { 1988e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath public void realRun() { done.countDown(); }}; 1998e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath ScheduledFuture h = 2008e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath p.scheduleWithFixedDelay(task, 0, delay, MILLISECONDS); 2018e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath done.await(); 2028e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath h.cancel(true); 2038e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath double normalizedTime = 2048e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath (double) millisElapsedSince(startTime) / delay; 2058e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath if (normalizedTime >= cycles - 1 && 2068e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath normalizedTime <= cycles) 2078e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath return; 2088e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath } 2098e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath throw new AssertionError("unexpected execution rate"); 2108e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath } finally { 2118e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath joinPool(p); 2128e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath } 2138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 2148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 2158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 2168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * execute(null) throws NPE 2178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 2188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testExecuteNull() throws InterruptedException { 2198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ScheduledThreadPoolExecutor se = null; 2208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 2218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle se = new ScheduledThreadPoolExecutor(1); 2228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle se.execute(null); 2238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 2248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (NullPointerException success) {} 2258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 2268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(se); 2278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 2288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 2298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 2308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * schedule(null) throws NPE 2318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 2328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testScheduleNull() throws InterruptedException { 2338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ScheduledThreadPoolExecutor se = new ScheduledThreadPoolExecutor(1); 2348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 2358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle TrackedCallable callable = null; 2368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Future f = se.schedule(callable, SHORT_DELAY_MS, MILLISECONDS); 2378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 2388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (NullPointerException success) {} 2398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(se); 2408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 2418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 2428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 2438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * execute throws RejectedExecutionException if shutdown 2448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 2458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testSchedule1_RejectedExecutionException() throws InterruptedException { 2468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ScheduledThreadPoolExecutor se = new ScheduledThreadPoolExecutor(1); 2478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 2488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle se.shutdown(); 2498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle se.schedule(new NoOpRunnable(), 2508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle MEDIUM_DELAY_MS, MILLISECONDS); 2518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 2528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (RejectedExecutionException success) { 2538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (SecurityException ok) { 2548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 2558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 2568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(se); 2578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 2588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 2598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 2608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * schedule throws RejectedExecutionException if shutdown 2618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 2628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testSchedule2_RejectedExecutionException() throws InterruptedException { 2638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ScheduledThreadPoolExecutor se = new ScheduledThreadPoolExecutor(1); 2648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 2658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle se.shutdown(); 2668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle se.schedule(new NoOpCallable(), 2678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle MEDIUM_DELAY_MS, MILLISECONDS); 2688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 2698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (RejectedExecutionException success) { 2708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (SecurityException ok) { 2718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 2728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(se); 2738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 2748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 2758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 2768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * schedule callable throws RejectedExecutionException if shutdown 2778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 2788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testSchedule3_RejectedExecutionException() throws InterruptedException { 2798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ScheduledThreadPoolExecutor se = new ScheduledThreadPoolExecutor(1); 2808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 2818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle se.shutdown(); 2828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle se.schedule(new NoOpCallable(), 2838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle MEDIUM_DELAY_MS, MILLISECONDS); 2848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 2858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (RejectedExecutionException success) { 2868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (SecurityException ok) { 2878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 2888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(se); 2898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 2908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 2918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 2928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * scheduleAtFixedRate throws RejectedExecutionException if shutdown 2938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 2948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testScheduleAtFixedRate1_RejectedExecutionException() throws InterruptedException { 2958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ScheduledThreadPoolExecutor se = new ScheduledThreadPoolExecutor(1); 2968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 2978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle se.shutdown(); 2988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle se.scheduleAtFixedRate(new NoOpRunnable(), 2998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle MEDIUM_DELAY_MS, MEDIUM_DELAY_MS, MILLISECONDS); 3008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 3018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (RejectedExecutionException success) { 3028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (SecurityException ok) { 3038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 3048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(se); 3058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 3068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 3078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 3088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * scheduleWithFixedDelay throws RejectedExecutionException if shutdown 3098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 3108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testScheduleWithFixedDelay1_RejectedExecutionException() throws InterruptedException { 3118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ScheduledThreadPoolExecutor se = new ScheduledThreadPoolExecutor(1); 3128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 3138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle se.shutdown(); 3148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle se.scheduleWithFixedDelay(new NoOpRunnable(), 3158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle MEDIUM_DELAY_MS, MEDIUM_DELAY_MS, MILLISECONDS); 3168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 3178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (RejectedExecutionException success) { 3188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (SecurityException ok) { 3198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 3208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(se); 3218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 3228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 3238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 3248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * getActiveCount increases but doesn't overestimate, when a 3258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * thread becomes active 3268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 3278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testGetActiveCount() throws InterruptedException { 3288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final ScheduledThreadPoolExecutor p = new ScheduledThreadPoolExecutor(2); 3298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final CountDownLatch threadStarted = new CountDownLatch(1); 3308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final CountDownLatch done = new CountDownLatch(1); 3318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 3328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(0, p.getActiveCount()); 3338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle p.execute(new CheckedRunnable() { 3348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void realRun() throws InterruptedException { 3358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle threadStarted.countDown(); 3368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(1, p.getActiveCount()); 3378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle done.await(); 3388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}); 3398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(threadStarted.await(SMALL_DELAY_MS, MILLISECONDS)); 3408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(1, p.getActiveCount()); 3418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 3428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle done.countDown(); 3438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(p); 3448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 3458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 3468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 3478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 3488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * getCompletedTaskCount increases, but doesn't overestimate, 3498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * when tasks complete 3508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 3518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testGetCompletedTaskCount() throws InterruptedException { 3528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final ThreadPoolExecutor p = new ScheduledThreadPoolExecutor(2); 3538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final CountDownLatch threadStarted = new CountDownLatch(1); 3548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final CountDownLatch threadProceed = new CountDownLatch(1); 3558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final CountDownLatch threadDone = new CountDownLatch(1); 3568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 3578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(0, p.getCompletedTaskCount()); 3588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle p.execute(new CheckedRunnable() { 3598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void realRun() throws InterruptedException { 3608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle threadStarted.countDown(); 3618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(0, p.getCompletedTaskCount()); 3628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle threadProceed.await(); 3638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle threadDone.countDown(); 3648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}); 3658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle await(threadStarted); 3668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(0, p.getCompletedTaskCount()); 3678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle threadProceed.countDown(); 3688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle threadDone.await(); 3698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle long startTime = System.nanoTime(); 3708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle while (p.getCompletedTaskCount() != 1) { 3718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle if (millisElapsedSince(startTime) > LONG_DELAY_MS) 3728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle fail("timed out"); 3738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Thread.yield(); 3748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 3758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 3768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(p); 3778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 3788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 3798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 3808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 3818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * getCorePoolSize returns size given in constructor if not otherwise set 3828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 3838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testGetCorePoolSize() throws InterruptedException { 3848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ThreadPoolExecutor p = new ScheduledThreadPoolExecutor(1); 3858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(1, p.getCorePoolSize()); 3868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(p); 3878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 3888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 3898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 3908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * getLargestPoolSize increases, but doesn't overestimate, when 3918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * multiple threads active 3928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 3938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testGetLargestPoolSize() throws InterruptedException { 3948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final int THREADS = 3; 3958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final ThreadPoolExecutor p = new ScheduledThreadPoolExecutor(THREADS); 3968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final CountDownLatch threadsStarted = new CountDownLatch(THREADS); 3978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final CountDownLatch done = new CountDownLatch(1); 3988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 3998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(0, p.getLargestPoolSize()); 4008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < THREADS; i++) 4018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle p.execute(new CheckedRunnable() { 4028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void realRun() throws InterruptedException { 4038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle threadsStarted.countDown(); 4048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle done.await(); 4058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(THREADS, p.getLargestPoolSize()); 4068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}); 4078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(threadsStarted.await(SMALL_DELAY_MS, MILLISECONDS)); 4088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(THREADS, p.getLargestPoolSize()); 4098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 4108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle done.countDown(); 4118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(p); 4128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(THREADS, p.getLargestPoolSize()); 4138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 4148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 4158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 4168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 4178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * getPoolSize increases, but doesn't overestimate, when threads 4188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * become active 4198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 4208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testGetPoolSize() throws InterruptedException { 4218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final ThreadPoolExecutor p = new ScheduledThreadPoolExecutor(1); 4228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final CountDownLatch threadStarted = new CountDownLatch(1); 4238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final CountDownLatch done = new CountDownLatch(1); 4248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 4258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(0, p.getPoolSize()); 4268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle p.execute(new CheckedRunnable() { 4278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void realRun() throws InterruptedException { 4288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle threadStarted.countDown(); 4298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(1, p.getPoolSize()); 4308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle done.await(); 4318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}); 4328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(threadStarted.await(SMALL_DELAY_MS, MILLISECONDS)); 4338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(1, p.getPoolSize()); 4348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 4358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle done.countDown(); 4368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(p); 4378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 4388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 4398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 4408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 4418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * getTaskCount increases, but doesn't overestimate, when tasks 4428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * submitted 4438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 4448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testGetTaskCount() throws InterruptedException { 4458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final ThreadPoolExecutor p = new ScheduledThreadPoolExecutor(1); 4468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final CountDownLatch threadStarted = new CountDownLatch(1); 4478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final CountDownLatch done = new CountDownLatch(1); 4488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final int TASKS = 5; 4498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 4508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(0, p.getTaskCount()); 4518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < TASKS; i++) 4528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle p.execute(new CheckedRunnable() { 4538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void realRun() throws InterruptedException { 4548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle threadStarted.countDown(); 4558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle done.await(); 4568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}); 4578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(threadStarted.await(SMALL_DELAY_MS, MILLISECONDS)); 4588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(TASKS, p.getTaskCount()); 4598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 4608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle done.countDown(); 4618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(p); 4628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 4638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 4648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 4658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 4668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * getThreadFactory returns factory in constructor if not set 4678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 4688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testGetThreadFactory() throws InterruptedException { 4698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ThreadFactory tf = new SimpleThreadFactory(); 4708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ScheduledThreadPoolExecutor p = new ScheduledThreadPoolExecutor(1, tf); 4718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(tf, p.getThreadFactory()); 4728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(p); 4738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 4748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 4758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 4768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * setThreadFactory sets the thread factory returned by getThreadFactory 4778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 4788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testSetThreadFactory() throws InterruptedException { 4798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ThreadFactory tf = new SimpleThreadFactory(); 4808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ScheduledThreadPoolExecutor p = new ScheduledThreadPoolExecutor(1); 4818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle p.setThreadFactory(tf); 4828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(tf, p.getThreadFactory()); 4838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(p); 4848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 4858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 4868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 4878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * setThreadFactory(null) throws NPE 4888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 4898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testSetThreadFactoryNull() throws InterruptedException { 4908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ScheduledThreadPoolExecutor p = new ScheduledThreadPoolExecutor(1); 4918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 4928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle p.setThreadFactory(null); 4938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 4948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (NullPointerException success) { 4958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 4968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(p); 4978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 4988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 4998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 5008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 5018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * isShutdown is false before shutdown, true after 5028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 5038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testIsShutdown() { 5048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 5058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ScheduledThreadPoolExecutor p = new ScheduledThreadPoolExecutor(1); 5068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 5078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(p.isShutdown()); 5088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 5098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle finally { 5108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { p.shutdown(); } catch (SecurityException ok) { return; } 5118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 5128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(p.isShutdown()); 5138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 5148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 5158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 5168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * isTerminated is false before termination, true after 5178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 5188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testIsTerminated() throws InterruptedException { 5198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final ThreadPoolExecutor p = new ScheduledThreadPoolExecutor(1); 5208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final CountDownLatch threadStarted = new CountDownLatch(1); 5218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final CountDownLatch done = new CountDownLatch(1); 5228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(p.isTerminated()); 5238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 5248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle p.execute(new CheckedRunnable() { 5258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void realRun() throws InterruptedException { 5268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(p.isTerminated()); 5278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle threadStarted.countDown(); 5288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle done.await(); 5298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}); 5308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(threadStarted.await(SMALL_DELAY_MS, MILLISECONDS)); 5318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(p.isTerminating()); 5328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle done.countDown(); 5338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 5348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { p.shutdown(); } catch (SecurityException ok) { return; } 5358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 5368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(p.awaitTermination(LONG_DELAY_MS, MILLISECONDS)); 5378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(p.isTerminated()); 5388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 5398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 5408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 5418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * isTerminating is not true when running or when terminated 5428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 5438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testIsTerminating() throws InterruptedException { 5448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final ThreadPoolExecutor p = new ScheduledThreadPoolExecutor(1); 5458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final CountDownLatch threadStarted = new CountDownLatch(1); 5468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final CountDownLatch done = new CountDownLatch(1); 5478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 5488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(p.isTerminating()); 5498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle p.execute(new CheckedRunnable() { 5508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void realRun() throws InterruptedException { 5518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(p.isTerminating()); 5528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle threadStarted.countDown(); 5538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle done.await(); 5548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}); 5558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(threadStarted.await(SMALL_DELAY_MS, MILLISECONDS)); 5568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(p.isTerminating()); 5578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle done.countDown(); 5588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 5598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { p.shutdown(); } catch (SecurityException ok) { return; } 5608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 5618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(p.awaitTermination(LONG_DELAY_MS, MILLISECONDS)); 5628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(p.isTerminated()); 5638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(p.isTerminating()); 5648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 5658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 5668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 5678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * getQueue returns the work queue, which contains queued tasks 5688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 5698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testGetQueue() throws InterruptedException { 5708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ScheduledThreadPoolExecutor p = new ScheduledThreadPoolExecutor(1); 5718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final CountDownLatch threadStarted = new CountDownLatch(1); 5728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final CountDownLatch done = new CountDownLatch(1); 5738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 5748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ScheduledFuture[] tasks = new ScheduledFuture[5]; 5758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < tasks.length; i++) { 5768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Runnable r = new CheckedRunnable() { 5778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void realRun() throws InterruptedException { 5788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle threadStarted.countDown(); 5798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle done.await(); 5808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 5818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle tasks[i] = p.schedule(r, 1, MILLISECONDS); 5828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 5838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(threadStarted.await(SMALL_DELAY_MS, MILLISECONDS)); 5848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle BlockingQueue<Runnable> q = p.getQueue(); 5858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(q.contains(tasks[tasks.length - 1])); 5868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(q.contains(tasks[0])); 5878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 5888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle done.countDown(); 5898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(p); 5908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 5918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 5928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 5938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 5948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * remove(task) removes queued task, and fails to remove active task 5958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 5968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testRemove() throws InterruptedException { 5978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final ScheduledThreadPoolExecutor p = new ScheduledThreadPoolExecutor(1); 5988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ScheduledFuture[] tasks = new ScheduledFuture[5]; 5998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final CountDownLatch threadStarted = new CountDownLatch(1); 6008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final CountDownLatch done = new CountDownLatch(1); 6018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 6028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < tasks.length; i++) { 6038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Runnable r = new CheckedRunnable() { 6048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void realRun() throws InterruptedException { 6058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle threadStarted.countDown(); 6068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle done.await(); 6078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 6088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle tasks[i] = p.schedule(r, 1, MILLISECONDS); 6098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 6108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(threadStarted.await(SMALL_DELAY_MS, MILLISECONDS)); 6118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle BlockingQueue<Runnable> q = p.getQueue(); 6128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(p.remove((Runnable)tasks[0])); 6138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(q.contains((Runnable)tasks[4])); 6148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(q.contains((Runnable)tasks[3])); 6158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(p.remove((Runnable)tasks[4])); 6168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(p.remove((Runnable)tasks[4])); 6178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(q.contains((Runnable)tasks[4])); 6188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(q.contains((Runnable)tasks[3])); 6198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(p.remove((Runnable)tasks[3])); 6208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(q.contains((Runnable)tasks[3])); 6218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 6228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle done.countDown(); 6238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(p); 6248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 6258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 6268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 6278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 6288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * purge eventually removes cancelled tasks from the queue 6298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 6308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testPurge() throws InterruptedException { 6318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ScheduledThreadPoolExecutor p = new ScheduledThreadPoolExecutor(1); 6328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ScheduledFuture[] tasks = new ScheduledFuture[5]; 6338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < tasks.length; i++) 6348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle tasks[i] = p.schedule(new SmallPossiblyInterruptedRunnable(), 6358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle LONG_DELAY_MS, MILLISECONDS); 6368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 6378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle int max = tasks.length; 6388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle if (tasks[4].cancel(true)) --max; 6398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle if (tasks[3].cancel(true)) --max; 6408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle // There must eventually be an interference-free point at 6418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle // which purge will not fail. (At worst, when queue is empty.) 6428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle long startTime = System.nanoTime(); 6438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle do { 6448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle p.purge(); 6458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle long count = p.getTaskCount(); 6468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle if (count == max) 6478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle return; 6488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } while (millisElapsedSince(startTime) < MEDIUM_DELAY_MS); 6498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle fail("Purge failed to remove cancelled tasks"); 6508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 6518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (ScheduledFuture task : tasks) 6528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle task.cancel(true); 6538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(p); 6548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 6558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 6568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 6578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 6588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * shutdownNow returns a list containing tasks that were not run 6598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 6608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testShutdownNow() { 6618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ScheduledThreadPoolExecutor p = new ScheduledThreadPoolExecutor(1); 6628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < 5; i++) 6638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle p.schedule(new SmallPossiblyInterruptedRunnable(), 6648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle LONG_DELAY_MS, MILLISECONDS); 6658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 6668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle List<Runnable> l = p.shutdownNow(); 6678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(p.isShutdown()); 6688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(5, l.size()); 6698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (SecurityException ok) { 6708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle // Allowed in case test doesn't have privs 6718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 6728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(p); 6738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 6748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 6758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 6768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 6778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * In default setting, shutdown cancels periodic but not delayed 6788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * tasks at shutdown 6798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 6808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testShutdown1() throws InterruptedException { 6818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ScheduledThreadPoolExecutor p = new ScheduledThreadPoolExecutor(1); 6828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(p.getExecuteExistingDelayedTasksAfterShutdownPolicy()); 6838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(p.getContinueExistingPeriodicTasksAfterShutdownPolicy()); 6848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 6858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ScheduledFuture[] tasks = new ScheduledFuture[5]; 6868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < tasks.length; i++) 6878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle tasks[i] = p.schedule(new NoOpRunnable(), 6888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle SHORT_DELAY_MS, MILLISECONDS); 6898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { p.shutdown(); } catch (SecurityException ok) { return; } 6908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle BlockingQueue<Runnable> q = p.getQueue(); 6918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (ScheduledFuture task : tasks) { 6928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(task.isDone()); 6938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(task.isCancelled()); 6948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(q.contains(task)); 6958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 6968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(p.isShutdown()); 6978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(p.awaitTermination(SMALL_DELAY_MS, MILLISECONDS)); 6988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(p.isTerminated()); 6998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (ScheduledFuture task : tasks) { 7008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(task.isDone()); 7018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(task.isCancelled()); 7028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 7038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 7048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 7058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 7068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * If setExecuteExistingDelayedTasksAfterShutdownPolicy is false, 7078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * delayed tasks are cancelled at shutdown 7088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 7098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testShutdown2() throws InterruptedException { 7108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ScheduledThreadPoolExecutor p = new ScheduledThreadPoolExecutor(1); 7118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle p.setExecuteExistingDelayedTasksAfterShutdownPolicy(false); 7128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(p.getExecuteExistingDelayedTasksAfterShutdownPolicy()); 7138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(p.getContinueExistingPeriodicTasksAfterShutdownPolicy()); 7148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ScheduledFuture[] tasks = new ScheduledFuture[5]; 7158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (int i = 0; i < tasks.length; i++) 7168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle tasks[i] = p.schedule(new NoOpRunnable(), 7178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle SHORT_DELAY_MS, MILLISECONDS); 7188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle BlockingQueue q = p.getQueue(); 7198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(tasks.length, q.size()); 7208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { p.shutdown(); } catch (SecurityException ok) { return; } 7218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(p.isShutdown()); 7228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(q.isEmpty()); 7238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(p.awaitTermination(SMALL_DELAY_MS, MILLISECONDS)); 7248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(p.isTerminated()); 7258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (ScheduledFuture task : tasks) { 7268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(task.isDone()); 7278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(task.isCancelled()); 7288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 7298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 7308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 7318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 7328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * If setContinueExistingPeriodicTasksAfterShutdownPolicy is set false, 7338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * periodic tasks are cancelled at shutdown 7348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 7358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testShutdown3() throws InterruptedException { 7368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ScheduledThreadPoolExecutor p = new ScheduledThreadPoolExecutor(1); 7378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(p.getExecuteExistingDelayedTasksAfterShutdownPolicy()); 7388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(p.getContinueExistingPeriodicTasksAfterShutdownPolicy()); 7398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle p.setContinueExistingPeriodicTasksAfterShutdownPolicy(false); 7408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(p.getExecuteExistingDelayedTasksAfterShutdownPolicy()); 7418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(p.getContinueExistingPeriodicTasksAfterShutdownPolicy()); 7428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle long initialDelay = LONG_DELAY_MS; 7438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ScheduledFuture task = 7448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle p.scheduleAtFixedRate(new NoOpRunnable(), initialDelay, 7458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 5, MILLISECONDS); 7468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { p.shutdown(); } catch (SecurityException ok) { return; } 7478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(p.isShutdown()); 7488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(p.getQueue().isEmpty()); 7498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(task.isDone()); 7508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(task.isCancelled()); 7518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(p); 7528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 7538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 7548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 7558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * if setContinueExistingPeriodicTasksAfterShutdownPolicy is true, 7568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * periodic tasks are not cancelled at shutdown 7578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 7588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testShutdown4() throws InterruptedException { 7598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ScheduledThreadPoolExecutor p = new ScheduledThreadPoolExecutor(1); 7608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final CountDownLatch counter = new CountDownLatch(2); 7618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 7628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle p.setContinueExistingPeriodicTasksAfterShutdownPolicy(true); 7638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(p.getExecuteExistingDelayedTasksAfterShutdownPolicy()); 7648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(p.getContinueExistingPeriodicTasksAfterShutdownPolicy()); 7658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle final Runnable r = new CheckedRunnable() { 7668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void realRun() { 7678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle counter.countDown(); 7688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle }}; 7698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ScheduledFuture task = 7708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle p.scheduleAtFixedRate(r, 1, 1, MILLISECONDS); 7718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(task.isDone()); 7728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(task.isCancelled()); 7738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { p.shutdown(); } catch (SecurityException ok) { return; } 7748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(task.isCancelled()); 7758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(p.isTerminated()); 7768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(p.isShutdown()); 7778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(counter.await(SMALL_DELAY_MS, MILLISECONDS)); 7788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(task.isCancelled()); 7798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(task.cancel(false)); 7808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(task.isDone()); 7818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(task.isCancelled()); 7828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(p.awaitTermination(SMALL_DELAY_MS, MILLISECONDS)); 7838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(p.isTerminated()); 7848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 7858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle finally { 7868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(p); 7878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 7888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 7898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 7908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 7918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * completed submit of callable returns result 7928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 7938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testSubmitCallable() throws Exception { 7948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ExecutorService e = new ScheduledThreadPoolExecutor(2); 7958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 7968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Future<String> future = e.submit(new StringTask()); 7978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle String result = future.get(); 7988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(TEST_STRING, result); 7998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 8008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(e); 8018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 8028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 8038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 8048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 8058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * completed submit of runnable returns successfully 8068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 8078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testSubmitRunnable() throws Exception { 8088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ExecutorService e = new ScheduledThreadPoolExecutor(2); 8098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 8108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Future<?> future = e.submit(new NoOpRunnable()); 8118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle future.get(); 8128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(future.isDone()); 8138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 8148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(e); 8158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 8168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 8178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 8188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 8198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * completed submit of (runnable, result) returns result 8208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 8218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testSubmitRunnable2() throws Exception { 8228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ExecutorService e = new ScheduledThreadPoolExecutor(2); 8238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 8248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle Future<String> future = e.submit(new NoOpRunnable(), TEST_STRING); 8258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle String result = future.get(); 8268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(TEST_STRING, result); 8278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 8288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(e); 8298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 8308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 8318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 8328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 8338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * invokeAny(null) throws NPE 8348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 8358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testInvokeAny1() throws Exception { 8368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ExecutorService e = new ScheduledThreadPoolExecutor(2); 8378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 8388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle e.invokeAny(null); 8398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 8408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (NullPointerException success) { 8418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 8428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(e); 8438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 8448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 8458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 8468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 8478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * invokeAny(empty collection) throws IAE 8488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 8498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testInvokeAny2() throws Exception { 8508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ExecutorService e = new ScheduledThreadPoolExecutor(2); 8518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 8528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle e.invokeAny(new ArrayList<Callable<String>>()); 8538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 8548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (IllegalArgumentException success) { 8558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 8568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(e); 8578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 8588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 8598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 8608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 8618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * invokeAny(c) throws NPE if c has null elements 8628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 8638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testInvokeAny3() throws Exception { 8648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle CountDownLatch latch = new CountDownLatch(1); 8658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ExecutorService e = new ScheduledThreadPoolExecutor(2); 8668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle List<Callable<String>> l = new ArrayList<Callable<String>>(); 8678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle l.add(latchAwaitingStringTask(latch)); 8688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle l.add(null); 8698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 8708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle e.invokeAny(l); 8718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 8728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (NullPointerException success) { 8738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 8748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle latch.countDown(); 8758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(e); 8768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 8778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 8788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 8798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 8808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * invokeAny(c) throws ExecutionException if no task completes 8818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 8828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testInvokeAny4() throws Exception { 8838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ExecutorService e = new ScheduledThreadPoolExecutor(2); 8848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle List<Callable<String>> l = new ArrayList<Callable<String>>(); 8858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle l.add(new NPETask()); 8868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 8878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle e.invokeAny(l); 8888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 8898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (ExecutionException success) { 8908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(success.getCause() instanceof NullPointerException); 8918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 8928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(e); 8938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 8948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 8958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 8968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 8978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * invokeAny(c) returns result of some task 8988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 8998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testInvokeAny5() throws Exception { 9008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ExecutorService e = new ScheduledThreadPoolExecutor(2); 9018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 9028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle List<Callable<String>> l = new ArrayList<Callable<String>>(); 9038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle l.add(new StringTask()); 9048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle l.add(new StringTask()); 9058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle String result = e.invokeAny(l); 9068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(TEST_STRING, result); 9078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 9088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(e); 9098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 9108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 9118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 9128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 9138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * invokeAll(null) throws NPE 9148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 9158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testInvokeAll1() throws Exception { 9168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ExecutorService e = new ScheduledThreadPoolExecutor(2); 9178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 9188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle e.invokeAll(null); 9198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 9208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (NullPointerException success) { 9218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 9228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(e); 9238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 9248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 9258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 9268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 9278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * invokeAll(empty collection) returns empty collection 9288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 9298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testInvokeAll2() throws Exception { 9308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ExecutorService e = new ScheduledThreadPoolExecutor(2); 9318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 9328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle List<Future<String>> r = e.invokeAll(new ArrayList<Callable<String>>()); 9338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(r.isEmpty()); 9348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 9358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(e); 9368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 9378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 9388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 9398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 9408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * invokeAll(c) throws NPE if c has null elements 9418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 9428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testInvokeAll3() throws Exception { 9438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ExecutorService e = new ScheduledThreadPoolExecutor(2); 9448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle List<Callable<String>> l = new ArrayList<Callable<String>>(); 9458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle l.add(new StringTask()); 9468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle l.add(null); 9478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 9488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle e.invokeAll(l); 9498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 9508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (NullPointerException success) { 9518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 9528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(e); 9538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 9548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 9558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 9568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 9578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * get of invokeAll(c) throws exception on failed task 9588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 9598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testInvokeAll4() throws Exception { 9608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ExecutorService e = new ScheduledThreadPoolExecutor(2); 9618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle List<Callable<String>> l = new ArrayList<Callable<String>>(); 9628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle l.add(new NPETask()); 9638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle List<Future<String>> futures = e.invokeAll(l); 9648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(1, futures.size()); 9658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 9668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle futures.get(0).get(); 9678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 9688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (ExecutionException success) { 9698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(success.getCause() instanceof NullPointerException); 9708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 9718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(e); 9728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 9738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 9748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 9758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 9768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * invokeAll(c) returns results of all completed tasks 9778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 9788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testInvokeAll5() throws Exception { 9798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ExecutorService e = new ScheduledThreadPoolExecutor(2); 9808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 9818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle List<Callable<String>> l = new ArrayList<Callable<String>>(); 9828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle l.add(new StringTask()); 9838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle l.add(new StringTask()); 9848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle List<Future<String>> futures = e.invokeAll(l); 9858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(2, futures.size()); 9868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (Future<String> future : futures) 9878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(TEST_STRING, future.get()); 9888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 9898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(e); 9908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 9918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 9928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 9938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 9948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * timed invokeAny(null) throws NPE 9958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 9968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testTimedInvokeAny1() throws Exception { 9978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ExecutorService e = new ScheduledThreadPoolExecutor(2); 9988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 9998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle e.invokeAny(null, MEDIUM_DELAY_MS, MILLISECONDS); 10008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 10018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (NullPointerException success) { 10028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 10038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(e); 10048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 10058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 10068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 10078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 10088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * timed invokeAny(,,null) throws NPE 10098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 10108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testTimedInvokeAnyNullTimeUnit() throws Exception { 10118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ExecutorService e = new ScheduledThreadPoolExecutor(2); 10128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle List<Callable<String>> l = new ArrayList<Callable<String>>(); 10138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle l.add(new StringTask()); 10148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 10158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle e.invokeAny(l, MEDIUM_DELAY_MS, null); 10168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 10178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (NullPointerException success) { 10188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 10198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(e); 10208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 10218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 10228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 10238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 10248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * timed invokeAny(empty collection) throws IAE 10258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 10268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testTimedInvokeAny2() throws Exception { 10278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ExecutorService e = new ScheduledThreadPoolExecutor(2); 10288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 10298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle e.invokeAny(new ArrayList<Callable<String>>(), MEDIUM_DELAY_MS, MILLISECONDS); 10308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 10318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (IllegalArgumentException success) { 10328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 10338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(e); 10348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 10358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 10368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 10378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 10388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * timed invokeAny(c) throws NPE if c has null elements 10398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 10408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testTimedInvokeAny3() throws Exception { 10418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle CountDownLatch latch = new CountDownLatch(1); 10428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ExecutorService e = new ScheduledThreadPoolExecutor(2); 10438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle List<Callable<String>> l = new ArrayList<Callable<String>>(); 10448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle l.add(latchAwaitingStringTask(latch)); 10458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle l.add(null); 10468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 10478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle e.invokeAny(l, MEDIUM_DELAY_MS, MILLISECONDS); 10488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 10498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (NullPointerException success) { 10508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 10518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle latch.countDown(); 10528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(e); 10538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 10548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 10558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 10568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 10578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * timed invokeAny(c) throws ExecutionException if no task completes 10588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 10598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testTimedInvokeAny4() throws Exception { 10608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ExecutorService e = new ScheduledThreadPoolExecutor(2); 10618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle List<Callable<String>> l = new ArrayList<Callable<String>>(); 10628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle l.add(new NPETask()); 10638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 10648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle e.invokeAny(l, MEDIUM_DELAY_MS, MILLISECONDS); 10658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 10668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (ExecutionException success) { 10678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(success.getCause() instanceof NullPointerException); 10688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 10698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(e); 10708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 10718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 10728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 10738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 10748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * timed invokeAny(c) returns result of some task 10758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 10768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testTimedInvokeAny5() throws Exception { 10778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ExecutorService e = new ScheduledThreadPoolExecutor(2); 10788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 10798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle List<Callable<String>> l = new ArrayList<Callable<String>>(); 10808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle l.add(new StringTask()); 10818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle l.add(new StringTask()); 10828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle String result = e.invokeAny(l, MEDIUM_DELAY_MS, MILLISECONDS); 10838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(TEST_STRING, result); 10848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 10858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(e); 10868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 10878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 10888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 10898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 10908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * timed invokeAll(null) throws NPE 10918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 10928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testTimedInvokeAll1() throws Exception { 10938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ExecutorService e = new ScheduledThreadPoolExecutor(2); 10948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 10958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle e.invokeAll(null, MEDIUM_DELAY_MS, MILLISECONDS); 10968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 10978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (NullPointerException success) { 10988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 10998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(e); 11008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 11018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 11028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 11038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 11048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * timed invokeAll(,,null) throws NPE 11058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 11068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testTimedInvokeAllNullTimeUnit() throws Exception { 11078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ExecutorService e = new ScheduledThreadPoolExecutor(2); 11088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle List<Callable<String>> l = new ArrayList<Callable<String>>(); 11098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle l.add(new StringTask()); 11108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 11118f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle e.invokeAll(l, MEDIUM_DELAY_MS, null); 11128f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 11138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (NullPointerException success) { 11148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 11158f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(e); 11168f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 11178f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 11188f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 11198f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 11208f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * timed invokeAll(empty collection) returns empty collection 11218f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 11228f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testTimedInvokeAll2() throws Exception { 11238f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ExecutorService e = new ScheduledThreadPoolExecutor(2); 11248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 11258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle List<Future<String>> r = e.invokeAll(new ArrayList<Callable<String>>(), MEDIUM_DELAY_MS, MILLISECONDS); 11268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(r.isEmpty()); 11278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 11288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(e); 11298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 11308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 11318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 11328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 11338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * timed invokeAll(c) throws NPE if c has null elements 11348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 11358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testTimedInvokeAll3() throws Exception { 11368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ExecutorService e = new ScheduledThreadPoolExecutor(2); 11378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle List<Callable<String>> l = new ArrayList<Callable<String>>(); 11388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle l.add(new StringTask()); 11398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle l.add(null); 11408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 11418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle e.invokeAll(l, MEDIUM_DELAY_MS, MILLISECONDS); 11428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 11438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (NullPointerException success) { 11448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 11458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(e); 11468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 11478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 11488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 11498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 11508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * get of element of invokeAll(c) throws exception on failed task 11518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 11528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testTimedInvokeAll4() throws Exception { 11538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ExecutorService e = new ScheduledThreadPoolExecutor(2); 11548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle List<Callable<String>> l = new ArrayList<Callable<String>>(); 11558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle l.add(new NPETask()); 11568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle List<Future<String>> futures = 11578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle e.invokeAll(l, MEDIUM_DELAY_MS, MILLISECONDS); 11588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(1, futures.size()); 11598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 11608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle futures.get(0).get(); 11618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle shouldThrow(); 11628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } catch (ExecutionException success) { 11638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(success.getCause() instanceof NullPointerException); 11648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 11658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(e); 11668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 11678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 11688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 11698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 11708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * timed invokeAll(c) returns results of all completed tasks 11718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 11728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testTimedInvokeAll5() throws Exception { 11738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ExecutorService e = new ScheduledThreadPoolExecutor(2); 11748f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 11758f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle List<Callable<String>> l = new ArrayList<Callable<String>>(); 11768f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle l.add(new StringTask()); 11778f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle l.add(new StringTask()); 11788f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle List<Future<String>> futures = 11798f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle e.invokeAll(l, MEDIUM_DELAY_MS, MILLISECONDS); 11808f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(2, futures.size()); 11818f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (Future<String> future : futures) 11828f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertSame(TEST_STRING, future.get()); 11838f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 11848f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(e); 11858f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 11868f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 11878f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 11888f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle /** 11898f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * timed invokeAll(c) cancels tasks not completed by timeout 11908f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */ 11918f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle public void testTimedInvokeAll6() throws Exception { 11928f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle ExecutorService e = new ScheduledThreadPoolExecutor(2); 11938f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle try { 11948f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle List<Callable<String>> l = new ArrayList<Callable<String>>(); 11958f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle l.add(new StringTask()); 11968f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle l.add(Executors.callable(new MediumPossiblyInterruptedRunnable(), TEST_STRING)); 11978f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle l.add(new StringTask()); 11988f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle List<Future<String>> futures = 11998f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle e.invokeAll(l, SHORT_DELAY_MS, MILLISECONDS); 12008f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertEquals(l.size(), futures.size()); 12018f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle for (Future future : futures) 12028f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(future.isDone()); 12038f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertFalse(futures.get(0).isCancelled()); 12048f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle assertTrue(futures.get(1).isCancelled()); 12058f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } finally { 12068f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle joinPool(e); 12078f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 12088f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle } 12098f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle 12108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle} 1211