blob: a69f0721618f5082880f3b5e207e41083dab3ef7 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/**
* @author Alexander V. Astapchuk
* @version $Revision$
*/
package org.apache.harmony.security.tests.java.security;
import dalvik.annotation.TestTargetClass;
import dalvik.annotation.TestTargets;
import dalvik.annotation.TestLevel;
import dalvik.annotation.TestTargetNew;
import java.net.URL;
import java.net.MalformedURLException;
import java.net.URLClassLoader;
import java.security.AllPermission;
import java.security.CodeSource;
import java.security.Permission;
import java.security.PermissionCollection;
import java.security.Permissions;
import java.security.Policy;
import java.security.Principal;
import java.security.ProtectionDomain;
import junit.framework.TestCase;
@TestTargetClass(ProtectionDomain.class)
/**
* Unit tests for java.security.ProtectionDomain.
*
*/
public class ProtectionDomainTest extends TestCase {
private final AllPermission allperm = new AllPermission();
private URL url = null;
private CodeSource cs = null;
private PermissionCollection perms = null;
private ClassLoader classldr = null;
private Principal[] principals = null; // changed in setUp()
/*
* @see TestCase#setUp()
*/
protected void setUp() throws Exception {
super.setUp();
try {
url = new URL("http://localhost");
} catch (MalformedURLException ex) {
throw new Error(ex);
}
cs = new CodeSource(url, (java.security.cert.Certificate[]) null);
perms = allperm.newPermissionCollection();
perms.add(allperm);
classldr = URLClassLoader.newInstance(new URL[] { url });
principals = new Principal[] { new TestPrincipal("0"),
new TestPrincipal("1"), new TestPrincipal("2"),
new TestPrincipal("3"), new TestPrincipal("4"), };
}
/**
* Class under test for void ProtectionDomain(CodeSource,
* PermissionCollection)
*/
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "ProtectionDomain",
args = {java.security.CodeSource.class, java.security.PermissionCollection.class}
)
public void testProtectionDomainCodeSourcePermissionCollection_00() {
new ProtectionDomain(null, null);
new ProtectionDomain(cs, null);
new ProtectionDomain(cs, perms);
}
/**
* the ctor must set the PermissionCollection read-only
*/
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "ProtectionDomain",
args = {java.security.CodeSource.class, java.security.PermissionCollection.class}
)
public void testProtectionDomainCodeSourcePermissionCollection_01() {
assertFalse(perms.isReadOnly());
new ProtectionDomain(null, perms);
assertTrue(perms.isReadOnly());
}
/**
* Test for ProtectionDomain(CodeSource, PermissionCollection, ClassLoader, Principal[])
*/
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "ProtectionDomain",
args = {java.security.CodeSource.class, java.security.PermissionCollection.class, java.lang.ClassLoader.class, java.security.Principal[].class}
)
public void testProtectionDomainCodeSourcePermissionCollectionClassLoaderPrincipalArray() {
new ProtectionDomain(null, null, null, null);
new ProtectionDomain(cs, null, null, null);
new ProtectionDomain(null, perms, null, null);
new ProtectionDomain(null, null, classldr, null);
new ProtectionDomain(null, null, null, principals);
new ProtectionDomain(cs, perms, classldr, principals);
}
/**
* Tests for ProtectionDomain.getClassLoader()
*/
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "getClassLoader",
args = {}
)
public void testGetClassLoader() {
assertNull(new ProtectionDomain(null, null).getClassLoader());
assertSame(new ProtectionDomain(null, null, classldr, null)
.getClassLoader(), classldr);
}
/**
* Tests for ProtectionDomain.getCodeSource()
*/
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "getCodeSource",
args = {}
)
public void testGetCodeSource() {
assertNull(new ProtectionDomain(null, null).getCodeSource());
assertSame(new ProtectionDomain(cs, null).getCodeSource(), cs);
}
/**
* Tests for ProtectionDomain.getPermissions()
*/
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "getPermissions",
args = {}
)
public void testGetPermissions() {
assertNull(new ProtectionDomain(null, null).getPermissions());
assertSame(new ProtectionDomain(null, perms).getPermissions(), perms);
}
/**
* getPrincipals() always returns non null array
*/
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "getPrincipals",
args = {}
)
public void testGetPrincipals_00() {
assertNotNull(new ProtectionDomain(null, null).getPrincipals());
}
/**
* getPrincipals() returns new array each time it's called
*/
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "getPrincipals",
args = {}
)
public void testGetPrincipals_01() {
ProtectionDomain pd = new ProtectionDomain(null, null, null, principals);
Principal[] got = pd.getPrincipals();
assertNotNull(got);
assertNotSame(got, principals);
assertNotSame(got, pd.getPrincipals());
assertTrue(got.length == principals.length);
}
/**
* ProtectionDomain with null Permissions must not imply() permissions.
*/
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "implies",
args = {java.security.Permission.class}
)
public void testImplies_00() {
assertFalse(new ProtectionDomain(null, null).implies(allperm));
}
/**
* ProtectionDomain with PermissionCollection which contains AllPermission
* must imply() AllPermission.
*/
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "implies",
args = {java.security.Permission.class}
)
public void testImplies_01() {
assertTrue(new ProtectionDomain(null, perms).implies(allperm));
}
/**
* ProtectionDomain created with a static set of permissions must not query
* policy.
*/
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "implies",
args = {java.security.Permission.class}
)
public void testImplies_02() {
TestPolicy policy = new TestPolicy();
// null set of permissions [must] force the PD to use Policy - for
// dynamic permissions
ProtectionDomain pd = new ProtectionDomain(cs, null);
policy.setTrackPD(pd);
try {
Policy.setPolicy(policy);
pd.implies(allperm);
} finally {
Policy.setPolicy(null);
}
assertFalse(policy.getPdTracked());
}
/**
* ProtectionDomain created with dynamic set of permissions must query
* policy.
*/
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "implies",
args = {java.security.Permission.class}
)
public void testImplies_03() {
TestPolicy policy = new TestPolicy();
ProtectionDomain pd = new ProtectionDomain(cs, null, ClassLoader
.getSystemClassLoader(), principals);
policy.setTrackPD(pd);
try {
Policy.setPolicy(policy);
pd.implies(allperm);
} finally {
Policy.setPolicy(null);
}
assertTrue(policy.getPdTracked());
}
/**
* Simply checks that it's working somehow
*/
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "toString",
args = {}
)
public void testToString() {
String res;
res = new ProtectionDomain(null, null).toString();
assertTrue(res.contains("ProtectionDomain"));
res = new ProtectionDomain(cs, perms).toString();
assertTrue(res.contains("ProtectionDomain"));
res = new ProtectionDomain(null, null, null, null).toString();
assertTrue(res.contains("ProtectionDomain"));
res = new ProtectionDomain(cs, perms, classldr, principals).toString();
assertTrue(res.contains("ProtectionDomain"));
}
/**
* Test principal used during the testing. Does nothing.
*/
private static class TestPrincipal implements Principal {
private String name;
TestPrincipal(String name) {
this.name = name;
}
public String getName() {
return "TestPrincipal: " + name;
}
}
private static class TestPolicy extends Policy {
ProtectionDomain trackPD = null;
boolean pdTracked = false;
ProtectionDomain setTrackPD(ProtectionDomain pd) {
ProtectionDomain tmp = trackPD;
trackPD = pd;
pdTracked = false;
return tmp;
}
boolean getPdTracked() {
return pdTracked;
}
public PermissionCollection getPermissions(CodeSource cs) {
return new Permissions();
}
// public PermissionCollection getPermissions(ProtectionDomain domain) {
// return super.getPermissions(domain);
// }
public boolean implies(ProtectionDomain domain, Permission permission) {
if (trackPD != null && trackPD == domain) {
pdTracked = true;
}
return super.implies(domain, permission);
}
public void refresh() {
// do nothing
}
}
}