1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/*
2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Copyright (C) 2007 The Android Open Source Project
3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *
4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * you may not use this file except in compliance with the License.
6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * You may obtain a copy of the License at
7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *
8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *     http://www.apache.org/licenses/LICENSE-2.0
9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *
10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software
11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * See the License for the specific language governing permissions and
14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * limitations under the License.
15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */
16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage tests.api.javax.net.ssl;
17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
181cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grobimport java.security.AccessController;
19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.InvalidAlgorithmParameterException;
20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.KeyStore;
21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.KeyStoreException;
221cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grobimport java.security.NoSuchAlgorithmException;
231cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grobimport java.security.Provider;
24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport javax.net.ssl.ManagerFactoryParameters;
26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport javax.net.ssl.TrustManager;
271cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grobimport javax.net.ssl.TrustManagerFactory;
28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport javax.net.ssl.TrustManagerFactorySpi;
29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport junit.framework.TestCase;
31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.apache.harmony.xnet.tests.support.TrustManagerFactorySpiImpl;
32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.apache.harmony.xnet.tests.support.MyTrustManagerFactorySpi.Parameters;
33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class TrustManagerFactorySpiTest extends TestCase {
35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
361cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob    private TrustManagerFactorySpiImpl factory = new TrustManagerFactorySpiImpl();
37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
38229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * javax.net.ssl.TrustManagerFactorySpi#TrustManagerFactorySpi()
39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_Constructor() {
41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            TrustManagerFactorySpiImpl tmf = new TrustManagerFactorySpiImpl();
43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (Exception e) {
44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Unexpected exception " + e.toString());
45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
47f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
49f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     * @throws NoSuchAlgorithmException
50f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     * @throws KeyStoreException
51229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * javax.net.ssl.TrustManagerFactorySpi#engineInit(KeyStore ks)
52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
531cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob    public void test_engineInit_01() throws NoSuchAlgorithmException,
541cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob            KeyStoreException {
551cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob        factory.reset();
561cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob        Provider provider = new MyProvider();
571cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob        TrustManagerFactory tmf = TrustManagerFactory.getInstance("MyTMF",
581cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob                provider);
591cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob        KeyStore ks = null;
60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
611cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob            ks = KeyStore.getInstance(KeyStore.getDefaultType());
62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            ks.load(null, null);
631cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob            tmf.init(ks);
64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (Exception e) {
65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Unexpected exception " + e.toString());
66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
671cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob        assertTrue(factory.isEngineInitCalled());
681cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob        assertEquals(ks, factory.getKs());
691cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob        factory.reset();
701cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob        tmf.init((KeyStore) null);
711cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob        assertTrue(factory.isEngineInitCalled());
721cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob        assertNull(factory.getKs());
73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
74f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
76f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     * @throws InvalidAlgorithmParameterException
77f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     * @throws NoSuchAlgorithmException
78229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * javax.net.ssl.TrustManagerFactorySpi#engineInit(ManagerFactoryParameters spec)
79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
801cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob    public void test_engineInit_02() throws InvalidAlgorithmParameterException,
811cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob            NoSuchAlgorithmException {
821cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob        factory.reset();
831cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob        Provider provider = new MyProvider();
841cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob        TrustManagerFactory tmf = TrustManagerFactory.getInstance("MyTMF",
851cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob                provider);
861cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob        Parameters pr = null;
87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            ks.load(null, null);
901cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob            pr = new Parameters(ks);
911cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob            tmf.init(pr);
92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (Exception e) {
93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Unexpected exception " + e.toString());
94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
951cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob        assertTrue(factory.isEngineInitCalled());
961cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob        assertEquals(pr, factory.getSpec());
971cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob        factory.reset();
981cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob        tmf.init((ManagerFactoryParameters) null);
991cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob        assertTrue(factory.isEngineInitCalled());
1001cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob        assertNull(factory.getSpec());
101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
102f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
104f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     * @throws NoSuchAlgorithmException
105229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * javax.net.ssl.TrustManagerFactorySpi#engineGetTrustManagers()
106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
1071cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob    public void test_engineGetTrustManagers() throws NoSuchAlgorithmException {
1081cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob        factory.reset();
1091cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob        Provider provider = new MyProvider();
1101cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob        TrustManagerFactory tmf = TrustManagerFactory.getInstance("MyTMF",
1111cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob                provider);
1121cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob        TrustManager[] tm = tmf.getTrustManagers();
1131cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob        assertTrue(factory.isEngineGetTrustManagersCalled());
1141cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob        factory.reset();
115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            ks.load(null, null);
1181cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob            tmf.init(ks);
1191cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob            tm = tmf.getTrustManagers();
1201cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob            assertTrue(factory.isEngineGetTrustManagersCalled());
121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (Exception e) {
122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Unexpected exception " + e.toString());
123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project}
1261cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob
1271cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grobclass MyProvider extends Provider {
1281cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob
1291cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob    public MyProvider() {
1301cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob        super("MyProvider", 1.0, "My Test Provider");
1311cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob        AccessController.doPrivileged(new java.security.PrivilegedAction<Void>() {
1321cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob            public Void run() {
1331cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob                put("TrustManagerFactory.MyTMF",
1341cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob                        "org.apache.harmony.xnet.tests.support.TrustManagerFactorySpiImpl");
1351cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob                return null;
1361cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob            }
1371cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob        });
1381cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob    }
1391cd5a5cfeccb2745d54a1c49fc39e4e3537a9adeUrs Grob}
140