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