< prev index next >

test/sun/net/www/protocol/https/HttpsClient/ServerIdentityTest.java

Print this page

        

@@ -1,7 +1,7 @@
 /*
- * Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2016, 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.

@@ -24,11 +24,12 @@
 /*
  * @test
  * @bug 4328195
  * @summary Need to include the alternate subject DN for certs,
  *          https should check for this
- * @run main/othervm ServerIdentityTest
+ * @run main/othervm ServerIdentityTest dnsstore
+ * @run main/othervm ServerIdentityTest ipstore
  *
  *     SunJSSE does not support dynamic system properties, no way to re-use
  *     system properties in samevm/agentvm mode.
  *
  * @author Yingxian Wang

@@ -50,29 +51,37 @@
     /*
      * Should we run the client or server in a separate thread?
      * Both sides can throw exceptions, but do you have a preference
      * as to which side should be the main thread.
      */
-    static boolean separateServerThread = true;
+    static final boolean separateServerThread = true;
 
     /*
      * Where do we find the keystores?
      */
-    static String pathToStores = "./";
-    static String[] keyStoreFiles = {"dnsstore", "ipstore"};
-    static String[] trustStoreFiles = {"dnsstore", "ipstore"};
-    static String passwd = "changeit";
+    static final String passwd = "changeit";
 
     /*
-     * Is the server ready to serve?
+     * Turn on SSL debugging?
      */
-    boolean serverReady = false;
+    static final boolean debug = true;
+
+    static final int FREE_PORT = 0;
 
     /*
-     * Turn on SSL debugging?
+     * Is the server ready to serve?
      */
-    static boolean debug = false;
+    volatile boolean serverReady = false;
+    volatile int serverPort = 0;
+    volatile Exception serverException = null;
+    volatile Exception clientException = null;
+    SSLContext context;
+    boolean iphost = false;
+
+
+    Thread clientThread = null;
+    Thread serverThread = null;
 
     /*
      * If the client or server is doing some kind of object creation
      * that the other side depends on, and that thread prematurely
      * exits, you may experience a hang.  The test harness will

@@ -86,29 +95,30 @@
      *
      * If the server prematurely exits, serverReady will be set to true
      * to avoid infinite hangs.
      */
     void doServerSide() throws Exception {
-        SSLServerSocketFactory sslssf =
-            context.getServerSocketFactory();
-        SSLServerSocket sslServerSocket =
-            (SSLServerSocket) sslssf.createServerSocket(serverPort);
+        SSLServerSocketFactory sslssf = context.getServerSocketFactory();
+        try (SSLServerSocket sslServerSocket =
+                (SSLServerSocket) sslssf.createServerSocket(FREE_PORT)) {
+
         serverPort = sslServerSocket.getLocalPort();
 
         /*
          * Signal Client, we're ready for his connect.
          */
         serverReady = true;
 
-        SSLSocket sslSocket = (SSLSocket) sslServerSocket.accept();
-        OutputStream sslOS = sslSocket.getOutputStream();
-        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(sslOS));
+            try (SSLSocket sslSocket = (SSLSocket) sslServerSocket.accept()) {
+                BufferedWriter bw = new BufferedWriter(
+                        new OutputStreamWriter(sslSocket.getOutputStream()));
         bw.write("HTTP/1.1 200 OK\r\n\r\n\r\n");
         bw.flush();
         Thread.sleep(2000);
         sslSocket.getSession().invalidate();
-        sslSocket.close();
+            }
+        }
     }
 
     /*
      * Define the client side of the test.
      *

@@ -120,85 +130,69 @@
          * Wait for server to get started.
          */
         while (!serverReady) {
             Thread.sleep(50);
         }
-        String host = iphost? "127.0.0.1": "localhost";
-        URL url = new URL("https://"+host+":"+serverPort+"/index.html");
+
+        String host = (iphost) ? "127.0.0.1" : "localhost";
+        URL url = new URL("https://" +host + ":" + serverPort + "/index.html");
 
         HttpURLConnection urlc = (HttpURLConnection)url.openConnection();
-        InputStream is = urlc.getInputStream();
-        is.close();
+        try (InputStream is = urlc.getInputStream()) {
+            is.readAllBytes();
+        }
     }
 
     /*
      * =============================================================
      * The remainder is just support stuff
      */
 
-    volatile int serverPort = 0;
-
-    volatile Exception serverException = null;
-    volatile Exception clientException = null;
-
     public static void main(String[] args) throws Exception {
-        SSLSocketFactory reservedSFactory =
-                HttpsURLConnection.getDefaultSSLSocketFactory();
-        try {
-            for (int i = 0; i < keyStoreFiles.length; i++) {
-                String keyFilename =
-                    System.getProperty("test.src", ".") + "/" + pathToStores +
-                    "/" + keyStoreFiles[i];
-                String trustFilename =
-                    System.getProperty("test.src", ".") + "/" + pathToStores +
-                    "/" + trustStoreFiles[i];
+        String keyFilename = System.getProperty("test.src", ".")
+                + "/" + args[0];
+        String trustFilename = System.getProperty("test.src", ".")
+                + "/" + args[0];
 
                 System.setProperty("javax.net.ssl.keyStore", keyFilename);
                 System.setProperty("javax.net.ssl.keyStorePassword", passwd);
                 System.setProperty("javax.net.ssl.trustStore", trustFilename);
                 System.setProperty("javax.net.ssl.trustStorePassword", passwd);
 
-                if (debug)
+        if (debug) {
                     System.setProperty("javax.net.debug", "all");
+        }
+
                 SSLContext context = SSLContext.getInstance("SSL");
 
                 KeyManager[] kms = new KeyManager[1];
                 KeyStore ks = KeyStore.getInstance("JKS");
-                FileInputStream fis = new FileInputStream(keyFilename);
+        try (FileInputStream fis = new FileInputStream(keyFilename)) {
                 ks.load(fis, passwd.toCharArray());
-                fis.close();
+        }
                 KeyManager km = new MyKeyManager(ks, passwd.toCharArray());
                 kms[0] = km;
                 context.init(kms, null, null);
                 HttpsURLConnection.setDefaultSSLSocketFactory(
                      context.getSocketFactory());
 
                 /*
                  * Start the tests.
                  */
                 System.out.println("Testing " + keyFilename);
-                new ServerIdentityTest(context, keyStoreFiles[i]);
-            }
-        } finally {
-            HttpsURLConnection.setDefaultSSLSocketFactory(reservedSFactory);
-        }
+        new ServerIdentityTest(context, args[0]);
     }
 
-    Thread clientThread = null;
-    Thread serverThread = null;
-
     /*
      * Primary constructor, used to drive remainder of the test.
      *
      * Fork off the other side, then do your work.
      */
-    SSLContext context;
-    boolean iphost = false;
-    ServerIdentityTest(SSLContext context, String keystore)
-        throws Exception {
+    ServerIdentityTest(SSLContext context, String keystore) throws Exception {
         this.context = context;
         iphost = keystore.equals("ipstore");
+
         if (separateServerThread) {
             startServer(true);
             startClient(false);
         } else {
             startClient(true);

@@ -212,37 +206,29 @@
             serverThread.join();
         } else {
             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.
-         */
-        if (serverException != null)
-            throw serverException;
-        if (clientException != null)
-            throw clientException;
+        if (serverException != null || clientException != null) {
+            throw new RuntimeException("Test failed");
+        }
     }
 
     void startServer(boolean newThread) throws Exception {
         if (newThread) {
             serverThread = new Thread() {
                 public void run() {
                     try {
                         doServerSide();
                     } catch (Exception e) {
-                        e.printStackTrace();
                         /*
                          * Our server thread just died.
                          *
                          * Release the client, if not active already...
                          */
                         System.err.println("Server died...");
+                        e.printStackTrace(System.out);
                         serverReady = true;
                         serverException = e;
                     }
                 }
             };

@@ -261,10 +247,11 @@
                     } catch (Exception e) {
                         /*
                          * Our client thread just died.
                          */
                         System.err.println("Client died...");
+                        e.printStackTrace(System.out);
                         clientException = e;
                     }
                 }
             };
             clientThread.start();
< prev index next >