blob: b380d3d3fd16396591c02b861fb53a41f2f7d850 [file] [log] [blame]
/**
*
* Copyright 2003-2004 The Apache Software Foundation
*
* Licensed 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 });
} 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");
doTestSerialization(permission);
permission = new EJBMethodPermission("foo", "cat,,a,b,c,d");
doTestSerialization(permission);
permission = new EJBMethodPermission("foo", ",Home,a,b,c,d");
doTestSerialization(permission);
permission = new EJBMethodPermission("foo", "cat,Home,a,b,c,d");
doTestSerialization(permission);
// methodInterface ::= "Home" | "LocalHome" | "Remote" | "Local" | "ServiceEndpoint"
permission = new EJBMethodPermission("foo", "cat,Home,a,b,c,d");
doTestSerialization(permission);
permission = new EJBMethodPermission("foo", "cat,LocalHome,a,b,c,d");
doTestSerialization(permission);
permission = new EJBMethodPermission("foo", "cat,Remote,a,b,c,d");
doTestSerialization(permission);
permission = new EJBMethodPermission("foo", "cat,Local,a,b,c,d");
doTestSerialization(permission);
permission = new EJBMethodPermission("foo", "cat,ServiceEndpoint,a,b,c,d");
doTestSerialization(permission);
assertEquals(permission.getName(), "foo");
assertEquals(permission.getActions(), "cat,ServiceEndpoint,a,b,c,d");
// bad methodInterface
try {
permission = new EJBMethodPermission("foo", "cat,Interface,a,b,c,d");
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");
EJBMethodPermission permissionBarEEE = new EJBMethodPermission("bar", "");
EJBMethodPermission permissionFooEIP = new EJBMethodPermission("foo", ",LocalHome,a,b,c,d");
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" });
doTestSerialization(permission);
permission = new EJBMethodPermission("foo", "cat", "", new String[] { "a", "b", "c", "d" });
doTestSerialization(permission);
permission = new EJBMethodPermission("foo", "", "Home", new String[] { "a", "b", "c", "d" });
doTestSerialization(permission);
permission = new EJBMethodPermission("foo", "cat", "Home", new String[] { "a", "b", "c", "d" });
doTestSerialization(permission);
// methodInterface ::= "Home" | "LocalHome" | "Remote" | "Local" | "ServiceEndpoint"
permission = new EJBMethodPermission("foo", "cat", "Home", new String[] { "a", "b", "c", "d" });
doTestSerialization(permission);
permission = new EJBMethodPermission("foo", "cat", "LocalHome", new String[] { "a", "b", "c", "d" });
doTestSerialization(permission);
permission = new EJBMethodPermission("foo", "cat", "Remote", new String[] { "a", "b", "c", "d" });
doTestSerialization(permission);
permission = new EJBMethodPermission("foo", "cat", "Local", new String[] { "a", "b", "c", "d" });
doTestSerialization(permission);
permission = new EJBMethodPermission("foo", "cat", "ServiceEndpoint", new String[] { "a", "b", "c", "d" });
doTestSerialization(permission);
assertEquals(permission.getName(), "foo");
assertEquals(permission.getActions(), "cat,ServiceEndpoint,a,b,c,d");
// bad methodInterface
try {
permission = new EJBMethodPermission("foo", "cat", "Interface", new String[] { "a", "b", "c", "d" });
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" });
EJBMethodPermission permissionBarEEE = new EJBMethodPermission("bar", "", "", new String[] {});
EJBMethodPermission permissionFooEIP = new EJBMethodPermission("foo", "", "LocalHome", new String[] { "a", "b", "c", "d" });
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");
// 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) {
return null;
}
}
}