Fix SSL unit test failures with APR/native
authormarkt <markt@13f79535-47bb-0310-9956-ffa450edef68>
Tue, 26 Jul 2011 20:56:27 +0000 (20:56 +0000)
committermarkt <markt@13f79535-47bb-0310-9956-ffa450edef68>
Tue, 26 Jul 2011 20:56:27 +0000 (20:56 +0000)
git-svn-id: https://svn.apache.org/repos/asf/tomcat/trunk@1151240 13f79535-47bb-0310-9956-ffa450edef68

test/org/apache/tomcat/util/net/TesterSupport.java

index 5564d50..0a8c2e4 100644 (file)
@@ -20,6 +20,9 @@ import java.io.File;
 import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.InputStream;
+import java.net.InetAddress;
+import java.net.Socket;
+import java.net.UnknownHostException;
 import java.security.KeyManagementException;
 import java.security.KeyStore;
 import java.security.NoSuchAlgorithmException;
@@ -29,6 +32,8 @@ import javax.net.ssl.KeyManager;
 import javax.net.ssl.KeyManagerFactory;
 import javax.net.ssl.SSLContext;
 import javax.net.ssl.SSLServerSocketFactory;
+import javax.net.ssl.SSLSocket;
+import javax.net.ssl.SSLSocketFactory;
 import javax.net.ssl.TrustManager;
 import javax.net.ssl.TrustManagerFactory;
 import javax.net.ssl.X509TrustManager;
@@ -132,9 +137,9 @@ public final class TesterSupport {
             SSLContext sc = SSLContext.getInstance("SSL");
             sc.init(TesterSupport.getUser1KeyManagers(),
                     TesterSupport.getTrustManagers(),
-                    null);     
+                    null);
             javax.net.ssl.HttpsURLConnection.setDefaultSSLSocketFactory(
-                    sc.getSocketFactory());
+                    new TesterSSLSocketFactory(sc.getSocketFactory()));
         } catch (Exception e) {
             e.printStackTrace();
         } 
@@ -261,4 +266,67 @@ public final class TesterSupport {
             // NOOP - Trust everything
         }
     }
+
+    private static class TesterSSLSocketFactory
+            extends SSLSocketFactory {
+
+        private SSLSocketFactory factory;
+
+        public TesterSSLSocketFactory(SSLSocketFactory factory) {
+            this.factory = factory;
+        }
+
+        @Override
+        public String[] getDefaultCipherSuites() {
+            return factory.getDefaultCipherSuites();
+        }
+
+        @Override
+        public String[] getSupportedCipherSuites() {
+            return factory.getSupportedCipherSuites();
+        }
+
+        @Override
+        public Socket createSocket(Socket socket, String s, int i, boolean flag)
+                throws IOException {
+            SSLSocket result =
+                (SSLSocket) factory.createSocket(socket, s, i, flag);
+            result.setEnabledProtocols(new String[] { "SSLv3" } );
+            return result;
+        }
+
+        @Override
+        public Socket createSocket(String s, int i) throws IOException,
+                UnknownHostException {
+            SSLSocket result = (SSLSocket) factory.createSocket(s, i);
+            result.setEnabledProtocols(new String[] { "SSLv3" } );
+            return result;
+        }
+
+        @Override
+        public Socket createSocket(String s, int i, InetAddress inetaddress,
+                int j) throws IOException, UnknownHostException {
+            SSLSocket result =
+                (SSLSocket) factory.createSocket(s, i, inetaddress, j);
+            result.setEnabledProtocols(new String[] { "SSLv3" } );
+            return result;
+        }
+
+        @Override
+        public Socket createSocket(InetAddress inetaddress, int i)
+                throws IOException {
+            SSLSocket result = (SSLSocket) factory.createSocket(inetaddress, i);
+            result.setEnabledProtocols(new String[] { "SSLv3" } );
+            return result;
+        }
+
+        @Override
+        public Socket createSocket(InetAddress inetaddress, int i,
+                InetAddress inetaddress1, int j) throws IOException {
+            SSLSocket result = (SSLSocket) factory.createSocket(
+                    inetaddress, i, inetaddress1, j);
+            result.setEnabledProtocols(new String[] { "SSLv3" } );
+            return result;
+        }
+    }
 }