/* * 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(); } }