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 Project/**
19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project* @author Vera Y. Petrashkova
20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project* @version $Revision$
21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project*/
22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage tests.security.cert;
24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport junit.framework.TestCase;
26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.apache.harmony.security.tests.support.SpiEngUtils;
28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.apache.harmony.security.tests.support.cert.MyCertificateFactorySpi;
29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.ByteArrayInputStream;
31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.DataInputStream;
32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.NoSuchProviderException;
33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.Provider;
34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.Security;
35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.cert.CRL;
36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.cert.CRLException;
37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.cert.CertPath;
38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.cert.Certificate;
39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.cert.CertificateException;
40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.cert.CertificateFactory;
41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Collection;
42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Iterator;
43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.List;
44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/**
46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Tests for CertificateFactory class constructors and methods
47f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes *
48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */
49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class CertificateFactory2Test extends TestCase {
50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private static final String defaultAlg = "CertFac";
51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private static final String CertificateFactoryProviderClass = "org.apache.harmony.security.tests.support.cert.MyCertificateFactorySpi";
52f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private static final String[] invalidValues = SpiEngUtils.invalidValues;
54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private static final String[] validValues;
56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    static {
58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        validValues = new String[4];
59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        validValues[0] = defaultAlg;
60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        validValues[1] = defaultAlg.toLowerCase();
61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        validValues[2] = "CeRtFaC";
62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        validValues[3] = "cerTFac";
63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    Provider mProv;
66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    protected void setUp() throws Exception {
68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        super.setUp();
69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        mProv = (new SpiEngUtils()).new MyProvider("MyCFProvider",
70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                "Provider for testing", CertificateFactory1Test.srvCertificateFactory
71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                        .concat(".").concat(defaultAlg),
72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                CertificateFactoryProviderClass);
73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Security.insertProviderAt(mProv, 1);
74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /*
77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @see TestCase#tearDown()
78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    protected void tearDown() throws Exception {
80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        super.tearDown();
81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Security.removeProvider(mProv.getName());
82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private void checkResult(CertificateFactory certFactory, boolean mode)
85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            throws CertificateException, CRLException {
86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        MyCertificateFactorySpi.putMode(mode);
87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ByteArrayInputStream bais = new ByteArrayInputStream(new byte[0]);
89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        DataInputStream dis = new DataInputStream(bais);
90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            certFactory.generateCertPath(bais);
92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("CertificateException must be thrown");
93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (CertificateException e) {
94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            certFactory.generateCertPath(dis);
97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            if (!mode) {
98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                fail("CertificateException must be thrown because encodings list is empty");
99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (CertificateException e) {
101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            if (mode) {
102f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes                fail("Unexpected CertificateFactoryException was thrown");
103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            certFactory.generateCertPath(bais, "aa");
107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("CertificateException must be thrown");
108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (CertificateException e) {
109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            certFactory.generateCertPath(dis, "");
112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            if (mode) {
113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                fail("IllegalArgumentException must be thrown");
114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (IllegalArgumentException e) {
116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            if (!mode) {
117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                fail("Unexpected IllegalArgumentException was thrown");
118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        certFactory.generateCertPath(dis, "ss");
121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            certFactory.generateCertificate(bais);
124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("CertificateException must be thrown");
125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (CertificateException e) {
126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            certFactory.generateCertificates(null);
129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("CertificateException must be thrown");
130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (CertificateException e) {
131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Certificate cert = certFactory.generateCertificate(dis);
133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull("Result must be null", cert);
134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Collection<? extends Certificate> col = certFactory.generateCertificates(dis);
135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull("Result must be null", col);
136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            certFactory.generateCRL(bais);
139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("CRLException must be thrown");
140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (CRLException e) {
141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            certFactory.generateCRLs(null);
144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("CRLException must be thrown");
145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (CRLException e) {
146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        CRL crl = certFactory.generateCRL(dis);
148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull("Result must be null", crl);
149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Collection<? extends CRL> colc = certFactory.generateCRLs(dis);
150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNull("Result must be null", colc);
151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        List<Certificate> list = null;
153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        CertPath cp;
154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            cp = certFactory.generateCertPath(list);
156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            if (mode) {
157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                fail("NullPointerException must be thrown");
158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            } else {
159f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes                assertNull("Must be null", cp);
160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (NullPointerException e) {
162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            if (!mode) {
163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                fail("Unexpected NullPointerException was thrown");
164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Iterator<String> it = certFactory.getCertPathEncodings();
167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (mode) {
168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue(it.hasNext());
169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } else {
170f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes            assertFalse(it.hasNext());
171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
175f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     * Test for <code>getInstance(String type)</code> method
176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Assertions:
177f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     * throws NullPointerException when type is null
178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * throws CertificateException when type is not available
179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * returns CertificateFactory object
180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void GetInstance01(boolean mode) throws CertificateException, CRLException {
182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            CertificateFactory.getInstance(null);
184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("NullPointerException or CertificateException must be thrown when type is null");
185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (CertificateException e) {
186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (NullPointerException e) {
187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < invalidValues.length; i++) {
189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            try {
190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                CertificateFactory.getInstance(invalidValues[i]);
191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                fail("CertificateException must be thrown (type: ".concat(
192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                        invalidValues[i]).concat(")"));
193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            } catch (CertificateException e) {
194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        CertificateFactory cerF;
197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < validValues.length; i++) {
198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            cerF = CertificateFactory.getInstance(validValues[i]);
199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertEquals("Incorrect type", cerF.getType(), validValues[i]);
200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertEquals("Incorrect provider", cerF.getProvider(), mProv);
201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            checkResult(cerF, mode);
202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Test for <code>getInstance(String type, String provider)</code> method
207f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     * Assertions:
208f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     * throws NullPointerException when type is null
209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * throws CertificateException when type is not available
210f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     * throws IllegalArgumentException when provider is null or empty;
211f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     * throws NoSuchProviderException when provider is available;
212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * returns CertificateFactory object
213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void GetInstance02(boolean mode) throws CertificateException,
216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            NoSuchProviderException, IllegalArgumentException, CRLException {
217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            CertificateFactory.getInstance(null, mProv.getName());
219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("NullPointerException or CertificateException must be thrown when type is null");
220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (CertificateException e) {
221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (NullPointerException e) {
222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < invalidValues.length; i++) {
224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            try {
225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                CertificateFactory.getInstance(invalidValues[i], mProv
226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                        .getName());
227adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                fail("CertificateException must be thrown (type: ".concat(
228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                        invalidValues[i]).concat(")"));
229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            } catch (CertificateException e) {
230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String prov = null;
233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < validValues.length; i++) {
234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            try {
235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                CertificateFactory.getInstance(validValues[i], prov);
236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                fail("IllegalArgumentException must be thrown when provider is null (type: "
237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                        .concat(validValues[i]).concat(")"));
238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            } catch (IllegalArgumentException e) {
239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            try {
241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                CertificateFactory.getInstance(validValues[i], "");
242adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                fail("IllegalArgumentException must be thrown when provider is empty (type: "
243adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                        .concat(validValues[i]).concat(")"));
244adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            } catch (IllegalArgumentException e) {
245adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
246adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
247adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < validValues.length; i++) {
248adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            for (int j = 1; j < invalidValues.length; j++) {
249adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                try {
250adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    CertificateFactory.getInstance(validValues[i],
251adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                            invalidValues[j]);
252adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    fail("NoSuchProviderException must be thrown (type: "
253adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                            .concat(validValues[i]).concat(" provider: ")
254adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                            .concat(invalidValues[j]).concat(")"));
255adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                } catch (NoSuchProviderException e) {
256adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                }
257adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
258adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
259adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        CertificateFactory cerF;
260adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < validValues.length; i++) {
261adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            cerF = CertificateFactory.getInstance(validValues[i], mProv
262adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    .getName());
263adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertEquals("Incorrect type", cerF.getType(), validValues[i]);
264adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertEquals("Incorrect provider", cerF.getProvider().getName(),
265adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    mProv.getName());
266adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            checkResult(cerF, mode);
267adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
268adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
269adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
270adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
271adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Test for <code>getInstance(String type, Provider provider)</code>
272f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     * method
273f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     * Assertions:
274f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     * throws NullPointerException when type is null
275adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * throws CertificateException when type is not available
276f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     * throws IllegalArgumentException when provider is null;
277adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * returns CertificateFactory object
278adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
279adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
280adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void GetInstance03(boolean mode) throws CertificateException,
281adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            IllegalArgumentException, CRLException {
282adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
283adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            CertificateFactory.getInstance(null, mProv);
284adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("NullPointerException or CertificateException must be thrown when type is null");
285adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (CertificateException e) {
286adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (NullPointerException e) {
287adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
288adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < invalidValues.length; i++) {
289adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            try {
290adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                CertificateFactory.getInstance(invalidValues[i], mProv);
291adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                fail("CertificateException must be thrown (type: ".concat(
292adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                        invalidValues[i]).concat(")"));
293adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            } catch (CertificateException e) {
294adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
295adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
296adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Provider prov = null;
297adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < validValues.length; i++) {
298adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            try {
299adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                CertificateFactory.getInstance(validValues[i], prov);
300adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                fail("IllegalArgumentException must be thrown when provider is null (type: "
301adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                        .concat(validValues[i]).concat(")"));
302adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            } catch (IllegalArgumentException e) {
303adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
304adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
305adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        CertificateFactory cerF;
306adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < validValues.length; i++) {
307adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            cerF = CertificateFactory.getInstance(validValues[i], mProv);
308adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertEquals("Incorrect type", cerF.getType(), validValues[i]);
309f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes            assertEquals("Incorrect provider", cerF.getProvider(), mProv);
310adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            checkResult(cerF,  mode);
311adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
312adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
313adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void testGetInstance01() throws CertificateException, CRLException {
314f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes        GetInstance01(true);
315adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
316adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void testGetInstance02() throws CertificateException,
317adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        NoSuchProviderException, IllegalArgumentException, CRLException {
318f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes        GetInstance02(true);
319adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
320adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void testGetInstance03() throws CertificateException,
321adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        IllegalArgumentException, CRLException {
322f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes        GetInstance03(true);
323adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
324adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void testGetInstance04() throws CertificateException, CRLException {
325f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes        GetInstance01(false);
326adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
327adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void testGetInstance05() throws CertificateException,
328adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        NoSuchProviderException, IllegalArgumentException, CRLException {
329f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes        GetInstance02(false);
330adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
331adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void testGetInstance06() throws CertificateException,
332adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        IllegalArgumentException, CRLException {
333f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes        GetInstance03(false);
334adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
335adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project}
336