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.io.FileNotFoundException;
21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.KeyManagementException;
22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.KeyStore;
23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.KeyStoreException;
24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.NoSuchAlgorithmException;
25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.NoSuchProviderException;
26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.Provider;
27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.SecureRandom;
28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.UnrecoverableKeyException;
29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport javax.net.ssl.KeyManager;
31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport javax.net.ssl.KeyManagerFactory;
32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport javax.net.ssl.SSLContext;
33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport javax.net.ssl.SSLContextSpi;
34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport javax.net.ssl.SSLEngine;
35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport javax.net.ssl.SSLServerSocketFactory;
36051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumannimport javax.net.ssl.SSLSessionContext;
37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport javax.net.ssl.SSLSocketFactory;
38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport javax.net.ssl.TrustManager;
39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport javax.net.ssl.TrustManagerFactory;
40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
41051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumannimport junit.framework.TestCase;
42051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann
43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.apache.harmony.security.tests.support.SpiEngUtils;
44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.apache.harmony.xnet.tests.support.MySSLContextSpi;
45051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann
46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/**
47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Tests for <code>SSLContext</code> class constructors and methods.
48f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes *
49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */
50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class SSLContext1Test extends TestCase {
51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private static String srvSSLContext = "SSLContext";
53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public static String defaultProtocol = "TLS";
54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private static final String NotSupportMsg = "Default protocol is not supported";
55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private static String defaultProviderName = null;
56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private static Provider defaultProvider = null;
57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private static final String[] invalidValues = SpiEngUtils.invalidValues;
58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private static boolean DEFSupported = false;
59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private static String[] validValues = new String[3];
60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    static {
61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        defaultProvider = SpiEngUtils.isSupport(defaultProtocol, srvSSLContext);
62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        DEFSupported = (defaultProvider != null);
63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (DEFSupported) {
64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            defaultProviderName = (DEFSupported ? defaultProvider.getName()
65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    : null);
66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            validValues[0] = defaultProtocol;
67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            validValues[1] = defaultProtocol.toUpperCase();
68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            validValues[2] = defaultProtocol.toLowerCase();
69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } else {
70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            defaultProtocol = null;
71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    protected SSLContext[] createSSLCon() {
75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (!DEFSupported) {
76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail(defaultProtocol + " protocol is not supported");
77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return null;
78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        SSLContext[] sslC = new SSLContext[3];
80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            sslC[0] = SSLContext.getInstance(defaultProtocol);
82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            sslC[1] = SSLContext.getInstance(defaultProtocol, defaultProvider);
83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            sslC[2] = SSLContext.getInstance(defaultProtocol,
84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    defaultProviderName);
85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return sslC;
86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (Exception e) {
87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            e.printStackTrace();
88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return null;
89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Test for <code>SSLContext</code> constructor Assertion: returns
94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * SSLContext object
95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_ConstructorLjavax_net_ssl_SSLContextSpiLjava_security_ProviderLjava_lang_String()
97051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann        throws NoSuchAlgorithmException,
98051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann            KeyManagementException {
99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (!DEFSupported) {
100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail(NotSupportMsg);
101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return;
102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        SSLContextSpi spi = new MySSLContextSpi();
104be25811712488827cf836ee6170eca8fb4e14fe4Urs Grob        SSLContext sslContext = new MySslContext(spi, defaultProvider,
105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                defaultProtocol);
106be25811712488827cf836ee6170eca8fb4e14fe4Urs Grob        assertEquals("Incorrect protocol", defaultProtocol,
107be25811712488827cf836ee6170eca8fb4e14fe4Urs Grob                sslContext.getProtocol());
108be25811712488827cf836ee6170eca8fb4e14fe4Urs Grob        assertEquals("Incorrect provider", defaultProvider,
109be25811712488827cf836ee6170eca8fb4e14fe4Urs Grob                sslContext.getProvider());
110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TrustManager[] tm = null;
111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        KeyManager[] km = null;
112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        sslContext.init(km, tm, new SecureRandom());
113be25811712488827cf836ee6170eca8fb4e14fe4Urs Grob        assertNotNull("No SSLEngine created",
114be25811712488827cf836ee6170eca8fb4e14fe4Urs Grob                sslContext.createSSLEngine());
115be25811712488827cf836ee6170eca8fb4e14fe4Urs Grob        assertNotNull("No SSLEngine created",
116be25811712488827cf836ee6170eca8fb4e14fe4Urs Grob                sslContext.createSSLEngine("host", 8888));
117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            sslContext.init(km, tm, null);
119be25811712488827cf836ee6170eca8fb4e14fe4Urs Grob            fail("KeyManagementException should be thrown for null "
120be25811712488827cf836ee6170eca8fb4e14fe4Urs Grob                    + "SecureRandom");
121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (KeyManagementException e) {
122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
124be25811712488827cf836ee6170eca8fb4e14fe4Urs Grob        sslContext = new MySslContext(null, null, null);
125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull("Incorrect protocol", sslContext.getProtocol());
126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull("Incorrect provider", sslContext.getProvider());
127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            sslContext.createSSLEngine();
129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("NullPointerException should be thrown");
130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (NullPointerException e) {
131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            sslContext.getSocketFactory();
134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("NullPointerException should be thrown");
135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (NullPointerException e) {
136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
140f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     * @throws KeyManagementException
141229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * javax.net.ssl.SSLContext#createSSLEngine()
142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_createSSLEngine() throws KeyManagementException {
144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (!DEFSupported) fail(NotSupportMsg);
145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        SSLContextSpi spi = new MySSLContextSpi();
146be25811712488827cf836ee6170eca8fb4e14fe4Urs Grob        SSLContext sslContext = new MySslContext(spi, defaultProvider,
147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                defaultProtocol);
148f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes        sslContext.init(null, null, new SecureRandom());
149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        SSLEngine sslEngine = sslContext.createSSLEngine();
150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNotNull("SSL engine is null", sslEngine);
151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
152f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
154f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     * @throws KeyManagementException
155229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * javax.net.ssl.SSLContext#createSSLEngine(java.lang.String, int)
156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_createSSLEngineLjava_lang_StringI()
158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        throws KeyManagementException {
159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (!DEFSupported) fail(NotSupportMsg);
160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        SSLContextSpi spi = new MySSLContextSpi();
161be25811712488827cf836ee6170eca8fb4e14fe4Urs Grob        SSLContext sslContext = new MySslContext(spi, defaultProvider,
162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                defaultProtocol);
163f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes        sslContext.init(null, null, new SecureRandom());
164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        SSLEngine sslEngine = sslContext.createSSLEngine("www.fortify.net", 80);
165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNotNull("SSL engine is null", sslEngine);
166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Test for <code>getClientSessionContext()</code>
170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <code>getServiceSessionContext()</code>
171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * methods Assertion: returns correspondent object
172f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     * @throws KeyManagementException
173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
174051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann    public void test_getClientSessionContext() throws NoSuchAlgorithmException, KeyManagementException {
175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (!DEFSupported) {
176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail(NotSupportMsg);
177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return;
178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        SSLContext[] sslC = createSSLCon();
180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNotNull("SSLContext objects were not created", sslC);
181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < sslC.length; i++) {
182051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann            sslC[i].init(null, null, null);
183f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes            assertNotNull("Client session is incorrectly instantiated: " + i,
184be25811712488827cf836ee6170eca8fb4e14fe4Urs Grob                    sslC[i].getClientSessionContext());
185f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes            assertNotNull("Server session is incorrectly instantiated: " + i,
186be25811712488827cf836ee6170eca8fb4e14fe4Urs Grob                    sslC[i].getServerSessionContext());
187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Test for <code>getInstance(String protocol)</code> method Assertion:
192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * returns SSLContext object
193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
194be25811712488827cf836ee6170eca8fb4e14fe4Urs Grob    public void test_getInstanceLjava_lang_String01()
195be25811712488827cf836ee6170eca8fb4e14fe4Urs Grob            throws NoSuchAlgorithmException {
196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (!DEFSupported) {
197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail(NotSupportMsg);
198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return;
199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        SSLContext sslContext;
201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < validValues.length; i++) {
202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            sslContext = SSLContext.getInstance(validValues[i]);
203be25811712488827cf836ee6170eca8fb4e14fe4Urs Grob            assertNotNull("No SSLContext created", sslContext);
204be25811712488827cf836ee6170eca8fb4e14fe4Urs Grob            assertEquals("Invalid protocol", validValues[i],
205be25811712488827cf836ee6170eca8fb4e14fe4Urs Grob                    sslContext.getProtocol());
206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Test for <code>getInstance(String protocol)</code> method Assertion:
211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * throws NullPointerException when protocol is null; throws
212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * NoSuchAlgorithmException when protocol is not correct;
213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getInstanceLjava_lang_String02() {
215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            SSLContext.getInstance(null);
217051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann            fail("NoSuchAlgorithmException or NullPointerException should be thrown (protocol is null");
218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (NoSuchAlgorithmException e) {
219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (NullPointerException e) {
220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < invalidValues.length; i++) {
222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            try {
223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                SSLContext.getInstance(invalidValues[i]);
224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                fail("NoSuchAlgorithmException was not thrown as expected for provider: "
225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                        .concat(invalidValues[i]));
226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            } catch (NoSuchAlgorithmException e) {
227adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Test for <code>getInstance(String protocol, String provider)</code>
233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * method Assertion: throws IllegalArgumentException when provider is null
234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * or empty
235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getInstanceLjava_lang_StringLjava_lang_String01() throws NoSuchProviderException,
237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            NoSuchAlgorithmException {
238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (!DEFSupported) {
239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail(NotSupportMsg);
240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return;
241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
242adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String provider = null;
243adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < validValues.length; i++) {
244adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            try {
245adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                SSLContext.getInstance(defaultProtocol, provider);
246adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                fail("IllegalArgumentException must be thrown when provider is null");
247adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            } catch (IllegalArgumentException e) {
248adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
249adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            try {
250adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                SSLContext.getInstance(defaultProtocol, "");
251adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                fail("IllegalArgumentException must be thrown when provider is empty");
252adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            } catch (IllegalArgumentException e) {
253adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
254adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
255adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
256adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
257adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
258adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Test for <code>getInstance(String protocol, String provider)</code>
259adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * method Assertion: throws NullPointerException when protocol is null;
260adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * throws NoSuchAlgorithmException when protocol is not correct;
261adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
262adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getInstanceLjava_lang_StringLjava_lang_String02() throws NoSuchProviderException {
263adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (!DEFSupported) {
264adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail(NotSupportMsg);
265adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return;
266adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
267adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
268adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            SSLContext.getInstance(null, defaultProviderName);
269adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("NoSuchAlgorithmException or NullPointerException should be thrown (protocol is null");
270adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (NoSuchAlgorithmException e) {
271adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (NullPointerException e) {
272adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
273adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < invalidValues.length; i++) {
274adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            try {
275adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                SSLContext.getInstance(invalidValues[i], defaultProviderName);
276adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                fail("NoSuchAlgorithmException was not thrown as expected (protocol: "
277adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                        .concat(invalidValues[i]).concat(")"));
278adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            } catch (NoSuchAlgorithmException e) {
279adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
280adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
281adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
282adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
283adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
284adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Test for <code>getInstance(String protocol, String provider)</code>
285adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * method Assertion: throws NoSuchProviderException when provider has
286adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * invalid value
287adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
288adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getInstanceLjava_lang_StringLjava_lang_String03() throws NoSuchAlgorithmException {
289adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (!DEFSupported) {
290adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail(NotSupportMsg);
291adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return;
292adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
293adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 1; i < invalidValues.length; i++) {
294adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            for (int j = 0; j < validValues.length; j++) {
295adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                try {
296adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    SSLContext.getInstance(validValues[j], invalidValues[i]);
297adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    fail("NuSuchProviderException must be thrown (protocol: "
298adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                            .concat(validValues[j]).concat(" provider: ")
299adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                            .concat(invalidValues[i]).concat(")"));
300adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                } catch (NoSuchProviderException e) {
301adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                }
302adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
303adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
304adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
305adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
306adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
307adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Test for <code>getInstance(String protocol, String provider)</code>
308adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * method Assertion: returns instance of SSLContext
309adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
310adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getInstanceLjava_lang_StringLjava_lang_String04() throws NoSuchAlgorithmException,
311adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            NoSuchProviderException {
312adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (!DEFSupported) {
313adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail(NotSupportMsg);
314adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return;
315adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
316adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        SSLContext sslContext;
317adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < validValues.length; i++) {
318adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            sslContext = SSLContext.getInstance(validValues[i],
319adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    defaultProviderName);
320be25811712488827cf836ee6170eca8fb4e14fe4Urs Grob            assertNotNull("Not SSLContext created", sslContext);
321be25811712488827cf836ee6170eca8fb4e14fe4Urs Grob            assertEquals("Invalid protocol",
322be25811712488827cf836ee6170eca8fb4e14fe4Urs Grob                    validValues[i], sslContext.getProtocol());
323be25811712488827cf836ee6170eca8fb4e14fe4Urs Grob            assertEquals("Invalid provider",
324be25811712488827cf836ee6170eca8fb4e14fe4Urs Grob                    defaultProvider, sslContext.getProvider());
325adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
326adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
327adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
328adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
329adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Test for <code>getInstance(String protocol, Provider provider)</code>
330adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * method Assertion: throws IllegalArgumentException when provider is null
331adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
332adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getInstanceLjava_lang_StringLjava_security_Provider01() throws NoSuchAlgorithmException {
333adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (!DEFSupported) {
334adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail(NotSupportMsg);
335adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return;
336adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
337adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Provider provider = null;
338adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < validValues.length; i++) {
339adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            try {
340adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                SSLContext.getInstance(validValues[i], provider);
341adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                fail("IllegalArgumentException must be thrown when provider is null");
342adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            } catch (IllegalArgumentException e) {
343adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
344adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
345adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
346adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
347adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
348adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Test for <code>getInstance(String protocol, Provider provider)</code>
349adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * method Assertion: throws NullPointerException when protocol is null;
350adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * throws NoSuchAlgorithmException when protocol is not correct;
351adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
352adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getInstanceLjava_lang_StringLjava_security_Provider02() {
353adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (!DEFSupported) {
354adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail(NotSupportMsg);
355adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return;
356adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
357adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
358adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            SSLContext.getInstance(null, defaultProvider);
359adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("NoSuchAlgorithmException or NullPointerException should be thrown (protocol is null");
360adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (NoSuchAlgorithmException e) {
361adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (NullPointerException e) {
362adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
363adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < invalidValues.length; i++) {
364adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            try {
365adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                SSLContext.getInstance(invalidValues[i], defaultProvider);
366adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                fail("Expected NoSuchAlgorithmException was not thrown as expected");
367adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            } catch (NoSuchAlgorithmException e) {
368adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
369adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
370adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
371adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
372adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
373adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Test for <code>getInstance(String protocol, Provider provider)</code>
374adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * method Assertion: returns instance of SSLContext
375adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
376adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getInstanceLjava_lang_StringLjava_security_Provider03() throws NoSuchAlgorithmException {
377adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (!DEFSupported) {
378adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail(NotSupportMsg);
379adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return;
380adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
381adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        SSLContext sslContext;
382adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < validValues.length; i++) {
383adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            sslContext = SSLContext
384adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    .getInstance(validValues[i], defaultProvider);
385be25811712488827cf836ee6170eca8fb4e14fe4Urs Grob            assertNotNull("Not SSLContext created", sslContext);
386be25811712488827cf836ee6170eca8fb4e14fe4Urs Grob            assertEquals("Invalid protocol", validValues[i], sslContext.getProtocol());
387be25811712488827cf836ee6170eca8fb4e14fe4Urs Grob            assertEquals("Invalid provider", defaultProvider, sslContext.getProvider());
388adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
389adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
390f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
391adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
392f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     * @throws NoSuchAlgorithmException
393f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     * @throws NoSuchProviderException
394229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * javax.net.ssl.SSLContext#getProtocol()
395adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
396adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getProtocol()
397adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        throws NoSuchAlgorithmException, NoSuchProviderException {
398adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (!DEFSupported) fail(NotSupportMsg);
399adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        SSLContextSpi spi = new MySSLContextSpi();
400be25811712488827cf836ee6170eca8fb4e14fe4Urs Grob        SSLContext sslContext = new MySslContext(spi, defaultProvider,
401adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                defaultProtocol);
402adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("Incorrect protocol",
403adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                defaultProtocol, sslContext.getProtocol());
404be25811712488827cf836ee6170eca8fb4e14fe4Urs Grob        sslContext = new MySslContext(spi, defaultProvider,
405adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                null);
406adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull("Incorrect protocol", sslContext.getProtocol());
407adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        sslContext = SSLContext.getInstance(defaultProtocol);
408adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("Incorrect protocol",
409adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                defaultProtocol, sslContext.getProtocol());
410adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        sslContext = SSLContext.getInstance(defaultProtocol, defaultProvider);
411adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("Incorrect protocol",
412adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                defaultProtocol, sslContext.getProtocol());
413adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        sslContext = SSLContext.getInstance(defaultProtocol, defaultProviderName);
414adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("Incorrect protocol",
415adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                defaultProtocol, sslContext.getProtocol());
416adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
417f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
418adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
419f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     * @throws NoSuchAlgorithmException
420f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     * @throws NoSuchProviderException
421229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * javax.net.ssl.SSLContext#getProvider()
422adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
423f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes    public void test_getProvider()
424adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        throws NoSuchAlgorithmException, NoSuchProviderException {
425adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (!DEFSupported) fail(NotSupportMsg);
426adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        SSLContextSpi spi = new MySSLContextSpi();
427be25811712488827cf836ee6170eca8fb4e14fe4Urs Grob        SSLContext sslContext = new MySslContext(spi, defaultProvider,
428adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                defaultProtocol);
429adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("Incorrect provider",
430adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                defaultProvider, sslContext.getProvider());
431adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        sslContext = SSLContext.getInstance(defaultProtocol, defaultProvider);
432adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("Incorrect provider",
433adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                defaultProvider, sslContext.getProvider());
434adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        sslContext = SSLContext.getInstance(defaultProtocol, defaultProviderName);
435adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("Incorrect provider",
436adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                defaultProvider, sslContext.getProvider());
437adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
438adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
439adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
440229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * javax.net.ssl.SSLContext#getServletSessionContext()
441adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
442adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getServerSessionContext() throws NoSuchAlgorithmException,
443adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        KeyManagementException, KeyStoreException,
444adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        UnrecoverableKeyException {
445adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (!DEFSupported) fail(NotSupportMsg);
446adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        SSLContext[] sslC = createSSLCon();
447adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNotNull("SSLContext objects were not created", sslC);
448adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String tAlg = TrustManagerFactory.getDefaultAlgorithm();
449adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String kAlg = KeyManagerFactory.getDefaultAlgorithm();
450adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (tAlg == null)
451adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("TrustManagerFactory default algorithm is not defined");
452adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (kAlg == null)
453adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("KeyManagerFactory default algorithm is not defined");
454adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        KeyManagerFactory kmf = KeyManagerFactory.getInstance(kAlg);
455adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        kmf.init(null, new char[11]);
456adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TrustManagerFactory tmf = TrustManagerFactory.getInstance(tAlg);
457adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
458adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        tmf.init(ks);
459adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TrustManager[] tms = tmf.getTrustManagers();
460adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (SSLContext sslCi : sslC) {
461adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            sslCi.init(kmf.getKeyManagers(), tms, new SecureRandom());
462be25811712488827cf836ee6170eca8fb4e14fe4Urs Grob            assertNotNull("Server context is incorrectly instantiated", sslCi
463be25811712488827cf836ee6170eca8fb4e14fe4Urs Grob                    .getServerSessionContext());
464adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
465adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
466adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
467adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
468adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Test for <code>getServerSocketFactory()</code>
469adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <code>getSocketFactory()</code>
470adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <code>init(KeyManager[] km, TrustManager[] tm, SecureRandom random)</code>
471adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * methods Assertion: returns correspondent object
472f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
473adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
474adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     public void test_getServerSocketFactory() throws NoSuchAlgorithmException,
475adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            KeyManagementException, KeyStoreException,
476adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            UnrecoverableKeyException {
477adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (!DEFSupported) {
478adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail(NotSupportMsg);
479adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return;
480adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
481adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        SSLContext[] sslC = createSSLCon();
482adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNotNull("SSLContext objects were not created", sslC);
483adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String tAlg = TrustManagerFactory.getDefaultAlgorithm();
484adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String kAlg = KeyManagerFactory.getDefaultAlgorithm();
485adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (tAlg == null) {
486adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("TrustManagerFactory default algorithm is not defined");
487adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return;
488adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
489adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (kAlg == null) {
490adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("KeyManagerFactory default algorithm is not defined");
491adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return;
492adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
493adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        KeyManagerFactory kmf = KeyManagerFactory.getInstance(kAlg);
494adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
495adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
496adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            ks.load(null, null);
497adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (Exception e) {
498adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail(e + " was thrown for method load(null, null)");
499adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
500adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        kmf.init(ks, new char[10]);
501adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        KeyManager[] kms = kmf.getKeyManagers();
502adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TrustManagerFactory tmf = TrustManagerFactory.getInstance(tAlg);
503adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        tmf.init(ks);
504adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        TrustManager[] tms = tmf.getTrustManagers();
505adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < sslC.length; i++) {
506adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            sslC[i].init(kms, tms, new SecureRandom());
507be25811712488827cf836ee6170eca8fb4e14fe4Urs Grob            assertNotNull("No SSLServerSocketFactory available",
508be25811712488827cf836ee6170eca8fb4e14fe4Urs Grob                    sslC[i].getServerSocketFactory());
509be25811712488827cf836ee6170eca8fb4e14fe4Urs Grob            assertNotNull("No SSLSocketFactory available",
510be25811712488827cf836ee6170eca8fb4e14fe4Urs Grob                    sslC[i].getSocketFactory());
511adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
512adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
513adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
514adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     /**
515229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom      * javax.net.ssl.SSLContext#getSocketFactory()
516adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      */
517adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     public void test_getSocketFactory() throws NoSuchAlgorithmException,
518adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         KeyManagementException, KeyStoreException,
519adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         UnrecoverableKeyException {
520adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         if (!DEFSupported) fail(NotSupportMsg);
521adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         SSLContext[] sslC = createSSLCon();
522adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         assertNotNull("SSLContext objects were not created", sslC);
523adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         String tAlg = TrustManagerFactory.getDefaultAlgorithm();
524adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         String kAlg = KeyManagerFactory.getDefaultAlgorithm();
525adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         if (tAlg == null)
526adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project             fail("TrustManagerFactory default algorithm is not defined");
527adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         if (kAlg == null)
528adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project             fail("KeyManagerFactory default algorithm is not defined");
529adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         KeyManagerFactory kmf = KeyManagerFactory.getInstance(kAlg);
530adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         kmf.init(null, new char[11]);
531adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         TrustManagerFactory tmf = TrustManagerFactory.getInstance(tAlg);
532adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
533adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         tmf.init(ks);
534adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         TrustManager[] tms = tmf.getTrustManagers();
535adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         for (SSLContext sslCi : sslC) {
536adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project             sslCi.init(kmf.getKeyManagers(), tms, new SecureRandom());
537be25811712488827cf836ee6170eca8fb4e14fe4Urs Grob             assertNotNull("Socket factory is incorrectly instantiated",
538be25811712488827cf836ee6170eca8fb4e14fe4Urs Grob                     sslCi.getSocketFactory());
539adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         }
540adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     }
541adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
542adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     /**
543f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes      * @throws NoSuchAlgorithmException
544f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     * @throws KeyStoreException
545f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     * @throws FileNotFoundException
546f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     * @throws KeyManagementException
547229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * javax.net.ssl.SSLContext#
548adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      *     init(javax.net.ssl.KeyManager[], javax.net.ssl.TrustManager[],
549adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      *     java.security.SecureRandom)
550adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project      */
551adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     public void test_init$Ljavax_net_ssl_KeyManager$Ljavax_net_ssl_TrustManagerLjava_security_SecureRandom()
552adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         throws Exception {
553adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         if (!DEFSupported) fail(NotSupportMsg);
554adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         SSLContextSpi spi = new MySSLContextSpi();
555be25811712488827cf836ee6170eca8fb4e14fe4Urs Grob         SSLContext sslContext = new MySslContext(spi, defaultProvider,
556adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                 defaultProtocol);
557adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         try {
558adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project             sslContext.createSSLEngine();
559adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project             fail("Expected RuntimeException was not thrown");
560adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         } catch (RuntimeException rte) {
561adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project             // expected
562adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         }
563f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
564adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         try {
565adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project             sslContext.init(null, null, null);
566adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project             fail("KeyManagementException wasn't thrown");
567adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         } catch (KeyManagementException kme) {
568adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project             //expected
569adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         }
570f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
571adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         try {
572adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project             String tAlg = TrustManagerFactory.getDefaultAlgorithm();
573adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project             String kAlg = KeyManagerFactory.getDefaultAlgorithm();
574adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project             if (tAlg == null)
575adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                 fail("TrustManagerFactory default algorithm is not defined");
576adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project             if (kAlg == null)
577adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                 fail("KeyManagerFactory default algorithm is not defined");
578adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project             KeyManagerFactory kmf = KeyManagerFactory.getInstance(kAlg);
579adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project             kmf.init(null, new char[11]);
580adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project             TrustManagerFactory tmf = TrustManagerFactory.getInstance(tAlg);
581adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project             KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
582adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project             tmf.init(ks);
583adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project             TrustManager[] tms = tmf.getTrustManagers();
584adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project             sslContext.init(kmf.getKeyManagers(), tms, new SecureRandom());
585adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         } catch (Exception e) {
586adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project             System.out.println("EE = " + e);
587adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project         }
588adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     }
589adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project}
590adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
591adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/**
592adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Addifional class to verify SSLContext constructor
593adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */
594adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
595be25811712488827cf836ee6170eca8fb4e14fe4Urs Grobclass MySslContext extends SSLContext {
596be25811712488827cf836ee6170eca8fb4e14fe4Urs Grob    public MySslContext(SSLContextSpi spi, Provider prov, String alg) {
597adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        super(spi, prov, alg);
598adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
599adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project}
600