blob: e946dfa73365c7f64325c8feb1222bbed1d38e47 [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.
*/
//
// This source code implements specifications defined by the Java
// Community Process. In order to remain compliant with the specification
// DO NOT add / change / or delete method signatures!
//
package javax.security.jacc;
import junit.framework.TestCase;
import java.lang.reflect.Method;
import java.io.ByteArrayOutputStream;
import java.io.ObjectOutputStream;
import java.io.ByteArrayInputStream;
import java.io.ObjectInputStream;
/**
* @version $Rev$ $Date$
*/
public class EJBMethodPermissionTest extends TestCase {
protected Method method;
public void setUp() {
try {
method = TestClass.class.getDeclaredMethod("cat", new Class[] { Integer.class, Float.class, Long.class, Double.class,int[].class });
} catch (NoSuchMethodException e) {
e.printStackTrace(); //To change body of catch statement use Options | File Templates.
} catch (SecurityException e) {
e.printStackTrace(); //To change body of catch statement use Options | File Templates.
}
}
/*
* Testing EJBMethodPermission(java.lang.String, java.lang.String)
*/
public void testConstructorStringString() throws Exception {
// methodSpec ::= null
EJBMethodPermission permission = new EJBMethodPermission("foo", null);
doTestSerialization(permission);
// methodSpec ::= methodNameSpec
permission = new EJBMethodPermission("foo", "");
doTestSerialization(permission);
permission = new EJBMethodPermission("foo", "cat");
doTestSerialization(permission);
// methodSpec ::= methodNameSpec comma methodInterface
permission = new EJBMethodPermission("foo", ",ServiceEndpoint");
doTestSerialization(permission);
permission = new EJBMethodPermission("foo", "cat,ServiceEndpoint");
doTestSerialization(permission);
// methodSpec ::= methodNameSpec comma methodInterfaceSpec comma methodParamsSpec
permission = new EJBMethodPermission("foo", ",,");
doTestSerialization(permission);
permission = new EJBMethodPermission("foo", "cat,,");
doTestSerialization(permission);
permission = new EJBMethodPermission("foo", ",Home,");
doTestSerialization(permission);
permission = new EJBMethodPermission("foo", "cat,Home,");
doTestSerialization(permission);
permission = new EJBMethodPermission("foo", ",,a,b,c,d,e");
doTestSerialization(permission);
permission = new EJBMethodPermission("foo", "cat,,a,b,c,d,e");
doTestSerialization(permission);
permission = new EJBMethodPermission("foo", ",Home,a,b,c,d,e");
doTestSerialization(permission);
permission = new EJBMethodPermission("foo", "cat,Home,a,b,c,d,e");
doTestSerialization(permission);
// methodInterface ::= "Home" | "LocalHome" | "Remote" | "Local" | "ServiceEndpoint"
permission = new EJBMethodPermission("foo", "cat,Home,a,b,c,d,e");
doTestSerialization(permission);
permission = new EJBMethodPermission("foo", "cat,LocalHome,a,b,c,d,e");
doTestSerialization(permission);
permission = new EJBMethodPermission("foo", "cat,Remote,a,b,c,d,e");
doTestSerialization(permission);
permission = new EJBMethodPermission("foo", "cat,Local,a,b,c,d,e");
doTestSerialization(permission);
permission = new EJBMethodPermission("foo", "cat,ServiceEndpoint,a,b,c,d,e");
doTestSerialization(permission);
assertEquals(permission.getName(), "foo");
assertEquals(permission.getActions(), "cat,ServiceEndpoint,a,b,c,d,e");
// bad methodInterface
try {
permission = new EJBMethodPermission("foo", "cat,Interface,a,b,c,d,e");
fail("Bad method interface");
} catch(IllegalArgumentException iae) {
}
// no production produces "emptyString,emptyString"
try {
permission = new EJBMethodPermission("foo", ",");
fail("Empty method interface");
} catch(IllegalArgumentException iae) {
}
// no production produces "methodName ,emptyString"
try {
permission = new EJBMethodPermission("foo", "cat,");
fail("Empty method interface");
} catch(IllegalArgumentException iae) {
}
// no production produces an empty method parameter
try {
permission = new EJBMethodPermission("foo", ",,,");
fail("Empty method parameter");
} catch(IllegalArgumentException iae) {
}
// no production produces an empty method parameter
try {
permission = new EJBMethodPermission("foo", ",,,,,,");
fail("Empty method parameter");
} catch(IllegalArgumentException iae) {
}
}
public void testImpliesStringString() throws Exception {
EJBMethodPermission permissionFooEEE = new EJBMethodPermission("foo", "");
EJBMethodPermission permissionFooMIP = new EJBMethodPermission("foo", "cat,LocalHome,a,b,c,d,e");
EJBMethodPermission permissionBarEEE = new EJBMethodPermission("bar", "");
EJBMethodPermission permissionFooEIP = new EJBMethodPermission("foo", ",LocalHome,a,b,c,d,e");
EJBMethodPermission permissionFooEIE = new EJBMethodPermission("foo", ",LocalHome,");
EJBMethodPermission permissionFooEI = new EJBMethodPermission("foo", ",LocalHome");
assertTrue(permissionFooEEE.implies(permissionFooEEE));
assertTrue(permissionFooEEE.implies(permissionFooMIP));
assertTrue(permissionFooEEE.implies(permissionFooEIP));
assertTrue(permissionFooEEE.implies(permissionFooEIE));
assertTrue(permissionFooEEE.implies(permissionFooEI));
assertFalse(permissionFooMIP.implies(permissionFooEEE));
assertTrue(permissionFooEEE.equals(permissionFooEEE));
assertFalse(permissionFooEEE.equals(permissionFooMIP));
assertFalse(permissionFooMIP.equals(permissionFooEEE));
assertFalse(permissionFooEEE.implies(permissionBarEEE));
assertFalse(permissionBarEEE.implies(permissionFooEEE));
assertFalse(permissionFooEEE.equals(permissionBarEEE));
assertFalse(permissionBarEEE.equals(permissionFooEEE));
assertTrue(permissionFooEIP.implies(permissionFooMIP));
assertFalse(permissionFooEIE.implies(permissionFooMIP));
assertTrue(permissionFooEI.implies(permissionFooMIP));
assertTrue(permissionFooEI.implies(permissionFooEIP));
assertTrue(permissionFooEI.implies(permissionFooEIE));
assertFalse(permissionFooEEE.hashCode() == permissionBarEEE.hashCode());
doTestSerialization(permissionFooEEE);
doTestSerialization(permissionFooMIP);
doTestSerialization(permissionBarEEE);
doTestSerialization(permissionFooEIP);
doTestSerialization(permissionFooEIE);
doTestSerialization(permissionFooEI);
}
/*
* Testing EJBMethodPermission(String, String, String, String[])
*/
public void testConstructorStringStringStringStringArray() throws Exception {
// methodSpec ::= null
EJBMethodPermission permission = new EJBMethodPermission("foo", null, null, null);
doTestSerialization(permission);
// methodSpec ::= methodNameSpec
permission = new EJBMethodPermission("foo", "", "", null);
doTestSerialization(permission);
permission = new EJBMethodPermission("foo", "cat", "", null);
doTestSerialization(permission);
// methodSpec ::= methodNameSpec comma methodInterface
permission = new EJBMethodPermission("foo", "", "ServiceEndpoint", null);
doTestSerialization(permission);
permission = new EJBMethodPermission("foo", "cat", "ServiceEndpoint", null);
doTestSerialization(permission);
// methodSpec ::= methodNameSpec comma methodInterfaceSpec comma methodParamsSpec
permission = new EJBMethodPermission("foo", "", "", new String[]{});
doTestSerialization(permission);
permission = new EJBMethodPermission("foo", "cat", "", new String[]{});
doTestSerialization(permission);
permission = new EJBMethodPermission("foo", "", "Home", new String[]{});
doTestSerialization(permission);
permission = new EJBMethodPermission("foo", "cat", "Home", new String[] {});
doTestSerialization(permission);
permission = new EJBMethodPermission("foo", "", "", new String[] { "a", "b", "c", "d", "e"});
doTestSerialization(permission);
permission = new EJBMethodPermission("foo", "cat", "", new String[] { "a", "b", "c", "d", "e"});
doTestSerialization(permission);
permission = new EJBMethodPermission("foo", "", "Home", new String[] { "a", "b", "c", "d", "e"});
doTestSerialization(permission);
permission = new EJBMethodPermission("foo", "cat", "Home", new String[] { "a", "b", "c", "d", "e"});
doTestSerialization(permission);
// methodInterface ::= "Home" | "LocalHome" | "Remote" | "Local" | "ServiceEndpoint"
permission = new EJBMethodPermission("foo", "cat", "Home", new String[] { "a", "b", "c", "d", "e"});
doTestSerialization(permission);
permission = new EJBMethodPermission("foo", "cat", "LocalHome", new String[] { "a", "b", "c", "d", "e"});
doTestSerialization(permission);
permission = new EJBMethodPermission("foo", "cat", "Remote", new String[] { "a", "b", "c", "d", "e"});
doTestSerialization(permission);
permission = new EJBMethodPermission("foo", "cat", "Local", new String[] { "a", "b", "c", "d", "e"});
doTestSerialization(permission);
permission = new EJBMethodPermission("foo", "cat", "ServiceEndpoint", new String[] { "a", "b", "c", "d", "e"});
doTestSerialization(permission);
assertEquals(permission.getName(), "foo");
assertEquals(permission.getActions(), "cat,ServiceEndpoint,a,b,c,d,e");
// bad methodInterface
try {
permission = new EJBMethodPermission("foo", "cat", "Interface", new String[] { "a", "b", "c", "d", "e"});
fail("Bad method interface");
} catch(IllegalArgumentException iae) {
}
}
public void testImpliesStringStringStringStringArray() throws Exception {
EJBMethodPermission permissionFooEEE = new EJBMethodPermission("foo", "", "", null);
EJBMethodPermission permissionFooMIP = new EJBMethodPermission("foo", "cat", "LocalHome", new String[] { "a", "b", "c", "d", "e"});
EJBMethodPermission permissionBarEEE = new EJBMethodPermission("bar", "", "", new String[] {});
EJBMethodPermission permissionFooEIP = new EJBMethodPermission("foo", "", "LocalHome", new String[] { "a", "b", "c", "d", "e"});
EJBMethodPermission permissionFooEIE = new EJBMethodPermission("foo", "", "LocalHome", new String[] {});
EJBMethodPermission permissionFooEI = new EJBMethodPermission("foo", "", "LocalHome", null);
assertTrue(permissionFooEEE.implies(permissionFooEEE));
assertTrue(permissionFooEEE.implies(permissionFooMIP));
assertTrue(permissionFooEEE.implies(permissionFooEIP));
assertTrue(permissionFooEEE.implies(permissionFooEIE));
assertTrue(permissionFooEEE.implies(permissionFooEI));
assertFalse(permissionFooMIP.implies(permissionFooEEE));
assertTrue(permissionFooEEE.equals(permissionFooEEE));
assertFalse(permissionFooEEE.equals(permissionFooMIP));
assertFalse(permissionFooMIP.equals(permissionFooEEE));
assertFalse(permissionFooEEE.implies(permissionBarEEE));
assertFalse(permissionBarEEE.implies(permissionFooEEE));
assertFalse(permissionFooEEE.equals(permissionBarEEE));
assertFalse(permissionBarEEE.equals(permissionFooEEE));
assertTrue(permissionFooEIP.implies(permissionFooMIP));
assertFalse(permissionFooEIE.implies(permissionFooMIP));
assertTrue(permissionFooEI.implies(permissionFooMIP));
assertTrue(permissionFooEI.implies(permissionFooEIP));
assertTrue(permissionFooEI.implies(permissionFooEIE));
assertFalse(permissionFooEEE.hashCode() == permissionBarEEE.hashCode());
doTestSerialization(permissionFooEEE);
doTestSerialization(permissionFooMIP);
doTestSerialization(permissionBarEEE);
doTestSerialization(permissionFooEIP);
doTestSerialization(permissionFooEIE);
doTestSerialization(permissionFooEI);
}
/*
* Testing EJBMethodPermission(String, String, Method)
*/
public void testConstructorStringStringMethod() throws Exception {
EJBMethodPermission permission = new EJBMethodPermission("foo", "ServiceEndpoint", method);
doTestSerialization(permission);
permission = new EJBMethodPermission("foo", null, method);
doTestSerialization(permission);
permission = new EJBMethodPermission("foo", "", method);
doTestSerialization(permission);
permission = new EJBMethodPermission("foo", "Home", method);
doTestSerialization(permission);
permission = new EJBMethodPermission("foo", "LocalHome", method);
doTestSerialization(permission);
permission = new EJBMethodPermission("foo", "Remote", method);
doTestSerialization(permission);
permission = new EJBMethodPermission("foo", "Local", method);
doTestSerialization(permission);
permission = new EJBMethodPermission("foo", "ServiceEndpoint", method);
doTestSerialization(permission);
assertEquals(permission.getName(), "foo");
assertEquals(permission.getActions(), "cat,ServiceEndpoint,java.lang.Integer,java.lang.Float,java.lang.Long,java.lang.Double,int[]");
// Parameter method must not be null
try {
permission = new EJBMethodPermission("foo", "ServiceEndpoint", null);
fail("Parameter method must not be null");
} catch(IllegalArgumentException iae) {
}
}
public void testImpliesStringStringMethod() {
}
private void doTestSerialization(EJBMethodPermission permission) throws Exception {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(permission);
oos.flush();
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
ObjectInputStream ois = new ObjectInputStream(bais);
Object o = ois.readObject();
assertEquals("Permission did not serialize correctly", permission, o);
}
class TestClass {
public Object cat(Integer a, Float b, Long c, Double d, int[] e) {
return null;
}
}
}