| /* | |
| * Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved. | |
| * | |
| * This program and the accompanying materials are made available under the | |
| * terms of the Eclipse Public License v. 2.0, which is available at | |
| * http://www.eclipse.org/legal/epl-2.0. | |
| * | |
| * This Source Code may also be made available under the following Secondary | |
| * Licenses when the conditions for such availability set forth in the | |
| * Eclipse Public License v. 2.0 are satisfied: GNU General Public License, | |
| * version 2 with the GNU Classpath Exception, which is available at | |
| * https://www.gnu.org/software/classpath/license.html. | |
| * | |
| * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 | |
| */ | |
| package jakarta.security.jacc; | |
| import jakarta.security.jacc.URLPattern; | |
| import com.sun.ejte.ccl.reporter.SimpleReporterAdapter; | |
| public class TestURLPattern { | |
| private static SimpleReporterAdapter stat = | |
| new SimpleReporterAdapter("appserv-tests"); | |
| private static String testSuite = "Sec::JACC API testURLPattern "; | |
| private static void test_patternType(String p, int expected) { | |
| String description = "testPatternType:" + p; | |
| URLPattern u = new URLPattern(p); | |
| int result = u.patternType(); | |
| if (result == expected) { | |
| System.out.println("patternType: " + expected + " " + | |
| result + " succeded " + u); | |
| stat.addStatus(description, stat.PASS); | |
| } else { | |
| System.out.println("patternType: " + expected + " " + | |
| result + " failed " + u); | |
| stat.addStatus(description, stat.FAIL); | |
| } | |
| } | |
| private static void test_compareTo(String p1, int p1Type, | |
| String p2, int p2Type) { | |
| String description = "testCompareTo:" + | |
| p1 + "-" + p1Type + "-" + p2 + "-" + p2Type; | |
| URLPattern u1 = new URLPattern(p1); | |
| URLPattern u2 = new URLPattern(p2); | |
| int expected = p1Type - p2Type; | |
| boolean unknown = false; | |
| if (expected == 0 && p1.compareTo(p2) != 0) unknown = true; | |
| expected = expected > 0 ? 1 : (expected < 0 ? -1 : 0); | |
| int result = u1.compareTo(u2); | |
| int inverse = u2.compareTo(u1); | |
| if (result == inverse * -1) { | |
| if (result == expected) { | |
| System.out.println("compareTo(->): " + expected + " " + | |
| result + " succeded " + u1 + "\t" + u2); | |
| stat.addStatus(description, stat.PASS); | |
| } else if (result != 0 && unknown) { | |
| System.out.println("compareTo(->): !0 " + | |
| result + " succeded " + u1 + "\t" + u2); | |
| stat.addStatus(description, stat.PASS); | |
| } else { | |
| System.out.println("compareTo(->): " + expected + " " + | |
| result + " failed " + u1 + "\t" + u2); | |
| stat.addStatus(description, stat.FAIL); | |
| } | |
| } else { | |
| System.out.println("compareTo(<-): " + expected * -1 + " " + | |
| inverse + " failed " + u2 + "\t" + u1); | |
| stat.addStatus(description, stat.FAIL); | |
| } | |
| } | |
| private static boolean get_impliesExpected( | |
| String p1, int p1Type, String p2, int p2Type) { | |
| boolean expected = false; | |
| switch(p1Type) { | |
| case URLPattern.PT_EXACT: | |
| if (p2Type == URLPattern.PT_EXACT && p1.equals(p2)) { | |
| expected = true; | |
| } | |
| break; | |
| case URLPattern.PT_DEFAULT: | |
| expected = true; | |
| break; | |
| case URLPattern.PT_EXTENSION: | |
| if (p2Type == URLPattern.PT_EXTENSION && p1.equals(p2)) { | |
| expected = true; | |
| } else if (p2Type == URLPattern.PT_EXACT && | |
| p2.endsWith(p1.substring(1))) { | |
| expected = true; | |
| } | |
| break; | |
| case URLPattern.PT_PREFIX: | |
| if (p1.equals("/*")) { | |
| expected = true; | |
| } else if (p2.startsWith(p1.substring(0,p1.length()-2)) && | |
| (p2.length() == p1.length()-2 || | |
| p2.substring(p1.length()-2).startsWith("/"))) { | |
| expected = true; | |
| } | |
| break; | |
| } | |
| return expected; | |
| } | |
| private static void test_implies( | |
| String p1, int p1Type, String p2, int p2Type) { | |
| String description = "testImplies:" + | |
| p1 + "-" + p1Type + "-" + p2 + "-" + p2Type; | |
| URLPattern u1 = new URLPattern(p1); | |
| URLPattern u2 = new URLPattern(p2); | |
| boolean expected = get_impliesExpected(p1,p1Type,p2,p2Type); | |
| boolean expectedInverse = get_impliesExpected(p2,p2Type,p1,p1Type); | |
| boolean result = u1.implies(u2); | |
| boolean inverse = u2.implies(u1); | |
| if (result == expected) { | |
| System.out.println("implies(->): " + expected + " " + result + | |
| " succeded " + u1 + "\t" + u2); | |
| stat.addStatus(description, stat.PASS); | |
| } else if (inverse != expectedInverse) { | |
| System.out.println("implies(<-): " + expectedInverse + " " + | |
| inverse + " failed " + u2 + "\t" + u1); | |
| stat.addStatus(description, stat.FAIL); | |
| } else { | |
| System.out.println("implies(->): " + expected + " " + result + | |
| " failed " + u1 + "\t" + u2); | |
| stat.addStatus(description, stat.FAIL); | |
| } | |
| } | |
| private static void test_equals( | |
| String p1, int p1Type, String p2, int p2Type) { | |
| String description = "testEquals:" + | |
| p1 + "-" + p1Type + "-" + p2 + "-" + p2Type; | |
| URLPattern u1 = new URLPattern(p1); | |
| URLPattern u2 = new URLPattern(p2); | |
| boolean expected = (p1Type == p2Type) ? p1.compareTo(p2) == 0 : false; | |
| boolean result = u1.equals(u2); | |
| boolean inverse = u2.equals(u1); | |
| if (result == inverse) { | |
| if (result == true && (!u1.implies(u2) || !u2.implies(u1))) { | |
| System.out.println("equals(<->): " + expected + " " + | |
| result + " failed " + u2 + "\t" + u1); | |
| stat.addStatus(description, stat.FAIL); | |
| } else if (result == expected) { | |
| System.out.println("equals(-->): " + expected + " " + | |
| result + " succeded " + u1 + "\t" + u2); | |
| stat.addStatus(description, stat.PASS); | |
| } else { | |
| System.out.println("equals(-->): " + expected + " " + | |
| result + " failed " + u1 + "\t" + u2); | |
| stat.addStatus(description, stat.FAIL); | |
| } | |
| } else { | |
| System.out.println("equals(<--): " + result + " " + | |
| inverse + " failed " + u2 + "\t" + u1); | |
| stat.addStatus(description, stat.FAIL); | |
| } | |
| } | |
| public static void main ( String[] args ) { | |
| stat.addDescription(testSuite); | |
| String upArray[] = { | |
| "/a/b/c.jsp", | |
| "/a/c", | |
| "/*", | |
| "/a/*", | |
| "/a/c/*", | |
| "//*", | |
| "*.jsp", | |
| "*.asp", | |
| "/" | |
| /* COMMENTED OUT! ,"//" */ | |
| }; | |
| int upTypeArray[] = { | |
| URLPattern.PT_EXACT, | |
| URLPattern.PT_EXACT, | |
| URLPattern.PT_PREFIX, | |
| URLPattern.PT_PREFIX, | |
| URLPattern.PT_PREFIX, | |
| URLPattern.PT_PREFIX, | |
| URLPattern.PT_EXTENSION, | |
| URLPattern.PT_EXTENSION, | |
| URLPattern.PT_DEFAULT | |
| /* COMMENTED OUT! ,URLPattern.PT_DEFAULT */ | |
| }; | |
| for (int i=0; i<upArray.length; i++) { | |
| test_patternType(upArray[i],upTypeArray[i]); | |
| } | |
| for (int i=0; i<upArray.length; i++) { | |
| for (int j=0; j<upArray.length; j++) { | |
| test_compareTo(upArray[i],upTypeArray[i], | |
| upArray[j],upTypeArray[j]); | |
| } | |
| } | |
| for (int i=0; i<upArray.length; i++) { | |
| for (int j=0; j<upArray.length; j++) { | |
| test_implies(upArray[i],upTypeArray[i], | |
| upArray[j],upTypeArray[j]); | |
| } | |
| } | |
| for (int i=0; i<upArray.length; i++) { | |
| for (int j=0; j<upArray.length; j++) { | |
| test_equals(upArray[i],upTypeArray[i], | |
| upArray[j],upTypeArray[j]); | |
| } | |
| } | |
| stat.printSummary(testSuite); | |
| } | |
| } |