1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/* 2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Licensed to the Apache Software Foundation (ASF) under one or more 3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * contributor license agreements. See the NOTICE file distributed with 4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * this work for additional information regarding copyright ownership. 5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The ASF licenses this file to You under the Apache License, Version 2.0 6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * (the "License"); you may not use this file except in compliance with 7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the License. You may obtain a copy of the License at 8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * See the License for the specific language governing permissions and 15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * limitations under the License. 16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage tests.api.javax.net.ssl; 19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.KeyManagementException; 21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.NoSuchAlgorithmException; 22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.NoSuchProviderException; 23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.Provider; 24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.SecureRandom; 25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.Security; 26735f93475d1d54ad7b2d1c2376adc0fcf4d4c7a1Brian Carlstromimport javax.net.ssl.KeyManager; 27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport javax.net.ssl.SSLContext; 28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport javax.net.ssl.SSLEngine; 29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport javax.net.ssl.TrustManager; 30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport junit.framework.TestCase; 31735f93475d1d54ad7b2d1c2376adc0fcf4d4c7a1Brian Carlstromimport org.apache.harmony.security.tests.support.SpiEngUtils; 32735f93475d1d54ad7b2d1c2376adc0fcf4d4c7a1Brian Carlstromimport org.apache.harmony.xnet.tests.support.MySSLContextSpi; 33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/** 35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Tests for SSLContext class constructors and methods 36f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class SSLContext2Test extends TestCase { 39f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static String srvSSLContext = "SSLContext"; 41f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static final String defaultProtocol = "S+S+L"; 43f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 44735f93475d1d54ad7b2d1c2376adc0fcf4d4c7a1Brian Carlstrom public static final String SSLContextProviderClass = MySSLContextSpi.class.getName(); 45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static final String[] invalidValues = SpiEngUtils.invalidValues; 47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static final String[] validValues; 49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project static { 50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project validValues = new String[4]; 51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project validValues[0] = defaultProtocol; 52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project validValues[1] = defaultProtocol.toLowerCase(); 53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project validValues[2] = "s+S+L"; 54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project validValues[3] = "S+s+L"; 55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Provider mProv; 58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected void setUp() throws Exception { 60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project super.setUp(); 61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project mProv = (new SpiEngUtils()).new MyProvider("MySSLContextProvider", "Provider for testing", 62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project srvSSLContext.concat(".").concat(defaultProtocol), 63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project SSLContextProviderClass); 64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Security.insertProviderAt(mProv, 1); 65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /* 68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see TestCase#tearDown() 69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected void tearDown() throws Exception { 71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project super.tearDown(); 72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Security.removeProvider(mProv.getName()); 73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 74f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 75f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes private void checkSSLContext(SSLContext sslC) 76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throws KeyManagementException { 77f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sslC.getSocketFactory(); 80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("RuntimeException must be thrown"); 81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (RuntimeException e) { 82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Incorrect message", "Not initialiazed", e.getMessage()); 83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sslC.getServerSocketFactory(); 86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("RuntimeException must be thrown"); 87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (RuntimeException e) { 88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Incorrect message", "Not initialiazed", e.getMessage()); 89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sslC.getServerSessionContext(); 92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("RuntimeException must be thrown"); 93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (RuntimeException e) { 94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Incorrect message", "Not initialiazed", e.getMessage()); 95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sslC.getClientSessionContext(); 98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("RuntimeException must be thrown"); 99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (RuntimeException e) { 100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Incorrect message", "Not initialiazed", e.getMessage()); 101f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes } 102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sslC.createSSLEngine(); 104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("RuntimeException must be thrown"); 105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (RuntimeException e) { 106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Incorrect message", "Not initialiazed", e.getMessage()); 107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sslC.createSSLEngine("host",1); 110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("RuntimeException must be thrown"); 111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (RuntimeException e) { 112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Incorrect message", "Not initialiazed", e.getMessage()); 113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project TrustManager [] tm = new TManager[10]; 115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project KeyManager [] km = new KManager[5]; 116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sslC.init(km, tm, null); 118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("KeyManagementException must be thrown"); 119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (KeyManagementException e) { 120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sslC.init(km, tm, new SecureRandom()); 122f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project SSLEngine sslE = sslC.createSSLEngine(); 124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Not null result",sslE instanceof SSLEngine); 125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNull("Incorrect host", sslE.getPeerHost()); 126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Incorrect port", 0, sslE.getPeerPort()); 127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String host = "ZZZ"; 128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int port = 8080; 129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sslE = sslC.createSSLEngine(host, port); 130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Not null result",sslE instanceof SSLEngine); 131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Incorrect host", sslE.getPeerHost(), host); 132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Incorrect port", sslE.getPeerPort(), port); 133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNull("Not null result", sslC.getServerSessionContext()); 135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NullPointerException e) { 136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 137f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes try { 138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNull("Not null result", sslC.getClientSessionContext()); 139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NullPointerException e) { 140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 142f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 144f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * Test for <code>getInstance(String protocol)</code> method 145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Assertions: 146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * throws NullPointerException when protocol is null; 147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * throws NoSuchAlgorithmException when protocol is not correct; 148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * returns SSLContext object 149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 150f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes public void test_getInstanceLjava_lang_String() throws NoSuchAlgorithmException, 151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project KeyManagementException { 152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project SSLContext.getInstance(null); 154735f93475d1d54ad7b2d1c2376adc0fcf4d4c7a1Brian Carlstrom fail("NoSuchAlgorithmException or NullPointerException should be thrown " 155735f93475d1d54ad7b2d1c2376adc0fcf4d4c7a1Brian Carlstrom + "(protocol is null)"); 156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NoSuchAlgorithmException e) { 157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NullPointerException e) { 158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < invalidValues.length; i++) { 160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project SSLContext.getInstance(invalidValues[i]); 162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("NoSuchAlgorithmException must be thrown (protocol: " 163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .concat(invalidValues[i]).concat(")")); 164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NoSuchAlgorithmException e) { 165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project SSLContext sslC; 168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < validValues.length; i++) { 169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sslC = SSLContext.getInstance(validValues[i]); 170735f93475d1d54ad7b2d1c2376adc0fcf4d4c7a1Brian Carlstrom assertTrue("Not instanceof SSLContext object", sslC instanceof SSLContext); 171735f93475d1d54ad7b2d1c2376adc0fcf4d4c7a1Brian Carlstrom assertEquals("Incorrect protocol", sslC.getProtocol(), validValues[i]); 172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Incorrect provider", sslC.getProvider(), mProv); 173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project checkSSLContext(sslC); 174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Test for <code>getInstance(String protocol, String provider)</code> 179f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * method 180f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * Assertions: 181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * throws NullPointerException when protocol is null; 182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * throws NoSuchAlgorithmException when protocol is not correct; 183f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * throws IllegalArgumentException when provider is null or empty; 184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * throws NoSuchProviderException when provider is available; 185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * returns SSLContext object 186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 187735f93475d1d54ad7b2d1c2376adc0fcf4d4c7a1Brian Carlstrom public void test_getInstanceLjava_lang_StringLjava_lang_String() 188735f93475d1d54ad7b2d1c2376adc0fcf4d4c7a1Brian Carlstrom throws NoSuchAlgorithmException, NoSuchProviderException, 189735f93475d1d54ad7b2d1c2376adc0fcf4d4c7a1Brian Carlstrom IllegalArgumentException, KeyManagementException { 190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project SSLContext.getInstance(null, mProv.getName()); 192735f93475d1d54ad7b2d1c2376adc0fcf4d4c7a1Brian Carlstrom fail("NoSuchAlgorithmException or NullPointerException should be thrown " 193735f93475d1d54ad7b2d1c2376adc0fcf4d4c7a1Brian Carlstrom + "(protocol is null)"); 194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NoSuchAlgorithmException e) { 195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NullPointerException e) { 196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < invalidValues.length; i++) { 198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project SSLContext.getInstance(invalidValues[i], mProv.getName()); 200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("NoSuchAlgorithmException must be thrown (protocol: " 201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .concat(invalidValues[i]).concat(")")); 202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NoSuchAlgorithmException e) { 203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String prov = null; 206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < validValues.length; i++) { 207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project SSLContext.getInstance(validValues[i], prov); 209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IllegalArgumentException must be thrown when provider is null (protocol: " 210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .concat(invalidValues[i]).concat(")")); 211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IllegalArgumentException e) { 212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project SSLContext.getInstance(validValues[i], ""); 215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IllegalArgumentException must be thrown when provider is empty (protocol: " 216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .concat(invalidValues[i]).concat(")")); 217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IllegalArgumentException e) { 218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < validValues.length; i++) { 221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int j = 1; j < invalidValues.length; j++) { 222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project SSLContext.getInstance(validValues[i], invalidValues[j]); 224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("NoSuchProviderException must be thrown (protocol: " 225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .concat(invalidValues[i]).concat(" provider: ") 226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .concat(invalidValues[j]).concat(")")); 227adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NoSuchProviderException e) { 228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project SSLContext sslC; 232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < validValues.length; i++) { 233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sslC = SSLContext.getInstance(validValues[i], mProv.getName()); 234735f93475d1d54ad7b2d1c2376adc0fcf4d4c7a1Brian Carlstrom assertTrue("Not instanceof SSLContext object", sslC instanceof SSLContext); 235735f93475d1d54ad7b2d1c2376adc0fcf4d4c7a1Brian Carlstrom assertEquals("Incorrect protocol", sslC.getProtocol(), validValues[i]); 236735f93475d1d54ad7b2d1c2376adc0fcf4d4c7a1Brian Carlstrom assertEquals("Incorrect provider", sslC.getProvider().getName(), mProv.getName()); 237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project checkSSLContext(sslC); 238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 242adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Test for <code>getInstance(String protocol, Provider provider)</code> 243f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * method 244f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * Assertions: 245adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * throws NullPointerException when protocol is null; 246adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * throws NoSuchAlgorithmException when protocol is not correct; 247adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * throws IllegalArgumentException when provider is null; 248adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * returns SSLContext object 249adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 250adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_getInstanceLjava_lang_StringLjava_security_Provider() 251adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throws NoSuchAlgorithmException, 252adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project IllegalArgumentException, KeyManagementException { 253adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 254adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project SSLContext.getInstance(null, mProv); 255735f93475d1d54ad7b2d1c2376adc0fcf4d4c7a1Brian Carlstrom fail("NoSuchAlgorithmException or NullPointerException should be thrown " 256735f93475d1d54ad7b2d1c2376adc0fcf4d4c7a1Brian Carlstrom + "(protocol is null)"); 257adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NoSuchAlgorithmException e) { 258adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NullPointerException e) { 259adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 260adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < invalidValues.length; i++) { 261adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 262adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project SSLContext.getInstance(invalidValues[i], mProv); 263adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("NoSuchAlgorithmException must be thrown (protocol: " 264adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .concat(invalidValues[i]).concat(")")); 265adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NoSuchAlgorithmException e) { 266adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 267adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 268adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Provider prov = null; 269adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < validValues.length; i++) { 270adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 271adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project SSLContext.getInstance(validValues[i], prov); 272adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IllegalArgumentException must be thrown when provider is null (protocol: " 273adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .concat(invalidValues[i]).concat(")")); 274adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IllegalArgumentException e) { 275adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 276adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 277adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project SSLContext sslC; 278adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < validValues.length; i++) { 279adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sslC = SSLContext.getInstance(validValues[i], mProv); 280735f93475d1d54ad7b2d1c2376adc0fcf4d4c7a1Brian Carlstrom assertTrue("Not instanceof SSLContext object", sslC instanceof SSLContext); 281735f93475d1d54ad7b2d1c2376adc0fcf4d4c7a1Brian Carlstrom assertEquals("Incorrect protocol", sslC.getProtocol(), validValues[i]); 282adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Incorrect provider", sslC.getProvider(), mProv); 283adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project checkSSLContext(sslC); 284735f93475d1d54ad7b2d1c2376adc0fcf4d4c7a1Brian Carlstrom } 285adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 286adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 287adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project class TManager implements TrustManager { 288f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 289adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 290adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project class KManager implements KeyManager { 291f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 292adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 293735f93475d1d54ad7b2d1c2376adc0fcf4d4c7a1Brian Carlstrom} 294