# HG changeset patch # User xuelei # Date 1308796638 25200 # Node ID 4f3b970eda70e509ed702df3a8be4669d03e1fb1 # Parent 3b9bd67298ea272f8f5a6f07d2e45fd2ba40d25e 6952814: sun/security/ssl/com/sun/net/ssl/internal/ssl/InputRecord/InterruptedIO.java failing in PIT Reviewed-by: alanb diff -r 3b9bd67298ea -r 4f3b970eda70 jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/InputRecord/InterruptedIO.java --- a/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/InputRecord/InterruptedIO.java Thu Jun 23 09:27:11 2011 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,183 +0,0 @@ -/* - * Copyright (c) 2001, 2003, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -/* - * @test - * @bug 4393337 - * @summary [TEST RUNS ON SOLARIS ONLY] Throw an InterruptedIOException - * when read on SSLSocket is * interrupted. - */ - -import java.io.InputStream; -import java.io.IOException; -import java.io.InterruptedIOException; -import java.net.Socket; -import javax.net.ssl.*; - -/** - * Interrupts an SSL socket that is blocked on a read. An - * InterruptedIOException will be thrown and handled within the test if the - * test completes correctly. - */ - -public class InterruptedIO { - - /** - * Starts a client and a server thread. Gives the client enough time to - * block in a read, then interrupts it. - */ - public static void main(String[] args) throws Exception { - - String reason = - "Test valid only on SunOS.\n" + - "=========================\n" + - "It was determined that Thread.interrupt() could \n" + - "not be reliably return InterruptedIOException \n" + - "on non-Solaris implementations. Thread.interrupt() \n" + - "API was updated in merlin (JDK 1.4) to reflect this.\n"; - System.out.println(reason); - - String osName = System.getProperty("os.name", ""); - if (!osName.equalsIgnoreCase("SunOS")) { - System.out.println("Ignoring test on '" + osName + "'"); - return; - } - - String testRoot = System.getProperty("test.src", "."); - System.setProperty("javax.net.ssl.keyStore", - testRoot + - "/../../../../../../../etc/keystore"); - System.setProperty("javax.net.ssl.keyStorePassword", - "passphrase"); - System.setProperty("javax.net.ssl.trustStore", - testRoot + - "/../../../../../../../etc/truststore"); - - Server server = new Server(); - server.start(); - - Client client = new Client(server.getPort()); // Will do handshake - client.start(); // Will block in read - - // sleep for 5 seconds - System.out.println("Main - Pausing for 5 seconds..."); - Thread.sleep(5 * 1000); - - System.out.println("Main - Interrupting client reader thread"); - client.interrupt(); - client.join(); // Wait for client thread to complete - - if (client.failed()) - throw new Exception("Main - Test InterruptedIO failed " - + "on client side."); - else - System.out.println("Main - Test InterruptedIO successful!"); - } - - /** - * Accepts an incoming SSL Connection. Then blocks in a read. - */ - static class Server extends Thread { - - private SSLServerSocket ss; - - public Server() throws Exception { - ss = (SSLServerSocket) SSLServerSocketFactory.getDefault(). - createServerSocket(0); - } - - public int getPort() { - return ss.getLocalPort(); - } - - public void run() { - try { - System.out.println("Server - Will accept connections on port " - + getPort()); - Socket s = ss.accept(); - InputStream is = s.getInputStream(); - // We want the client to block so deadlock - is.read(); - } catch (IOException e) { - // Happens when client closese connection. - // If an error occurs, Client will detect problem - } - } - } - - /** - * Initiates an SSL connection to a server. Then blocks in a read. It - * should be interrupted by another thread. An InterruptedIOException - * is expected to be thrown. - */ - static class Client extends Thread { - - private SSLSocket socket; - private InputStream inStream; - private boolean failed = false; - - public Client(int port) throws Exception { - socket = (SSLSocket) SSLSocketFactory.getDefault(). - createSocket("localhost", port); - inStream = socket.getInputStream(); - System.out.println("Client - " - + "Connected to: localhost" + ":" + port); - System.out.println("Client - " - + "Doing SSL Handshake..."); - socket.startHandshake(); // Asynchronous call - System.out.println("Client - Done with SSL Handshake"); - } - - public void run() { - - try { - System.out.println("Client - Reading from input stream ..."); - if (inStream.read() == -1) { - System.out.println("Client - End-of-stream detected"); - failed = true; - } - } catch (InterruptedIOException e) { - System.out.println("Client - " - + "As expected, InterruptedIOException " - + "was thrown. Message: " - + e.getMessage()); - } catch (Exception e) { - System.out.println("Client - Unexpected exception:"); - e.printStackTrace(); - failed = true; - } finally { - try { - socket.close(); - } catch (IOException e) { - // Squelch it - } - } - } - - public boolean failed() { - return failed; - } - - } - -}