/* * Written by members of JCP JSR-166 Expert Group and released to the * public domain. Use, modify, and redistribute this code in any way * without acknowledgement. Other contributors include Andrew Wright, * Jeffrey Hayes, Pat Fischer, Mike Judd. */ import junit.framework.*; import java.util.*; import java.util.concurrent.*; import java.math.BigInteger; import java.security.*; public class ExecutorCompletionServiceTest extends JSR166TestCase{ public static void main(String[] args) { junit.textui.TestRunner.run (suite()); } public static Test suite() { return new TestSuite(ExecutorCompletionServiceTest.class); } /** * Creating a new ECS with null Executor throw NPE */ public void testConstructorNPE() { try { ExecutorCompletionService ecs = new ExecutorCompletionService(null); shouldThrow(); } catch (NullPointerException success) { } } /** * Creating a new ECS with null queue throw NPE */ public void testConstructorNPE2() { try { ExecutorService e = Executors.newCachedThreadPool(); ExecutorCompletionService ecs = new ExecutorCompletionService(e, null); shouldThrow(); } catch (NullPointerException success) { } } /** * Submitting a null callable throws NPE */ public void testSubmitNPE() { ExecutorService e = Executors.newCachedThreadPool(); ExecutorCompletionService ecs = new ExecutorCompletionService(e); try { Callable c = null; ecs.submit(c); shouldThrow(); } catch (NullPointerException success) { } finally { joinPool(e); } } /** * Submitting a null runnable throws NPE */ public void testSubmitNPE2() { ExecutorService e = Executors.newCachedThreadPool(); ExecutorCompletionService ecs = new ExecutorCompletionService(e); try { Runnable r = null; ecs.submit(r, Boolean.TRUE); shouldThrow(); } catch (NullPointerException success) { } finally { joinPool(e); } } /** * A taken submitted task is completed */ public void testTake() { ExecutorService e = Executors.newCachedThreadPool(); ExecutorCompletionService ecs = new ExecutorCompletionService(e); try { Callable c = new StringTask(); ecs.submit(c); Future f = ecs.take(); assert(f.isDone()); } catch (Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * Take returns the same future object returned by submit */ public void testTake2() { ExecutorService e = Executors.newCachedThreadPool(); ExecutorCompletionService ecs = new ExecutorCompletionService(e); try { Callable c = new StringTask(); Future f1 = ecs.submit(c); Future f2 = ecs.take(); assertSame(f1, f2); } catch (Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * If poll returns non-null, the returned task is completed */ public void testPoll1() { ExecutorService e = Executors.newCachedThreadPool(); ExecutorCompletionService ecs = new ExecutorCompletionService(e); try { assertNull(ecs.poll()); Callable c = new StringTask(); ecs.submit(c); Thread.sleep(SHORT_DELAY_MS); for (;;) { Future f = ecs.poll(); if (f != null) { assert(f.isDone()); break; } } } catch (Exception ex) { unexpectedException(); } finally { joinPool(e); } } /** * If timed poll returns non-null, the returned task is completed */ public void testPoll2() { ExecutorService e = Executors.newCachedThreadPool(); ExecutorCompletionService ecs = new ExecutorCompletionService(e); try { assertNull(ecs.poll()); Callable c = new StringTask(); ecs.submit(c); Future f = ecs.poll(SHORT_DELAY_MS, TimeUnit.MILLISECONDS); if (f != null) assert(f.isDone()); } catch (Exception ex) { unexpectedException(); } finally { joinPool(e); } } }