blob: 8e456578a8db34fb90df60885cb078eb23c0000f [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.
*/
package tests.api.javax.security.auth;
import java.security.Permission;
import dalvik.annotation.TestLevel;
import dalvik.annotation.TestTargetClass;
import dalvik.annotation.TestTargetNew;
import junit.framework.TestCase;
import javax.security.auth.PrivateCredentialPermission;
/**
* Tests for <code>PrivateCredentialPermission</code> class constructors and methods.
*
*/
@TestTargetClass(PrivateCredentialPermission.class)
public class PrivateCredentialPermissionTest extends TestCase {
private final static String cred_class1 = "a.b.Credential";
private final static String cred_class2 = "a.b.Credential1";
private final static String name1 = cred_class1 + " a.b.Principal \"*\"";
private final static String name2 = cred_class1 + " a.c.Principal \"*\"";
private final static String name4 = cred_class2 + " a.c.Principal \"*\"";
private final static String pc1 = "a.b.Principal";
private final static String pn1 = "*";
private final static String pc2 = "a.c.Principal";
private final static String pn2 = "abc";
private final static String name3 = cred_class1 + " " + pc1 + " \"" + pn1 + "\" " + pc2 + " \"" + pn2 + "\"";
/**
* @tests javax.security.auth.PrivateCredentialPermission#PrivateCredentialPermission(String name, String actions)
*/
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "PrivateCredentialPermission",
args = {String.class, String.class}
)
public void test_Constructor_01() {
PrivateCredentialPermission ap = new PrivateCredentialPermission(name1, "read");
String actions[] = { "write", "", null };
for(int i = 0; i < actions.length; i++) {
try {
ap = new PrivateCredentialPermission(name1, "write");
fail("expected IllegalArgumentException if action is not \"read\"");
} catch (IllegalArgumentException e) {
// expected
}
}
String names[] = { null,
"",
"a.b.Credential a.c.Principal *\"",
"a.b.Credential_a.c.Principal_\"*\"",
"a.b.Credential a.c.Principal_\"*\"",
"a.b.Credential * \"a\""
};
for(int i = 0; i < names.length; i++) {
try {
ap = new PrivateCredentialPermission(names[i], "read");
fail("expected IllegalArgumentException for malformed \"name\" argument (" + names[i] +")");
} catch (IllegalArgumentException e) {
// expected
} catch (NullPointerException npe) {
if (names[i] != null)
throw npe;
else
; // expected if name is null
}
}
}
/**
* @tests javax.security.auth.PrivateCredentialPermission#getActions()
*/
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "getActions",
args = {}
)
public void test_getActions() {
PrivateCredentialPermission ap = new PrivateCredentialPermission(name1, "read");
assertEquals("getActions() must alway return \"read\"", "read", ap.getActions());
}
/**
* @tests javax.security.auth.PrivateCredentialPermission#implies()
*/
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "implies",
args = { Permission.class }
)
public void test_implies() {
PrivateCredentialPermission p1 = new PrivateCredentialPermission("* P1 \"abc\"", "read");
PrivateCredentialPermission p2 = new PrivateCredentialPermission("a.b.Credential P1 \"abc\"", "read");
PrivateCredentialPermission p3 = new PrivateCredentialPermission("C1 P1 \"abc\"", "read");
PrivateCredentialPermission p4 = new PrivateCredentialPermission("C1 P1 \"abc\" P2 \"abcd\"", "read");
PrivateCredentialPermission p5 = new PrivateCredentialPermission("C1 P1 \"*\"", "read");
PrivateCredentialPermission p6 = new PrivateCredentialPermission("a.b.Credential * \"*\"", "read");
PrivateCredentialPermission p7 = new PrivateCredentialPermission("a.b.Credential P2 \"abc\"", "read");
PrivateCredentialPermission p8 = new PrivateCredentialPermission("a.b.Credential1 P2 \"abc\"", "read");
PrivateCredentialPermission p9 = new PrivateCredentialPermission("a.b.Credential1 P2 \"*\"", "read");
PrivateCredentialPermission[][] arr = { { p1, p2 },
{ p2, p1 },
{ p3, p4 },
{ p5, p3 },
{ p6, p2 },
{ p2, p7 },
{ p7, p8 },
{ p8, p9 }};
boolean[] r = { true, false, true, true, true, false, false, false };
for(int i = 0; i < arr.length; i++)
assertEquals("implies() returned wrong result (" + i + ")", r[i], arr[i][0].implies(arr[i][1]));
}
/**
* @tests javax.security.auth.PrivateCredentialPermission#getCredentialClass()
*/
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "getCredentialClass",
args = {}
)
public void test_getCredentialClass() {
PrivateCredentialPermission ap = new PrivateCredentialPermission(name1, "read");
assertEquals("getCredentialClass() returned wrong name", cred_class1, ap.getCredentialClass());
}
/**
* @tests javax.security.auth.PrivateCredentialPermission#getPrincipals()
*/
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "getPrincipals",
args = {}
)
public void test_getPrincipals() {
PrivateCredentialPermission ap = new PrivateCredentialPermission(name3, "read");
String[][] p = ap.getPrincipals();
assertEquals("wrong number of principals", 2, p.length);
assertEquals("wrong principal class 0", pc1, p[0][0]);
assertEquals("wrong principal name 0", pn1, p[0][1]);
assertEquals("wrong principal class 1", pc2, p[1][0]);
assertEquals("wrong principal name 1", pn2, p[1][1]);
}
/**
* @tests javax.security.auth.PrivateCredentialPermission#equals()
*/
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "equals",
args = { Object.class }
)
public void test_equals() {
PrivateCredentialPermission p1 = new PrivateCredentialPermission(name3, "read");
PrivateCredentialPermission p2 = new PrivateCredentialPermission(name3, "read");
PrivateCredentialPermission p3 = new PrivateCredentialPermission(name1, "read");
PrivateCredentialPermission p4 = new PrivateCredentialPermission(name1, "read");
PrivateCredentialPermission p5 = new PrivateCredentialPermission(name2, "read");
PrivateCredentialPermission p6 = new PrivateCredentialPermission(name4, "read");
PrivateCredentialPermission arr[][] = { { p1, p2 },
{ p3, p4 },
{ p4, p5 },
{ p1, p3 },
{ p4, p6 } };
boolean r[] = { true, true, false, false, false };
for(int i = 0; i < arr.length; i++) {
assertEquals("equals() returned wrong result", r[i], arr[i][0].equals(arr[i][1]));
}
try {
assertFalse(p1.equals(null));
} catch(NullPointerException npe) {
}
}
/**
* @tests javax.security.auth.PrivateCredentialPermission#hashCode()
*/
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "hashCode",
args = {}
)
public void test_hashCode() {
PrivateCredentialPermission p1 = new PrivateCredentialPermission(name1, "read");
PrivateCredentialPermission p2 = new PrivateCredentialPermission(name1, "read");
int arr[][] = new int[10][];
for(int i = 0; i < 10; i++) {
int h1 = p1.hashCode();
System.gc();
// force some memory allocations
arr[i] = new int[50000];
assertEquals("hashCode() must consistently return the same integer", h1, p1.hashCode());
assertEquals("hashCode() must be the same for equal PrivateCredentialPermission objects", p1.hashCode(), p2.hashCode());
}
PrivateCredentialPermission p3 = new PrivateCredentialPermission(name4, "read");
assertFalse("hashCode() must not be the same for non-equal PrivateCredentialPermission objects", p1.hashCode() == p3.hashCode());
}
/**
* @tests javax.security.auth.PrivateCredentialPermission#newPermissionCollection()
*/
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "newPermissionCollection",
args = {}
)
public void test_newPermissionCollection() {
PrivateCredentialPermission ap = new PrivateCredentialPermission(name1, "read");
assertNull("newPermissionCollection must always return null", ap.newPermissionCollection());
}
}