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.net.Socket;
22561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.net.InetSocketAddress;
23561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport javax.net.ssl.SSLServerSocket;
24561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
25561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport junit.framework.Test;
26561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport junit.framework.TestCase;
27561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport junit.framework.TestSuite;
28561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
29561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/**
30561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * SSLServerSocketImplTest test
31561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */
32561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespublic class SSLServerSocketImplTest extends TestCase {
33561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
34561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private static boolean doLog = false;
35561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
36561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
37561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Sets up the test case.
38561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
39561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    @Override
40561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void setUp() {
41561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        if (doLog) {
42561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            System.out.println("");
43561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            System.out.println("========================");
44561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            System.out.println("====== Running the test: " + getName());
45561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
46561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
47561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
48561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private SSLServerSocket createSSLServerSocket() throws Exception {
49561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        return new SSLServerSocketImpl(JSSETestData.getSSLParameters());
50561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
51561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
52561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
53561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * SSLServerSocketImpl(SSLParameters sslParameters) method testing.
54561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
55561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testSSLServerSocketImpl1() throws Exception {
56561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Client client = null;
57561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        SSLServerSocket ssocket = null;
58561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
59561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ssocket = new SSLServerSocketImpl(JSSETestData.getSSLParameters());
60561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ssocket.bind(null);
61561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ssocket.setUseClientMode(true);
62561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
63561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            final SSLServerSocket s = ssocket;
64561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            Thread thread = new Thread() {
65561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                @Override
66561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                public void run() {
67561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    try {
68561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        s.accept().close();
69561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    } catch (Exception e) { }
70561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
71561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            };
72561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
73561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            thread.start();
74561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
75561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            client = new Client(ssocket.getLocalPort());
76561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            client.start();
77561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
78561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            int timeout = 10; // wait no more than 5 seconds for handshake
79561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            while (!client.handshakeStarted()) {
80561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // wait for handshake start
81561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                try {
82561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    Thread.sleep(500);
83561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                } catch (Exception e) { }
84561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                timeout--;
85561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                if (timeout < 0) {
86561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    try {
87561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        client.close();
88561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    } catch (IOException ex) { }
89561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    try {
90561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        ssocket.close();
91561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    } catch (IOException ex) { }
92561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    fail("Handshake was not started");
93561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
94561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
95561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } finally {
96561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            if (client != null) {
97561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                try {
98561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    client.close();
99561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                } catch (IOException ex) { }
100561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
101561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            if (ssocket != null) {
102561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                try {
103561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    ssocket.close();
104561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                } catch (IOException ex) { }
105561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
106561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
107561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
108561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
109561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
110561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * SSLServerSocketImpl(int port, SSLParameters sslParameters) method
111561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * testing.
112561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
113561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testSSLServerSocketImpl2() throws Exception {
114561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Client client = null;
115561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        SSLServerSocket ssocket = null;
116561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
117561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ssocket = new SSLServerSocketImpl(0,
118561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    JSSETestData.getSSLParameters());
119561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ssocket.setUseClientMode(true);
120561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
121561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            final SSLServerSocket s = ssocket;
122561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            Thread thread = new Thread() {
123561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                @Override
124561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                public void run() {
125561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    try {
126561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        s.accept().close();
127561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    } catch (Exception e) { }
128561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
129561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            };
130561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
131561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            thread.start();
132561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
133561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            client = new Client(ssocket.getLocalPort());
134561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            client.start();
135561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
136561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            int timeout = 10; // wait no more than 5 seconds for handshake
137561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            while (!client.handshakeStarted()) {
138561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // wait for handshake start
139561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                try {
140561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    Thread.sleep(500);
141561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                } catch (Exception e) { }
142561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                timeout--;
143561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                if (timeout < 0) {
144561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    try {
145561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        client.close();
146561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    } catch (IOException ex) { }
147561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    try {
148561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        ssocket.close();
149561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    } catch (IOException ex) { }
150561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    fail("Handshake was not started");
151561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
152561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
153561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } finally {
154561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            if (client != null) {
155561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                try {
156561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    client.close();
157561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                } catch (IOException ex) { }
158561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
159561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            if (ssocket != null) {
160561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                try {
161561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    ssocket.close();
162561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                } catch (IOException ex) { }
163561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
164561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
165561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
166561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
167561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
168561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * SSLServerSocketImpl(int port, int backlog,
169561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * SSLParameters sslParameters) method testing.
170561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
171561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testSSLServerSocketImpl3() throws Exception {
172561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Client client = null;
173561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        SSLServerSocket ssocket = null;
174561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
175561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ssocket = new SSLServerSocketImpl(0, 1,
176561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    JSSETestData.getSSLParameters());
177561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ssocket.setUseClientMode(true);
178561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
179561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            final SSLServerSocket s = ssocket;
180561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            Thread thread = new Thread() {
181561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                @Override
182561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                public void run() {
183561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    try {
184561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        s.accept().close();
185561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    } catch (Exception e) { }
186561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
187561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            };
188561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
189561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            thread.start();
190561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
191561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            client = new Client(ssocket.getLocalPort());
192561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            client.start();
193561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
194561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            int timeout = 10; // wait no more than 5 seconds for handshake
195561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            while (!client.handshakeStarted()) {
196561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // wait for handshake start
197561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                try {
198561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    Thread.sleep(500);
199561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                } catch (Exception e) { }
200561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                timeout--;
201561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                if (timeout < 0) {
202561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    try {
203561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        client.close();
204561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    } catch (IOException ex) { }
205561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    try {
206561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        ssocket.close();
207561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    } catch (IOException ex) { }
208561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    fail("Handshake was not started");
209561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
210561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
211561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } finally {
212561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            if (client != null) {
213561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                try {
214561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    client.close();
215561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                } catch (IOException ex) { }
216561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
217561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            if (ssocket != null) {
218561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                try {
219561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    ssocket.close();
220561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                } catch (IOException ex) { }
221561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
222561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
223561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
224561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
225561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
226561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * SSLServerSocketImpl(int port, int backlog, InetAddress iAddress,
227561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * SSLParameters sslParameters) method testing.
228561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
229561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testSSLServerSocketImpl4() throws Exception {
230561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Client client = null;
231561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        SSLServerSocket ssocket = null;
232561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
233561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ssocket = new SSLServerSocketImpl(0, 1, null,
234561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    JSSETestData.getSSLParameters());
235561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ssocket.setUseClientMode(true);
236561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
237561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            final SSLServerSocket s = ssocket;
238561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            Thread thread = new Thread() {
239561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                @Override
240561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                public void run() {
241561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    try {
242561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        s.accept().close();
243561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    } catch (Exception e) { }
244561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
245561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            };
246561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
247561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            thread.start();
248561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
249561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            client = new Client(ssocket.getLocalPort());
250561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            client.start();
251561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
252561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            int timeout = 10; // wait no more than 5 seconds for handshake
253561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            while (!client.handshakeStarted()) {
254561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // wait for handshake start
255561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                try {
256561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    Thread.sleep(500);
257561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                } catch (Exception e) { }
258561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                timeout--;
259561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                if (timeout < 0) {
260561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    try {
261561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        client.close();
262561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    } catch (IOException ex) { }
263561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    try {
264561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        ssocket.close();
265561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    } catch (IOException ex) { }
266561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    fail("Handshake was not started");
267561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
268561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
269561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } finally {
270561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            if (client != null) {
271561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                try {
272561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    client.close();
273561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                } catch (IOException ex) { }
274561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
275561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            if (ssocket != null) {
276561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                try {
277561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    ssocket.close();
278561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                } catch (IOException ex) { }
279561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
280561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
281561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
282561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
283561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
284561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * getSupportedCipherSuites() method testing.
285561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
286561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testGetSupportedCipherSuites() throws Exception {
287561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        SSLServerSocket ssocket = createSSLServerSocket();
288561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        String[] supported = ssocket.getSupportedCipherSuites();
289561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNotNull(supported);
290561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        supported[0] = "NOT_SUPPORTED_CIPHER_SUITE";
291561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        supported = ssocket.getEnabledCipherSuites();
292561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i=0; i<supported.length; i++) {
293561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            if ("NOT_SUPPORTED_CIPHER_SUITE".equals(supported[i])) {
294561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                fail("Modification of the returned result "
295561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        + "causes the modification of the internal state");
296561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
297561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
298561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
299561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
300561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
301561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * getEnabledCipherSuites() method testing.
302561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
303561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testGetEnabledCipherSuites() throws Exception {
304561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        SSLServerSocket ssocket = createSSLServerSocket();
305561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        String[] enabled = ssocket.getEnabledCipherSuites();
306561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNotNull(enabled);
307561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        String[] supported = ssocket.getSupportedCipherSuites();
308561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i=0; i<enabled.length; i++) {
309561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            //System.out.println("Checking of "+enabled[i]);
310561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            found: {
311561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                for (int j=0; j<supported.length; j++) {
312561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    if (enabled[i].equals(supported[j])) {
313561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        break found;
314561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    }
315561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
316561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                fail("Enabled suite does not belong to the set "
317561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        + "of supported cipher suites: " + enabled[i]);
318561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
319561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
320561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ssocket.setEnabledCipherSuites(supported);
321561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i=0; i<supported.length; i++) {
322561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            enabled = new String[supported.length - i];
323561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            System.arraycopy(supported, 0,
324561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    enabled, 0, supported.length-i);
325561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ssocket.setEnabledCipherSuites(enabled);
326561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            String[] result = ssocket.getEnabledCipherSuites();
327561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            if (result.length != enabled.length) {
328561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                fail("Returned result does not correspond to expected.");
329561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
330561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            for (int k=0; k<result.length; k++) {
331561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                found: {
332561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    for (int n=0; n<enabled.length; n++) {
333561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        if (result[k].equals(enabled[n])) {
334561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            break found;
335561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        }
336561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    }
337561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    if (result.length != enabled.length) {
338561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        fail("Returned result does not correspond "
339561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                + "to expected.");
340561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    }
341561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
342561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
343561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
344561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
345561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
346561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
347561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * setEnabledCipherSuites(String[] suites) method testing.
348561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
349561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testSetEnabledCipherSuites() throws Exception {
350561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        SSLServerSocket ssocket = createSSLServerSocket();
351561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        String[] enabled = ssocket.getEnabledCipherSuites();
352561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNotNull(enabled);
353561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        String[] supported = ssocket.getSupportedCipherSuites();
354561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i=0; i<enabled.length; i++) {
355561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            //System.out.println("Checking of "+enabled[i]);
356561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            found: {
357561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                for (int j=0; j<supported.length; j++) {
358561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    if (enabled[i].equals(supported[j])) {
359561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        break found;
360561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    }
361561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
362561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                fail("Enabled suite does not belong to the set "
363561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        + "of supported cipher suites: " + enabled[i]);
364561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
365561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
366561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ssocket.setEnabledCipherSuites(supported);
367561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ssocket.setEnabledCipherSuites(enabled);
368561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ssocket.setEnabledCipherSuites(supported);
369561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        String[] more_than_supported = new String[supported.length+1];
370561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i=0; i<supported.length+1; i++) {
371561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            more_than_supported[i]
372561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                = "NOT_SUPPORTED_CIPHER_SUITE";
373561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            System.arraycopy(supported, 0,
374561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    more_than_supported, 0, i);
375561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            System.arraycopy(supported, i,
376561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    more_than_supported, i+1, supported.length-i);
377561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            try {
378561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                ssocket.setEnabledCipherSuites(more_than_supported);
379561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                fail("Expected IllegalArgumentException was not thrown");
380561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } catch (IllegalArgumentException e) { }
381561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
382561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        enabled = ssocket.getEnabledCipherSuites();
383561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        enabled[0] = "NOT_SUPPORTED_CIPHER_SUITE";
384561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        enabled = ssocket.getEnabledCipherSuites();
385561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i=0; i<enabled.length; i++) {
386561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            if ("NOT_SUPPORTED_CIPHER_SUITE".equals(enabled[i])) {
387561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                fail("Modification of the returned result "
388561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        + "causes the modification of the internal state");
389561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
390561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
391561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
392561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
393561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
394561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * getSupportedProtocols() method testing.
395561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
396561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testGetSupportedProtocols() throws Exception {
397561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        SSLServerSocket ssocket = createSSLServerSocket();
398561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        String[] supported = ssocket.getSupportedProtocols();
399561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNotNull(supported);
400561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse(supported.length == 0);
401561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        supported[0] = "NOT_SUPPORTED_PROTOCOL";
402561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        supported = ssocket.getSupportedProtocols();
403561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i=0; i<supported.length; i++) {
404561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            if ("NOT_SUPPORTED_PROTOCOL".equals(supported[i])) {
405561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                fail("Modification of the returned result "
406561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        + "causes the modification of the internal state");
407561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
408561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
409561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
410561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
411561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
412561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * getEnabledProtocols() method testing.
413561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
414561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testGetEnabledProtocols() throws Exception {
415561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        SSLServerSocket ssocket = createSSLServerSocket();
416561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        String[] enabled = ssocket.getEnabledProtocols();
417561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNotNull(enabled);
418561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        String[] supported = ssocket.getSupportedProtocols();
419561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i=0; i<enabled.length; i++) {
420561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            //System.out.println("Checking of "+enabled[i]);
421561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            found: {
422561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                for (int j=0; j<supported.length; j++) {
423561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    if (enabled[i].equals(supported[j])) {
424561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        break found;
425561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    }
426561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
427561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                fail("Enabled protocol does not belong to the set "
428561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        + "of supported protocols: " + enabled[i]);
429561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
430561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
431561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ssocket.setEnabledProtocols(supported);
432561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i=0; i<supported.length; i++) {
433561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            enabled = new String[supported.length - i];
434561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            System.arraycopy(supported, i,
435561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    enabled, 0, supported.length-i);
436561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            //System.out.println("");
437561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            //for (int k=0; k<supported.length - i; k++) {
438561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            //    System.out.println("---- "+enabled[k]);
439561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            //}
440561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ssocket.setEnabledProtocols(enabled);
441561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            String[] result = ssocket.getEnabledProtocols();
442561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            if (result.length != enabled.length) {
443561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                fail("Returned result does not correspond to expected.");
444561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
445561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            for (int k=0; k<result.length; k++) {
446561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                found: {
447561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    for (int n=0; n<enabled.length; n++) {
448561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        if (result[k].equals(enabled[n])) {
449561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            break found;
450561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        }
451561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    }
452561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    if (result.length != enabled.length) {
453561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        fail("Returned result does not correspond "
454561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                + "to expected.");
455561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    }
456561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
457561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
458561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
459561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
460561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
461561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
462561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * setEnabledProtocols(String[] protocols) method testing.
463561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
464561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testSetEnabledProtocols() throws Exception {
465561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        SSLServerSocket ssocket = createSSLServerSocket();
466561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        String[] enabled = ssocket.getEnabledProtocols();
467561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNotNull(enabled);
468561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        String[] supported = ssocket.getSupportedProtocols();
469561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i=0; i<enabled.length; i++) {
470561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            //System.out.println("Checking of "+enabled[i]);
471561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            found: {
472561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                for (int j=0; j<supported.length; j++) {
473561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    if (enabled[i].equals(supported[j])) {
474561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        break found;
475561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    }
476561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
477561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                fail("Enabled suite does not belong to the set "
478561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        + "of supported cipher suites: " + enabled[i]);
479561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
480561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
481561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ssocket.setEnabledProtocols(supported);
482561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ssocket.setEnabledProtocols(enabled);
483561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ssocket.setEnabledProtocols(supported);
484561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        String[] more_than_supported = new String[supported.length+1];
485561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i=0; i<supported.length+1; i++) {
486561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            more_than_supported[i]
487561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                = "NOT_SUPPORTED_PROTOCOL";
488561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            System.arraycopy(supported, 0,
489561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    more_than_supported, 0, i);
490561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            System.arraycopy(supported, i,
491561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    more_than_supported, i+1, supported.length-i);
492561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            try {
493561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                ssocket.setEnabledProtocols(more_than_supported);
494561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                fail("Expected IllegalArgumentException was not thrown");
495561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } catch (IllegalArgumentException e) { }
496561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
497561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        enabled = ssocket.getEnabledProtocols();
498561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        enabled[0] = "NOT_SUPPORTED_PROTOCOL";
499561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        enabled = ssocket.getEnabledProtocols();
500561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        for (int i=0; i<enabled.length; i++) {
501561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            if ("NOT_SUPPORTED_PROTOCOL".equals(enabled[i])) {
502561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                fail("Modification of the returned result "
503561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        + "causes the modification of the internal state");
504561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
505561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
506561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
507561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
508561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
509561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * setUseClientMode(boolean mode) method testing.
510561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * getUseClientMode() method testing.
511561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
512561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testSetGetUseClientMode() throws Exception {
513561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        SSLServerSocket ssocket = createSSLServerSocket();
514561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
515561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ssocket.setUseClientMode(false);
516561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse("Result does not correspond to expected",
517561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                ssocket.getUseClientMode());
518561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ssocket.setUseClientMode(true);
519561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Result does not correspond to expected",
520561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                ssocket.getUseClientMode());
521561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
522561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
523561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
524561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * setNeedClientAuth(boolean need) method testing.
525561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * getNeedClientAuth() method testing.
526561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
527561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testSetGetNeedClientAuth() throws Exception {
528561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        SSLServerSocket ssocket = createSSLServerSocket();
529561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
530561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ssocket.setWantClientAuth(true);
531561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ssocket.setNeedClientAuth(false);
532561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse("Result does not correspond to expected",
533561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                ssocket.getNeedClientAuth());
534561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse("Socket did not reset its want client auth state",
535561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                ssocket.getWantClientAuth());
536561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ssocket.setWantClientAuth(true);
537561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ssocket.setNeedClientAuth(true);
538561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Result does not correspond to expected",
539561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                ssocket.getNeedClientAuth());
540561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse("Socket did not reset its want client auth state",
541561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                ssocket.getWantClientAuth());
542561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
543561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
544561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
545561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * setWantClientAuth(boolean want) method testing.
546561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * getWantClientAuth() method testing.
547561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
548561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testSetGetWantClientAuth() throws Exception {
549561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        SSLServerSocket ssocket = createSSLServerSocket();
550561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
551561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ssocket.setNeedClientAuth(true);
552561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ssocket.setWantClientAuth(false);
553561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse("Result does not correspond to expected",
554561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                ssocket.getWantClientAuth());
555561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse("Socket did not reset its want client auth state",
556561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                ssocket.getNeedClientAuth());
557561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ssocket.setNeedClientAuth(true);
558561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ssocket.setWantClientAuth(true);
559561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Result does not correspond to expected",
560561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                ssocket.getWantClientAuth());
561561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse("Socket did not reset its want client auth state",
562561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                ssocket.getNeedClientAuth());
563561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
564561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
565561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
566561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * setEnableSessionCreation(boolean flag) method testing.
567561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * getEnableSessionCreation() method testing.
568561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
569561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testSetGetEnableSessionCreation() throws Exception {
570561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        SSLServerSocket ssocket = createSSLServerSocket();
571561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
572561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ssocket.setEnableSessionCreation(false);
573561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse("Result does not correspond to expected",
574561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                ssocket.getEnableSessionCreation());
575561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ssocket.setEnableSessionCreation(true);
576561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Result does not correspond to expected",
577561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                ssocket.getEnableSessionCreation());
578561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
579561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
580561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
581561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * toString() method testing.
582561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
583561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testToString() throws Exception {
584561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        SSLServerSocket ssocket = createSSLServerSocket();
585561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNotNull("String representation is null", ssocket.toString());
586561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
587561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
588561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private static class Client extends Thread {
589561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
590561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        private boolean closed;
591561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        private boolean handshake_started = false;
592561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        private Socket client = null;
593561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        private int port;
594561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
595561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public Client(int port) throws IOException {
596561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            super();
597561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            this.port = port;
598561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            client = new Socket();
599561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            client.setSoTimeout(10000);
600561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
601561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
602561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public int getPort() {
603561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            return client.getLocalPort();
604561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
605561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
606561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        @Override
607561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public void run() {
608561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            while (!closed) {
609561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                try {
610561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    if (doLog) {
611561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        System.out.print(".");
612561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    }
613561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    if (!handshake_started) {
614561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        client.connect(
615561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                new InetSocketAddress("localhost", port));
616561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        client.getInputStream().read();
617561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        handshake_started = true;
618561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    }
619561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    Thread.sleep(1000);
620561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                } catch (Exception e) {
621561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    e.printStackTrace();
622561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
623561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
624561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            if (client != null) {
625561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                try {
626561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    client.close();
627561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                } catch (IOException e) { }
628561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
629561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            //System.out.println("===== client has been stopped");
630561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
631561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
632561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public boolean handshakeStarted() {
633561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            return handshake_started;
634561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
635561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
636561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public void close() throws IOException {
637561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            closed = true;
638561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            client.close();
639561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
640561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
641561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    };
642561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
643561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public static Test suite() {
644561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        return new TestSuite(SSLServerSocketImplTest.class);
645561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
646561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
647561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes}
648