|  | /* | 
|  | * 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 | 
|  | */ | 
|  |  | 
|  | import java.io.*; | 
|  | import java.net.*; | 
|  | import com.sun.ejte.ccl.reporter.*; | 
|  |  | 
|  | /* | 
|  | * Make sure HttpSessionListener's sessionDestroyed(), and | 
|  | * HttpSessionBindingListener's valueUnbound() methods are called when | 
|  | * session expires. | 
|  | * | 
|  | * Implementation note: According to SRV.7.5 ("Session Timeouts"), "the session | 
|  | * invalidation will not take effect util all servlets using that session have | 
|  | * exited the service method." This means that for this unit test, the | 
|  | * servlet that creates the session and the HttpSessionListener that waits for | 
|  | * the session expiration event are implemented as separate classes. | 
|  | */ | 
|  | public class WebTest { | 
|  |  | 
|  | private static SimpleReporterAdapter stat | 
|  | = new SimpleReporterAdapter("appserv-tests"); | 
|  | private static final String TEST_NAME = "wl-session-expired"; | 
|  | private static final String EXPECTED_RESPONSE = "true"; | 
|  |  | 
|  | private String host; | 
|  | private String port; | 
|  | private String contextRoot; | 
|  |  | 
|  | public WebTest(String[] args) { | 
|  | host = args[0]; | 
|  | port = args[1]; | 
|  | contextRoot = args[2]; | 
|  | } | 
|  |  | 
|  | public static void main(String[] args) { | 
|  | stat.addDescription("Unit test for timeout-secs, invalidation-interval-secs"); | 
|  | WebTest webTest = new WebTest(args); | 
|  | webTest.doTest(); | 
|  | stat.printSummary(TEST_NAME); | 
|  | } | 
|  |  | 
|  | public void doTest() { | 
|  | try { | 
|  | invoke(); | 
|  | stat.addStatus(TEST_NAME, stat.PASS); | 
|  | } catch (Exception ex) { | 
|  | System.out.println(TEST_NAME + " test failed"); | 
|  | stat.addStatus(TEST_NAME, stat.FAIL); | 
|  | ex.printStackTrace(); | 
|  | } | 
|  | } | 
|  |  | 
|  | private void invoke() throws Exception { | 
|  |  | 
|  | String url = "http://" + host + ":" + port + contextRoot | 
|  | + "/CreateSession"; | 
|  | HttpURLConnection conn = (HttpURLConnection) | 
|  | (new URL(url)).openConnection(); | 
|  | int code = conn.getResponseCode(); | 
|  | if (code != 200) { | 
|  | throw new Exception("Unexpected return code: " + code); | 
|  | } | 
|  |  | 
|  | Thread.sleep(11 * 1000); | 
|  |  | 
|  | url = "http://" + host + ":" + port + contextRoot | 
|  | + "/CheckResult"; | 
|  | conn = (HttpURLConnection) (new URL(url)).openConnection(); | 
|  | code = conn.getResponseCode(); | 
|  | if (code != 200) { | 
|  | throw new Exception("Unexpected return code: " + code); | 
|  | } | 
|  |  | 
|  | InputStream is = null; | 
|  | BufferedReader input = null; | 
|  | try { | 
|  | is = conn.getInputStream(); | 
|  | input = new BufferedReader(new InputStreamReader(is)); | 
|  | String line = input.readLine(); | 
|  | if (!EXPECTED_RESPONSE.equals(line)) { | 
|  | throw new Exception("Wrong response. Expected: " + | 
|  | EXPECTED_RESPONSE + ", received: " + line); | 
|  | } | 
|  | } finally { | 
|  | try { | 
|  | if (is != null) { | 
|  | is.close(); | 
|  | } | 
|  | } catch (IOException ioe) { | 
|  | // ignore | 
|  | } | 
|  | try { | 
|  | if (input != null) { | 
|  | input.close(); | 
|  | } | 
|  | } catch (IOException ioe) { | 
|  | // ignore | 
|  | } | 
|  | } | 
|  | } | 
|  | } |