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