blob: eada2960c592b74f2e6f9be13df8191b4834586c [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 java.security.Permission;
import java.io.ByteArrayOutputStream;
import java.io.ObjectOutputStream;
import java.io.ByteArrayInputStream;
import java.io.ObjectInputStream;
import javax.servlet.http.HttpServletRequest;
import junit.framework.TestCase;
/**
* @version $Rev$ $Date$
*/
public class WebResourcePermissionTest extends TestCase {
public void testSerialization() throws Exception {
WebResourcePermission permission = new WebResourcePermission("/bar/*:/bar/stool", "GET,POST");
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(permission);
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
ObjectInputStream ois = new ObjectInputStream(bais);
Object o = ois.readObject();
assertEquals(permission, o);
}
/*
* Testing WebResourcePermission(java.lang.String, java.lang.String)
*/
public void testConstructorStringString() {
// null URLPatternSpec for a WebResourcePermission
try {
new WebResourcePermission(null, "GET,POST");
fail("null URLPatternSpec for a WebResourcePermission");
} catch (IllegalArgumentException iae) {
}
//Default pattern
checkPermission(new WebResourcePermission("/", "GET,POST"), "GET,POST");
checkPermission(new WebResourcePermission("/:/foo", "GET,POST"), "GET,POST");
checkPermission(new WebResourcePermission("/:*.asp", "GET,POST"), "GET,POST");
checkPermission(new WebResourcePermission("/:/foo:*.asp", "GET,POST"), "GET,POST");
checkPermission(new WebResourcePermission("", "GET,POST"), "GET,POST");
checkPermission(new WebResourcePermission("/*", "GET,POST"), "GET,POST");
checkPermission(new WebResourcePermission("/*:/bar/stool", "GET,POST"), "GET,POST");
//default pattern as qualifier
try {
new WebResourcePermission("/bar/*:/*", "GET,POST");
fail("/*:/");
} catch (IllegalArgumentException iae) {
}
try {
new WebResourcePermission("/bar/*:/*", "GET,POST");
fail("/*:/*");
} catch (IllegalArgumentException iae) {
}
try {
new WebResourcePermission("/bar/*:/*", "GET,POST");
fail("/:/");
} catch (IllegalArgumentException iae) {
}
try {
new WebResourcePermission("/bar/*:/*", "GET,POST");
fail("/:/*");
} catch (IllegalArgumentException iae) {
}
//Exact pattern
checkPermission(new WebResourcePermission("/foo", "GET,POST"), "GET,POST");
// missing qualifiers
try {
new WebResourcePermission("/foo:", "GET,POST");
fail("/foo:");
} catch (IllegalArgumentException iae) {
}
// qualifer provided when first pattern is exact
try {
new WebResourcePermission("/foo:/foo/bar", "GET,POST");
fail("/foo:/foo/bar");
} catch (IllegalArgumentException iae) {
}
//default pattern as a qualifier
try {
new WebResourcePermission("/foo:/", "GET,POST");
fail("/foo:/");
} catch (IllegalArgumentException iae) {
}
//Path prefix pattern
checkPermission(new WebResourcePermission("/bar/*", "GET,POST"), "GET,POST");
checkPermission(new WebResourcePermission("/bar/*:/bar/stool", "GET,POST"), "GET,POST");
try {
new WebResourcePermission("/foo/*:*.asp", "GET,POST");
fail("/foo/*:*.asp");
} catch (IllegalArgumentException iae) {
}
//first pattern doesn't match qualifier
try {
new WebResourcePermission("/bar/*:/cat/stool/*", "GET,POST");
fail("/bar/*:/cat/stool/*");
} catch (IllegalArgumentException iae) {
}
try {
new WebResourcePermission("/bar/stool/*:/bar", "GET,POST");
fail("/bar/stool/*:/bar");
} catch (IllegalArgumentException iae) {
}
try {
new WebResourcePermission("/bar/stool/*:/bar/*", "GET,POST");
fail("/bar/stool/*:/bar/stool/*");
} catch (IllegalArgumentException iae) {
}
//qualifier is same as first pattern
try {
new WebResourcePermission("/bar/stool/*:/bar/stool/*", "GET,POST");
fail("/bar/stool/*:/bar/stool/*");
} catch (IllegalArgumentException iae) {
}
//default pattern as qualifier
try {
new WebResourcePermission("/bar/*:/*", "GET,POST");
fail("/bar/*:/");
} catch (IllegalArgumentException iae) {
}
//Extension pattern
checkPermission(new WebResourcePermission("*.do", "GET,POST"), "GET,POST");
checkPermission(new WebResourcePermission("*.do:/login.do", "GET,POST"), "GET,POST");
checkPermission(new WebResourcePermission("*.do:/foo/*", "GET,POST"), "GET,POST");
//default pattern as qualifier
try {
new WebResourcePermission("*.do:/*", "GET,POST");
fail("*.do:/*");
} catch (IllegalArgumentException iae) {
}
//qualifier is extension pattern
try {
new WebResourcePermission("*.do:*.jsp", "GET,POST");
fail("*.do:/*");
} catch (IllegalArgumentException iae) {
}
//qualifier is exact and does not match first pattern
try {
new WebResourcePermission("*.do:/login", "GET,POST");
fail("*.do:/*");
} catch (IllegalArgumentException iae) {
}
//HTTP method
checkPermission(new WebResourcePermission("/foo", "GET,POST,POST,GET"), "GET,POST");
checkPermission(new WebResourcePermission("/foo", "GET,POST,BAR"), "GET,POST,BAR");
try {
new WebResourcePermission("/foo", "GET,POST,B A R");
fail("Bad HTTP method");
} catch (IllegalArgumentException iae) {
}
// bad HTTP method for a WebResourcePermission
try {
new WebResourcePermission("/foo", "GET,POST:INTEGRAL");
fail("integrity constraint in a WebResourcePermission accepted");
} catch (IllegalArgumentException iae) {
}
}
private void checkPermission(Permission permission, String actions) {
assertTrue(permission.equals(permission));
assertEquals(actions, permission.getActions());
}
public void testExcluded() {
WebResourcePermission permission = new WebResourcePermission("/foo", "!GET,POST");
assertTrue(permission.equals(permission));
assertEquals(permission.getName(), "/foo");
assertEquals(permission.getActions(), "!GET,POST");
permission = new WebResourcePermission("/foo", "!GET,POST,POST,GET");
assertEquals(permission.getActions(), "!GET,POST");
permission = new WebResourcePermission("/foo", "!GET,POST,BAR");
// bad HTTP method
try {
permission = new WebResourcePermission("/foo", "!GET,POST,B A R");
fail("Bad HTTP method");
} catch (IllegalArgumentException iae) {
}
// bad HTTP method for a WebResourcePermission
try {
permission = new WebResourcePermission("/foo", "!GET,POST:INTEGRAL");
} catch (IllegalArgumentException iae) {
}
// null URLPatternSpec for a WebResourcePermission
try {
permission = new WebResourcePermission(null, "!GET,POST");
fail("null URLPatternSpec for a WebResourcePermission");
} catch (IllegalArgumentException iae) {
}
}
public void testImpliesStringString() {
// The argument is an instanceof WebResourcePermission
Permission pA = new WebResourcePermission("/foo", "");
Permission pB = new WebUserDataPermission("/foo", "");
assertFalse(pA.implies(pB));
assertFalse(pB.implies(pA));
pA = new WebResourcePermission("/foo", "");
pB = new WebResourcePermission("/foo", "GET,POST");
assertTrue(pA.implies(pB));
assertFalse(pB.implies(pA));
pA = new WebResourcePermission("/foo/*:/foo/bar", "");
pB = new WebResourcePermission("/foo/bar", "");
assertFalse(pA.implies(pB));
assertFalse(pB.implies(pA));
pA = new WebResourcePermission("/foo/bar/*:/foo/bar/cat/dog", "");
pB = new WebResourcePermission("/foo/bar/*:/foo/bar/cat/*", "");
assertTrue(pA.implies(pB));
assertFalse(pB.implies(pA));
pA = new WebResourcePermission("/:/a.jsp:/b.jsp:/c.jsp", "GET,POST,PUT,DELETE,HEAD,OPTIONS,TRACE");
pB = new WebResourcePermission("/:/a.jsp:/c.jsp:/b.jsp", (String) null);
// assertTrue(pA.implies(pB)); // no longer true with extension methods
assertTrue(pB.implies(pA));
}
public void testImpliesExtensionExcludes() {
//test against all permissions
WebResourcePermission pA = new WebResourcePermission("/foo", "FOO,BAR,fizzle");
WebResourcePermission pB = new WebResourcePermission("/foo", (String) null);
assertFalse(pA.implies(pB));
assertTrue(pB.implies(pA));
assertTrue(pA.implies(pA));
assertTrue(pB.implies(pB));
pA = new WebResourcePermission("/foo", "!FOO,BAR,fizzle");
pB = new WebResourcePermission("/foo", (String) null);
assertFalse(pA.implies(pB));
assertTrue(pB.implies(pA));
assertTrue(pA.implies(pA));
pA = new WebResourcePermission("/foo", "GET,POST");
pB = new WebResourcePermission("/foo", (String) null);
assertFalse(pA.implies(pB));
assertTrue(pB.implies(pA));
pA = new WebResourcePermission("/foo", "!GET,POST");
pB = new WebResourcePermission("/foo", (String) null);
assertFalse(pA.implies(pB));
assertTrue(pB.implies(pA));
//both positive sets
pA = new WebResourcePermission("/foo", "GET,POST");
pB = new WebResourcePermission("/foo", "GET,POST,OPTIONS");
assertFalse(pA.implies(pB));
assertTrue(pB.implies(pA));
pA = new WebResourcePermission("/foo", "GET,POST");
pB = new WebResourcePermission("/foo", "GET,POST,FOO");
assertFalse(pA.implies(pB));
assertTrue(pB.implies(pA));
pA = new WebResourcePermission("/foo", "GET,FOO");
pB = new WebResourcePermission("/foo", "GET,BAR,FOO");
assertFalse(pA.implies(pB));
assertTrue(pB.implies(pA));
pA = new WebResourcePermission("/foo", "FOO,BAR");
pB = new WebResourcePermission("/foo", "FOO,BAR,fizzle");
assertFalse(pA.implies(pB));
assertTrue(pB.implies(pA));
//both exclusions
pA = new WebResourcePermission("/foo", "!FOO,BAR,fizzle");
pB = new WebResourcePermission("/foo", "!FOO,BAR");
assertFalse(pA.implies(pB));
assertTrue(pB.implies(pA));
pA = new WebResourcePermission("/foo", "!GET,POST,FOO");
pB = new WebResourcePermission("/foo", "!GET,POST");
assertFalse(pA.implies(pB));
assertTrue(pB.implies(pA));
pA = new WebResourcePermission("/foo", "!GET,BAR,FOO");
pB = new WebResourcePermission("/foo", "!GET,BAR");
assertFalse(pA.implies(pB));
assertTrue(pB.implies(pA));
pA = new WebResourcePermission("/foo", "!GET,POST,OPTIONS");
pB = new WebResourcePermission("/foo", "!GET,POST");
assertFalse(pA.implies(pB));
assertTrue(pB.implies(pA));
//one of each
pA = new WebResourcePermission("/foo", "GET");
pB = new WebResourcePermission("/foo", "!FOO,BAR");
assertFalse(pA.implies(pB));
assertTrue(pB.implies(pA));
pA = new WebResourcePermission("/foo", "fizzle");
pB = new WebResourcePermission("/foo", "!FOO,BAR");
assertFalse(pA.implies(pB));
assertTrue(pB.implies(pA));
pA = new WebResourcePermission("/foo", "GET");
pB = new WebResourcePermission("/foo", "!POST");
assertFalse(pA.implies(pB));
assertTrue(pB.implies(pA));
pA = new WebResourcePermission("/foo", "GET");
pB = new WebResourcePermission("/foo", "!POST,BAR");
assertFalse(pA.implies(pB));
assertTrue(pB.implies(pA));
}
/*
* Testing WebResourcePermission(String, String[])
*/
public void testConstructorStringStringArray() {
}
public void testImpliesStringStringArray() {
}
/*
* Testing WebResourcePermission(HttpServletRequest)
*/
public void testConstructorHttpServletRequest() {
Permission p = new WebResourcePermission(new MockHttpServletRequest("/foo", "", "GET"));
checkPermission(p, "/foo", "GET");
p = new WebResourcePermission(new MockHttpServletRequest("", "/foo", "GET"));
checkPermission(p, "/foo", "GET");
p = new WebResourcePermission(new MockHttpServletRequest("/foo", "/foo", "BAR"));
checkPermission(p, "/foo/foo", "BAR");
p = new WebResourcePermission(new MockHttpServletRequest("/foo", "/foo:bar", "BAR"));
checkPermission(p, "/foo/foo%3Abar", "BAR");
p = new WebResourcePermission(new MockHttpServletRequest("/foo", "/foo%3Abar", "BAR"));
checkPermission(p, "/foo/foo%3Abar", "BAR");
}
private void checkPermission(Permission p, String name, String actions) {
assertEquals(p.getName(), name);
assertEquals(p.getActions(), actions);
}
public void testImpliesHttpServletRequest() {
}
public void testGetActions() {
WebResourcePermission p = new WebResourcePermission("/foo", "");
assertEquals(p.getActions(), "");
p = new WebResourcePermission("/foo", "!GET,POST");
assertEquals(p.getActions(), "!GET,POST");
p = new WebResourcePermission("/foo", "!POST,GET");
assertEquals(p.getActions(), "!GET,POST");
p = new WebResourcePermission("/foo", "!POST,GET,GET,POST");
assertEquals(p.getActions(), "!GET,POST");
//extension methods follow regular methods
p = new WebResourcePermission("/foo", "FOO,BAR,POST,FOO,GET,GET,POST");
assertEquals("GET,POST,BAR,FOO", p.getActions());
p = new WebResourcePermission("/foo", "!FOO,BAR,POST,FOO,GET,GET,POST");
assertEquals("!GET,POST,BAR,FOO", p.getActions());
}
public static void main(String[] args) {
WebResourcePermissionTest test = new WebResourcePermissionTest();
test.testConstructorStringString();
test.testImpliesStringString();
test.testConstructorStringStringArray();
test.testImpliesStringStringArray();
test.testConstructorHttpServletRequest();
test.testImpliesHttpServletRequest();
}
}