1561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/*
2561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  Licensed to the Apache Software Foundation (ASF) under one or more
3561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  contributor license agreements.  See the NOTICE file distributed with
4561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  this work for additional information regarding copyright ownership.
5561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  The ASF licenses this file to You under the Apache License, Version 2.0
6561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  (the "License"); you may not use this file except in compliance with
7561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  the License.  You may obtain a copy of the License at
8561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *
9561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *     http://www.apache.org/licenses/LICENSE-2.0
10561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *
11561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  Unless required by applicable law or agreed to in writing, software
12561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  distributed under the License is distributed on an "AS IS" BASIS,
13561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  See the License for the specific language governing permissions and
15561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  limitations under the License.
16561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */
17561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
18561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespackage org.apache.harmony.xnet.provider.jsse;
19561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
20561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.IOException;
21561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.InputStream;
22561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.OutputStream;
23561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.net.InetAddress;
24561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.net.InetSocketAddress;
25561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.net.Socket;
26561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.Arrays;
27561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport javax.net.ssl.SSLServerSocket;
28561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport javax.net.ssl.SSLServerSocketFactory;
29561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport javax.net.ssl.SSLSocket;
30561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport javax.net.ssl.SSLSocketFactory;
31561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
32561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport junit.framework.Test;
33561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport junit.framework.TestCase;
34561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport junit.framework.TestSuite;
35561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
36561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/**
37561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * SSLSocketImplTest
38561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */
39561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespublic class SSLSocketFactoriesTest extends TestCase {
40561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
41561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    // turn on/off the debug logging
42561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private boolean doLog = false;
43561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
44561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
45561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Sets up the test case.
46561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
47561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    @Override
48561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void setUp() throws Exception {
49561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        super.setUp();
50561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        if (doLog) {
51561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            System.out.println("========================");
52561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            System.out.println("====== Running the test: " + getName());
53561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            System.out.println("========================");
54561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
55561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
56561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
57561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    @Override
58561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void tearDown() throws Exception {
59561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        super.tearDown();
60561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
61561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
62561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
63561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Tests default initialized factories.
64561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
65561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testDefaultInitialized() throws Exception {
66561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
67561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        SSLServerSocketFactory ssfactory =
68561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (SSLServerSocketFactory) SSLServerSocketFactory.getDefault();
69561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        SSLSocketFactory sfactory =
70561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (SSLSocketFactory) SSLSocketFactory.getDefault();
71561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
72561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNotNull(ssfactory.getDefaultCipherSuites());
73561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNotNull(ssfactory.getSupportedCipherSuites());
74561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNotNull(ssfactory.createServerSocket());
75561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
76561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNotNull(sfactory.getDefaultCipherSuites());
77561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNotNull(sfactory.getSupportedCipherSuites());
78561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNotNull(sfactory.createSocket());
79561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
80561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
81561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testSocketCreation() throws Throwable {
82561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        SSLSocketFactory socketFactory
83561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            = new SSLSocketFactoryImpl(JSSETestData.getSSLParameters());
84561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        SSLServerSocketFactory serverSocketFactory
85561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            = new SSLServerSocketFactoryImpl(JSSETestData.getSSLParameters());
86561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
87561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        String[] enabled = {"TLS_RSA_WITH_RC4_128_MD5"};
88561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i=0; i<4; i++) {
89561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            SSLServerSocket ssocket;
90561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            switch (i) {
91561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                case 0:
92561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    if (doLog) {
93561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        System.out.println(
94561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            "*** ServerSocketFactory.createServerSocket()");
95561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    }
96561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    ssocket = (SSLServerSocket)
97561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        serverSocketFactory.createServerSocket();
98561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    ssocket.bind(null);
99561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    break;
100561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                case 1:
101561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    if (doLog) {
102561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        System.out.println(
103561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            "*** ServerSocketFactory.createServerSocket(int)");
104561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    }
105561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    ssocket = (SSLServerSocket)
106561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        serverSocketFactory.createServerSocket(0);
107561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    break;
108561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                case 2:
109561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    if (doLog) {
110561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        System.out.println(
111561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        "*** ServerSocketFactory.createServerSocket(int,int)");
112561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    }
113561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    ssocket = (SSLServerSocket)
114561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        serverSocketFactory.createServerSocket(0, 6);
115561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    break;
116561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                default:
117561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    if (doLog) {
118561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        System.out.println("*** ServerSocketFactory."
119561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                + "createServerSocket(int,int,InetAddress)");
120561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    }
121561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    ssocket = (SSLServerSocket)
122561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        serverSocketFactory.createServerSocket(0, 6, null);
123561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    break;
124561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
125561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ssocket.setUseClientMode(false);
126561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ssocket.setEnabledCipherSuites(enabled);
127561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            for (int j=0; j<6; j++) {
128561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                SSLSocket csocket;
129561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                switch (j) {
130561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    case 0:
131561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        if (doLog) {
132561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            System.out.println(
133561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                "=== SocketFactory.createSocket()");
134561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        }
135561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        csocket = (SSLSocket) socketFactory.createSocket();
136561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        csocket.connect(
137561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                new InetSocketAddress("localhost",
138561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                    ssocket.getLocalPort()));
139561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        break;
140561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    case 1:
141561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        if (doLog) {
142561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            System.out.println(
143561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                "=== SocketFactory.createSocket(String,int)");
144561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        }
145561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        csocket = (SSLSocket)
146561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            socketFactory.createSocket("localhost",
147561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                    ssocket.getLocalPort());
148561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        break;
149561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    case 2:
150561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        if (doLog) {
151561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            System.out.println("=== SocketFactory.createSocket("
152561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                    + "String,int,InetAddress,int)");
153561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        }
154561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        csocket = (SSLSocket)
155561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            socketFactory.createSocket("localhost",
156561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                ssocket.getLocalPort(),
157561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                InetAddress.getByName("localhost"), 0);
158561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        break;
159561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    case 3:
160561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        if (doLog) {
161561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            System.out.println("=== SocketFactory.createSocket("
162561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                    + "InetAddress,int)");
163561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        }
164561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        csocket = (SSLSocket) socketFactory.createSocket(
165561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                InetAddress.getByName("localhost"),
166561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                ssocket.getLocalPort());
167561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        break;
168561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    case 4:
169561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        if (doLog) {
170561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            System.out.println("=== SocketFactory.createSocket("
171561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                    + "InetAddress,int,InetAddress,int)");
172561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        }
173561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        csocket = (SSLSocket) socketFactory.createSocket(
174561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                InetAddress.getByName("localhost"),
175561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                ssocket.getLocalPort(),
176561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                InetAddress.getByName("localhost"),
177561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                0);
178561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        break;
179561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    default:
180561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        if (doLog) {
181561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            System.out.println(
182561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                    "=== SSLSocketFactory.createSocket("
183561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                    + "socket,String,int,boolean)");
184561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        }
185561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        Socket socket = new Socket(
186561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                InetAddress.getByName("localhost"),
187561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                ssocket.getLocalPort());
188561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        csocket = (SSLSocket) socketFactory.createSocket(
189561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                socket, "localhost", ssocket.getLocalPort(),
190561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                true);
191561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        break;
192561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
193561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
194561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                csocket.setUseClientMode(true);
195561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                csocket.setEnabledCipherSuites(enabled);
196561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                doTest(ssocket, csocket);
197561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
198561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
199561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
200561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
201561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
202561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * SSLSocketFactory.getSupportedCipherSuites() method testing.
203561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
204561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testGetSupportedCipherSuites1() throws Exception {
205561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        SSLSocketFactory socketFactory
206561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            = new SSLSocketFactoryImpl(JSSETestData.getSSLParameters());
207561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        String[] supported = socketFactory.getSupportedCipherSuites();
208561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNotNull(supported);
209561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        supported[0] = "NOT_SUPPORTED_CIPHER_SUITE";
210561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        supported = socketFactory.getSupportedCipherSuites();
211561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i=0; i<supported.length; i++) {
212561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            if ("NOT_SUPPORTED_CIPHER_SUITE".equals(supported[i])) {
213561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                fail("Modification of the returned result "
214561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        + "causes the modification of the internal state");
215561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
216561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
217561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
218561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
219561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
220561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * SSLServerSocketFactory.getSupportedCipherSuites() method testing.
221561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
222561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testGetSupportedCipherSuites2() throws Exception {
223561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        SSLServerSocketFactory serverSocketFactory
224561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            = new SSLServerSocketFactoryImpl(JSSETestData.getSSLParameters());
225561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        String[] supported = serverSocketFactory.getSupportedCipherSuites();
226561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNotNull(supported);
227561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        supported[0] = "NOT_SUPPORTED_CIPHER_SUITE";
228561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        supported = serverSocketFactory.getSupportedCipherSuites();
229561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i=0; i<supported.length; i++) {
230561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            if ("NOT_SUPPORTED_CIPHER_SUITE".equals(supported[i])) {
231561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                fail("Modification of the returned result "
232561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        + "causes the modification of the internal state");
233561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
234561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
235561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
236561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
237561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
238561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * SSLSocketFactory.getDefaultCipherSuites() method testing.
239561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
240561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testGetDefaultCipherSuites1() throws Exception {
241561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        SSLSocketFactory socketFactory
242561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            = new SSLSocketFactoryImpl(JSSETestData.getSSLParameters());
243561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        String[] supported = socketFactory.getSupportedCipherSuites();
244561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        String[] defaultcs = socketFactory.getDefaultCipherSuites();
245561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNotNull(supported);
246561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNotNull(defaultcs);
247561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i=0; i<defaultcs.length; i++) {
248561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            found: {
249561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                for (int j=0; j<supported.length; j++) {
250561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    if (defaultcs[i].equals(supported[j])) {
251561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        break found;
252561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    }
253561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
254561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                fail("Default suite does not belong to the set "
255561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        + "of supported cipher suites: " + defaultcs[i]);
256561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
257561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
258561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
259561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
260561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
261561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * SSLServerSocketFactory.getDefaultCipherSuites() method testing.
262561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
263561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testGetDefaultCipherSuites2() throws Exception {
264561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        SSLServerSocketFactory serverSocketFactory
265561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            = new SSLServerSocketFactoryImpl(JSSETestData.getSSLParameters());
266561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        String[] supported = serverSocketFactory.getSupportedCipherSuites();
267561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        String[] defaultcs = serverSocketFactory.getDefaultCipherSuites();
268561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNotNull(supported);
269561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNotNull(defaultcs);
270561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i=0; i<defaultcs.length; i++) {
271561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            found: {
272561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                for (int j=0; j<supported.length; j++) {
273561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    if (defaultcs[i].equals(supported[j])) {
274561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        break found;
275561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    }
276561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
277561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                fail("Default suite does not belong to the set "
278561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        + "of supported cipher suites: " + defaultcs[i]);
279561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
280561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
281561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
282561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
283561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
284561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Performs SSL connection between the sockets
285561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * @return
286561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
287561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void doTest(SSLServerSocket ssocket, SSLSocket csocket)
288561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            throws Throwable {
289561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        final String server_message = "Hello from SSL Server Socket!";
290561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        final String client_message = "Hello from SSL Socket!";
291561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Thread server = null;
292561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Thread client = null;
293561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        final Throwable[] throwed = new Throwable[1];
294561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
295561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            final SSLServerSocket ss = ssocket;
296561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            final SSLSocket s = csocket;
297561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            server = new Thread() {
298561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                @Override
299561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                public void run() {
300561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    InputStream is = null;
301561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    OutputStream os = null;
302561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    SSLSocket s = null;
303561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    try {
304561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        s = (SSLSocket) ss.accept();
305561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        if (doLog) {
306561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            System.out.println("Socket accepted: " + s);
307561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        }
308561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        is = s.getInputStream();
309561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        os = s.getOutputStream();
310561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        // send the message to the client
311561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        os.write(server_message.getBytes());
312561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        // read the response
313561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        byte[] buff = new byte[client_message.length()];
314561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        int len = is.read(buff);
315561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        if (doLog) {
316561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            System.out.println("Received message of length "
317561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                + len + ": '" + new String(buff, 0, len)+"'");
318561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        }
319561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        assertTrue("Read message does not equal to expected",
320561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                Arrays.equals(client_message.getBytes(), buff));
321561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        os.write(-1);
322561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        assertEquals("Read data differs from expected",
323561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                255, is.read());
324561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        if (doLog) {
325561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            System.out.println("Server is closed: "
326561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                    +s.isClosed());
327561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        }
328561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        assertEquals("Returned value should be -1",
329561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        // initiate an exchange of closure alerts
330561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                -1, is.read());
331561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        if (doLog) {
332561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            System.out.println("Server is closed: "
333561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                    +s.isClosed());
334561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        }
335561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        assertEquals("Returned value should be -1",
336561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        // initiate an exchange of closure alerts
337561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                -1, is.read());
338561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    } catch (Throwable e) {
339561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        synchronized (throwed) {
340561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            if (doLog) {
341561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                e.printStackTrace();
342561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            }
343561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            if (throwed[0] == null) {
344561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                throwed[0] = e;
345561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            }
346561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        }
347561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    } finally {
348561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        try {
349561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            if (is != null) {
350561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                is.close();
351561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            }
352561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        } catch (IOException ex) {}
353561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        try {
354561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            if (os != null) {
355561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                os.close();
356561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            }
357561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        } catch (IOException ex) {}
358561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        try {
359561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            if (s != null) {
360561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                s.close();
361561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            }
362561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        } catch (IOException ex) {}
363561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    }
364561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
365561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            };
366561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
367561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            client = new Thread() {
368561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                @Override
369561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                public void run() {
370561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    InputStream is = null;
371561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    OutputStream os = null;
372561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    try {
373561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        assertTrue("Client was not connected", s.isConnected());
374561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        if (doLog) {
375561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            System.out.println("Client connected");
376561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        }
377561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        is = s.getInputStream();
378561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        os = s.getOutputStream();
379561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        s.startHandshake();
380561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        if (doLog) {
381561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            System.out.println("Client: HS was done");
382561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        }
383561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        // read the message from the server
384561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        byte[] buff = new byte[server_message.length()];
385561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        int len = is.read(buff);
386561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        if (doLog) {
387561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            System.out.println("Received message of length "
388561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                + len + ": '" + new String(buff, 0, len)+"'");
389561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        }
390561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        assertTrue("Read message does not equal to expected",
391561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                Arrays.equals(server_message.getBytes(), buff));
392561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        // send the response
393561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        buff = (" "+client_message+" ").getBytes();
394561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        os.write(buff, 1, buff.length-2);
395561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        assertEquals("Read data differs from expected",
396561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                255, is.read());
397561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        os.write(-1);
398561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        if (doLog) {
399561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            System.out.println("Client is closed: "
400561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                    +s.isClosed());
401561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        }
402561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        s.close();
403561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        if (doLog) {
404561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            System.out.println("Client is closed: "
405561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                    +s.isClosed());
406561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        }
407561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    } catch (Throwable e) {
408561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        synchronized (throwed) {
409561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            if (doLog) {
410561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                e.printStackTrace();
411561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            }
412561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            if (throwed[0] == null) {
413561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                throwed[0] = e;
414561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            }
415561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        }
416561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    } finally {
417561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        try {
418561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            if (is != null) {
419561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                is.close();
420561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            }
421561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        } catch (IOException ex) {}
422561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        try {
423561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            if (os != null) {
424561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                os.close();
425561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            }
426561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        } catch (IOException ex) {}
427561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        try {
428561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            if (s != null) {
429561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                s.close();
430561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            }
431561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        } catch (IOException ex) {}
432561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    }
433561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
434561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            };
435561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
436561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            server.start();
437561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            client.start();
438561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
439561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            while (server.isAlive() || client.isAlive()) {
440561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                if (throwed[0] != null) {
441561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    throw throwed[0];
442561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
443561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                try {
444561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    Thread.sleep(500);
445561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                } catch (Exception e) { }
446561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
447561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } finally {
448561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            if (server != null) {
449561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                server.stop();
450561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
451561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            if (client != null) {
452561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                client.stop();
453561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
454561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
455561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        if (throwed[0] != null) {
456561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            throw throwed[0];
457561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
458561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
459561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
460561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public static Test suite() {
461561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        return new TestSuite(SSLSocketFactoriesTest.class);
462561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
463561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
464561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes}
465