Index: modules/luni/src/test/java/org/apache/harmony/luni/tests/java/lang/SecurityManagerTest.java =================================================================== --- modules/luni/src/test/java/org/apache/harmony/luni/tests/java/lang/SecurityManagerTest.java (revision 479590) +++ modules/luni/src/test/java/org/apache/harmony/luni/tests/java/lang/SecurityManagerTest.java (working copy) @@ -17,7 +17,7 @@ package org.apache.harmony.luni.tests.java.lang; import java.io.File; - +import java.security.Security; import tests.support.Support_Exec; import junit.framework.TestCase; @@ -25,12 +25,86 @@ public class SecurityManagerTest extends TestCase { /** + * @tests java.lang.SecurityManager#checkPackageAccess(String) + */ + public void test_checkPackageAccessLjava_lang_String() { + final String old = Security.getProperty("package.access"); + Security.setProperty("package.access", "a.,bbb, c.d."); + + MutableSecurityManager sm = new MutableSecurityManager(); + sm.denyPermission(new RuntimePermission("accessClassInPackage.*")); + + try { + sm.checkPackageAccess("z.z.z"); + sm.checkPackageAccess("aa"); + sm.checkPackageAccess("bb"); + sm.checkPackageAccess("c"); + + try { + sm.checkPackageAccess("a"); + fail("This should throw a SecurityException."); + } catch (SecurityException ok) {} + + try { + sm.checkPackageAccess("bbb"); + fail("This should throw a SecurityException."); + } catch (SecurityException ok) {} + + try { + sm.checkPackageAccess("c.d.e"); + fail("This should throw a SecurityException."); + } catch (SecurityException ok) {} + + } finally { + Security.setProperty("package.access", + old == null ? "" : old); + } + } + + /** + * @tests java.lang.SecurityManager#checkPackageDefinition(String) + */ + public void test_checkPackageDefinitionLjava_lang_String() { + final String old = Security.getProperty("package.definition"); + Security.setProperty("package.definition", "a.,bbb, c.d."); + + MutableSecurityManager sm = new MutableSecurityManager(); + sm.denyPermission(new RuntimePermission("defineClassInPackage.*")); + + try { + sm.checkPackageDefinition("z.z.z"); + sm.checkPackageDefinition("aa"); + sm.checkPackageDefinition("bb"); + sm.checkPackageDefinition("c"); + + try { + sm.checkPackageDefinition("a"); + fail("This should throw a SecurityException."); + } catch (SecurityException ok) {} + + try { + sm.checkPackageDefinition("bbb"); + fail("This should throw a SecurityException."); + } catch (SecurityException ok) {} + + try { + sm.checkPackageDefinition("c.d.e"); + fail("This should throw a SecurityException."); + } catch (SecurityException ok) {} + + } finally { + Security.setProperty("package.definition", + old == null ? "" : old); + } + } + + /** * @tests java.lang.SecurityManager#checkMemberAccess(java.lang.Class, int) */ public void test_checkMemberAccessLjava_lang_ClassI() { MutableSecurityManager sm = new MutableSecurityManager(); sm.addPermission(MutableSecurityManager.SET_SECURITY_MANAGER); - sm.denyPermission("accessDeclaredMembers"); + sm.denyPermission(new RuntimePermission("accessDeclaredMembers")); System.setSecurityManager(sm); try { try { Index: modules/luni/src/test/java/org/apache/harmony/luni/tests/java/lang/MutableSecurityManager.java =================================================================== --- modules/luni/src/test/java/org/apache/harmony/luni/tests/java/lang/MutableSecurityManager.java (revision 479590) +++ modules/luni/src/test/java/org/apache/harmony/luni/tests/java/lang/MutableSecurityManager.java (working copy) @@ -17,53 +17,54 @@ package org.apache.harmony.luni.tests.java.lang; import java.security.Permission; -import java.util.HashSet; -import java.util.Set; +import java.security.PermissionCollection; +import java.security.Permissions; class MutableSecurityManager extends SecurityManager { static final RuntimePermission SET_SECURITY_MANAGER = new RuntimePermission("setSecurityManager"); - private final Set permissions; + private PermissionCollection enabled; - private String deny; + private PermissionCollection denied; public MutableSecurityManager() { super(); - this.permissions = new HashSet(); + this.enabled = new Permissions(); } public MutableSecurityManager(Permission... permissions) { this(); for (int i = 0; i < permissions.length; i++) { - this.permissions.add(permissions[i]); + this.enabled.add(permissions[i]); } } void addPermission(Permission permission) { - permissions.add(permission); + enabled.add(permission); } - void removePermission(Permission permission) { - permissions.remove(permission); - } - void clearPermissions() { - permissions.clear(); + enabled = new Permissions(); } - void denyPermission(String name) { - deny = name; + void denyPermission(Permission p) { + if (denied == null) { + denied = new Permissions(); + } + denied.add(p); } @Override public void checkPermission(Permission permission) { - if (permissions.contains(permission)) { + if (enabled.implies(permission)) { return; } - if (permission.getName().equals(deny)){ - throw new SecurityException(); + + if (denied != null && denied.implies(permission)){ + throw new SecurityException("Denied " + permission); } + super.checkPermission(permission); } }