|  | /* | 
|  | * Copyright (c) 1997, 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 test.web.jsfinjection; | 
|  | import org.testng.annotations.Configuration; | 
|  | import org.testng.annotations.ExpectedExceptions; | 
|  | import org.testng.annotations.Test; | 
|  | import org.testng.annotations.*; | 
|  | import org.testng.Assert; | 
|  |  | 
|  | import java.io.*; | 
|  | import java.net.*; | 
|  | import java.util.*; | 
|  |  | 
|  | /** | 
|  | * Simple TestNG client for basic WAR containing JSF page with injectited values. | 
|  | * Client checks for two values: injected string and injected number. | 
|  | * If both values are as expected test passes. | 
|  | */ | 
|  | public class JSFInjectionTestNG { | 
|  |  | 
|  | private static final String TEST_NAME = | 
|  | "simple-webapp-jsf-injection"; | 
|  |  | 
|  | private String strContextRoot="jsfinjection"; | 
|  |  | 
|  | static String result = ""; | 
|  | String host=System.getProperty("http.host"); | 
|  | String port=System.getProperty("http.port"); | 
|  |  | 
|  | /* | 
|  | *If two asserts are mentioned in one method, then last assert is taken in | 
|  | *to account. | 
|  | *Each method can act as one test within one test suite | 
|  | */ | 
|  |  | 
|  |  | 
|  | //@Parameters({ "host", "port", "contextroot" }) | 
|  | @Test(groups ={ "pulse"} ) // test method | 
|  | public void injectedValuesTestPage() throws Exception { | 
|  |  | 
|  | try { | 
|  |  | 
|  | String errorText = ""; | 
|  | boolean testPass = false; | 
|  |  | 
|  | String testUrl = "http://" + host  + ":" + port + "/"+ strContextRoot + "/jsfHello.jsf"; | 
|  | //echo("URL is: " + testUrl); | 
|  | URL url = new URL(testUrl); | 
|  | //echo("Connecting to: " + url.toString()); | 
|  | HttpURLConnection conn = (HttpURLConnection) url.openConnection(); | 
|  | conn.connect(); | 
|  | int responseCode = conn.getResponseCode(); | 
|  | if ( responseCode != 200 ) { | 
|  | //echo("ERROR: http response code is " + responseCode); | 
|  | errorText = errorText + "ERROR: http response code is " + responseCode + ".\n"; | 
|  | } else { | 
|  | //echo("Connected: " + responseCode); | 
|  | } | 
|  |  | 
|  | InputStream is = conn.getInputStream(); | 
|  | BufferedReader input = new BufferedReader(new InputStreamReader(is)); | 
|  |  | 
|  | String line = null; | 
|  | String line2 = null; | 
|  | String line3 = null; | 
|  | boolean result=false; | 
|  | String EXPECTED_RESPONSE = "Injected entry"; | 
|  | String DIVIDER = "==="; | 
|  | String PC = "Postconstruct"; | 
|  | while ((line = input.readLine()) != null) { | 
|  | //echo ("LINE:"+line); | 
|  | if (line.indexOf(EXPECTED_RESPONSE)!= -1) { | 
|  | testPass = true; | 
|  | //echo("Received line: " + line); | 
|  | } | 
|  | if (line.indexOf(DIVIDER)!= -1) { | 
|  | line2 = line; | 
|  | //echo("Received line2: " + line2); | 
|  | } | 
|  | if (line.indexOf(PC)!= -1) { | 
|  | line3 = line; | 
|  | //echo("Received line3: " + line3); | 
|  | } | 
|  | } | 
|  |  | 
|  | if (! testPass) { | 
|  | echo("ERROR: injection 1 not found"); | 
|  | errorText = errorText + "ERROR: injection 1 not found\n"; | 
|  | } | 
|  |  | 
|  | if (line2 != null) { | 
|  | String [] injection2Array = line2.split(DIVIDER); | 
|  | String injectedNumber = injection2Array[1].trim(); | 
|  | //echo("injectedNumber = " + injectedNumber); | 
|  | int num = Integer.parseInt(injectedNumber); | 
|  |  | 
|  | if ( num < 0 ) { | 
|  | echo("ERROR: injection 2 is less than zero."); | 
|  | errorText = errorText + "ERROR: injection 2 is less than zero"; | 
|  | testPass = false; | 
|  | } else { | 
|  | echo("Injection2 matched."); | 
|  | } | 
|  | } else { | 
|  | echo("ERROR: line with " + DIVIDER + " not found."); | 
|  | errorText = errorText + "ERROR: line with " + DIVIDER + " not found"; | 
|  | testPass = false; | 
|  | } | 
|  |  | 
|  | if (line3 != null) { | 
|  | if (line3.contains("true")) { | 
|  | echo("@PostConstruct worked"); | 
|  | } else { | 
|  | echo("ERROR:@PostConstruct failed"); | 
|  | errorText = errorText + "ERROR: @PostConstruct failed"; | 
|  | testPass = false; | 
|  | } | 
|  | } else { | 
|  | echo("ERROR: line with " + PC + " not found."); | 
|  | errorText = errorText + "ERROR: line with " + PC + " not found"; | 
|  | testPass = false; | 
|  | } | 
|  |  | 
|  | Assert.assertEquals(testPass, true, errorText); | 
|  |  | 
|  | }catch(Exception e){ | 
|  | echo("ERROR: caught exception!"); | 
|  | e.printStackTrace(); | 
|  | throw new Exception(e); | 
|  | } | 
|  | } | 
|  |  | 
|  | public static void echo(String msg) { | 
|  | System.out.println(msg); | 
|  | } | 
|  | } |