You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jmeter.apache.org by se...@apache.org on 2013/09/08 13:54:21 UTC

svn commit: r1520855 - in /jmeter/trunk/src: jorphan/org/apache/jorphan/exec/KeyToolUtils.java protocol/http/org/apache/jmeter/protocol/http/proxy/Proxy.java

Author: sebb
Date: Sun Sep  8 11:54:21 2013
New Revision: 1520855

URL: http://svn.apache.org/r1520855
Log:
Simplify: throw IOE for InterrruptedException; if necessary can still distiguish the cause.

Modified:
    jmeter/trunk/src/jorphan/org/apache/jorphan/exec/KeyToolUtils.java
    jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/proxy/Proxy.java

Modified: jmeter/trunk/src/jorphan/org/apache/jorphan/exec/KeyToolUtils.java
URL: http://svn.apache.org/viewvc/jmeter/trunk/src/jorphan/org/apache/jorphan/exec/KeyToolUtils.java?rev=1520855&r1=1520854&r2=1520855&view=diff
==============================================================================
--- jmeter/trunk/src/jorphan/org/apache/jorphan/exec/KeyToolUtils.java (original)
+++ jmeter/trunk/src/jorphan/org/apache/jorphan/exec/KeyToolUtils.java Sun Sep  8 11:54:21 2013
@@ -42,7 +42,7 @@ public class KeyToolUtils {
     private static final String DNAME_CA_KEY   = "cn=Apache JMeter Proxy server CA (TEMPORARY TRUST ONLY)"; // $NON-NLS-1$
     private static final String CACERT = "ApacheJMeterTemporaryCA.crt"; // $NON-NLS-1$
     private static final String ROOT_ALIAS = "root";  // $NON-NLS-1$
-    private static final String CA_ALIAS = "ca";  // $NON-NLS-1$
+    public static final String CA_ALIAS = "ca";  // $NON-NLS-1$
 
     /** Does this class support generation of host certificates? */
     public static final boolean SUPPORTS_HOST_CERT = SystemUtils.isJavaVersionAtLeast(JavaVersion.JAVA_1_7);
@@ -63,11 +63,10 @@ public class KeyToolUtils {
      * @param dname the dname value, if omitted use "cn=JMeter Proxy (DO NOT TRUST)"
      * @param ext if not null, the extension (-ext) to add (e.g. "bc:c"). This requires Java 7.
      *
-     * @throws InterruptedException
      * @throws IOException
      */
     public static void genkeypair(final File keystore, String alias, final String password, int validity, String dname, String ext)
-            throws IOException, InterruptedException {
+            throws IOException {
         final File workingDir = keystore.getParentFile();
         final SystemCommand nativeCommand = new SystemCommand(workingDir, null);
         final List<String> arguments = new ArrayList<String>();
@@ -92,9 +91,13 @@ public class KeyToolUtils {
             arguments.add("-ext"); // $NON-NLS-1$
             arguments.add(ext);
         }
-        int exitVal = nativeCommand.run(arguments);
-        if (exitVal != 0) {
-            throw new IOException("Command failed, code: " + exitVal + "\n" + nativeCommand.getOutResult());
+        try {
+            int exitVal = nativeCommand.run(arguments);
+            if (exitVal != 0) {
+                throw new IOException("Command failed, code: " + exitVal + "\n" + nativeCommand.getOutResult());
+            }
+        } catch (InterruptedException e) {
+            throw new IOException("Command was interrupted\n" + nativeCommand.getOutResult(), e);
         }
     }
 
@@ -107,10 +110,9 @@ public class KeyToolUtils {
      * @param password the password for keystore and keys
      * @param validity the validity period in days, must be greater than 0 
      *
-     * @throws InterruptedException
      * @throws IOException
      */
-    public static void generateProxyCA(File keystore, String password,  int validity) throws IOException, InterruptedException{
+    public static void generateProxyCA(File keystore, String password,  int validity) throws IOException {
         keystore.delete(); // any existing entries will be invalidated anyway
         new File(CACERT).delete(); // not strictly needed
 
@@ -140,11 +142,10 @@ public class KeyToolUtils {
      * @param domain the domain, e.g. apache.org
      * @param validity the validity period for the key
      *
-     * @throws InterruptedException
      * @throws IOException
      *
      */
-    public static void generateDomainCert(File keystore, String password, String domain, int validity) throws IOException, InterruptedException {
+    public static void generateDomainCert(File keystore, String password, String domain, int validity) throws IOException {
         // generate the keypair for the domain
         generateSignedCert(keystore, password, validity, 
                 domain,         // alias 
@@ -160,11 +161,10 @@ public class KeyToolUtils {
      * @param host the host, e.g. jmeter.apache.org
      * @param validity the validity period for the key
      *
-     * @throws InterruptedException
      * @throws IOException
      *
      */
-    public static void generateHostCert(File keystore, String password, String host, int validity) throws IOException, InterruptedException {
+    public static void generateHostCert(File keystore, String password, String host, int validity) throws IOException {
         // generate the keypair for the host
         generateSignedCert(keystore, password, validity, 
                 host,  // alias 
@@ -172,8 +172,7 @@ public class KeyToolUtils {
     }
 
     private static void generateSignedCert(File keystore, String password,
-            int validity, String alias, String subject) throws IOException,
-            InterruptedException {
+            int validity, String alias, String subject) throws IOException {
         String dname = "cn=" + subject + ", o=JMeter Proxy (TEMPORARY TRUST ONLY";
         KeyToolUtils.genkeypair(keystore, alias, password, validity, dname, null);
         //rem generate cert for DOMAIN using CA (requires Java7 for gencert) and import it
@@ -200,7 +199,7 @@ public class KeyToolUtils {
      * @param storePass the keystore password
      * @return the output from the command "keytool -list -v"
      */
-    public static String list(final File keystore, final String storePass) throws IOException, InterruptedException {
+    public static String list(final File keystore, final String storePass) throws IOException {
         final File workingDir = keystore.getParentFile();
         final SystemCommand nativeCommand = new SystemCommand(workingDir, null);
         final List<String> arguments = new ArrayList<String>();
@@ -212,9 +211,13 @@ public class KeyToolUtils {
         arguments.add(keystore.getName());
         arguments.add("-storepass"); // $NON-NLS-1$
         arguments.add(storePass);
-        int exitVal = nativeCommand.run(arguments);
-        if (exitVal != 0) {
-            throw new IOException("Command failed, code: " + exitVal + "\n" + nativeCommand.getOutResult());
+        try {
+            int exitVal = nativeCommand.run(arguments);
+            if (exitVal != 0) {
+                throw new IOException("Command failed, code: " + exitVal + "\n" + nativeCommand.getOutResult());
+            }
+        } catch (InterruptedException e) {
+            throw new IOException("Command was interrupted\n" + nativeCommand.getOutResult(), e);
         }
         return nativeCommand.getOutResult();
     }
@@ -230,11 +233,10 @@ public class KeyToolUtils {
      * @param output where to send output, may be null
      * @param parameters additional parameters to the command, may be null
      * @throws IOException
-     * @throws InterruptedException
      */
     static void keytool(String command, File keystore, String password, String alias,
             InputStream input, OutputStream output, String ... parameters)
-            throws IOException, InterruptedException {
+            throws IOException {
         final File workingDir = keystore.getParentFile();
         final SystemCommand nativeCommand = new SystemCommand(workingDir, 0L, 0, null, input, output, null);
         final List<String> arguments = new ArrayList<String>();
@@ -252,9 +254,13 @@ public class KeyToolUtils {
             arguments.add(parameter);
         }
 
-        int exitVal = nativeCommand.run(arguments);
-        if (exitVal != 0) {
-            throw new IOException("Command failed, code: " + exitVal + "\n" + nativeCommand.getOutResult());
+        try {
+            int exitVal = nativeCommand.run(arguments);
+            if (exitVal != 0) {
+                throw new IOException("Command failed, code: " + exitVal + "\n" + nativeCommand.getOutResult());
+            }
+        } catch (InterruptedException e) {
+            throw new IOException("Command was interrupted\n" + nativeCommand.getOutResult(), e);
         }
     }
 }

Modified: jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/proxy/Proxy.java
URL: http://svn.apache.org/viewvc/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/proxy/Proxy.java?rev=1520855&r1=1520854&r2=1520855&view=diff
==============================================================================
--- jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/proxy/Proxy.java (original)
+++ jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/proxy/Proxy.java Sun Sep  8 11:54:21 2013
@@ -422,33 +422,25 @@ public class Proxy extends Thread {
         if (keyStore == null) { // no existing file or not valid
             keyStorePass = RandomStringUtils.randomAscii(20);
             setPassword(keyStorePass);
-            try {
-                if (host != null) { // i.e. Java 7
-                    log.info(port + "Creating Proxy CA in " + canonicalPath);
-                    KeyToolUtils.generateProxyCA(certFile, keyStorePass, CERT_VALIDITY);
-                    log.info(port + "Creating entry " + subject + " in " + canonicalPath);
-                    KeyToolUtils.generateHostCert(certFile, keyStorePass, subject, CERT_VALIDITY);
-                    log.info(port + "Created keystore in " + canonicalPath);
-                } else {
-                    log.info(port + "Generating standard keypair in " + canonicalPath);
-                    certFile.delete(); // Must not exist
-                    KeyToolUtils.genkeypair(certFile, JMETER_SERVER_ALIAS, keyStorePass, CERT_VALIDITY, null, null);                    
-                }
-                keyStore = getKeyStore(keyStorePass.toCharArray()); // This should now work
-            } catch (InterruptedException e) {
-                throw new IOException("Could not create Proxy CA keystore", e);
+            if (host != null) { // i.e. Java 7
+                log.info(port + "Creating Proxy CA in " + canonicalPath);
+                KeyToolUtils.generateProxyCA(certFile, keyStorePass, CERT_VALIDITY);
+                log.info(port + "Creating entry " + subject + " in " + canonicalPath);
+                KeyToolUtils.generateHostCert(certFile, keyStorePass, subject, CERT_VALIDITY);
+                log.info(port + "Created keystore in " + canonicalPath);
+            } else {
+                log.info(port + "Generating standard keypair in " + canonicalPath);
+                certFile.delete(); // Must not exist
+                KeyToolUtils.genkeypair(certFile, JMETER_SERVER_ALIAS, keyStorePass, CERT_VALIDITY, null, null);                    
             }
+            keyStore = getKeyStore(keyStorePass.toCharArray()); // This should now work
         }
         // keyStorePass should not be null here; checking it avoids a possible NPE warning below
         if (keyStorePass != null && host != null && !keyStore.containsAlias(host)) {
             log.info(port + "Creating entry '" + host + "' in " + canonicalPath);
-            try {
-                // Requires Java 7
-                KeyToolUtils.generateHostCert(certFile, keyStorePass, host, CERT_VALIDITY);
-                keyStore = getKeyStore(keyStorePass.toCharArray()); // reload
-            } catch (InterruptedException e) {
-                throw new IOException("Could not create entry for subject '" + host + "'", e);
-            }            
+        // Requires Java 7
+            KeyToolUtils.generateHostCert(certFile, keyStorePass, host, CERT_VALIDITY);
+            keyStore = getKeyStore(keyStorePass.toCharArray()); // reload
         }
         return keyStore;
     }