executorstest.java
来自「SRI international 发布的OAA框架软件」· Java 代码 · 共 667 行 · 第 1/2 页
JAVA
667 行
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);
}
}
/**
* ThreadPoolExecutor using privilegedThreadFactory has
* specified group, priority, daemon status, name,
* access control context and context class loader
*/
public void testPrivilegedThreadFactory() {
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);
}
}
void checkCCL() {
AccessController.getContext().checkPermission(new RuntimePermission("getContextClassLoader"));
}
class CheckCCL implements Callable {
public Object call() {
checkCCL();
return null;
}
}
/**
* Without class loader permissions, creating
* privilegedCallableUsingCurrentClassLoader throws ACE
*/
public void testCreatePrivilegedCallableUsingCCLWithNoPrivs() {
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);
}
}
/**
* With class loader permissions, calling
* privilegedCallableUsingCurrentClassLoader does not throw ACE
*/
public void testprivilegedCallableUsingCCLWithPrivs() {
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);
}
}
/**
* Without permissions, calling privilegedCallable throws ACE
*/
public void testprivilegedCallableWithNoPrivs() {
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();
}
}
/**
* With permissions, calling privilegedCallable succeeds
*/
public void testprivilegedCallableWithPrivs() {
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);
}
}
/**
* callable(Runnable) returns null when called
*/
public void testCallable1() {
try {
Callable c = Executors.callable(new NoOpRunnable());
assertNull(c.call());
} catch(Exception ex) {
unexpectedException();
}
}
/**
* callable(Runnable, result) returns result when called
*/
public void testCallable2() {
try {
Callable c = Executors.callable(new NoOpRunnable(), one);
assertEquals(one, c.call());
} catch(Exception ex) {
unexpectedException();
}
}
/**
* callable(PrivilegedAction) returns its result when called
*/
public void testCallable3() {
try {
Callable c = Executors.callable(new PrivilegedAction() {
public Object run() { return one; }});
assertEquals(one, c.call());
} catch(Exception ex) {
unexpectedException();
}
}
/**
* callable(PrivilegedExceptionAction) returns its result when called
*/
public void testCallable4() {
try {
Callable c = Executors.callable(new PrivilegedExceptionAction() {
public Object run() { return one; }});
assertEquals(one, c.call());
} catch(Exception ex) {
unexpectedException();
}
}
/**
* callable(null Runnable) throws NPE
*/
public void testCallableNPE1() {
try {
Runnable r = null;
Callable c = Executors.callable(r);
} catch (NullPointerException success) {
}
}
/**
* callable(null, result) throws NPE
*/
public void testCallableNPE2() {
try {
Runnable r = null;
Callable c = Executors.callable(r, one);
} catch (NullPointerException success) {
}
}
/**
* callable(null PrivilegedAction) throws NPE
*/
public void testCallableNPE3() {
try {
PrivilegedAction r = null;
Callable c = Executors.callable(r);
} catch (NullPointerException success) {
}
}
/**
* callable(null PrivilegedExceptionAction) throws NPE
*/
public void testCallableNPE4() {
try {
PrivilegedExceptionAction r = null;
Callable c = Executors.callable(r);
} catch (NullPointerException success) {
}
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?