SSLSocketTest.java revision d87bb037ea1e7c877b9f81359a5d6675097e46de
1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/* 2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Copyright (C) 2007 The Android Open Source Project 3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * you may not use this file except in compliance with the License. 6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * You may obtain a copy of the License at 7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * See the License for the specific language governing permissions and 14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * limitations under the License. 15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage tests.api.javax.net.ssl; 17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 181cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grobimport dalvik.annotation.AndroidOnly; 19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport dalvik.annotation.TestTargetClass; 20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport dalvik.annotation.TestTargets; 21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport dalvik.annotation.TestLevel; 22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport dalvik.annotation.TestTargetNew; 23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport javax.net.ssl.*; 251cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grobimport javax.security.cert.X509Certificate; 261cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob 27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.net.*; 281cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grobimport java.security.KeyStore; 29d87bb037ea1e7c877b9f81359a5d6675097e46deElliott Hughesimport java.security.SecureRandom; 30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.lang.String; 311cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grobimport java.io.ByteArrayInputStream; 32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.IOException; 331cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grobimport java.io.InputStream; 34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport junit.framework.TestCase; 36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 371cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grobimport org.apache.harmony.luni.util.Base64; 381cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob 391cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grobimport tests.api.javax.net.ssl.HandshakeCompletedEventTest.TestTrustManager; 40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport tests.support.Support_PortManager; 41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project@TestTargetClass(SSLSocket.class) 43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class SSLSocketTest extends TestCase { 44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public class HandshakeCL implements HandshakeCompletedListener { 46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project HandshakeCL() { 47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project super(); 48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void handshakeCompleted(HandshakeCompletedEvent event) { 50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @tests javax.net.ssl.SSLSocket#SSLSocket() 55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @TestTargetNew( 57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project level = TestLevel.COMPLETE, 58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project notes = "", 59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project method = "SSLSocket", 60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project args = {} 61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ) 62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testConstructor_01() { 63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 641cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob SSLSocket ssl = getSSLSocket(); 65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (Exception e) { 66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("Unexpected exception " + e); 67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 711cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob * @throws IOException 721cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob * @throws UnknownHostException 73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @tests javax.net.ssl.SSLSocket#SSLSocket(InetAddress address, int port) 74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @TestTargetNew( 76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project level = TestLevel.COMPLETE, 77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project notes = "", 78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project method = "SSLSocket", 79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project args = {java.net.InetAddress.class, int.class} 80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ) 811cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob public void testConstructor_02() throws UnknownHostException, IOException { 821cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob SSLSocket ssl; 83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int sport = startServer("Cons InetAddress,I"); 84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int[] invalidPort = {-1, Integer.MIN_VALUE, 65536, Integer.MAX_VALUE}; 85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 861cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob ssl = getSSLSocket(InetAddress.getLocalHost(), sport); 871cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob assertNotNull(ssl); 881cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob assertEquals(sport, ssl.getPort()); 89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 911cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob ssl = getSSLSocket(InetAddress.getLocalHost(), sport + 1); 92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IOException wasn't thrown ..."); 93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IOException e) { 94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //expected 95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < invalidPort.length; i++) { 98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 991cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob ssl = getSSLSocket(InetAddress.getLocalHost(), invalidPort[i]); 100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IllegalArgumentException wasn't thrown for " + invalidPort[i]); 101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IllegalArgumentException iae) { 1021cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob // expected 103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (Exception e) { 104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail(e + " was thrown instead of IllegalArgumentException for " + invalidPort[i]); 105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1101cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob * @throws IOException 1111cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob * @throws UnknownHostException 112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @tests javax.net.ssl.SSLSocket#SSLSocket(InetAddress address, int port, 113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * InetAddress clientAddress, int clientPort) 114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @TestTargetNew( 116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project level = TestLevel.COMPLETE, 117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project notes = "", 118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project method = "SSLSocket", 119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project args = {java.net.InetAddress.class, int.class, java.net.InetAddress.class, int.class} 120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ) 1211cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob public void testConstructor_03() throws UnknownHostException, IOException { 1221cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob SSLSocket ssl; 123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int sport = startServer("Cons InetAddress,I,InetAddress,I"); 124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int portNumber = Support_PortManager.getNextPort(); 125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1261cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob ssl = getSSLSocket(InetAddress.getLocalHost(), sport, 1271cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob InetAddress.getLocalHost(), portNumber); 1281cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob assertNotNull(ssl); 1291cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob assertEquals(sport, ssl.getPort()); 1301cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob assertEquals(portNumber, ssl.getLocalPort()); 131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 1331cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob ssl = getSSLSocket(InetAddress.getLocalHost(), 8081, InetAddress.getLocalHost(), 8082); 134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IOException wasn't thrown ..."); 135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IOException e) { 136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //expected 137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1391cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob try { 1401cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob ssl = getSSLSocket(InetAddress.getLocalHost(), -1, 1411cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob InetAddress.getLocalHost(), sport + 1); 1421cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob fail("IllegalArgumentException wasn't thrown for -1"); 1431cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob } catch (IllegalArgumentException iae) { 1441cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob // expected 1451cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob } catch (Exception e) { 1461cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob fail(e + " was thrown instead of IllegalArgumentException for -1"); 1471cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob } 1481cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob try { 1491cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob ssl = getSSLSocket(InetAddress.getLocalHost(), sport, 1501cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob InetAddress.getLocalHost(), -1); 1511cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob fail("IllegalArgumentException wasn't thrown for -1"); 1521cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob } catch (IllegalArgumentException iae) { 1531cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob // expected 1541cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob } catch (Exception e) { 1551cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob fail(e + " was thrown instead of IllegalArgumentException for -1"); 1561cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob } 1571cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob 1581cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob try { 1591cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob ssl = getSSLSocket(InetAddress.getLocalHost(), Integer.MIN_VALUE, 1601cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob InetAddress.getLocalHost(), sport + 1); 1611cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob fail("IOException wasn't thrown for " + Integer.MIN_VALUE); 1621cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob } catch (IOException ioe) { 1631cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob // expected on RI 1641cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob } catch (IllegalArgumentException iae) { 1651cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob // expected on Android 1661cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob } catch (Exception e) { 1671cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob fail(e + " was thrown instead of IOException for " 1681cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob + Integer.MIN_VALUE); 1691cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob } 1701cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob try { 1711cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob ssl = getSSLSocket(InetAddress.getLocalHost(), sport, 1721cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob InetAddress.getLocalHost(), Integer.MIN_VALUE); 1731cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob fail("IllegalArgumentException wasn't thrown for " 1741cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob + Integer.MIN_VALUE); 1751cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob } catch (IllegalArgumentException iae) { 1761cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob // expected 1771cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob } catch (Exception e) { 1781cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob fail(e + " was thrown instead of IllegalArgumentException for " 1791cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob + Integer.MIN_VALUE); 1801cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob } 1811cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob 1821cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob try { 1831cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob ssl = getSSLSocket(InetAddress.getLocalHost(), 65536, 1841cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob InetAddress.getLocalHost(), sport + 1); 1851cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob fail("IOException wasn't thrown for 65536"); 1861cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob } catch (IOException ioe) { 1871cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob // expected on RI 1881cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob } catch (IllegalArgumentException iae) { 1891cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob // expected on Android 1901cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob } catch (Exception e) { 1911cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob fail(e + " was thrown instead of IOException for 65536"); 1921cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob } 1931cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob try { 1941cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob ssl = getSSLSocket(InetAddress.getLocalHost(), sport, 1951cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob InetAddress.getLocalHost(), 65536); 1961cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob fail("IllegalArgumentException wasn't thrown for 65536"); 1971cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob } catch (IllegalArgumentException iae) { 1981cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob // expected 1991cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob } catch (Exception e) { 2001cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob fail(e + " was thrown instead of IllegalArgumentException for 65536"); 2011cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob } 2021cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob 2031cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob try { 2041cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob ssl = getSSLSocket(InetAddress.getLocalHost(), Integer.MAX_VALUE, 2051cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob InetAddress.getLocalHost(), sport + 1); 2061cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob fail("IOException wasn't thrown for " + Integer.MAX_VALUE); 2071cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob } catch (IOException ioe) { 2081cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob // expected on RI 2091cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob } catch (IllegalArgumentException iae) { 2101cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob // expected on Android 2111cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob } catch (Exception e) { 2121cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob fail(e + " was thrown instead of IOException for " 2131cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob + Integer.MAX_VALUE); 2141cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob } 2151cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob try { 2161cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob ssl = getSSLSocket(InetAddress.getLocalHost(), sport, 2171cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob InetAddress.getLocalHost(), Integer.MAX_VALUE); 2181cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob fail("IllegalArgumentException wasn't thrown for " 2191cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob + Integer.MAX_VALUE); 2201cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob } catch (IllegalArgumentException iae) { 2211cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob // expected 2221cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob } catch (Exception e) { 2231cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob fail(e + " was thrown instead of IllegalArgumentException for " 2241cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob + Integer.MAX_VALUE); 225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 227adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 2291cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob * @throws IOException 2301cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob * @throws UnknownHostException 231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @tests javax.net.ssl.SSLSocket#SSLSocket(String host, int port) 232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @TestTargetNew( 234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project level = TestLevel.COMPLETE, 235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project notes = "", 236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project method = "SSLSocket", 237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project args = {java.lang.String.class, int.class} 238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ) 2391cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob public void testConstructor_04() throws UnknownHostException, IOException { 2401cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob SSLSocket ssl; 241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int sport = startServer("Cons String,I"); 242adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int[] invalidPort = {-1, Integer.MIN_VALUE, 65536, Integer.MAX_VALUE}; 243adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2441cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob ssl = getSSLSocket(InetAddress.getLocalHost().getHostName(), sport); 2451cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob assertNotNull(ssl); 2461cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob assertEquals(sport, ssl.getPort()); 247adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 248adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 2491cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob ssl = getSSLSocket("localhost", 8082); 250adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IOException wasn't thrown ..."); 251adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IOException e) { 252adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //expected 253adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 254adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 255adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < invalidPort.length; i++) { 256adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 2571cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob ssl = getSSLSocket(InetAddress.getLocalHost().getHostName(), invalidPort[i]); 258adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IllegalArgumentException wasn't thrown for " + invalidPort[i]); 259adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IllegalArgumentException iae) { 2601cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob // expected 261adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (Exception e) { 262adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail(e + " was thrown instead of IllegalArgumentException for " + invalidPort[i]); 263adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 264adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 265adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 266adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 2671cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob ssl = getSSLSocket("bla-bla", sport); 268adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("UnknownHostException wasn't thrown"); 269adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (UnknownHostException uhp) { 2701cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob // expected 271adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (Exception e) { 272adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail(e + " was thrown instead of UnknownHostException"); 273adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 274adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 275adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 276adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 2771cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob * @throws IOException 2781cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob * @throws UnknownHostException 279adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @tests javax.net.ssl.SSLSocket#SSLSocket(String host, int port, InetAddress clientAddress, 280adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * int clientPort) 281adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 282adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @TestTargetNew( 283adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project level = TestLevel.COMPLETE, 284adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project notes = "", 285adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project method = "SSLSocket", 286adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project args = {java.lang.String.class, int.class, java.net.InetAddress.class, int.class} 287adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ) 2881cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob public void testConstructor_05() throws UnknownHostException, IOException { 2891cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob SSLSocket ssl; 290adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int sport = startServer("Cons String,I,InetAddress,I"); 291adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int portNumber = Support_PortManager.getNextPort(); 292adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int[] invalidPort = {-1, Integer.MIN_VALUE, 65536, Integer.MAX_VALUE}; 293adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2941cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob ssl = getSSLSocket(InetAddress.getLocalHost().getHostName(), sport, 2951cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob InetAddress.getLocalHost(), portNumber); 2961cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob assertNotNull(ssl); 2971cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob assertEquals(sport, ssl.getPort()); 2981cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob assertEquals(portNumber, ssl.getLocalPort()); 299adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 300adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 3011cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob ssl = getSSLSocket("localhost", 8081, InetAddress.getLocalHost(), 8082); 302adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IOException wasn't thrown ..."); 303adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IOException e) { 304adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //expected 305adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 306adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 307adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < invalidPort.length; i++) { 308adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project portNumber = Support_PortManager.getNextPort(); 309adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 3101cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob ssl = getSSLSocket(InetAddress.getLocalHost().getHostName(), invalidPort[i], 311adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project InetAddress.getLocalHost(), portNumber); 312adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IllegalArgumentException wasn't thrown for " + invalidPort[i]); 313adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IllegalArgumentException iae) { 3141cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob // expected 315adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (Exception e) { 316adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail(e + " was thrown instead of IllegalArgumentException for " + invalidPort[i]); 317adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 318adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 3191cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob ssl = getSSLSocket(InetAddress.getLocalHost().getHostName(), sport, 320adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project InetAddress.getLocalHost(), invalidPort[i]); 321adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IllegalArgumentException wasn't thrown for " + invalidPort[i]); 322adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IllegalArgumentException iae) { 3231cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob // expected 324adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (Exception e) { 325adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail(e + " was thrown instead of IllegalArgumentException for " + invalidPort[i]); 326adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 327adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 328adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 329adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project portNumber = Support_PortManager.getNextPort(); 330adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 3311cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob ssl = getSSLSocket("bla-bla", sport, InetAddress.getLocalHost(), portNumber); 332adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("UnknownHostException wasn't thrown"); 333adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (UnknownHostException uhp) { 3341cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob // expected 335adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (Exception e) { 336adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail(e + " was thrown instead of UnknownHostException"); 337adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 338adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 339adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 340d87bb037ea1e7c877b9f81359a5d6675097e46deElliott Hughes @TestTargetNew( 341d87bb037ea1e7c877b9f81359a5d6675097e46deElliott Hughes level = TestLevel.COMPLETE, 342d87bb037ea1e7c877b9f81359a5d6675097e46deElliott Hughes notes = "Guard against native resource leakage.", 343d87bb037ea1e7c877b9f81359a5d6675097e46deElliott Hughes method = "SSLSocket", 344d87bb037ea1e7c877b9f81359a5d6675097e46deElliott Hughes args = {} 345d87bb037ea1e7c877b9f81359a5d6675097e46deElliott Hughes ) 346d87bb037ea1e7c877b9f81359a5d6675097e46deElliott Hughes public void test_creationStressTest() throws Exception { 347d87bb037ea1e7c877b9f81359a5d6675097e46deElliott Hughes // Test the default codepath, which uses /dev/urandom. 348d87bb037ea1e7c877b9f81359a5d6675097e46deElliott Hughes SSLContext sslContext = SSLContext.getInstance("TLS"); 349d87bb037ea1e7c877b9f81359a5d6675097e46deElliott Hughes sslContext.init(null, null, null); 350d87bb037ea1e7c877b9f81359a5d6675097e46deElliott Hughes for (int i = 0; i < 2048; ++i) { 351d87bb037ea1e7c877b9f81359a5d6675097e46deElliott Hughes sslContext.getSocketFactory().createSocket(); 352d87bb037ea1e7c877b9f81359a5d6675097e46deElliott Hughes } 353d87bb037ea1e7c877b9f81359a5d6675097e46deElliott Hughes 354d87bb037ea1e7c877b9f81359a5d6675097e46deElliott Hughes // Test the other codepath, which copies a seed from a byte[]. 355d87bb037ea1e7c877b9f81359a5d6675097e46deElliott Hughes sslContext.init(null, null, new SecureRandom()); 356d87bb037ea1e7c877b9f81359a5d6675097e46deElliott Hughes for (int i = 0; i < 2048; ++i) { 357d87bb037ea1e7c877b9f81359a5d6675097e46deElliott Hughes sslContext.getSocketFactory().createSocket(); 358d87bb037ea1e7c877b9f81359a5d6675097e46deElliott Hughes } 359d87bb037ea1e7c877b9f81359a5d6675097e46deElliott Hughes } 360d87bb037ea1e7c877b9f81359a5d6675097e46deElliott Hughes 361adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 3621cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob * @throws IOException 363adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @tests javax.net.ssl.SSLSocket#addHandshakeCompletedListener(HandshakeCompletedListener listener) 364adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 365adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @TestTargetNew( 366adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project level = TestLevel.COMPLETE, 367adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project notes = "", 368adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project method = "addHandshakeCompletedListener", 369adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project args = {javax.net.ssl.HandshakeCompletedListener.class} 370adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ) 3711cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob @AndroidOnly("RI doesn't throw the specified IAE") 3721cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob public void test_addHandshakeCompletedListener() throws IOException { 3731cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob SSLSocket ssl = getSSLSocket(); 374adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project HandshakeCompletedListener ls = new HandshakeCL(); 375adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 376adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ssl.addHandshakeCompletedListener(null); 377adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IllegalArgumentException wasn't thrown"); 378adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IllegalArgumentException iae) { 379adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //expected 380adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 381adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 382adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ssl.addHandshakeCompletedListener(ls); 383adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (Exception e) { 384adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("Unexpected exception " + e); 385adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 386adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 387adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 388adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 3891cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob * @throws IOException 390adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @tests javax.net.ssl.SSLSocket#removeHandshakeCompletedListener(HandshakeCompletedListener listener) 391adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 392adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @TestTargetNew( 393adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project level = TestLevel.COMPLETE, 394adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project notes = "", 395adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project method = "removeHandshakeCompletedListener", 396adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project args = {javax.net.ssl.HandshakeCompletedListener.class} 397adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ) 3981cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob public void test_removeHandshakeCompletedListener() throws IOException { 3991cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob SSLSocket ssl = getSSLSocket(); 400adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project HandshakeCompletedListener ls = new HandshakeCL(); 401adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 402adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ssl.removeHandshakeCompletedListener(null); 403adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IllegalArgumentException wasn't thrown"); 404adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IllegalArgumentException iae) { 405adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //expected 406adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 4071cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob 4081cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob try { 4091cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob ssl.removeHandshakeCompletedListener(ls); 4101cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob } catch (IllegalArgumentException iae) { 4111cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob //expected 4121cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob } catch (Exception e) { 4131cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob fail("Unexpected exception " + e); 4141cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob } 4151cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob 4161cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob ssl.addHandshakeCompletedListener(ls); 417adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 418adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ssl.removeHandshakeCompletedListener(ls); 419adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (Exception e) { 420adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("Unexpected exception " + e); 421adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 422adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 423adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 424adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 4251cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob * @throws IOException 426adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @tests javax.net.ssl.SSLSocket#setEnableSessionCreation(boolean flag) 427adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @tests javax.net.ssl.SSLSocket#getEnableSessionCreation() 428adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 429adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @TestTargets({ 430adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @TestTargetNew( 431adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project level = TestLevel.COMPLETE, 432adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project notes = "", 433adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project method = "getEnableSessionCreation", 434adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project args = {} 435adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ), 436adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @TestTargetNew( 437adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project level = TestLevel.COMPLETE, 438adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project notes = "", 439adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project method = "setEnableSessionCreation", 440adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project args = {boolean.class} 441adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ) 442adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project }) 4431cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob public void test_EnableSessionCreation() throws IOException { 4441cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob SSLSocket ssl = getSSLSocket(); 4451cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob assertTrue(ssl.getEnableSessionCreation()); 4461cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob ssl.setEnableSessionCreation(false); 4471cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob assertFalse(ssl.getEnableSessionCreation()); 4481cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob ssl.setEnableSessionCreation(true); 4491cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob assertTrue(ssl.getEnableSessionCreation()); 450adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 451adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 452adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 4531cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob * @throws IOException 4541cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob * @throws UnknownHostException 455adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @tests javax.net.ssl.SSLSocket#setNeedClientAuth(boolean need) 456adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @tests javax.net.ssl.SSLSocket#getNeedClientAuthCreation() 457adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 458adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @TestTargets({ 459adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @TestTargetNew( 460adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project level = TestLevel.COMPLETE, 461adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project notes = "", 462adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project method = "setNeedClientAuth", 463adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project args = {boolean.class} 464adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ), 465adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @TestTargetNew( 466adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project level = TestLevel.COMPLETE, 467adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project notes = "", 468adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project method = "getNeedClientAuth", 469adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project args = {} 470adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ) 471adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project }) 4721cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob public void test_NeedClientAuth() throws UnknownHostException, IOException { 4731cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob SSLSocket ssl = getSSLSocket(); 4741cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob ssl.setNeedClientAuth(true); 4751cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob assertTrue(ssl.getNeedClientAuth()); 4761cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob ssl.setNeedClientAuth(false); 4771cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob assertFalse(ssl.getNeedClientAuth()); 478adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 479adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 480adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 4811cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob * @throws IOException 4821cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob * @throws UnknownHostException 483adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @tests javax.net.ssl.SSLSocket#setWantClientAuth(boolean want) 484adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @tests javax.net.ssl.SSLSocket#getWantClientAuthCreation() 485adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 486adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @TestTargets({ 487adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @TestTargetNew( 488adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project level = TestLevel.COMPLETE, 489adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project notes = "", 490adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project method = "setWantClientAuth", 491adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project args = {boolean.class} 492adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ), 493adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @TestTargetNew( 494adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project level = TestLevel.COMPLETE, 495adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project notes = "", 496adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project method = "getWantClientAuth", 497adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project args = {} 498adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ) 499adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project }) 5001cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob public void test_WantClientAuth() throws UnknownHostException, IOException { 5011cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob SSLSocket ssl = getSSLSocket(); 5021cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob ssl.setWantClientAuth(true); 5031cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob assertTrue(ssl.getWantClientAuth()); 5041cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob ssl.setWantClientAuth(false); 5051cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob assertFalse(ssl.getWantClientAuth()); 506adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 507adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 508adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 5091cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob * @throws IOException 510adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @tests javax.net.ssl.SSLSocket#getSupportedProtocols() 511adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 512adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @TestTargetNew( 513adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project level = TestLevel.COMPLETE, 514adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project notes = "", 515adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project method = "getSupportedProtocols", 516adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project args = {} 517adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ) 5181cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob public void test_getSupportedProtocols() throws IOException { 5191cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob SSLSocket ssl = getSSLSocket(); 5201cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob String[] res = ssl.getSupportedProtocols(); 5211cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob assertTrue("No supported protocols found", res.length > 0); 522adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 523adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 524adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 5251cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob * @throws IOException 526adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @tests javax.net.ssl.SSLSocket#getEnabledProtocols() 527adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @tests javax.net.ssl.SSLSocket#setEnabledProtocols(String[] protocols) 528adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 529adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @TestTargets({ 530adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @TestTargetNew( 531adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project level = TestLevel.COMPLETE, 532adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project notes = "", 533adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project method = "setEnabledProtocols", 534adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project args = {java.lang.String[].class} 535adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ), 536adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @TestTargetNew( 537adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project level = TestLevel.COMPLETE, 538adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project notes = "", 539adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project method = "getEnabledProtocols", 540adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project args = {} 541adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ) 542adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project }) 5431cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob public void test_EnabledProtocols() throws IOException { 5441cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob SSLSocket ssl = getSSLSocket(); 545adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 5461cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob ssl.setEnabledProtocols(null); 5471cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob } catch (IllegalArgumentException iae) { 5481cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob //expected 5491cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob } 5501cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob try { 5511cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob ssl.setEnabledProtocols(new String[] {}); 5521cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob } catch (IllegalArgumentException iae) { 5531cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob //expected 5541cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob } 5551cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob try { 5561cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob ssl.setEnabledProtocols(new String[] {"blubb"}); 5571cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob } catch (IllegalArgumentException iae) { 5581cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob //expected 559adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 5601cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob ssl.setEnabledProtocols(ssl.getEnabledProtocols()); 5611cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob String[] res = ssl.getEnabledProtocols(); 5621cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob assertEquals("no enabled protocols set", 5631cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob ssl.getEnabledProtocols().length, res.length); 564adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 565adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 566adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 5671cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob * @throws IOException 568adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @tests javax.net.ssl.SSLSocket#getSession() 569adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 570adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @TestTargetNew( 571adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project level = TestLevel.COMPLETE, 572adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project notes = "", 573adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project method = "getSession", 574adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project args = {} 575adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ) 5761cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob public void test_getSession() throws IOException { 5771cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob SSLSocket ssl = getSSLSocket(); 578adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 5791cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob assertNotNull(ssl.getSession()); 580adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (Exception e) { 581adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("Unexpected exception " + e); 582adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 583adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 584adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 585adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 5861cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob * @throws IOException 587adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @tests javax.net.ssl.SSLSocket#getSupportedCipherSuites() 588adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 589adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @TestTargetNew( 590adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project level = TestLevel.COMPLETE, 591adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project notes = "", 592adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project method = "getSupportedCipherSuites", 593adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project args = {} 594adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ) 5951cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob public void test_getSupportedCipherSuites() throws IOException { 5961cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob SSLSocket ssl = getSSLSocket(); 5971cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob String[] res = ssl.getSupportedCipherSuites(); 5981cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob assertTrue("no supported cipher suites", res.length > 0); 599adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 600adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 601adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 6021cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob * @throws IOException 603adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @tests javax.net.ssl.SSLSocket#getEnabledCipherSuites() 604adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @tests javax.net.ssl.SSLSocket#setEnabledCipherSuites(String[] suites) 605adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 606adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @TestTargets({ 607adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @TestTargetNew( 608adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project level = TestLevel.COMPLETE, 609adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project notes = "", 610adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project method = "getEnabledCipherSuites", 611adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project args = {} 612adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ), 613adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @TestTargetNew( 614adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project level = TestLevel.COMPLETE, 615adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project notes = "", 616adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project method = "setEnabledCipherSuites", 617adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project args = {java.lang.String[].class} 618adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ) 619adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project }) 6201cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob public void test_EnabledCipherSuites() throws IOException { 6211cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob SSLSocket ssl = getSSLSocket(); 622adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 6231cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob ssl.setEnabledCipherSuites(null); 6241cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob } catch (IllegalArgumentException iae) { 6251cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob //expected 6261cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob } 6271cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob try { 6281cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob ssl.setEnabledCipherSuites(new String[] {}); 6291cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob } catch (IllegalArgumentException iae) { 6301cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob //expected 6311cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob } 6321cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob try { 6331cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob ssl.setEnabledCipherSuites(new String[] {"blubb"}); 6341cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob } catch (IllegalArgumentException iae) { 6351cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob //expected 636adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 6371cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob ssl.setEnabledCipherSuites(ssl.getSupportedCipherSuites()); 6381cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob String[] res = ssl.getEnabledCipherSuites(); 6391cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob assertEquals("not all supported cipher suites where enabled", 6401cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob ssl.getSupportedCipherSuites().length, res.length); 641adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 642adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 643adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 6441cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob * @throws IOException 645adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @tests javax.net.ssl.SSLSocket#getUseClientMode() 646adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @tests javax.net.ssl.SSLSocket#setUseClientMode(boolean mode) 647adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 648adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @TestTargets({ 649adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @TestTargetNew( 650adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project level = TestLevel.COMPLETE, 651adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project notes = "", 652adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project method = "getUseClientMode", 653adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project args = {} 654adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ), 655adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @TestTargetNew( 656adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project level = TestLevel.COMPLETE, 657adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project notes = "", 658adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project method = "setUseClientMode", 659adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project args = {boolean.class} 660adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ) 661adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project }) 6621cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob public void test_UseClientMode() throws IOException { 6631cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob SSLSocket ssl = getSSLSocket(); 6641cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob assertTrue(ssl.getUseClientMode()); 6651cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob ssl.setUseClientMode(false); 6661cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob assertFalse(ssl.getUseClientMode()); 6671cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob 6681cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob ssl = getSSLSocket("localhost", startServer("UseClientMode")); 669adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 6701cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob ssl.startHandshake(); 6711cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob } catch (IOException ioe) { 6721cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob //fail(ioe + " was thrown for method startHandshake()"); 673adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 674adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 675adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ssl.setUseClientMode(false); 676adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IllegalArgumentException wasn't thrown"); 677adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IllegalArgumentException iae) { 678adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //expected 679adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (Exception e) { 680adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail(e + " was thrown instead of IllegalArgumentException"); 681adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 682adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 683adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 684adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 6851cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob * @throws IOException 686adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @tests javax.net.ssl.SSLSocket#startHandshake() 687adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 688adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @TestTargetNew( 6891cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob level = TestLevel.PARTIAL_COMPLETE, 690adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project notes = "", 691adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project method = "startHandshake", 692adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project args = {} 693adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ) 6941cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob public void test_startHandshake() throws IOException { 6951cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob SSLSocket ssl = getSSLSocket(); 696adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 697adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ssl.startHandshake(); 698adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IOException wasn't thrown"); 699adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IOException ioe) { 700adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //expected 701adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (Exception e) { 702adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail(e + " was thrown instead of IOException"); 703adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 704adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 7051cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob 7061cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob // Change this to false if on RI 7071cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob boolean useBKS = true; 708adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 7091cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob private String PASSWORD = "android"; 7101cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob 7111cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob private int port = Support_PortManager.getNextPort(); 7121cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob 7131cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob private boolean serverReady = false; 7141cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob 7151cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob /** 7161cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob * Defines the keystore contents for the server, BKS version. Holds just a 7171cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob * single self-generated key. The subject name is "Test Server". 7181cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob */ 7191cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob private static final String SERVER_KEYS_BKS = 7201cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob "AAAAAQAAABQDkebzoP1XwqyWKRCJEpn/t8dqIQAABDkEAAVteWtleQAAARpYl20nAAAAAQAFWC41" + 7211cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob "MDkAAAJNMIICSTCCAbKgAwIBAgIESEfU1jANBgkqhkiG9w0BAQUFADBpMQswCQYDVQQGEwJVUzET" + 7221cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob "MBEGA1UECBMKQ2FsaWZvcm5pYTEMMAoGA1UEBxMDTVRWMQ8wDQYDVQQKEwZHb29nbGUxEDAOBgNV" + 7231cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob "BAsTB0FuZHJvaWQxFDASBgNVBAMTC1Rlc3QgU2VydmVyMB4XDTA4MDYwNTExNTgxNFoXDTA4MDkw" + 7241cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob "MzExNTgxNFowaTELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExDDAKBgNVBAcTA01U" + 7251cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob "VjEPMA0GA1UEChMGR29vZ2xlMRAwDgYDVQQLEwdBbmRyb2lkMRQwEgYDVQQDEwtUZXN0IFNlcnZl" + 7261cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob "cjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0LIdKaIr9/vsTq8BZlA3R+NFWRaH4lGsTAQy" + 7271cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob "DPMF9ZqEDOaL6DJuu0colSBBBQ85hQTPa9m9nyJoN3pEi1hgamqOvQIWcXBk+SOpUGRZZFXwniJV" + 7281cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob "zDKU5nE9MYgn2B9AoiH3CSuMz6HRqgVaqtppIe1jhukMc/kHVJvlKRNy9XMCAwEAATANBgkqhkiG" + 7291cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob "9w0BAQUFAAOBgQC7yBmJ9O/eWDGtSH9BH0R3dh2NdST3W9hNZ8hIa8U8klhNHbUCSSktZmZkvbPU" + 7301cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob "hse5LI3dh6RyNDuqDrbYwcqzKbFJaq/jX9kCoeb3vgbQElMRX8D2ID1vRjxwlALFISrtaN4VpWzV" + 7311cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob "yeoHPW4xldeZmoVtjn8zXNzQhLuBqX2MmAAAAqwAAAAUvkUScfw9yCSmALruURNmtBai7kQAAAZx" + 7321cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob "4Jmijxs/l8EBaleaUru6EOPioWkUAEVWCxjM/TxbGHOi2VMsQWqRr/DZ3wsDmtQgw3QTrUK666sR" + 7331cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob "MBnbqdnyCyvM1J2V1xxLXPUeRBmR2CXorYGF9Dye7NkgVdfA+9g9L/0Au6Ugn+2Cj5leoIgkgApN" + 7341cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob "vuEcZegFlNOUPVEs3SlBgUF1BY6OBM0UBHTPwGGxFBBcetcuMRbUnu65vyDG0pslT59qpaR0TMVs" + 7351cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob "P+tcheEzhyjbfM32/vwhnL9dBEgM8qMt0sqF6itNOQU/F4WGkK2Cm2v4CYEyKYw325fEhzTXosck" + 7361cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob "MhbqmcyLab8EPceWF3dweoUT76+jEZx8lV2dapR+CmczQI43tV9btsd1xiBbBHAKvymm9Ep9bPzM" + 7371cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob "J0MQi+OtURL9Lxke/70/MRueqbPeUlOaGvANTmXQD2OnW7PISwJ9lpeLfTG0LcqkoqkbtLKQLYHI" + 7381cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob "rQfV5j0j+wmvmpMxzjN3uvNajLa4zQ8l0Eok9SFaRr2RL0gN8Q2JegfOL4pUiHPsh64WWya2NB7f" + 7391cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob "V+1s65eA5ospXYsShRjo046QhGTmymwXXzdzuxu8IlnTEont6P4+J+GsWk6cldGbl20hctuUKzyx" + 7401cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob "OptjEPOKejV60iDCYGmHbCWAzQ8h5MILV82IclzNViZmzAapeeCnexhpXhWTs+xDEYSKEiG/camt" + 7411cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob "bhmZc3BcyVJrW23PktSfpBQ6D8ZxoMfF0L7V2GQMaUg+3r7ucrx82kpqotjv0xHghNIm95aBr1Qw" + 7421cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob "1gaEjsC/0wGmmBDg1dTDH+F1p9TInzr3EFuYD0YiQ7YlAHq3cPuyGoLXJ5dXYuSBfhDXJSeddUkl" + 7431cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob "k1ufZyOOcskeInQge7jzaRfmKg3U94r+spMEvb0AzDQVOKvjjo1ivxMSgFRZaDb/4qw="; 7441cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob 7451cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob /** 7461cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob * Defines the keystore contents for the server, JKS version. Holds just a 7471cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob * single self-generated key. The subject name is "Test Server". 7481cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob */ 7491cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob private static final String SERVER_KEYS_JKS = 7501cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob "/u3+7QAAAAIAAAABAAAAAQAFbXlrZXkAAAEaWFfBeAAAArowggK2MA4GCisGAQQBKgIRAQEFAASC" + 7511cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob "AqI2kp5XjnF8YZkhcF92YsJNQkvsmH7zqMM87j23zSoV4DwyE3XeC/gZWq1ToScIhoqZkzlbWcu4" + 7521cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob "T/Zfc/DrfGk/rKbBL1uWKGZ8fMtlZk8KoAhxZk1JSyJvdkyKxqmzUbxk1OFMlN2VJNu97FPVH+du" + 7531cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob "dvjTvmpdoM81INWBW/1fZJeQeDvn4mMbbe0IxgpiLnI9WSevlaDP/sm1X3iO9yEyzHLL+M5Erspo" + 7541cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob "Cwa558fOu5DdsICMXhvDQxjWFKFhPHnKtGe+VvwkG9/bAaDgx3kfhk0w5zvdnkKb+8Ed9ylNRzdk" + 7551cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob "ocAa/mxlMTOsTvDKXjjsBupNPIIj7OP4GNnZaxkJjSs98pEO67op1GX2qhy6FSOPNuq8k/65HzUc" + 7561cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob "PYn6voEeh6vm02U/sjEnzRevQ2+2wXoAdp0EwtQ/DlMe+NvcwPGWKuMgX4A4L93DZGb04N2VmAU3" + 7571cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob "YLOtZwTO0LbuWrcCM/q99G/7LcczkxIVrO2I/rh8RXVczlf9QzcrFObFv4ATuspWJ8xG7DhsMbnk" + 7581cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob "rT94Pq6TogYeoz8o8ZMykesAqN6mt/9+ToIemmXv+e+KU1hI5oLwWMnUG6dXM6hIvrULY6o+QCPH" + 7591cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob "172YQJMa+68HAeS+itBTAF4Clm/bLn6reHCGGU6vNdwU0lYldpiOj9cB3t+u2UuLo6tiFWjLf5Zs" + 7601cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob "EQJETd4g/EK9nHxJn0GAKrWnTw7pEHQJ08elzUuy04C/jEEG+4QXU1InzS4o/kR0Sqz2WTGDoSoq" + 7611cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob "ewuPRU5bzQs/b9daq3mXrnPtRBL6HfSDAdpTK76iHqLCGdqx3avHjVSBm4zFvEuYBCev+3iKOBmg" + 7621cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob "yh7eQRTjz4UOWfy85omMBr7lK8PtfVBDzOXpasxS0uBgdUyBDX4tO6k9jZ8a1kmQRQAAAAEABVgu" + 7631cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob "NTA5AAACSDCCAkQwggGtAgRIR8SKMA0GCSqGSIb3DQEBBAUAMGkxCzAJBgNVBAYTAlVTMRMwEQYD" + 7641cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob "VQQIEwpDYWxpZm9ybmlhMQwwCgYDVQQHEwNNVFYxDzANBgNVBAoTBkdvb2dsZTEQMA4GA1UECxMH" + 7651cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob "QW5kcm9pZDEUMBIGA1UEAxMLVGVzdCBTZXJ2ZXIwHhcNMDgwNjA1MTA0ODQyWhcNMDgwOTAzMTA0" + 7661cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob "ODQyWjBpMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEMMAoGA1UEBxMDTVRWMQ8w" + 7671cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob "DQYDVQQKEwZHb29nbGUxEDAOBgNVBAsTB0FuZHJvaWQxFDASBgNVBAMTC1Rlc3QgU2VydmVyMIGf" + 7681cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob "MA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCwoC6chqCI84rj1PrXuJgbiit4EV909zR6N0jNlYfg" + 7691cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob "itwB39bP39wH03rFm8T59b3mbSptnGmCIpLZn25KPPFsYD3JJ+wFlmiUdEP9H05flfwtFQJnw9uT" + 7701cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob "3rRIdYVMPcQ3RoZzwAMliGr882I2thIDbA6xjGU/1nRIdvk0LtxH3QIDAQABMA0GCSqGSIb3DQEB" + 7711cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob "BAUAA4GBAJn+6YgUlY18Ie+0+Vt8oEi81DNi/bfPrAUAh63fhhBikx/3R9dl3wh09Z6p7cIdNxjW" + 7721cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob "n2ll+cRW9eqF7z75F0Omm0C7/KAEPjukVbszmzeU5VqzkpSt0j84YWi+TfcHRrfvhLbrlmGITVpY" + 7731cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob "ol5pHLDyqGmDs53pgwipWqsn/nEXEBgj3EoqPeqHbDf7YaP8h/5BSt0="; 7741cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob 775adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected int startServer(String name) { 7761cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob String keys = useBKS ? SERVER_KEYS_BKS : SERVER_KEYS_JKS; 7771cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob TestServer server = new TestServer(true, keys); 7781cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob Thread serverThread = new Thread(server); 7791cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob serverThread.start(); 780adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 7811cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob while (!serverReady) { 7821cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob Thread.currentThread().sleep(50); 7831cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob } 7841cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob // give the server 100 millis to accept 7851cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob Thread.currentThread().sleep(100); 7861cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob } catch (InterruptedException e) { 7871cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob // ignore 788adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 7891cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob return server.sport; 7901cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob } 7911cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob 7921cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob /** 7931cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob * Implements a test SSL socket server. It wait for a connection on a given 7941cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob * port, requests client authentication (if specified), and read 256 bytes 7951cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob * from the socket. 7961cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob */ 7971cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob class TestServer implements Runnable { 7981cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob 7991cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob public static final int CLIENT_AUTH_NONE = 0; 8001cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob 8011cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob public static final int CLIENT_AUTH_WANTED = 1; 8021cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob 8031cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob public static final int CLIENT_AUTH_NEEDED = 2; 8041cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob 8051cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob private TestTrustManager trustManager; 8061cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob 8071cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob private Exception exception; 8081cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob 8091cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob String keys; 8101cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob 8111cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob private boolean provideKeys; 8121cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob 8131cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob int sport; 8141cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob 8151cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob public TestServer(boolean provideKeys, String keys) { 8161cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob this.keys = keys; 8171cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob this.provideKeys = provideKeys; 8181cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob 8191cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob trustManager = new TestTrustManager(); 8201cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob } 8211cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob 8221cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob public void run() { 8231cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob try { 8241cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob KeyManager[] keyManagers = provideKeys ? getKeyManagers(keys) : null; 8251cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob TrustManager[] trustManagers = new TrustManager[] { trustManager }; 8261cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob 8271cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob SSLContext sslContext = SSLContext.getInstance("TLS"); 8281cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob sslContext.init(keyManagers, trustManagers, null); 8291cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob 8301cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob SSLServerSocket serverSocket = (SSLServerSocket)sslContext.getServerSocketFactory().createServerSocket(); 8311cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob 8321cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob serverSocket.bind(new InetSocketAddress(port)); 8331cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob sport = serverSocket.getLocalPort(); 8341cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob serverReady = true; 8351cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob 8361cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob SSLSocket clientSocket = (SSLSocket)serverSocket.accept(); 8371cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob 8381cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob InputStream stream = clientSocket.getInputStream(); 8391cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob 8401cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob for (int i = 0; i < 256; i++) { 8411cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob int j = stream.read(); 8421cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob if (i != j) { 8431cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob throw new RuntimeException("Error reading socket, expected " + i + ", got " + j); 8441cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob } 8451cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob } 8461cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob 8471cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob stream.close(); 8481cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob clientSocket.close(); 8491cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob serverSocket.close(); 8501cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob 8511cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob } catch (Exception ex) { 8521cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob exception = ex; 8531cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob } 8541cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob } 8551cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob 8561cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob public Exception getException() { 8571cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob return exception; 8581cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob } 8591cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob 8601cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob public X509Certificate[] getChain() { 8611cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob return trustManager.getChain(); 8621cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob } 8631cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob 8641cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob } 8651cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob 8661cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob /** 8671cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob * Loads a keystore from a base64-encoded String. Returns the KeyManager[] 8681cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob * for the result. 8691cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob */ 8701cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob private KeyManager[] getKeyManagers(String keys) throws Exception { 8711cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob byte[] bytes = new Base64().decode(keys.getBytes()); 8721cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob InputStream inputStream = new ByteArrayInputStream(bytes); 8731cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob 8741cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType()); 8751cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob keyStore.load(inputStream, PASSWORD.toCharArray()); 8761cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob inputStream.close(); 8771cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob 8781cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob String algorithm = KeyManagerFactory.getDefaultAlgorithm(); 8791cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(algorithm); 8801cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob keyManagerFactory.init(keyStore, PASSWORD.toCharArray()); 8811cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob 8821cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob return keyManagerFactory.getKeyManagers(); 8831cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob } 8841cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob 8851cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob private SSLSocket getSSLSocket() throws IOException { 8861cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob SSLSocket ssl = null; 8871cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob ssl = (SSLSocket) SSLSocketFactory.getDefault().createSocket(); 8881cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob return ssl; 889adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 890adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 8911cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob private SSLSocket getSSLSocket(InetAddress host, int port) throws IOException { 8921cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob SSLSocket ssl = null; 8931cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob ssl = (SSLSocket) SSLSocketFactory.getDefault().createSocket(host, port); 8941cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob return ssl; 8951cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob } 8961cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob 8971cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob private SSLSocket getSSLSocket(String host, int port) throws UnknownHostException, IOException { 8981cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob SSLSocket ssl = null; 8991cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob ssl = (SSLSocket) SSLSocketFactory.getDefault().createSocket(host, port); 9001cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob return ssl; 9011cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob } 9021cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob 9031cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob private SSLSocket getSSLSocket(InetAddress host, int port, InetAddress localHost, int localPort) throws IOException { 9041cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob SSLSocket ssl = null; 9051cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob ssl = (SSLSocket) SSLSocketFactory.getDefault().createSocket(host, port, localHost, localPort); 9061cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob return ssl; 9071cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob } 9081cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob 9091cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob private SSLSocket getSSLSocket(String host, int port, InetAddress localHost, int localPort) throws UnknownHostException, IOException { 9101cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob SSLSocket ssl = null; 9111cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob ssl = (SSLSocket) SSLSocketFactory.getDefault().createSocket(host, port, localHost, localPort); 9121cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob return ssl; 9131cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob } 9141cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob} 915