| /* |
| * Copyright (c) 2013, 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 org.glassfish.jacc.test.uncoveredmethods; |
| |
| import java.net.*; |
| import java.io.*; |
| import java.util.Enumeration; |
| import java.util.Hashtable; |
| |
| import com.sun.ejte.ccl.reporter.SimpleReporterAdapter; |
| |
| public class Client { |
| private static SimpleReporterAdapter stat = new SimpleReporterAdapter("appserv-tests"); |
| private static String testSuite = "Security::UncoveredHTTPMethods"; |
| private static String contextPathOpen = "/open"; |
| private static String contextPathDeny = "/deny"; |
| |
| private String host; |
| private String port; |
| private String username; |
| private String password; |
| |
| public static void main(String[] args) { |
| stat.addDescription(testSuite); |
| Client client = new Client(args); |
| client.doTests(); |
| stat.printSummary(); |
| } |
| |
| public Client(String[] args) { |
| host = args[0]; |
| port = args[1]; |
| username = args[2]; |
| password = args[3]; |
| System.out.println(" Host: " + host); |
| System.out.println(" Port: " + port); |
| System.out.println(" Username: " + username); |
| } |
| |
| public void doTests() { |
| testExample1(); |
| testExample1Put(); |
| testExample2(); |
| testExample2Delete(); |
| testExample3a(); |
| testExample3aPut(); |
| testExample3bPost(); |
| testExample3bDelete(); |
| testCovered1Post(); |
| testCovered1Put(); |
| testCovered2(); |
| testCovered2Put(); |
| testCovered3aPost(); |
| testCovered3aDelete(); |
| testCovered3b(); |
| testCovered3bPut(); |
| } |
| |
| public void testExample1() { |
| String servlet = "/Example1"; |
| String descriptionOpen = contextPathOpen+servlet; |
| String descriptionDeny = contextPathDeny+servlet; |
| |
| StringBuffer output = new StringBuffer(); |
| boolean success = doIndividualTest(servlet, null, 302, username, contextPathOpen, output); |
| int index = output.indexOf("https://"); |
| if (success && (index != -1)) { |
| stat.addStatus(descriptionOpen, stat.PASS); |
| } |
| else stat.addStatus(descriptionOpen, stat.FAIL); |
| |
| output = new StringBuffer(); |
| success = doIndividualTest(servlet, null, 302, username, contextPathDeny, output); |
| if (success) stat.addStatus(descriptionDeny, stat.PASS); |
| else stat.addStatus(descriptionDeny, stat.FAIL); |
| } |
| |
| public void testExample1Put() { |
| String servlet = "/Example1"; |
| String method = "PUT"; |
| String descriptionOpen = contextPathOpen+servlet+"-"+method; |
| String descriptionDeny = contextPathDeny+servlet+"-"+method; |
| |
| StringBuffer output = new StringBuffer(); |
| boolean success = doIndividualTest(servlet, method, 200, username, contextPathOpen, output); |
| if (success) { |
| stat.addStatus(descriptionOpen, stat.PASS); |
| } |
| else stat.addStatus(descriptionOpen, stat.FAIL); |
| |
| output = new StringBuffer(); |
| success = doIndividualTest(servlet, method, 403, username, contextPathDeny, output); |
| if (success) stat.addStatus(descriptionDeny, stat.PASS); |
| else stat.addStatus(descriptionDeny, stat.FAIL); |
| } |
| |
| public void testExample2() { |
| String servlet = "/Example2"; |
| String descriptionOpen = contextPathOpen+servlet; |
| String descriptionDeny = contextPathDeny+servlet; |
| |
| StringBuffer output = new StringBuffer(); |
| boolean success = doIndividualTest(servlet, null, 200, username, contextPathOpen, output); |
| if (success) { |
| stat.addStatus(descriptionOpen, stat.PASS); |
| } |
| else stat.addStatus(descriptionOpen, stat.FAIL); |
| |
| output = new StringBuffer(); |
| success = doIndividualTest(servlet, null, 403, username, contextPathDeny, output); |
| if (success) stat.addStatus(descriptionDeny, stat.PASS); |
| else stat.addStatus(descriptionDeny, stat.FAIL); |
| } |
| |
| public void testExample2Delete() { |
| String servlet = "/Example2"; |
| String method = "DELETE"; |
| String descriptionOpen = contextPathOpen+servlet+"-"+method; |
| String descriptionDeny = contextPathDeny+servlet+"-"+method; |
| |
| StringBuffer output = new StringBuffer(); |
| boolean success = doIndividualTest(servlet, method, 403, username, contextPathOpen, output); |
| if (success) { |
| stat.addStatus(descriptionOpen, stat.PASS); |
| } |
| else stat.addStatus(descriptionOpen, stat.FAIL); |
| |
| output = new StringBuffer(); |
| success = doIndividualTest(servlet, method, 403, username, contextPathDeny, output); |
| if (success) stat.addStatus(descriptionDeny, stat.PASS); |
| else stat.addStatus(descriptionDeny, stat.FAIL); |
| } |
| |
| public void testExample3a() { |
| String servlet = "/Example3a"; |
| String descriptionOpen = contextPathOpen+servlet; |
| String descriptionDeny = contextPathDeny+servlet; |
| |
| StringBuffer output = new StringBuffer(); |
| boolean success = doIndividualTest(servlet, null, 200, username, contextPathOpen, output); |
| if (success) { |
| stat.addStatus(descriptionOpen, stat.PASS); |
| } |
| else stat.addStatus(descriptionOpen, stat.FAIL); |
| |
| output = new StringBuffer(); |
| success = doIndividualTest(servlet, null, 200, username, contextPathDeny, output); |
| if (success) stat.addStatus(descriptionDeny, stat.PASS); |
| else stat.addStatus(descriptionDeny, stat.FAIL); |
| } |
| |
| public void testExample3aPut() { |
| String servlet = "/Example3a"; |
| String method = "PUT"; |
| String descriptionOpen = contextPathOpen+servlet+"-"+method; |
| String descriptionDeny = contextPathDeny+servlet+"-"+method; |
| |
| StringBuffer output = new StringBuffer(); |
| boolean success = doIndividualTest(servlet, method, 200, username, contextPathOpen, output); |
| if (success) { |
| stat.addStatus(descriptionOpen, stat.PASS); |
| } |
| else stat.addStatus(descriptionOpen, stat.FAIL); |
| |
| output = new StringBuffer(); |
| success = doIndividualTest(servlet, method, 403, username, contextPathDeny, output); |
| if (success) stat.addStatus(descriptionDeny, stat.PASS); |
| else stat.addStatus(descriptionDeny, stat.FAIL); |
| } |
| |
| public void testExample3bPost() { |
| String servlet = "/Example3b"; |
| String method = "POST"; |
| String descriptionOpen = contextPathOpen+servlet+"-"+method; |
| String descriptionDeny = contextPathDeny+servlet+"-"+method; |
| |
| StringBuffer output = new StringBuffer(); |
| boolean success = doIndividualTest(servlet, method, 200, username, contextPathOpen, output); |
| if (success) { |
| stat.addStatus(descriptionOpen, stat.PASS); |
| } |
| else stat.addStatus(descriptionOpen, stat.FAIL); |
| |
| output = new StringBuffer(); |
| success = doIndividualTest(servlet, method, 200, username, contextPathDeny, output); |
| if (success) stat.addStatus(descriptionDeny, stat.PASS); |
| else stat.addStatus(descriptionDeny, stat.FAIL); |
| } |
| |
| public void testExample3bDelete() { |
| String servlet = "/Example3b"; |
| String method = "DELETE"; |
| String descriptionOpen = contextPathOpen+servlet+"-"+method; |
| String descriptionDeny = contextPathDeny+servlet+"-"+method; |
| |
| StringBuffer output = new StringBuffer(); |
| boolean success = doIndividualTest(servlet, method, 200, username, contextPathOpen, output); |
| if (success) { |
| stat.addStatus(descriptionOpen, stat.PASS); |
| } |
| else stat.addStatus(descriptionOpen, stat.FAIL); |
| |
| output = new StringBuffer(); |
| success = doIndividualTest(servlet, method, 403, username, contextPathDeny, output); |
| if (success) stat.addStatus(descriptionDeny, stat.PASS); |
| else stat.addStatus(descriptionDeny, stat.FAIL); |
| } |
| |
| public void testCovered1Post() { |
| String servlet = "/Covered1"; |
| String method = "POST"; |
| String descriptionOpen = contextPathOpen+servlet+"-"+method; |
| String descriptionDeny = contextPathDeny+servlet+"-"+method; |
| |
| StringBuffer output = new StringBuffer(); |
| boolean success = doIndividualTest(servlet, method, 302, username, contextPathOpen, output); |
| int index = output.indexOf("https://"); |
| if (success && (index != -1)) { |
| stat.addStatus(descriptionOpen, stat.PASS); |
| } |
| else stat.addStatus(descriptionOpen, stat.FAIL); |
| |
| output = new StringBuffer(); |
| success = doIndividualTest(servlet, method, 302, username, contextPathDeny, output); |
| if (success) stat.addStatus(descriptionDeny, stat.PASS); |
| else stat.addStatus(descriptionDeny, stat.FAIL); |
| } |
| |
| public void testCovered1Put() { |
| String servlet = "/Covered1"; |
| String method = "PUT"; |
| String descriptionOpen = contextPathOpen+servlet+"-"+method; |
| String descriptionDeny = contextPathDeny+servlet+"-"+method; |
| |
| StringBuffer output = new StringBuffer(); |
| boolean success = doIndividualTest(servlet, method, 302, username, contextPathOpen, output); |
| int index = output.indexOf("https://"); |
| if (success && (index != -1)) { |
| stat.addStatus(descriptionOpen, stat.PASS); |
| } |
| else stat.addStatus(descriptionOpen, stat.FAIL); |
| |
| output = new StringBuffer(); |
| success = doIndividualTest(servlet, method, 302, username, contextPathDeny, output); |
| if (success) stat.addStatus(descriptionDeny, stat.PASS); |
| else stat.addStatus(descriptionDeny, stat.FAIL); |
| } |
| |
| public void testCovered2() { |
| String servlet = "/Covered2"; |
| String descriptionOpen = contextPathOpen+servlet; |
| String descriptionDeny = contextPathDeny+servlet; |
| |
| StringBuffer output = new StringBuffer(); |
| boolean success = doIndividualTest(servlet, null, 302, username, contextPathOpen, output); |
| int index = output.indexOf("https://"); |
| if (success && (index != -1)) { |
| stat.addStatus(descriptionOpen, stat.PASS); |
| } |
| else stat.addStatus(descriptionOpen, stat.FAIL); |
| |
| output = new StringBuffer(); |
| success = doIndividualTest(servlet, null, 302, username, contextPathDeny, output); |
| if (success) stat.addStatus(descriptionDeny, stat.PASS); |
| else stat.addStatus(descriptionDeny, stat.FAIL); |
| } |
| |
| public void testCovered2Put() { |
| String servlet = "/Covered2"; |
| String method = "PUT"; |
| String descriptionOpen = contextPathOpen+servlet+"-"+method; |
| String descriptionDeny = contextPathDeny+servlet+"-"+method; |
| |
| StringBuffer output = new StringBuffer(); |
| boolean success = doIndividualTest(servlet, method, 403, username, contextPathOpen, output); |
| if (success) { |
| stat.addStatus(descriptionOpen, stat.PASS); |
| } |
| else stat.addStatus(descriptionOpen, stat.FAIL); |
| |
| output = new StringBuffer(); |
| success = doIndividualTest(servlet, method, 403, username, contextPathDeny, output); |
| if (success) stat.addStatus(descriptionDeny, stat.PASS); |
| else stat.addStatus(descriptionDeny, stat.FAIL); |
| } |
| |
| public void testCovered3aPost() { |
| String servlet = "/Covered3a"; |
| String method = "POST"; |
| String descriptionOpen = contextPathOpen+servlet+"-"+method; |
| String descriptionDeny = contextPathDeny+servlet+"-"+method; |
| |
| StringBuffer output = new StringBuffer(); |
| boolean success = doIndividualTest(servlet, method, 200, username, contextPathOpen, output); |
| if (success) { |
| stat.addStatus(descriptionOpen, stat.PASS); |
| } |
| else stat.addStatus(descriptionOpen, stat.FAIL); |
| |
| output = new StringBuffer(); |
| success = doIndividualTest(servlet, method, 200, username, contextPathDeny, output); |
| if (success) stat.addStatus(descriptionDeny, stat.PASS); |
| else stat.addStatus(descriptionDeny, stat.FAIL); |
| } |
| |
| public void testCovered3aDelete() { |
| String servlet = "/Covered3a"; |
| String method = "DELETE"; |
| String descriptionOpen = contextPathOpen+servlet+"-"+method; |
| String descriptionDeny = contextPathDeny+servlet+"-"+method; |
| |
| StringBuffer output = new StringBuffer(); |
| boolean success = doIndividualTest(servlet, method, 200, username, contextPathOpen, output); |
| if (success) { |
| stat.addStatus(descriptionOpen, stat.PASS); |
| } |
| else stat.addStatus(descriptionOpen, stat.FAIL); |
| |
| output = new StringBuffer(); |
| success = doIndividualTest(servlet, method, 200, username, contextPathDeny, output); |
| if (success) stat.addStatus(descriptionDeny, stat.PASS); |
| else stat.addStatus(descriptionDeny, stat.FAIL); |
| } |
| |
| public void testCovered3b() { |
| String servlet = "/Covered3b"; |
| String descriptionOpen = contextPathOpen+servlet; |
| String descriptionDeny = contextPathDeny+servlet; |
| |
| StringBuffer output = new StringBuffer(); |
| boolean success = doIndividualTest(servlet, null, 302, username, contextPathOpen, output); |
| int index = output.indexOf("https://"); |
| if (success && (index != -1)) { |
| stat.addStatus(descriptionOpen, stat.PASS); |
| } |
| else stat.addStatus(descriptionOpen, stat.FAIL); |
| |
| output = new StringBuffer(); |
| success = doIndividualTest(servlet, null, 302, username, contextPathDeny, output); |
| if (success) stat.addStatus(descriptionDeny, stat.PASS); |
| else stat.addStatus(descriptionDeny, stat.FAIL); |
| } |
| |
| public void testCovered3bPut() { |
| String servlet = "/Covered3b"; |
| String method = "PUT"; |
| String descriptionOpen = contextPathOpen+servlet+"-"+method; |
| String descriptionDeny = contextPathDeny+servlet+"-"+method; |
| |
| StringBuffer output = new StringBuffer(); |
| boolean success = doIndividualTest(servlet, method, 302, username, contextPathOpen, output); |
| int index = output.indexOf("https://"); |
| if (success && (index != -1)) { |
| stat.addStatus(descriptionOpen, stat.PASS); |
| } |
| else stat.addStatus(descriptionOpen, stat.FAIL); |
| |
| output = new StringBuffer(); |
| success = doIndividualTest(servlet, method, 302, username, contextPathDeny, output); |
| if (success) stat.addStatus(descriptionDeny, stat.PASS); |
| else stat.addStatus(descriptionDeny, stat.FAIL); |
| } |
| |
| private boolean doIndividualTest(String servlet, String method, int code, String user, String context, StringBuffer output) { |
| boolean result = false; |
| try { |
| int rtncode; |
| String url = "http://" + host + ":" + port + context + servlet; |
| System.out.println("\nInvoking servlet at " + url); |
| rtncode = invokeServlet(url, method, user, output); |
| System.out.println("The servlet return code: " + rtncode); |
| if (rtncode != code) { |
| System.out.println("Incorrect return code, expecting: " + code); |
| } |
| else result = true; |
| } catch (Exception ex) { |
| System.out.println("Exception: " + ex.toString()); |
| //ex.printStackTrace(); |
| } |
| return result; |
| } |
| |
| private int invokeServlet(String url, String method, String user, StringBuffer output) throws Exception { |
| String httpMethod = "GET"; |
| if ((method != null) && (method.length() > 0)) httpMethod = method; |
| System.out.println("Invoking servlet with HTTP method: " + httpMethod); |
| URL u = new URL(url); |
| HttpURLConnection c1 = (HttpURLConnection) u.openConnection(); |
| c1.setRequestMethod(httpMethod); |
| if ((user != null) && (user.length() > 0)) { |
| // Add BASIC header for authentication |
| String auth = user + ":" + password; |
| String authEncoded = new sun.misc.BASE64Encoder().encode(auth.getBytes()); |
| c1.setRequestProperty("Authorization", "Basic " + authEncoded); |
| } |
| c1.setUseCaches(false); |
| |
| // Connect and get the response code and/or output to verify |
| c1.connect(); |
| int code = c1.getResponseCode(); |
| if (code == HttpURLConnection.HTTP_OK) { |
| InputStream is = null; |
| BufferedReader input = null; |
| String line = null; |
| try { |
| is = c1.getInputStream(); |
| input = new BufferedReader(new InputStreamReader(is)); |
| while ((line = input.readLine()) != null) { |
| output.append(line); |
| //System.out.println(line); |
| } |
| } |
| finally { |
| try { if (is != null) is.close(); } |
| catch (Exception exc) {} |
| try { if (input != null) input.close(); } |
| catch (Exception exc) {} |
| } |
| } |
| else if (code == HttpURLConnection.HTTP_MOVED_TEMP) { |
| URL redir = new URL(c1.getHeaderField("Location")); |
| String line = "Servlet redirected to: " + redir.toString(); |
| output.append(line); |
| System.out.println(line); |
| } |
| return code; |
| } |
| } |