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.InetAddress; 22561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.net.InetSocketAddress; 23561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.net.ServerSocket; 24561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.net.Socket; 25561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport javax.net.ssl.HandshakeCompletedEvent; 26561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport javax.net.ssl.HandshakeCompletedListener; 27561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport javax.net.ssl.SSLSession; 28561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport javax.net.ssl.SSLSocket; 29561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 30561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport junit.framework.Test; 31561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport junit.framework.TestCase; 32561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport junit.framework.TestSuite; 33561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 34561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/** 35561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * SSLSocketImplTest test 36561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 37561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespublic class SSLSocketImplTest extends TestCase { 38561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 39561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // turn on/off the debug logging 40561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private static boolean doLog = false; 41561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 42561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 43561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Sets up the test case. 44561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 45561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes @Override 46561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void setUp() throws Exception { 47561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (doLog) { 48561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes System.out.println(""); 49561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes System.out.println("========================"); 50561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes System.out.println("====== Running the test: " + getName()); 51561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 52561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 53561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 54561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private SSLSocket createSSLSocket() throws Exception { 55561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return new SSLSocketImpl(JSSETestData.getSSLParameters()); 56561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 57561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 58561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private SSLSocket createSSLSocket(int port) throws Exception { 59561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return new SSLSocketImpl("localhost", port, 60561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes JSSETestData.getSSLParameters()); 61561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 62561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 63561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 64561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * SSLSocketImpl(SSLParameters sslParameters) method testing. 65561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 66561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testSSLSocketImpl1() throws Exception { 67561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Server server = null; 68561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes SSLSocket socket = null; 69561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 70561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server = new Server(); 71561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 72561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket = new SSLSocketImpl(JSSETestData.getSSLParameters()); 73561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket.connect( 74561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new InetSocketAddress("localhost", server.getPort())); 75561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes ((SSLSocketImpl) socket).init(); 76561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket.setUseClientMode(true); 77561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 78561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server.start(); 79561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes final SSLSocket s = socket; 80561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Thread thread = new Thread() { 81561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes @Override 82561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void run() { 83561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 84561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes s.startHandshake(); 858d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } catch (Exception e) { 868d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 87561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 88561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes }; 89561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 90561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes thread.start(); 91561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 92561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int timeout = 10; // wait no more than 10*500 ms for handshake 93561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes while (!server.handshakeStarted()) { 94561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // wait for handshake start 95561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 96561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Thread.sleep(500); 978d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } catch (Exception e) { 988d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 99561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes timeout--; 100561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (timeout < 0) { 101561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 102561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server.close(); 1038d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } catch (IOException ex) { 1048d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 105561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 106561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket.close(); 1078d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } catch (IOException ex) { 1088d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 109561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Handshake was not started"); 110561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 111561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 112561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } finally { 113561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (server != null) { 114561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 115561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server.close(); 1168d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } catch (IOException ex) { 1178d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 118561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 119561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (socket != null) { 120561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 121561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket.close(); 1228d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } catch (IOException ex) { 1238d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 124561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 125561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 126561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 127561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 128561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 129561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * SSLSocketImpl(String host, int port, SSLParameters sslParameters) method 130561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * testing. 131561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 132561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testSSLSocketImpl2() throws Exception { 133561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Server server = null; 134561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes SSLSocket socket = null; 135561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 136561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server = new Server(); 137561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 138561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket = new SSLSocketImpl("localhost", 139561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server.getPort(), JSSETestData.getSSLParameters()); 140561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket.setUseClientMode(true); 141561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 142561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server.start(); 143561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes final SSLSocket s = socket; 144561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Thread thread = new Thread() { 145561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes @Override 146561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void run() { 147561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 148561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes s.startHandshake(); 1498d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } catch (Exception e) { 1508d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 151561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 152561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes }; 153561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 154561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes thread.start(); 155561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 156561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int timeout = 10; // wait no more than 5 seconds for handshake 157561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes while (!server.handshakeStarted()) { 158561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // wait for handshake start 159561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 160561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Thread.sleep(500); 1618d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } catch (Exception e) { 1628d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 163561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes timeout--; 164561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (timeout < 0) { 165561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 166561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server.close(); 1678d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } catch (IOException ex) { 1688d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 169561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 170561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket.close(); 1718d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } catch (IOException ex) { 1728d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 173561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Handshake was not started"); 174561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 175561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 176561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } finally { 177561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (server != null) { 178561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 179561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server.close(); 1808d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } catch (IOException ex) { 1818d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 182561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 183561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (socket != null) { 184561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 185561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket.close(); 1868d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } catch (IOException ex) { 1878d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 188561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 189561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 190561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 191561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 192561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 193561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * SSLSocketImpl(String host, int port, InetAddress localHost, int 194561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * localPort, SSLParameters sslParameters) method testing. 195561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 196561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testSSLSocketImpl3() throws Exception { 197561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Server server = null; 198561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes SSLSocket socket = null; 199561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 200561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server = new Server(); 201561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 202561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket = new SSLSocketImpl( 203561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes "localhost", 204561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server.getPort(), 205561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes InetAddress.getByName("localhost"), 206561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 0, JSSETestData.getSSLParameters()); 207561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket.setUseClientMode(true); 208561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 209561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server.start(); 210561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes final SSLSocket s = socket; 211561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Thread thread = new Thread() { 212561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes @Override 213561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void run() { 214561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 215561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes s.startHandshake(); 2168d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } catch (Exception e) { 2178d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 218561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 219561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes }; 220561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 221561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes thread.start(); 222561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 223561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int timeout = 10; // wait no more than 5 seconds for handshake 224561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes while (!server.handshakeStarted()) { 225561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // wait for handshake start 226561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 227561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Thread.sleep(500); 2288d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } catch (Exception e) { 2298d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 230561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes timeout--; 231561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (timeout < 0) { 232561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 233561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server.close(); 2348d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } catch (IOException ex) { 2358d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 236561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 237561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket.close(); 2388d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } catch (IOException ex) { 2398d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 240561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Handshake was not started"); 241561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 242561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 243561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } finally { 244561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (server != null) { 245561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 246561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server.close(); 2478d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } catch (IOException ex) { 2488d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 249561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 250561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (socket != null) { 251561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 252561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket.close(); 2538d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } catch (IOException ex) { 2548d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 255561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 256561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 257561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 258561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 259561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 260561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * SSLSocketImpl(InetAddress host, int port, SSLParameters sslParameters) 261561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * method testing. 262561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 263561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testSSLSocketImpl4() throws Exception { 264561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Server server = null; 265561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes SSLSocket socket = null; 266561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 267561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server = new Server(); 268561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 269561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket = new SSLSocketImpl( 270561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes InetAddress.getByName("localhost"), 271561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server.getPort(), 272561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes JSSETestData.getSSLParameters()); 273561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket.setUseClientMode(true); 274561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 275561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server.start(); 276561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes final SSLSocket s = socket; 277561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Thread thread = new Thread() { 278561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes @Override 279561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void run() { 280561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 281561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes s.startHandshake(); 2828d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } catch (Exception e) { 2838d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 284561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 285561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes }; 286561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 287561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes thread.start(); 288561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 289561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int timeout = 10; // wait no more than 5 seconds for handshake 290561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes while (!server.handshakeStarted()) { 291561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // wait for handshake start 292561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 293561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Thread.sleep(500); 2948d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } catch (Exception e) { 2958d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 296561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes timeout--; 297561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (timeout < 0) { 298561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 299561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server.close(); 3008d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } catch (IOException ex) { 3018d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 302561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 303561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket.close(); 3048d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } catch (IOException ex) { 3058d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 306561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Handshake was not started"); 307561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 308561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 309561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } finally { 310561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (server != null) { 311561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 312561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server.close(); 3138d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } catch (IOException ex) { 3148d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 315561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 316561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (socket != null) { 317561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 318561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket.close(); 3198d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } catch (IOException ex) { 3208d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 321561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 322561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 323561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 324561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 325561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 326561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * SSLSocketImpl(InetAddress address, int port, InetAddress localAddress, 327561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * int localPort, SSLParameters sslParameters) method testing. 328561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 329561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testSSLSocketImpl5() throws Exception { 330561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Server server = null; 331561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes SSLSocket socket = null; 332561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 333561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server = new Server(); 334561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 335561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket = new SSLSocketImpl( 336561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes InetAddress.getByName("localhost"), 337561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server.getPort(), 338561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes InetAddress.getByName("localhost"), 339561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 0, JSSETestData.getSSLParameters()); 340561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket.setUseClientMode(true); 341561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 342561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server.start(); 343561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes final SSLSocket s = socket; 344561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Thread thread = new Thread() { 345561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes @Override 346561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void run() { 347561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 348561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes s.startHandshake(); 3498d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } catch (Exception e) { 3508d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 351561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 352561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes }; 353561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 354561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes thread.start(); 355561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 356561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int timeout = 10; // wait no more than 5 seconds for handshake 357561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes while (!server.handshakeStarted()) { 358561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // wait for handshake start 359561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 360561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Thread.sleep(500); 3618d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } catch (Exception e) { 3628d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 363561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes timeout--; 364561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (timeout < 0) { 365561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 366561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server.close(); 3678d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } catch (IOException ex) { 3688d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 369561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 370561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket.close(); 3718d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } catch (IOException ex) { 3728d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 373561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Handshake was not started"); 374561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 375561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 376561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } finally { 377561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (server != null) { 378561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 379561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server.close(); 3808d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } catch (IOException ex) { 3818d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 382561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 383561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (socket != null) { 384561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 385561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket.close(); 3868d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } catch (IOException ex) { 3878d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 388561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 389561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 390561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 391561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 392561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 393561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * getSupportedCipherSuites() method testing. 394561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 395561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testGetSupportedCipherSuites() throws Exception { 396561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes SSLSocket socket = createSSLSocket(); 397561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes String[] supported = socket.getSupportedCipherSuites(); 398561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNotNull(supported); 399561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes supported[0] = "NOT_SUPPORTED_CIPHER_SUITE"; 400561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes supported = socket.getEnabledCipherSuites(); 4018d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath for (int i = 0; i < supported.length; i++) { 402561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if ("NOT_SUPPORTED_CIPHER_SUITE".equals(supported[i])) { 403561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Modification of the returned result " 404561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "causes the modification of the internal state"); 405561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 406561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 407561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 408561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 409561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 410561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * getEnabledCipherSuites() method testing. 411561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 412561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testGetEnabledCipherSuites() throws Exception { 413561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes SSLSocket socket = createSSLSocket(); 414561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes String[] enabled = socket.getEnabledCipherSuites(); 415561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNotNull(enabled); 416561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes String[] supported = socket.getSupportedCipherSuites(); 4178d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath for (int i = 0; i < enabled.length; i++) { 4188d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath found: 4198d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath { 4208d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath for (int j = 0; j < supported.length; j++) { 421561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (enabled[i].equals(supported[j])) { 422561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes break found; 423561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 424561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 425561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Enabled suite does not belong to the set " 426561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "of supported cipher suites: " + enabled[i]); 427561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 428561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 429561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket.setEnabledCipherSuites(supported); 4308d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath for (int i = 0; i < supported.length; i++) { 431561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes enabled = new String[supported.length - i]; 432561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes System.arraycopy(supported, 0, 4338d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath enabled, 0, supported.length - i); 434561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket.setEnabledCipherSuites(enabled); 435561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes String[] result = socket.getEnabledCipherSuites(); 436561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (result.length != enabled.length) { 437561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Returned result does not correspond to expected."); 438561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 4398d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath for (int k = 0; k < result.length; k++) { 4408d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath found: 4418d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath { 4428d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath for (int n = 0; n < enabled.length; n++) { 443561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (result[k].equals(enabled[n])) { 444561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes break found; 445561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 446561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 447561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (result.length != enabled.length) { 448561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Returned result does not correspond " 449561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "to expected."); 450561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 451561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 452561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 453561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 454561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 455561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 456561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 457561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * setEnabledCipherSuites(String[] suites) method testing. 458561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 459561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testSetEnabledCipherSuites() throws Exception { 460561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes SSLSocket socket = createSSLSocket(); 461561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes String[] enabled = socket.getEnabledCipherSuites(); 462561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNotNull(enabled); 463561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes String[] supported = socket.getSupportedCipherSuites(); 4648d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath for (int i = 0; i < enabled.length; i++) { 4658d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath found: 4668d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath { 4678d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath for (int j = 0; j < supported.length; j++) { 468561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (enabled[i].equals(supported[j])) { 469561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes break found; 470561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 471561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 472561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Enabled suite does not belong to the set " 473561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "of supported cipher suites: " + enabled[i]); 474561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 475561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 476561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket.setEnabledCipherSuites(supported); 477561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket.setEnabledCipherSuites(enabled); 478561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket.setEnabledCipherSuites(supported); 4798d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath String[] more_than_supported = new String[supported.length + 1]; 4808d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath for (int i = 0; i < supported.length + 1; i++) { 481561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes more_than_supported[i] 4828d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath = "NOT_SUPPORTED_CIPHER_SUITE"; 483561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes System.arraycopy(supported, 0, 484561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes more_than_supported, 0, i); 485561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes System.arraycopy(supported, i, 4868d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath more_than_supported, i + 1, supported.length - i); 487561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 488561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket.setEnabledCipherSuites(more_than_supported); 489561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Expected IllegalArgumentException was not thrown"); 4908d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } catch (IllegalArgumentException e) { 4918d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 492561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 493561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes enabled = socket.getEnabledCipherSuites(); 494561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes enabled[0] = "NOT_SUPPORTED_CIPHER_SUITE"; 495561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes enabled = socket.getEnabledCipherSuites(); 4968d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath for (int i = 0; i < enabled.length; i++) { 497561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if ("NOT_SUPPORTED_CIPHER_SUITE".equals(enabled[i])) { 498561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Modification of the returned result " 499561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "causes the modification of the internal state"); 500561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 501561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 502561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 503561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 504561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 505561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * getSupportedProtocols() method testing. 506561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 507561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testGetSupportedProtocols() throws Exception { 508561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes SSLSocket socket = createSSLSocket(); 509561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes String[] supported = socket.getSupportedProtocols(); 510561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNotNull(supported); 511561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse(supported.length == 0); 512561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes supported[0] = "NOT_SUPPORTED_PROTOCOL"; 513561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes supported = socket.getSupportedProtocols(); 5148d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath for (int i = 0; i < supported.length; i++) { 515561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if ("NOT_SUPPORTED_PROTOCOL".equals(supported[i])) { 516561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Modification of the returned result " 517561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "causes the modification of the internal state"); 518561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 519561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 520561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 521561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 522561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 523561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * getEnabledProtocols() method testing. 524561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 525561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testGetEnabledProtocols() throws Exception { 526561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes SSLSocket socket = createSSLSocket(); 527561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes String[] enabled = socket.getEnabledProtocols(); 528561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNotNull(enabled); 529561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes String[] supported = socket.getSupportedProtocols(); 5308d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath for (int i = 0; i < enabled.length; i++) { 5318d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath found: 5328d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath { 5338d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath for (int j = 0; j < supported.length; j++) { 534561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (enabled[i].equals(supported[j])) { 535561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes break found; 536561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 537561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 538561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Enabled protocol does not belong to the set " 539561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "of supported protocols: " + enabled[i]); 540561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 541561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 542561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket.setEnabledProtocols(supported); 5438d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath for (int i = 0; i < supported.length; i++) { 544561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes enabled = new String[supported.length - i]; 545561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes System.arraycopy(supported, i, 5468d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath enabled, 0, supported.length - i); 547561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket.setEnabledProtocols(enabled); 548561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes String[] result = socket.getEnabledProtocols(); 549561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (result.length != enabled.length) { 550561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Returned result does not correspond to expected."); 551561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 5528d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath for (int k = 0; k < result.length; k++) { 5538d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath found: 5548d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath { 5558d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath for (int n = 0; n < enabled.length; n++) { 556561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (result[k].equals(enabled[n])) { 557561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes break found; 558561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 559561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 560561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (result.length != enabled.length) { 561561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Returned result does not correspond " 562561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "to expected."); 563561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 564561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 565561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 566561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 567561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 568561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 569561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 570561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * setEnabledProtocols(String[] protocols) method testing. 571561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 572561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testSetEnabledProtocols() throws Exception { 573561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes SSLSocket socket = createSSLSocket(); 574561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes String[] enabled = socket.getEnabledProtocols(); 575561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNotNull(enabled); 576561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes String[] supported = socket.getSupportedProtocols(); 5778d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath for (int i = 0; i < enabled.length; i++) { 578561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes //System.out.println("Checking of "+enabled[i]); 5798d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath found: 5808d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath { 5818d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath for (int j = 0; j < supported.length; j++) { 582561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (enabled[i].equals(supported[j])) { 583561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes break found; 584561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 585561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 586561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Enabled suite does not belong to the set " 587561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "of supported cipher suites: " + enabled[i]); 588561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 589561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 590561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket.setEnabledProtocols(supported); 591561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket.setEnabledProtocols(enabled); 592561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket.setEnabledProtocols(supported); 5938d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath String[] more_than_supported = new String[supported.length + 1]; 5948d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath for (int i = 0; i < supported.length + 1; i++) { 595561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes more_than_supported[i] 5968d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath = "NOT_SUPPORTED_PROTOCOL"; 597561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes System.arraycopy(supported, 0, 598561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes more_than_supported, 0, i); 599561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes System.arraycopy(supported, i, 6008d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath more_than_supported, i + 1, supported.length - i); 601561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 602561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket.setEnabledProtocols(more_than_supported); 603561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Expected IllegalArgumentException was not thrown"); 6048d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } catch (IllegalArgumentException e) { 6058d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 606561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 607561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes enabled = socket.getEnabledProtocols(); 608561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes enabled[0] = "NOT_SUPPORTED_PROTOCOL"; 609561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes enabled = socket.getEnabledProtocols(); 6108d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath for (int i = 0; i < enabled.length; i++) { 611561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if ("NOT_SUPPORTED_PROTOCOL".equals(enabled[i])) { 612561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Modification of the returned result " 613561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes + "causes the modification of the internal state"); 614561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 615561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 616561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 617561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 618561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private static class Server extends Thread { 619561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 620561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private final ServerSocket server; 621561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private boolean closed; 622561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private boolean handshake_started = false; 623561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes private Socket endpoint = null; 624561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 625561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public Server() throws IOException { 626561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes super(); 627561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server = new ServerSocket(0); 628561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server.setSoTimeout(1000); 629561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 630561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 631561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public int getPort() { 632561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return server.getLocalPort(); 633561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 634561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 635561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes @Override 636561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void run() { 637561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes while (!closed) { 638561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 639561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (doLog) { 640561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes System.out.print("."); 641561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 642561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (!handshake_started) { 643561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes endpoint = server.accept(); 644561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes endpoint.getInputStream().read(); 645561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes handshake_started = true; 646561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 647561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Thread.sleep(1000); 648561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (Exception e) { 649561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes e.printStackTrace(); 650561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 651561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 652561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (endpoint != null) { 653561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 654561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes endpoint.close(); 6558d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } catch (IOException e) { 6568d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 657561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 658561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 659561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 660561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public boolean handshakeStarted() { 661561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return handshake_started; 662561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 663561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 664561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void close() throws IOException { 665561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes closed = true; 666561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server.close(); 667561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 668561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 6698d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 6708d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath 6718d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath ; 672561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 673561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 674561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * setUseClientMode(boolean mode) method testing. 675561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * getUseClientMode() method testing. 676561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 677561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testSetGetUseClientMode() throws Exception { 678561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Server server = null; 679561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes SSLSocket socket = null; 680561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 681561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server = new Server(); 682561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 683561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket = createSSLSocket(server.getPort()); 684561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 685561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket.setUseClientMode(false); 686561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse("Result does not correspond to expected", 687561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket.getUseClientMode()); 688561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket.setUseClientMode(true); 689561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Result does not correspond to expected", 690561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket.getUseClientMode()); 691561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 692561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server.start(); 693561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes final SSLSocket s = socket; 694561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new Thread() { 695561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes @Override 696561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void run() { 697561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 698561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes s.startHandshake(); 699561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IOException e) { 700561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes //e.printStackTrace(); 701561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 702561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 703561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes }.start(); 704561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 705561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes while (!server.handshakeStarted()) { 706561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // wait for handshake start 707561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 708561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Thread.sleep(500); 7098d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } catch (Exception e) { 7108d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 711561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 712561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 713561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 714561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket.setUseClientMode(false); 715561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server.close(); 716561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket.close(); 717561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Expected IllegalArgumentException was not thrown"); 7188d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } catch (IllegalArgumentException e) { 7198d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 720561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } finally { 721561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (server != null) { 722561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 723561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server.close(); 7248d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } catch (IOException ex) { 7258d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 726561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 727561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (socket != null) { 728561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 729561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket.close(); 7308d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } catch (IOException ex) { 7318d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 732561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 733561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 734561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 735561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 736561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 737561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * setNeedClientAuth(boolean need) method testing. 738561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * getNeedClientAuth() method testing. 739561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 740561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testSetGetNeedClientAuth() throws Exception { 741561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes SSLSocket socket = createSSLSocket(); 742561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 743561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket.setWantClientAuth(true); 744561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket.setNeedClientAuth(false); 745561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse("Result does not correspond to expected", 746561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket.getNeedClientAuth()); 747561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse("Socket did not reset its want client auth state", 748561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket.getWantClientAuth()); 749561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket.setWantClientAuth(true); 750561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket.setNeedClientAuth(true); 751561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Result does not correspond to expected", 752561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket.getNeedClientAuth()); 753561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse("Socket did not reset its want client auth state", 754561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket.getWantClientAuth()); 755561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 756561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 757561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 758561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * setWantClientAuth(boolean want) method testing. 759561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * getWantClientAuth() method testing. 760561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 761561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testSetGetWantClientAuth() throws Exception { 762561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes SSLSocket socket = createSSLSocket(); 763561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 764561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket.setNeedClientAuth(true); 765561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket.setWantClientAuth(false); 766561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse("Result does not correspond to expected", 767561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket.getWantClientAuth()); 768561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse("Socket did not reset its want client auth state", 769561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket.getNeedClientAuth()); 770561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket.setNeedClientAuth(true); 771561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket.setWantClientAuth(true); 772561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Result does not correspond to expected", 773561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket.getWantClientAuth()); 774561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse("Socket did not reset its want client auth state", 775561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket.getNeedClientAuth()); 776561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 777561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 778561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 779561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * setEnableSessionCreation(boolean flag) method testing. 780561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * getEnableSessionCreation() method testing. 781561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 782561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testSetGetEnableSessionCreation() throws Exception { 783561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes SSLSocket socket = createSSLSocket(); 784561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 785561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket.setEnableSessionCreation(false); 786561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertFalse("Result does not correspond to expected", 787561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket.getEnableSessionCreation()); 788561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket.setEnableSessionCreation(true); 789561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertTrue("Result does not correspond to expected", 790561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket.getEnableSessionCreation()); 791561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 792561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 793561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 794561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * getSession() method testing. 795561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 796561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testGetSession() throws Exception { 797561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Server server = null; 798561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes SSLSocket socket = null; 799561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 800561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server = new Server(); 801561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 802561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket = createSSLSocket(server.getPort()); 803561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket.setUseClientMode(true); 804561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 805561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server.start(); 806561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes final SSLSocket s = socket; 807561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes final SSLSession[] session = new SSLSession[1]; 808561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Thread thread = new Thread() { 809561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes @Override 810561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void run() { 811561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 812561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes session[0] = s.getSession(); 813561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (Exception e) { 814561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes e.printStackTrace(); 815561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 816561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 817561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes }; 818561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 819561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes thread.start(); 820561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 821561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int timeout = 10; // wait no more than 5 seconds for handshake 822561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes while (!server.handshakeStarted()) { 823561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // wait for handshake start 824561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 825561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Thread.sleep(500); 8268d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } catch (Exception e) { 8278d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 828561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes timeout--; 829561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (timeout < 0) { 830561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 831561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server.close(); 8328d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } catch (IOException ex) { 8338d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 834561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 835561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket.close(); 8368d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } catch (IOException ex) { 8378d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 838561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("getSession method did not start a handshake"); 839561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 840561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 841561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 842561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server.close(); // makes error during the handshake 843561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes thread.join(); 844561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if ((session[0] == null) || 8458d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath (!session[0].getCipherSuite() 8468d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath .endsWith("_NULL_WITH_NULL_NULL"))) { 847561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Returned session is null " 8488d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath + "or not TLS_NULL_WITH_NULL_NULL"); 849561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 850561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } finally { 851561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (server != null) { 852561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 853561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server.close(); 8548d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } catch (IOException ex) { 8558d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 856561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 857561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (socket != null) { 858561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 859561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket.close(); 8608d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } catch (IOException ex) { 8618d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 862561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 863561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 864561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 865561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 866561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 867561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * addHandshakeCompletedListener( HandshakeCompletedListener listener) 868561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * method testing. 869561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * removeHandshakeCompletedListener( HandshakeCompletedListener listener) 870561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * method testing. 871561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 872561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testAddRemoveHandshakeCompletedListener() throws Exception { 873561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes HandshakeCompletedListener listener = 8748d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath new HandshakeCompletedListener() { 8758d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath public void handshakeCompleted( 8768d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath HandshakeCompletedEvent event) { 8778d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 8788d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath }; 879561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes SSLSocket socket = createSSLSocket(); 880561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket.addHandshakeCompletedListener(listener); 881561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 882561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket.addHandshakeCompletedListener(null); 883561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Expected IllegalArgumentException was not thrown."); 8848d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } catch (IllegalArgumentException e) { 8858d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 886561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 887561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket.removeHandshakeCompletedListener(null); 888561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Expected IllegalArgumentException was not thrown."); 8898d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } catch (IllegalArgumentException e) { 8908d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 891561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 892561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket.removeHandshakeCompletedListener( 893561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes new HandshakeCompletedListener() { 894561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void handshakeCompleted( 8958d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath HandshakeCompletedEvent event) { 8968d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 897561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes }); 898561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Expected IllegalArgumentException was not thrown."); 8998d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } catch (IllegalArgumentException e) { 9008d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 901561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 902561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket.removeHandshakeCompletedListener(listener); 903561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (IllegalArgumentException e) { 904561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Unxpected IllegalArgumentException was thrown."); 905561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 906561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 907561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 908561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 909561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * startHandshake() method testing. 910561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 911561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testStartHandshake() throws Exception { 912561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Server server = null; 913561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes SSLSocket socket = null; 914561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 915561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server = new Server(); 916561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 917561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket = createSSLSocket(server.getPort()); 918561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket.setUseClientMode(true); 919561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 920561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server.start(); 921561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes final SSLSocket s = socket; 922561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes final Exception[] exception = new Exception[1]; 923561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Thread thread = new Thread() { 924561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes @Override 925561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void run() { 926561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 927561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes s.startHandshake(); 928561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (Exception e) { 929561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes exception[0] = e; 930561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 931561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 932561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes }; 933561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 934561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes thread.start(); 935561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 936561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int timeout = 10; // wait no more than 5 seconds for handshake 937561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes while (!server.handshakeStarted()) { 938561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // wait for handshake start 939561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 940561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Thread.sleep(500); 9418d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } catch (Exception e) { 9428d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 943561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes timeout--; 944561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (timeout < 0) { 945561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Handshake was not started"); 946561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 947561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 948561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 949561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server.close(); // makes error during the handshake 950561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes thread.join(); 951561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (exception[0] == null) { 952561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Expected IOException was not thrown"); 953561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 954561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } finally { 955561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (server != null) { 956561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 957561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server.close(); 9588d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } catch (IOException ex) { 9598d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 960561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 961561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (socket != null) { 962561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 963561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket.close(); 9648d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } catch (IOException ex) { 9658d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 966561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 967561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 968561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 969561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 970561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 971561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * getInputStream() method testing. 972561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 973561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testGetInputStream() throws Exception { 974561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Server server = null; 975561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes SSLSocket socket = null; 976561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 977561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server = new Server(); 978561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 979561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket = createSSLSocket(server.getPort()); 980561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket.setUseClientMode(true); 981561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 982561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server.start(); 983561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes final SSLSocket s = socket; 984561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Thread thread = new Thread() { 985561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes @Override 986561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void run() { 987561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 988561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes s.getInputStream().read(); // should start handshake 9898d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } catch (Exception e) { 9908d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 991561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 992561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes }; 993561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 994561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes thread.start(); 995561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 996561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int timeout = 10; // wait no more than 5 seconds for handshake 997561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes while (!server.handshakeStarted()) { 998561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // wait for handshake start 999561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 1000561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Thread.sleep(500); 10018d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } catch (Exception e) { 10028d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 1003561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes timeout--; 1004561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (timeout < 0) { 1005561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 1006561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server.close(); 10078d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } catch (IOException ex) { 10088d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 1009561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 1010561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket.close(); 10118d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } catch (IOException ex) { 10128d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 1013561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Handshake was not started"); 1014561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1015561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1016561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } finally { 1017561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (server != null) { 1018561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 1019561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server.close(); 10208d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } catch (IOException ex) { 10218d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 1022561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1023561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (socket != null) { 1024561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 1025561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket.close(); 10268d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } catch (IOException ex) { 10278d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 1028561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1029561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1030561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1031561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1032561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 1033561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * getOutputStream() method testing. 1034561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 1035561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testGetOutputStream() throws Exception { 1036561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Server server = null; 1037561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes SSLSocket socket = null; 1038561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 1039561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server = new Server(); 1040561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1041561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket = createSSLSocket(server.getPort()); 1042561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket.setUseClientMode(true); 1043561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1044561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server.start(); 1045561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes final SSLSocket s = socket; 1046561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Thread thread = new Thread() { 1047561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes @Override 1048561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void run() { 1049561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 1050561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes s.getOutputStream().write(0); // should start handshake 10518d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } catch (Exception e) { 10528d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 1053561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1054561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes }; 1055561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1056561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes thread.start(); 1057561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1058561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes int timeout = 10; // wait no more than 5 seconds for handshake 1059561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes while (!server.handshakeStarted()) { 1060561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes // wait for handshake start 1061561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 1062561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Thread.sleep(500); 10638d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } catch (Exception e) { 10648d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 1065561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes timeout--; 1066561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (timeout < 0) { 1067561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 1068561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server.close(); 10698d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } catch (IOException ex) { 10708d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 1071561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 1072561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket.close(); 10738d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } catch (IOException ex) { 10748d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 1075561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Handshake was not started"); 1076561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1077561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1078561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } finally { 1079561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (server != null) { 1080561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 1081561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server.close(); 10828d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } catch (IOException ex) { 10838d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 1084561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1085561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (socket != null) { 1086561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 1087561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket.close(); 10888d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } catch (IOException ex) { 10898d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 1090561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1091561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1092561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1093561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1094561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 1095561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * sendUrgentData(int data) method testing. 1096561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 1097561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testSendUrgentData() { 1098561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Server server = null; 1099561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes SSLSocket socket = null; 1100561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 1101561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server = new Server(); 1102561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket = createSSLSocket(server.getPort()); 1103561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1104561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket.sendUrgentData(0); 1105561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Expected exception was not thrown"); 1106561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (Exception e) { 1107561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (doLog) { 11088d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath System.out.println("Trowed exception: " + e.getMessage()); 1109561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1110561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } finally { 1111561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (server != null) { 1112561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 1113561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server.close(); 11148d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } catch (IOException ex) { 11158d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 1116561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1117561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (socket != null) { 1118561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 1119561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket.close(); 11208d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } catch (IOException ex) { 11218d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 1122561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1123561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1124561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1125561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1126561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 1127561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * setOOBInline(boolean on) method testing. 1128561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 1129561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testSetOOBInline() { 1130561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Server server = null; 1131561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes SSLSocket socket = null; 1132561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 1133561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server = new Server(); 1134561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket = createSSLSocket(server.getPort()); 1135561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1136561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket.setOOBInline(true); 1137561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Expected exception was not thrown"); 1138561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (Exception e) { 1139561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (doLog) { 11408d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath System.out.println("Trowed exception: " + e.getMessage()); 1141561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1142561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } finally { 1143561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (server != null) { 1144561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 1145561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server.close(); 11468d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } catch (IOException ex) { 11478d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 1148561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1149561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (socket != null) { 1150561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 1151561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket.close(); 11528d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } catch (IOException ex) { 11538d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 1154561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1155561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1156561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1157561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1158561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 1159561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * shutdownOutput() method testing. 1160561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 1161561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testShutdownOutput() { 1162561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Server server = null; 1163561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes SSLSocket socket = null; 1164561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 1165561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server = new Server(); 1166561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket = createSSLSocket(server.getPort()); 1167561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1168561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket.shutdownOutput(); 1169561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Expected exception was not thrown"); 1170561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (Exception e) { 1171561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (doLog) { 11728d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath System.out.println("Trowed exception: " + e.getMessage()); 1173561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1174561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } finally { 1175561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (server != null) { 1176561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 1177561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server.close(); 11788d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } catch (IOException ex) { 11798d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 1180561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1181561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (socket != null) { 1182561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 1183561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket.close(); 11848d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } catch (IOException ex) { 11858d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 1186561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1187561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1188561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1189561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1190561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 1191561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * shutdownInput() method testing. 1192561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 1193561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testShutdownInput() { 1194561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes Server server = null; 1195561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes SSLSocket socket = null; 1196561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 1197561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server = new Server(); 1198561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket = createSSLSocket(server.getPort()); 1199561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1200561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket.shutdownInput(); 1201561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes fail("Expected exception was not thrown"); 1202561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } catch (Exception e) { 1203561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (doLog) { 12048d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath System.out.println("Trowed exception: " + e.getMessage()); 1205561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1206561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } finally { 1207561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (server != null) { 1208561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 1209561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes server.close(); 12108d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } catch (IOException ex) { 12118d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 1212561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1213561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes if (socket != null) { 1214561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes try { 1215561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes socket.close(); 12168d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } catch (IOException ex) { 12178d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath } 1218561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1219561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1220561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1221561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1222561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes /** 1223561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * toString() method testing. 1224561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */ 1225561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public void testToString() throws Exception { 1226561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes SSLSocket socket = createSSLSocket(); 1227561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes assertNotNull("String representation is null", socket.toString()); 1228561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1229561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1230561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes public static Test suite() { 1231561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes return new TestSuite(SSLSocketImplTest.class); 1232561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes } 1233561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes 1234561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes} 1235