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
18e82be46881b2ab9d64b35c0ee53fc359b5cfd18aNarayan Kamathpackage org.apache.harmony.tests.javax.net.ssl;
19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.IOException;
21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.InvalidAlgorithmParameterException;
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.Security;
28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.UnrecoverableKeyException;
29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.cert.CertificateException;
30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport javax.net.ssl.KeyStoreBuilderParameters;
32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport javax.net.ssl.ManagerFactoryParameters;
33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport javax.net.ssl.KeyManager;
34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport javax.net.ssl.KeyManagerFactory;
35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport javax.net.ssl.KeyManagerFactorySpi;
36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.apache.harmony.security.tests.support.SpiEngUtils;
38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.apache.harmony.xnet.tests.support.MyKeyManagerFactorySpi;
39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport junit.framework.TestCase;
41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/**
43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Tests for <code>KeyManagerFactory</code> class constructors and methods.
44f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes *
45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */
46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class KeyManagerFactory1Test extends TestCase {
47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private static final String srvKeyManagerFactory = "KeyManagerFactory";
49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private static String defaultAlgorithm = null;
51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private static String defaultProviderName = null;
53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private static Provider defaultProvider = null;
55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private static boolean DEFSupported = false;
57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private static final String NotSupportedMsg = "There is no suitable provider for KeyManagerFactory";
59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private static final String[] invalidValues = SpiEngUtils.invalidValues;
61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private static String[] validValues = new String[3];
63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    static {
64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        defaultAlgorithm = Security
65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .getProperty("ssl.KeyManagerFactory.algorithm");
66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (defaultAlgorithm != null) {
67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            defaultProvider = SpiEngUtils.isSupport(defaultAlgorithm,
68f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes                    srvKeyManagerFactory);
69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            DEFSupported = (defaultProvider != null);
70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            defaultProviderName = (DEFSupported ? defaultProvider.getName()
71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    : null);
72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            validValues[0] = defaultAlgorithm;
73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            validValues[1] = defaultAlgorithm.toUpperCase();
74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            validValues[2] = defaultAlgorithm.toLowerCase();
75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    protected KeyManagerFactory[] createKMFac() {
79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (!DEFSupported) {
80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail(defaultAlgorithm + " algorithm is not supported");
81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return null;
82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        KeyManagerFactory[] kMF = new KeyManagerFactory[3];
84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            kMF[0] = KeyManagerFactory.getInstance(defaultAlgorithm);
86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            kMF[1] = KeyManagerFactory.getInstance(defaultAlgorithm,
87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    defaultProvider);
88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            kMF[2] = KeyManagerFactory.getInstance(defaultAlgorithm,
89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    defaultProviderName);
90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return kMF;
91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (Exception e) {
92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            e.printStackTrace();
93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return null;
94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
98229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * avax.net.ssl.KeyManagerFactory#getAlgorithm()
99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getAlgorithm()
101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        throws NoSuchAlgorithmException, NoSuchProviderException {
102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (!DEFSupported) fail(NotSupportedMsg);
103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("Incorrect algorithm",
104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                defaultAlgorithm,
105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                KeyManagerFactory
106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .getInstance(defaultAlgorithm).getAlgorithm());
107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("Incorrect algorithm",
108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                defaultAlgorithm,
109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                KeyManagerFactory
110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .getInstance(defaultAlgorithm, defaultProviderName)
111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .getAlgorithm());
112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("Incorrect algorithm",
113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                defaultAlgorithm,
114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                KeyManagerFactory.getInstance(defaultAlgorithm, defaultProvider)
115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .getAlgorithm());
116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project       /**
119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *  Test for <code>getDefaultAlgorithm()</code> method
120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Assertion: returns value which is specifoed in security property
121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getDefaultAlgorithm() {
123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (!DEFSupported) {
124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail(NotSupportedMsg);
125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return;
126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String def = KeyManagerFactory.getDefaultAlgorithm();
128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (defaultAlgorithm == null) {
129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertNull("DefaultAlgorithm must be null", def);
130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } else {
131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertEquals("Invalid default algorithm", def, defaultAlgorithm);
132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String defA = "Proba.keymanagerfactory.defaul.type";
134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Security.setProperty("ssl.KeyManagerFactory.algorithm", defA);
135f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes        assertEquals("Incorrect defaultAlgorithm",
136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                KeyManagerFactory.getDefaultAlgorithm(), defA);
137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (def == null) {
138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            def = "";
139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
140f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes        Security.setProperty("ssl.KeyManagerFactory.algorithm", def);
141f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes        assertEquals("Incorrect defaultAlgorithm",
142f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes                KeyManagerFactory.getDefaultAlgorithm(), def);
143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
144f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Test for <code>getInstance(String algorithm)</code> method
147f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     * Assertions:
148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * returns security property "ssl.KeyManagerFactory.algorithm";
149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * returns instance of KeyManagerFactory
150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getInstanceLjava_lang_String01() throws NoSuchAlgorithmException {
152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (!DEFSupported) {
153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail(NotSupportedMsg);
154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return;
155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        KeyManagerFactory keyMF;
157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < validValues.length; i++) {
158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            keyMF = KeyManagerFactory.getInstance(validValues[i]);
159be25811712488827cf836ee6170eca8fb4e14fe4Urs Grob            assertNotNull("No KeyManagerFactory created", keyMF);
160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertEquals("Invalid algorithm", keyMF.getAlgorithm(),
161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    validValues[i]);
162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
166f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     * Test for <code>getInstance(String algorithm)</code> method
167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Assertion:
168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * throws NullPointerException when algorithm is null;
169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * throws NoSuchAlgorithmException when algorithm is not correct;
170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getInstanceLjava_lang_String02() {
172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            KeyManagerFactory.getInstance(null);
174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("NoSuchAlgorithmException or NullPointerException should be thrown (algorithm is null");
175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (NoSuchAlgorithmException e) {
176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (NullPointerException e) {
177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < invalidValues.length; i++) {
179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            try {
180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                KeyManagerFactory.getInstance(invalidValues[i]);
181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                fail("NoSuchAlgorithmException was not thrown as expected for algorithm: "
182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                        .concat(invalidValues[i]));
183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            } catch (NoSuchAlgorithmException e) {
184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Test for <code>getInstance(String algorithm, String provider)</code>
190f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     * method
191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Assertion: throws IllegalArgumentException when provider is null or empty
192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getInstanceLjava_lang_StringLjava_lang_String01() throws NoSuchProviderException,
194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            NoSuchAlgorithmException {
195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (!DEFSupported) {
196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail(NotSupportedMsg);
197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return;
198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String provider = null;
200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < validValues.length; i++) {
201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            try {
202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                KeyManagerFactory.getInstance(validValues[i], provider);
203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                fail("Expected IllegalArgumentException was not thrown for null provider");
204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            } catch (IllegalArgumentException e) {
205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            try {
207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                KeyManagerFactory.getInstance(validValues[i], "");
208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                fail("Expected IllegalArgumentException was not thrown for empty provider");
209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            } catch (IllegalArgumentException e) {
210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Test for <code>getInstance(String algorithm, String provider)</code>
216f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     * method
217f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     * Assertion:
218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * throws NullPointerException when algorithm is null;
219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * throws NoSuchAlgorithmException when algorithm is not correct;
220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getInstanceLjava_lang_StringLjava_lang_String02() throws NoSuchProviderException {
222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (!DEFSupported) {
223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail(NotSupportedMsg);
224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return;
225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
227adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            KeyManagerFactory.getInstance(null, defaultProviderName);
228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("NoSuchAlgorithmException or NullPointerException should be thrown (algorithm is null");
229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (NoSuchAlgorithmException e) {
230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (NullPointerException e) {
231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < invalidValues.length; i++) {
233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            try {
234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                KeyManagerFactory.getInstance(invalidValues[i],
235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                        defaultProviderName);
236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                fail("NoSuchAlgorithmException must be thrown (algorithm: "
237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                        .concat(invalidValues[i]).concat(")"));
238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            } catch (NoSuchAlgorithmException e) {
239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
242adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
243adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
244adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Test for <code>getInstance(String algorithm, String provider)</code>
245f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     * method
246adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Assertion: throws NoSuchProviderException when provider has
247adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * invalid value
248adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
249adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getInstanceLjava_lang_StringLjava_lang_String03()
250adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        throws NoSuchAlgorithmException {
251adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (!DEFSupported) {
252adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail(NotSupportedMsg);
253adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return;
254adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
255adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < validValues.length; i++) {
256adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            for (int j = 1; j < invalidValues.length; j++) {
257adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                try {
258adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    KeyManagerFactory.getInstance(validValues[i],
259adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                            invalidValues[j]);
260adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    fail("NuSuchProviderException must be thrown (algorithm: "
261adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                            + validValues[i] + " provider: " + invalidValues[j]
262adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                            + ")");
263adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                } catch (NoSuchProviderException e) {
264adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                }
265adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
266adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
267adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
268adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
269adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
270adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Test for <code>getInstance(String algorithm, String provider)</code>
271adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * method Assertion: returns instance of KeyManagerFactory
272adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
273adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getInstanceLjava_lang_StringLjava_lang_String04()
274adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        throws NoSuchProviderException,
275adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            NoSuchAlgorithmException {
276adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (!DEFSupported) {
277adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail(NotSupportedMsg);
278adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return;
279adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
280adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        KeyManagerFactory kMF;
281adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < validValues.length; i++) {
282adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            kMF = KeyManagerFactory.getInstance(validValues[i],
283adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    defaultProviderName);
284be25811712488827cf836ee6170eca8fb4e14fe4Urs Grob            assertNotNull("No KeyManagerFactory created", kMF);
285adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertEquals("Incorrect algorithm", kMF.getAlgorithm(),
286adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    validValues[i]);
287adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertEquals("Incorrect provider", kMF.getProvider().getName(),
288adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    defaultProviderName);
289adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
290adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
291adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
292adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
293adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Test for <code>getInstance(String algorithm, Provider provider)</code>
294f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     * method
295adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Assertion: throws IllegalArgumentException when provider is null
296adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
297adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getInstanceLjava_lang_StringLjava_security_Provider01()
298adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        throws NoSuchAlgorithmException {
299adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (!DEFSupported) {
300adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail(NotSupportedMsg);
301adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return;
302adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
303adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Provider provider = null;
304adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < validValues.length; i++) {
305adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            try {
306adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                KeyManagerFactory.getInstance(validValues[i], provider);
307adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                fail("Expected IllegalArgumentException was not thrown when provider is null");
308adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            } catch (IllegalArgumentException e) {
309adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
310adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
311adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
312adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
313adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
314adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Test for <code>getInstance(String algorithm, Provider provider)</code>
315f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     * method
316f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     * Assertion:
317adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * throws NullPointerException when algorithm is null;
318adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * throws NoSuchAlgorithmException when algorithm is not correct;
319adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
320adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getInstanceLjava_lang_StringLjava_security_Provider02() {
321adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (!DEFSupported) {
322adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail(NotSupportedMsg);
323adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return;
324f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes        }
325adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
326adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            KeyManagerFactory.getInstance(null, defaultProvider);
327adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("NoSuchAlgorithmException or NullPointerException should be thrown (algorithm is null");
328adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (NoSuchAlgorithmException e) {
329adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (NullPointerException e) {
330adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
331adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < invalidValues.length; i++) {
332adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            try {
333adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                KeyManagerFactory
334adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                        .getInstance(invalidValues[i], defaultProvider);
335adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                fail("Expected NuSuchAlgorithmException was not thrown");
336adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            } catch (NoSuchAlgorithmException e) {
337adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
338f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes        }
339adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
340adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
341adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
342adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Test for <code>getInstance(String algorithm, Provider provider)</code>
343f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     * method
344adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Assertion: returns instance of KeyManagerFactory
345adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
346adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getInstanceLjava_lang_StringLjava_security_Provider03()
347adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        throws NoSuchAlgorithmException,
348adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            IllegalArgumentException {
349adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (!DEFSupported) {
350adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail(NotSupportedMsg);
351adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return;
352adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
353adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        KeyManagerFactory kMF;
354adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < validValues.length; i++) {
355adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            kMF = KeyManagerFactory
356adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    .getInstance(validValues[i], defaultProvider);
357be25811712488827cf836ee6170eca8fb4e14fe4Urs Grob            assertNotNull("No KeyManagerFactory created", kMF);
358adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertEquals(kMF.getAlgorithm(), validValues[i]);
359adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertEquals(kMF.getProvider(), defaultProvider);
360adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
361adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
362adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
363adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
364f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     * Test for <code>KeyManagerFactory</code> constructor
365adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Assertion: returns KeyManagerFactory object
366adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
367051f400949489d012498f575c0a40999ad7a4f54Jorg Pleumann    public void test_Constructor() throws NoSuchAlgorithmException {
368adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (!DEFSupported) {
369adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail(NotSupportedMsg);
370adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return;
371adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
372adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        KeyManagerFactorySpi spi = new MyKeyManagerFactorySpi();
373adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        KeyManagerFactory keyMF = new myKeyManagerFactory(spi, defaultProvider,
374adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                defaultAlgorithm);
375adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("Incorrect algorithm", keyMF.getAlgorithm(),
376adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                defaultAlgorithm);
377adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("Incorrect provider", keyMF.getProvider(), defaultProvider);
378adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
379adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            keyMF.init(null, new char[1]);
380adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("UnrecoverableKeyException must be thrown");
381adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (UnrecoverableKeyException e) {
382adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (Exception e) {
383adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Unexpected: "+e.toString()+" was thrown");
384adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
385adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        keyMF = new myKeyManagerFactory(null, null, null);
386adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull("Aalgorithm must be null", keyMF.getAlgorithm());
387adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull("Provider must be null", keyMF.getProvider());
388adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
389adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            keyMF.getKeyManagers();
390adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (NullPointerException e) {
391adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
392adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
393adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
394adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
395229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * avax.net.ssl.KeyManagerFactory#getKeyManagers()
396f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     * @throws NoSuchAlgorithmException
397f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     * @throws KeyStoreException
398f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     * @throws IOException
399f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     * @throws CertificateException
400adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws UnrecoverableKeyException
401adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
402adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getKeyManagers()
403adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        throws Exception {
404adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (!DEFSupported) fail(NotSupportedMsg);
405adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        KeyManagerFactory kmf = KeyManagerFactory.getInstance(defaultAlgorithm);
406adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        char[] pass = "password".toCharArray();
407adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        kmf.init(null, pass);
408adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNotNull("Key manager array is null", kmf.getKeyManagers());
409adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("Incorrect size of array",
410adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                1, kmf.getKeyManagers().length);
411adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
412f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
413adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
414229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom     * avax.net.ssl.KeyManagerFactory#getProvider()
415adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
416adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_getProvider()
417adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        throws Exception {
418adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (!DEFSupported) fail(NotSupportedMsg);
419adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("Incorrect provider",
420adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                defaultProvider,
421adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                KeyManagerFactory
422adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .getInstance(defaultAlgorithm).getProvider());
423adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("Incorrect provider",
424adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                defaultProvider,
425adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                KeyManagerFactory
426adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .getInstance(defaultAlgorithm, defaultProviderName)
427adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .getProvider());
428adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertEquals("Incorrect provider",
429adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                defaultProvider,
430adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                KeyManagerFactory.getInstance(defaultAlgorithm, defaultProvider)
431adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .getProvider());
432adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
433adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
434adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
435adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Test for <code>init(KeyStore keyStore, char[] password)</code> and
436f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     * <code>getKeyManagers()</code>
437adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Assertion: returns not empty KeyManager array
438adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
439adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_initLjava_security_KeyStore$C()
440adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        throws NoSuchAlgorithmException,
441adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        KeyStoreException, UnrecoverableKeyException {
442adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (!DEFSupported) {
443adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail(NotSupportedMsg);
444adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return;
445adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
446adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        KeyManagerFactory[] keyMF = createKMFac();
447adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNotNull("KeyManagerFactory object were not created", keyMF);
448adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        KeyStore ksNull = null;
449adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        KeyManager[] km;
450adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < keyMF.length; i++) {
451adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            keyMF[i].init(ksNull, new char[10]);
452adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            km = keyMF[i].getKeyManagers();
453adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertNotNull("Result should not be null", km);
454adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue("Length of result KeyManager array should not be 0",
455adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    (km.length > 0));
456adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
457adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        KeyStore ks;
458adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
459adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            ks = KeyStore.getInstance(KeyStore.getDefaultType());
460adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            ks.load(null, null);
461adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (KeyStoreException e) {
462adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail(e.toString() + "default KeyStore type is not supported");
463adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return;
464adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (Exception e) {
465adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("Unexpected: " + e.toString());
466adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return;
467adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
468adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < keyMF.length; i++) {
469adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            try {
470adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                keyMF[i].init(ks, new char[10]);
471f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes            } catch (KeyStoreException e) {
472adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
473adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            km = keyMF[i].getKeyManagers();
474adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertNotNull("Result has not be null", km);
475adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue("Length of result KeyManager array should not be 0",
476adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    (km.length > 0));
477adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
478f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
479adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
480adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
481adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
482f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     * Test for <code>init(ManagerFactoryParameters params)</code>
483adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Assertion:
484adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * throws InvalidAlgorithmParameterException when params is null
485adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
486adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void test_initLjavax_net_ssl_ManagerFactoryParameters()
487adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        throws NoSuchAlgorithmException {
488adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
489adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (!DEFSupported) {
490adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail(NotSupportedMsg);
491adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return;
492adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
493adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ManagerFactoryParameters par = null;
494adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        KeyManagerFactory[] keyMF = createKMFac();
495adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNotNull("KeyManagerFactory object were not created", keyMF);
496adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < keyMF.length; i++) {
497adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            try {
498adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                keyMF[i].init(par);
499adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                fail("InvalidAlgorithmParameterException must be thrown");
500adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            } catch (InvalidAlgorithmParameterException e) {
501adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
502adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
503f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
504adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        KeyStore.ProtectionParameter pp = new ProtectionParameterImpl();
505adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        KeyStore.Builder bld = KeyStore.Builder.newInstance("testType", null, pp);
506adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNotNull("Null object KeyStore.Builder", bld);
507f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
508adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
509adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            KeyManagerFactory kmf = KeyManagerFactory.getInstance(defaultAlgorithm);
510adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            KeyStoreBuilderParameters ksp = new KeyStoreBuilderParameters(bld);
511adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertNotNull(ksp.getParameters());
512adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            kmf.init(ksp);
513adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("InvalidAlgorithmParameterException must be thrown");
514adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (InvalidAlgorithmParameterException e) {
515adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
516adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
517f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
518adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project}
519adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
520adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/**
521adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Additional class for KeyManagerFactory constructor verification
522adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */
523adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectclass myKeyManagerFactory extends KeyManagerFactory {
524adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public myKeyManagerFactory(KeyManagerFactorySpi spi, Provider prov,
525adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            String alg) {
526adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        super(spi, prov, alg);
527adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
528adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project}
529adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
530adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectclass ProtectionParameterImpl implements KeyStore.ProtectionParameter {
531adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    ProtectionParameterImpl(){}
532229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom}
533