From 2c7b97640d69fad5814d6e9fcd45ebd2ffc10300 Mon Sep 17 00:00:00 2001 From: Bradford Wetmore Date: Fri, 5 Jul 2013 18:22:58 -0700 Subject: [PATCH] 8019341: Update CookieHttpsClientTest to use the newer framework Reviewed-by: xuelei, smarks, michaelm --- .../CookieHttpsClientTest.java | 104 +++++++++++++----- .../ssl/templates/SSLEngineTemplate.java | 8 +- .../templates/SSLSocketSSLEngineTemplate.java | 15 ++- .../ssl/templates/SSLSocketTemplate.java | 61 ++++++---- 4 files changed, 132 insertions(+), 56 deletions(-) diff --git a/jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/CookieHttpsClientTest.java b/jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/CookieHttpsClientTest.java index cc20b42377c..21006f0803d 100644 --- a/jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/CookieHttpsClientTest.java +++ b/jdk/test/sun/security/ssl/sun/net/www/protocol/https/HttpsURLConnection/CookieHttpsClientTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2013, 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 @@ -21,15 +21,14 @@ * questions. */ +// SunJSSE does not support dynamic system properties, no way to re-use +// system properties in samevm/agentvm mode. + /* * @test * @bug 7129083 * @summary Cookiemanager does not store cookies if url is read * before setting cookiemanager - * - * SunJSSE does not support dynamic system properties, no way to re-use - * system properties in samevm/agentvm mode. - * * @run main/othervm CookieHttpsClientTest */ @@ -186,10 +185,10 @@ public class CookieHttpsClientTest { public static void main(String args[]) throws Exception { String keyFilename = - System.getProperty("test.src", "./") + "/" + pathToStores + + System.getProperty("test.src", ".") + "/" + pathToStores + "/" + keyStoreFile; String trustFilename = - System.getProperty("test.src", "./") + "/" + pathToStores + + System.getProperty("test.src", ".") + "/" + pathToStores + "/" + trustStoreFile; System.setProperty("javax.net.ssl.keyStore", keyFilename); @@ -205,40 +204,83 @@ public class CookieHttpsClientTest { Thread clientThread = null; Thread serverThread = null; + /* * Primary constructor, used to drive remainder of the test. * * Fork off the other side, then do your work. */ CookieHttpsClientTest() throws Exception { - if (separateServerThread) { - startServer(true); - startClient(false); - } else { - startClient(true); - startServer(false); + Exception startException = null; + try { + if (separateServerThread) { + startServer(true); + startClient(false); + } else { + startClient(true); + startServer(false); + } + } catch (Exception e) { + startException = e; } /* * Wait for other side to close down. */ if (separateServerThread) { - serverThread.join(); + if (serverThread != null) { + serverThread.join(); + } } else { - clientThread.join(); + if (clientThread != null) { + clientThread.join(); + } } /* * When we get here, the test is pretty much over. - * - * If the main thread excepted, that propagates back - * immediately. If the other thread threw an exception, we - * should report back. + * Which side threw the error? */ - if (serverException != null) - throw serverException; - if (clientException != null) - throw clientException; + Exception local; + Exception remote; + + if (separateServerThread) { + remote = serverException; + local = clientException; + } else { + remote = clientException; + local = serverException; + } + + Exception exception = null; + + /* + * Check various exception conditions. + */ + if ((local != null) && (remote != null)) { + // If both failed, return the curthread's exception. + local.initCause(remote); + exception = local; + } else if (local != null) { + exception = local; + } else if (remote != null) { + exception = remote; + } else if (startException != null) { + exception = startException; + } + + /* + * If there was an exception *AND* a startException, + * output it. + */ + if (exception != null) { + if (exception != startException) { + exception.addSuppressed(startException); + } + throw exception; + } + + // Fall-through: no exception to throw! } void startServer(boolean newThread) throws Exception { @@ -261,7 +303,13 @@ public class CookieHttpsClientTest { }; serverThread.start(); } else { - doServerSide(); + try { + doServerSide(); + } catch (Exception e) { + serverException = e; + } finally { + serverReady = true; + } } } @@ -277,12 +325,16 @@ public class CookieHttpsClientTest { */ System.err.println("Client died..."); clientException = e; - } + } } }; clientThread.start(); } else { - doClientSide(); + try { + doClientSide(); + } catch (Exception e) { + clientException = e; + } } } } diff --git a/jdk/test/sun/security/ssl/templates/SSLEngineTemplate.java b/jdk/test/sun/security/ssl/templates/SSLEngineTemplate.java index 22fff98357b..0f87ee25b89 100644 --- a/jdk/test/sun/security/ssl/templates/SSLEngineTemplate.java +++ b/jdk/test/sun/security/ssl/templates/SSLEngineTemplate.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2013, 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 @@ -21,14 +21,14 @@ * questions. */ +// SunJSSE does not support dynamic system properties, no way to re-use +// system properties in samevm/agentvm mode. + /* * @test * @bug 1234567 * @summary SSLEngine has not yet caused Solaris kernel to panic * @run main/othervm SSLEngineTemplate - * - * SunJSSE does not support dynamic system properties, no way to re-use - * system properties in samevm/agentvm mode. */ /** diff --git a/jdk/test/sun/security/ssl/templates/SSLSocketSSLEngineTemplate.java b/jdk/test/sun/security/ssl/templates/SSLSocketSSLEngineTemplate.java index 7e4c02e58a5..7e97d8e0410 100644 --- a/jdk/test/sun/security/ssl/templates/SSLSocketSSLEngineTemplate.java +++ b/jdk/test/sun/security/ssl/templates/SSLSocketSSLEngineTemplate.java @@ -309,14 +309,25 @@ public class SSLSocketSSLEngineTemplate { } catch (Exception e) { serverException = e; } finally { - socket.close(); + if (socket != null) { + socket.close(); + } // Wait for the client to join up with us. - thread.join(); + if (thread != null) { + thread.join(); + } + if (serverException != null) { + if (clientException != null) { + serverException.initCause(clientException); + } throw serverException; } if (clientException != null) { + if (serverException != null) { + clientException.initCause(serverException); + } throw clientException; } } diff --git a/jdk/test/sun/security/ssl/templates/SSLSocketTemplate.java b/jdk/test/sun/security/ssl/templates/SSLSocketTemplate.java index a31be5d3340..e8bfe91db06 100644 --- a/jdk/test/sun/security/ssl/templates/SSLSocketTemplate.java +++ b/jdk/test/sun/security/ssl/templates/SSLSocketTemplate.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2013, 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 @@ -21,14 +21,14 @@ * questions. */ +// SunJSSE does not support dynamic system properties, no way to re-use +// system properties in samevm/agentvm mode. + /* * @test * @bug 1234567 * @summary Use this template to help speed your client/server tests. * @run main/othervm SSLSocketTemplate - * - * SunJSSE does not support dynamic system properties, no way to re-use - * system properties in samevm/agentvm mode. * @author Brad Wetmore */ @@ -180,6 +180,7 @@ public class SSLSocketTemplate { * Fork off the other side, then do your work. */ SSLSocketTemplate() throws Exception { + Exception startException = null; try { if (separateServerThread) { startServer(true); @@ -189,16 +190,20 @@ public class SSLSocketTemplate { startServer(false); } } catch (Exception e) { - // swallow for now. Show later + startException = e; } /* * Wait for other side to close down. */ if (separateServerThread) { - serverThread.join(); + if (serverThread != null) { + serverThread.join(); + } } else { - clientThread.join(); + if (clientThread != null) { + clientThread.join(); + } } /* @@ -207,36 +212,44 @@ public class SSLSocketTemplate { */ Exception local; Exception remote; - String whichRemote; if (separateServerThread) { remote = serverException; local = clientException; - whichRemote = "server"; } else { remote = clientException; local = serverException; - whichRemote = "client"; + } + + Exception exception = null; + + /* + * Check various exception conditions. + */ + if ((local != null) && (remote != null)) { + // If both failed, return the curthread's exception. + local.initCause(remote); + exception = local; + } else if (local != null) { + exception = local; + } else if (remote != null) { + exception = remote; + } else if (startException != null) { + exception = startException; } /* - * If both failed, return the curthread's exception, but also - * print the remote side Exception + * If there was an exception *AND* a startException, + * output it. */ - if ((local != null) && (remote != null)) { - System.out.println(whichRemote + " also threw:"); - remote.printStackTrace(); - System.out.println(); - throw local; + if (exception != null) { + if (exception != startException) { + exception.addSuppressed(startException); + } + throw exception; } - if (remote != null) { - throw remote; - } - - if (local != null) { - throw local; - } + // Fall-through: no exception to throw! } void startServer(boolean newThread) throws Exception {