Methods Summary |
---|
void | checkCCL()
AccessController.getContext().checkPermission(new RuntimePermission("getContextClassLoader"));
|
public static void | main(java.lang.String[] args)
junit.textui.TestRunner.run (suite());
|
public static junit.framework.Test | suite()
return new TestSuite(ExecutorsTest.class);
|
public void | testCallable1()callable(Runnable) returns null when called
try {
Callable c = Executors.callable(new NoOpRunnable());
assertNull(c.call());
} catch(Exception ex) {
unexpectedException();
}
|
public void | testCallable2()callable(Runnable, result) returns result when called
try {
Callable c = Executors.callable(new NoOpRunnable(), one);
assertEquals(one, c.call());
} catch(Exception ex) {
unexpectedException();
}
|
public void | testCallable3()callable(PrivilegedAction) returns its result when called
try {
Callable c = Executors.callable(new PrivilegedAction() {
public Object run() { return one; }});
assertEquals(one, c.call());
} catch(Exception ex) {
unexpectedException();
}
|
public void | testCallable4()callable(PrivilegedExceptionAction) returns its result when called
try {
Callable c = Executors.callable(new PrivilegedExceptionAction() {
public Object run() { return one; }});
assertEquals(one, c.call());
} catch(Exception ex) {
unexpectedException();
}
|
public void | testCallableNPE1()callable(null Runnable) throws NPE
try {
Runnable r = null;
Callable c = Executors.callable(r);
} catch (NullPointerException success) {
}
|
public void | testCallableNPE2()callable(null, result) throws NPE
try {
Runnable r = null;
Callable c = Executors.callable(r, one);
} catch (NullPointerException success) {
}
|
public void | testCallableNPE3()callable(null PrivilegedAction) throws NPE
try {
PrivilegedAction r = null;
Callable c = Executors.callable(r);
} catch (NullPointerException success) {
}
|
public void | testCallableNPE4()callable(null PrivilegedExceptionAction) throws NPE
try {
PrivilegedExceptionAction r = null;
Callable c = Executors.callable(r);
} catch (NullPointerException success) {
}
|
public void | testCastNewSingleThreadExecutor()A new SingleThreadExecutor cannot be casted to concrete implementation
ExecutorService e = Executors.newSingleThreadExecutor();
try {
ThreadPoolExecutor tpe = (ThreadPoolExecutor)e;
} catch (ClassCastException success) {
} finally {
joinPool(e);
}
|
public void | testCreatePrivilegedCallableUsingCCLWithNoPrivs()Without class loader permissions, creating
privilegedCallableUsingCurrentClassLoader throws ACE
Policy savedPolicy = null;
try {
savedPolicy = Policy.getPolicy();
AdjustablePolicy policy = new AdjustablePolicy();
Policy.setPolicy(policy);
} catch (AccessControlException ok) {
return;
}
// Check if program still has too many permissions to run test
try {
checkCCL();
// too many privileges to test; so return
Policy.setPolicy(savedPolicy);
return;
} catch(AccessControlException ok) {
}
try {
Callable task = Executors.privilegedCallableUsingCurrentClassLoader(new NoOpCallable());
shouldThrow();
} catch(AccessControlException success) {
} catch(Exception ex) {
unexpectedException();
}
finally {
Policy.setPolicy(savedPolicy);
}
|
public void | testDefaultThreadFactory()ThreadPoolExecutor using defaultThreadFactory has
specified group, priority, daemon status, and name
final ThreadGroup egroup = Thread.currentThread().getThreadGroup();
Runnable r = new Runnable() {
public void run() {
try {
Thread current = Thread.currentThread();
threadAssertTrue(!current.isDaemon());
threadAssertTrue(current.getPriority() == Thread.NORM_PRIORITY);
ThreadGroup g = current.getThreadGroup();
SecurityManager s = System.getSecurityManager();
if (s != null)
threadAssertTrue(g == s.getThreadGroup());
else
threadAssertTrue(g == egroup);
String name = current.getName();
threadAssertTrue(name.endsWith("thread-1"));
} catch (SecurityException ok) {
// Also pass if not allowed to change setting
}
}
};
ExecutorService e = Executors.newSingleThreadExecutor(Executors.defaultThreadFactory());
e.execute(r);
try {
e.shutdown();
} catch(SecurityException ok) {
}
try {
Thread.sleep(SHORT_DELAY_MS);
} catch (Exception eX) {
unexpectedException();
} finally {
joinPool(e);
}
|
public void | testNewCachedThreadPool1()A newCachedThreadPool can execute runnables
ExecutorService e = Executors.newCachedThreadPool();
e.execute(new NoOpRunnable());
e.execute(new NoOpRunnable());
e.execute(new NoOpRunnable());
joinPool(e);
|
public void | testNewCachedThreadPool2()A newCachedThreadPool with given ThreadFactory can execute runnables
ExecutorService e = Executors.newCachedThreadPool(new SimpleThreadFactory());
e.execute(new NoOpRunnable());
e.execute(new NoOpRunnable());
e.execute(new NoOpRunnable());
joinPool(e);
|
public void | testNewCachedThreadPool3()A newCachedThreadPool with null ThreadFactory throws NPE
try {
ExecutorService e = Executors.newCachedThreadPool(null);
shouldThrow();
}
catch(NullPointerException success) {
}
|
public void | testNewFixedThreadPool1()A new newFixedThreadPool can execute runnables
ExecutorService e = Executors.newFixedThreadPool(2);
e.execute(new NoOpRunnable());
e.execute(new NoOpRunnable());
e.execute(new NoOpRunnable());
joinPool(e);
|
public void | testNewFixedThreadPool2()A new newFixedThreadPool with given ThreadFactory can execute runnables
ExecutorService e = Executors.newFixedThreadPool(2, new SimpleThreadFactory());
e.execute(new NoOpRunnable());
e.execute(new NoOpRunnable());
e.execute(new NoOpRunnable());
joinPool(e);
|
public void | testNewFixedThreadPool3()A new newFixedThreadPool with null ThreadFactory throws NPE
try {
ExecutorService e = Executors.newFixedThreadPool(2, null);
shouldThrow();
}
catch(NullPointerException success) {
}
|
public void | testNewFixedThreadPool4()A new newFixedThreadPool with 0 threads throws IAE
try {
ExecutorService e = Executors.newFixedThreadPool(0);
shouldThrow();
}
catch(IllegalArgumentException success) {
}
|
public void | testNewSingleThreadExecutor1()A new SingleThreadExecutor can execute runnables
ExecutorService e = Executors.newSingleThreadExecutor();
e.execute(new NoOpRunnable());
e.execute(new NoOpRunnable());
e.execute(new NoOpRunnable());
joinPool(e);
|
public void | testNewSingleThreadExecutor2()A new SingleThreadExecutor with given ThreadFactory can execute runnables
ExecutorService e = Executors.newSingleThreadExecutor(new SimpleThreadFactory());
e.execute(new NoOpRunnable());
e.execute(new NoOpRunnable());
e.execute(new NoOpRunnable());
joinPool(e);
|
public void | testNewSingleThreadExecutor3()A new SingleThreadExecutor with null ThreadFactory throws NPE
try {
ExecutorService e = Executors.newSingleThreadExecutor(null);
shouldThrow();
}
catch(NullPointerException success) {
}
|
public void | testNewSingleThreadScheduledExecutor()a newSingleThreadScheduledExecutor successfully runs delayed task
try {
TrackedCallable callable = new TrackedCallable();
ScheduledExecutorService p1 = Executors.newSingleThreadScheduledExecutor();
Future f = p1.schedule(callable, SHORT_DELAY_MS, TimeUnit.MILLISECONDS);
assertFalse(callable.done);
Thread.sleep(MEDIUM_DELAY_MS);
assertTrue(callable.done);
assertEquals(Boolean.TRUE, f.get());
joinPool(p1);
} catch(RejectedExecutionException e){}
catch(Exception e){
e.printStackTrace();
unexpectedException();
}
|
public void | testPrivilegedThreadFactory()ThreadPoolExecutor using privilegedThreadFactory has
specified group, priority, daemon status, name,
access control context and context class loader
Policy savedPolicy = null;
try {
savedPolicy = Policy.getPolicy();
AdjustablePolicy policy = new AdjustablePolicy();
policy.addPermission(new RuntimePermission("getContextClassLoader"));
policy.addPermission(new RuntimePermission("setContextClassLoader"));
Policy.setPolicy(policy);
} catch (AccessControlException ok) {
return;
}
final ThreadGroup egroup = Thread.currentThread().getThreadGroup();
final ClassLoader thisccl = Thread.currentThread().getContextClassLoader();
final AccessControlContext thisacc = AccessController.getContext();
Runnable r = new Runnable() {
public void run() {
try {
Thread current = Thread.currentThread();
threadAssertTrue(!current.isDaemon());
threadAssertTrue(current.getPriority() == Thread.NORM_PRIORITY);
ThreadGroup g = current.getThreadGroup();
SecurityManager s = System.getSecurityManager();
if (s != null)
threadAssertTrue(g == s.getThreadGroup());
else
threadAssertTrue(g == egroup);
String name = current.getName();
threadAssertTrue(name.endsWith("thread-1"));
threadAssertTrue(thisccl == current.getContextClassLoader());
threadAssertTrue(thisacc.equals(AccessController.getContext()));
} catch(SecurityException ok) {
// Also pass if not allowed to change settings
}
}
};
ExecutorService e = Executors.newSingleThreadExecutor(Executors.privilegedThreadFactory());
Policy.setPolicy(savedPolicy);
e.execute(r);
try {
e.shutdown();
} catch(SecurityException ok) {
}
try {
Thread.sleep(SHORT_DELAY_MS);
} catch (Exception ex) {
unexpectedException();
} finally {
joinPool(e);
}
|
public void | testTimedCallable()timeouts from execute will time out if they compute too long.
int N = 10000;
ExecutorService executor = Executors.newSingleThreadExecutor();
List<Callable<BigInteger>> tasks = new ArrayList<Callable<BigInteger>>(N);
try {
long startTime = System.currentTimeMillis();
long i = 0;
while (tasks.size() < N) {
tasks.add(new TimedCallable<BigInteger>(executor, new Fib(i), 1));
i += 10;
}
int iters = 0;
BigInteger sum = BigInteger.ZERO;
for (Iterator<Callable<BigInteger>> it = tasks.iterator(); it.hasNext();) {
try {
++iters;
sum = sum.add(it.next().call());
}
catch (TimeoutException success) {
assertTrue(iters > 0);
return;
}
catch (Exception e) {
unexpectedException();
}
}
// if by chance we didn't ever time out, total time must be small
long elapsed = System.currentTimeMillis() - startTime;
assertTrue(elapsed < N);
}
finally {
joinPool(executor);
}
|
public void | testnewScheduledThreadPool()a newScheduledThreadPool successfully runs delayed task
try {
TrackedCallable callable = new TrackedCallable();
ScheduledExecutorService p1 = Executors.newScheduledThreadPool(2);
Future f = p1.schedule(callable, SHORT_DELAY_MS, TimeUnit.MILLISECONDS);
assertFalse(callable.done);
Thread.sleep(MEDIUM_DELAY_MS);
assertTrue(callable.done);
assertEquals(Boolean.TRUE, f.get());
joinPool(p1);
} catch(RejectedExecutionException e){}
catch(Exception e){
e.printStackTrace();
unexpectedException();
}
|
public void | testprivilegedCallableUsingCCLWithPrivs()With class loader permissions, calling
privilegedCallableUsingCurrentClassLoader does not throw ACE
Policy savedPolicy = null;
try {
savedPolicy = Policy.getPolicy();
AdjustablePolicy policy = new AdjustablePolicy();
policy.addPermission(new RuntimePermission("getContextClassLoader"));
policy.addPermission(new RuntimePermission("setContextClassLoader"));
Policy.setPolicy(policy);
} catch (AccessControlException ok) {
return;
}
try {
Callable task = Executors.privilegedCallableUsingCurrentClassLoader(new NoOpCallable());
task.call();
} catch(Exception ex) {
unexpectedException();
}
finally {
Policy.setPolicy(savedPolicy);
}
|
public void | testprivilegedCallableWithNoPrivs()Without permissions, calling privilegedCallable throws ACE
Callable task;
Policy savedPolicy = null;
AdjustablePolicy policy = null;
AccessControlContext noprivAcc = null;
try {
savedPolicy = Policy.getPolicy();
policy = new AdjustablePolicy();
Policy.setPolicy(policy);
noprivAcc = AccessController.getContext();
task = Executors.privilegedCallable(new CheckCCL());
Policy.setPolicy(savedPolicy);
} catch (AccessControlException ok) {
return; // program has too few permissions to set up test
}
// Make sure that program doesn't have too many permissions
try {
AccessController.doPrivileged(new PrivilegedAction() {
public Object run() {
checkCCL();
return null;
}}, noprivAcc);
// too many permssions; skip test
return;
} catch(AccessControlException ok) {
}
try {
task.call();
shouldThrow();
} catch(AccessControlException success) {
} catch(Exception ex) {
unexpectedException();
}
|
public void | testprivilegedCallableWithPrivs()With permissions, calling privilegedCallable succeeds
Policy savedPolicy = null;
try {
savedPolicy = Policy.getPolicy();
AdjustablePolicy policy = new AdjustablePolicy();
policy.addPermission(new RuntimePermission("getContextClassLoader"));
policy.addPermission(new RuntimePermission("setContextClassLoader"));
Policy.setPolicy(policy);
} catch (AccessControlException ok) {
return;
}
Callable task = Executors.privilegedCallable(new CheckCCL());
try {
task.call();
} catch(Exception ex) {
unexpectedException();
} finally {
Policy.setPolicy(savedPolicy);
}
|
public void | testunconfigurableExecutorService()An unconfigurable newFixedThreadPool can execute runnables
ExecutorService e = Executors.unconfigurableExecutorService(Executors.newFixedThreadPool(2));
e.execute(new NoOpRunnable());
e.execute(new NoOpRunnable());
e.execute(new NoOpRunnable());
joinPool(e);
|
public void | testunconfigurableExecutorServiceNPE()unconfigurableExecutorService(null) throws NPE
try {
ExecutorService e = Executors.unconfigurableExecutorService(null);
}
catch (NullPointerException success) {
}
|
public void | testunconfigurableScheduledExecutorService()an unconfigurable newScheduledThreadPool successfully runs delayed task
try {
TrackedCallable callable = new TrackedCallable();
ScheduledExecutorService p1 = Executors.unconfigurableScheduledExecutorService(Executors.newScheduledThreadPool(2));
Future f = p1.schedule(callable, SHORT_DELAY_MS, TimeUnit.MILLISECONDS);
assertFalse(callable.done);
Thread.sleep(MEDIUM_DELAY_MS);
assertTrue(callable.done);
assertEquals(Boolean.TRUE, f.get());
joinPool(p1);
} catch(RejectedExecutionException e){}
catch(Exception e){
e.printStackTrace();
unexpectedException();
}
|
public void | testunconfigurableScheduledExecutorServiceNPE()unconfigurableScheduledExecutorService(null) throws NPE
try {
ExecutorService e = Executors.unconfigurableScheduledExecutorService(null);
}
catch (NullPointerException success) {
}
|